seam-react 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/cx.ts","../src/Button.tsx","../src/Input.tsx","../src/motion.ts","../src/Switch.tsx","../src/Tabs.tsx","../src/Dialog.tsx"],"sourcesContent":["/**\n * 拼接 className,忽略 false / null / undefined。\n */\nexport function cx(\n ...values: Array<string | false | null | undefined>\n): string {\n return values.filter(Boolean).join(\" \");\n}\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ForwardRefExoticComponent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"danger\";\n\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** 视觉层级,默认 primary。 */\n variant?: ButtonVariant;\n /** 尺寸,默认 md。 */\n size?: ButtonSize;\n /** 展示加载指示器并禁用点击。 */\n loading?: boolean;\n /** 仅包含图标时使用方形内边距,需自行提供 aria-label。 */\n iconOnly?: boolean;\n children?: ReactNode;\n}\n\n/**\n * 基础按钮。\n *\n * 样式由 data-variant / data-size 驱动,所有原生 button 属性都会透传。\n * loading 时自动设置 disabled 与 aria-busy,避免重复提交。\n */\nexport const Button: ForwardRefExoticComponent<\n ButtonProps & RefAttributes<HTMLButtonElement>\n> = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n iconOnly = false,\n type = \"button\",\n className,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n className={cx(\"uk-button\", className)}\n data-variant={variant}\n data-size={size}\n data-loading={loading ? \"true\" : undefined}\n data-icon-only={iconOnly ? \"true\" : undefined}\n disabled={rest.disabled || loading}\n aria-busy={loading || undefined}\n >\n {loading ? (\n <span className=\"uk-button__spinner\" aria-hidden=\"true\" />\n ) : null}\n {children}\n </button>\n );\n});\n","import {\n forwardRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n /** 输入框尺寸,默认 md。原生 size 属性被该字段替代。 */\n inputSize?: InputSize;\n /** 标记校验失败状态,等同于 aria-invalid=\"true\"。 */\n invalid?: boolean;\n}\n\n/**\n * 文本输入框。\n *\n * 只负责样式与校验状态,label、提示文案与错误信息由调用方组合,\n * 这样表单结构可以完全自定义。\n */\nexport const Input: ForwardRefExoticComponent<\n InputProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n inputSize = \"md\",\n invalid = false,\n className,\n \"aria-invalid\": ariaInvalid,\n ...rest\n },\n ref,\n) {\n return (\n <input\n {...rest}\n ref={ref}\n className={cx(\"uk-input\", className)}\n data-size={inputSize}\n aria-invalid={invalid ? true : ariaInvalid}\n />\n );\n});\n","import type { Transition } from \"motion/react\";\n\nexport const EASE_OUT = [0.23, 1, 0.32, 1] as const;\nexport const EASE_IN_OUT = [0.77, 0, 0.175, 1] as const;\n\nexport const UI_SPRING: Transition = {\n type: \"spring\",\n bounce: 0,\n duration: 0.3,\n};\n\nexport const OVERLAY_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.04,\n duration: 0.38,\n};\n\nexport const INDICATOR_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.08,\n duration: 0.34,\n};\n\nexport const REDUCED_MOTION_TRANSITION: Transition = {\n duration: 0.12,\n ease: EASE_OUT,\n};\n","import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport {\n animate,\n motion,\n useMotionValue,\n useReducedMotion,\n} from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { UI_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport interface SwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n> {\n /** 受控选中状态。传入即进入受控模式。 */\n checked?: boolean;\n /** 非受控模式下的初始状态。 */\n defaultChecked?: boolean;\n /** 状态变化回调,受控与非受控都会触发。 */\n onCheckedChange?: (checked: boolean) => void;\n /** 显示在开关右侧的标签文本。 */\n children?: ReactNode;\n}\n\n/**\n * 开关。\n *\n * 底层是原生 checkbox(role=\"switch\"),所以表单提交、键盘操作和\n * 屏幕阅读器语义都是免费的;视觉部分由 track / thumb 两个 span 承担。\n */\nexport const Switch: ForwardRefExoticComponent<\n SwitchProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n children,\n id,\n ...rest\n },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const reduceMotion = useReducedMotion() ?? false;\n const suppressClickRef = useRef(false);\n const dragRef = useRef<{\n pointerId: number;\n startX: number;\n startValue: number;\n moved: boolean;\n samples: Array<{ x: number; time: number }>;\n } | null>(null);\n\n const [current, setCurrent] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked ?? false,\n onChange: onCheckedChange,\n });\n const thumbX = useMotionValue(current ? 16 : 0);\n\n useEffect(() => {\n if (dragRef.current) {\n return;\n }\n\n const controls = animate(\n thumbX,\n current ? 16 : 0,\n reduceMotion ? { duration: 0 } : UI_SPRING,\n );\n\n return () => controls.stop();\n }, [current, reduceMotion, thumbX]);\n\n const finishDrag = (event: ReactPointerEvent<HTMLSpanElement>) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n if (drag.moved) {\n const first = drag.samples[0];\n const last = drag.samples[drag.samples.length - 1];\n const elapsed = first && last ? Math.max(last.time - first.time, 1) : 1;\n const velocity =\n first && last ? ((last.x - first.x) / elapsed) * 1000 : 0;\n const next = Math.abs(velocity) > 220 ? velocity > 0 : thumbX.get() >= 8;\n\n suppressClickRef.current = true;\n dragRef.current = null;\n setCurrent(next);\n animate(\n thumbX,\n next ? 16 : 0,\n reduceMotion ? { duration: 0 } : { ...UI_SPRING, velocity },\n );\n window.setTimeout(() => {\n suppressClickRef.current = false;\n }, 0);\n } else {\n dragRef.current = null;\n }\n\n if (\n event.currentTarget.hasPointerCapture(event.pointerId) &&\n typeof event.currentTarget.releasePointerCapture === \"function\"\n ) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n };\n\n return (\n <label\n className={cx(\"uk-switch\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n htmlFor={inputId}\n onClickCapture={(event) => {\n if (suppressClickRef.current) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n >\n <input\n {...rest}\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"uk-switch__input\"\n checked={current}\n disabled={disabled}\n aria-checked={current}\n onChange={(event) => setCurrent(event.target.checked)}\n />\n <span\n className=\"uk-switch__track\"\n aria-hidden=\"true\"\n onPointerDown={(event) => {\n if (disabled) {\n return;\n }\n\n dragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startValue: thumbX.get(),\n moved: false,\n samples: [{ x: event.clientX, time: performance.now() }],\n };\n if (typeof event.currentTarget.setPointerCapture === \"function\") {\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n }}\n onPointerMove={(event) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n const delta = event.clientX - drag.startX;\n if (Math.abs(delta) > 4) {\n drag.moved = true;\n }\n\n if (!drag.moved) {\n return;\n }\n\n event.preventDefault();\n thumbX.set(Math.max(0, Math.min(16, drag.startValue + delta)));\n drag.samples.push({ x: event.clientX, time: performance.now() });\n drag.samples = drag.samples.filter(\n (sample) => performance.now() - sample.time < 120,\n );\n }}\n onPointerUp={finishDrag}\n onPointerCancel={finishDrag}\n >\n <motion.span className=\"uk-switch__thumb\" style={{ x: thumbX }} />\n </span>\n {children ? <span className=\"uk-switch__label\">{children}</span> : null}\n </label>\n );\n});\n","import {\n 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"],"names":["cx","values","Button","forwardRef","variant","size","loading","iconOnly","type","className","children","rest","ref","jsxs","Input","inputSize","invalid","ariaInvalid","jsx","EASE_OUT","UI_SPRING","OVERLAY_SPRING","INDICATOR_SPRING","REDUCED_MOTION_TRANSITION","Switch","checked","defaultChecked","onCheckedChange","disabled","id","generatedId","useId","inputId","reduceMotion","useReducedMotion","suppressClickRef","useRef","dragRef","current","setCurrent","useControllableState","thumbX","useMotionValue","useEffect","controls","animate","finishDrag","event","drag","first","last","elapsed","velocity","next","delta","sample","motion","TabsContext","createContext","useTabsContext","component","context","useContext","tabId","baseId","value","panelId","TabsRoot","defaultValue","onValueChange","orientation","setValue","useMemo","TabsList","onKeyDown","trigger","triggers","index","nextKey","previousKey","nextIndex","nextTrigger","TabsTrigger","onClick","selected","TabsContent","Tabs","DialogContext","subscribeToNothing","getClientSnapshot","getServerSnapshot","useDialogContext","composeHandler","childHandler","handler","DialogRoot","open","defaultOpen","onOpenChange","hasTitle","setHasTitle","useState","hasDescription","setHasDescription","setOpen","DialogTrigger","child","childOnClick","cloneElement","DialogClose","label","isValidElement","DialogHeader","DialogTitle","DialogDescription","DialogBody","DialogFooter","DialogLayer","requestClose","contentId","titleId","descriptionId","closeOnBackdropClick","closeOnEscape","initialFocusRef","returnFocusRef","ariaLabel","ariaLabelledBy","ariaDescribedBy","dialogRef","openerRef","isPresent","useIsPresent","useLockBodyScroll","useLayoutEffect","dialog","useFocusTrap","reopen","onClose","onCancel","DialogContent","useEventCallback","useSyncExternalStore","createPortal","MotionConfig","AnimatePresence","LegacyDialog","title","description","footer","closeLabel","showCloseButton","Dialog"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/cx.ts","../src/Button.tsx","../src/Input.tsx","../src/motion.ts","../src/Switch.tsx","../src/Tabs.tsx","../src/Dialog.tsx","../src/Tooltip.tsx"],"sourcesContent":["/**\n * 拼接 className,忽略 false / null / undefined。\n */\nexport function cx(\n ...values: Array<string | false | null | undefined>\n): string {\n return values.filter(Boolean).join(\" \");\n}\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ForwardRefExoticComponent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"danger\";\n\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** 视觉层级,默认 primary。 */\n variant?: ButtonVariant;\n /** 尺寸,默认 md。 */\n size?: ButtonSize;\n /** 展示加载指示器并禁用点击。 */\n loading?: boolean;\n /** 仅包含图标时使用方形内边距,需自行提供 aria-label。 */\n iconOnly?: boolean;\n children?: ReactNode;\n}\n\n/**\n * 基础按钮。\n *\n * 样式由 data-variant / data-size 驱动,所有原生 button 属性都会透传。\n * loading 时自动设置 disabled 与 aria-busy,避免重复提交。\n */\nexport const Button: ForwardRefExoticComponent<\n ButtonProps & RefAttributes<HTMLButtonElement>\n> = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n iconOnly = false,\n type = \"button\",\n className,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n className={cx(\"uk-button\", className)}\n data-variant={variant}\n data-size={size}\n data-loading={loading ? \"true\" : undefined}\n data-icon-only={iconOnly ? \"true\" : undefined}\n disabled={rest.disabled || loading}\n aria-busy={loading || undefined}\n >\n {loading ? (\n <span className=\"uk-button__spinner\" aria-hidden=\"true\" />\n ) : null}\n {children}\n </button>\n );\n});\n","import {\n forwardRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n /** 输入框尺寸,默认 md。原生 size 属性被该字段替代。 */\n inputSize?: InputSize;\n /** 标记校验失败状态,等同于 aria-invalid=\"true\"。 */\n invalid?: boolean;\n}\n\n/**\n * 文本输入框。\n *\n * 只负责样式与校验状态,label、提示文案与错误信息由调用方组合,\n * 这样表单结构可以完全自定义。\n */\nexport const Input: ForwardRefExoticComponent<\n InputProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n inputSize = \"md\",\n invalid = false,\n className,\n \"aria-invalid\": ariaInvalid,\n ...rest\n },\n ref,\n) {\n return (\n <input\n {...rest}\n ref={ref}\n className={cx(\"uk-input\", className)}\n data-size={inputSize}\n aria-invalid={invalid ? true : ariaInvalid}\n />\n );\n});\n","import type { Transition } from \"motion/react\";\n\nexport const EASE_OUT = [0.23, 1, 0.32, 1] as const;\nexport const EASE_IN_OUT = [0.77, 0, 0.175, 1] as const;\n\nexport const UI_SPRING: Transition = {\n type: \"spring\",\n bounce: 0,\n duration: 0.3,\n};\n\nexport const OVERLAY_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.04,\n duration: 0.38,\n};\n\nexport const INDICATOR_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.08,\n duration: 0.34,\n};\n\n/** Frequent explanatory surface: near-immediate presence without spring settle. */\nexport const TOOLTIP_TRANSITION: Transition = {\n duration: 0.12,\n ease: EASE_OUT,\n};\n\n/**\n * Grouped tooltips move between nearby triggers. The short layout spring keeps\n * spatial continuity without delaying the content switch.\n */\nexport const TOOLTIP_GROUP_TRANSITION: Transition = {\n layout: { type: \"spring\", bounce: 0, duration: 0.22 },\n opacity: { duration: 0.12, ease: EASE_OUT },\n scale: { duration: 0.12, ease: EASE_OUT },\n};\n\nexport const REDUCED_MOTION_TRANSITION: Transition = {\n duration: 0.12,\n ease: EASE_OUT,\n};\n","import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport {\n animate,\n motion,\n useMotionValue,\n useReducedMotion,\n} from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { UI_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport interface SwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n> {\n /** 受控选中状态。传入即进入受控模式。 */\n checked?: boolean;\n /** 非受控模式下的初始状态。 */\n defaultChecked?: boolean;\n /** 状态变化回调,受控与非受控都会触发。 */\n onCheckedChange?: (checked: boolean) => void;\n /** 显示在开关右侧的标签文本。 */\n children?: ReactNode;\n}\n\n/**\n * 开关。\n *\n * 底层是原生 checkbox(role=\"switch\"),所以表单提交、键盘操作和\n * 屏幕阅读器语义都是免费的;视觉部分由 track / thumb 两个 span 承担。\n */\nexport const Switch: ForwardRefExoticComponent<\n SwitchProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n children,\n id,\n ...rest\n },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const reduceMotion = useReducedMotion() ?? false;\n const suppressClickRef = useRef(false);\n const dragRef = useRef<{\n pointerId: number;\n startX: number;\n startValue: number;\n moved: boolean;\n samples: Array<{ x: number; time: number }>;\n } | null>(null);\n\n const [current, setCurrent] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked ?? false,\n onChange: onCheckedChange,\n });\n const thumbX = useMotionValue(current ? 16 : 0);\n\n useEffect(() => {\n if (dragRef.current) {\n return;\n }\n\n const controls = animate(\n thumbX,\n current ? 16 : 0,\n reduceMotion ? { duration: 0 } : UI_SPRING,\n );\n\n return () => controls.stop();\n }, [current, reduceMotion, thumbX]);\n\n const finishDrag = (event: ReactPointerEvent<HTMLSpanElement>) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n if (drag.moved) {\n const first = drag.samples[0];\n const last = drag.samples[drag.samples.length - 1];\n const elapsed = first && last ? Math.max(last.time - first.time, 1) : 1;\n const velocity =\n first && last ? ((last.x - first.x) / elapsed) * 1000 : 0;\n const next = Math.abs(velocity) > 220 ? velocity > 0 : thumbX.get() >= 8;\n\n suppressClickRef.current = true;\n dragRef.current = null;\n setCurrent(next);\n animate(\n thumbX,\n next ? 16 : 0,\n reduceMotion ? { duration: 0 } : { ...UI_SPRING, velocity },\n );\n window.setTimeout(() => {\n suppressClickRef.current = false;\n }, 0);\n } else {\n dragRef.current = null;\n }\n\n if (\n event.currentTarget.hasPointerCapture(event.pointerId) &&\n typeof event.currentTarget.releasePointerCapture === \"function\"\n ) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n };\n\n return (\n <label\n className={cx(\"uk-switch\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n htmlFor={inputId}\n onClickCapture={(event) => {\n if (suppressClickRef.current) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n >\n <input\n {...rest}\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"uk-switch__input\"\n checked={current}\n disabled={disabled}\n aria-checked={current}\n onChange={(event) => setCurrent(event.target.checked)}\n />\n <span\n className=\"uk-switch__track\"\n aria-hidden=\"true\"\n onPointerDown={(event) => {\n if (disabled) {\n return;\n }\n\n dragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startValue: thumbX.get(),\n moved: false,\n samples: [{ x: event.clientX, time: performance.now() }],\n };\n if (typeof event.currentTarget.setPointerCapture === \"function\") {\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n }}\n onPointerMove={(event) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n const delta = event.clientX - drag.startX;\n if (Math.abs(delta) > 4) {\n drag.moved = true;\n }\n\n if (!drag.moved) {\n return;\n }\n\n event.preventDefault();\n thumbX.set(Math.max(0, Math.min(16, drag.startValue + delta)));\n drag.samples.push({ x: event.clientX, time: performance.now() });\n drag.samples = drag.samples.filter(\n (sample) => performance.now() - sample.time < 120,\n );\n }}\n onPointerUp={finishDrag}\n onPointerCancel={finishDrag}\n >\n <motion.span className=\"uk-switch__thumb\" style={{ x: thumbX }} />\n </span>\n {children ? <span className=\"uk-switch__label\">{children}</span> : null}\n </label>\n );\n});\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type ForwardRefExoticComponent,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { INDICATOR_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type TabsOrientation = \"horizontal\" | \"vertical\";\n\ninterface TabsContextValue {\n baseId: string;\n value: string;\n setValue: (value: string) => void;\n orientation: TabsOrientation;\n indicatorId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext(component: string): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tabs>`);\n }\n\n return context;\n}\n\nfunction tabId(baseId: string, value: string) {\n return `${baseId}-tab-${encodeURIComponent(value)}`;\n}\n\nfunction panelId(baseId: string, value: string) {\n return `${baseId}-panel-${encodeURIComponent(value)}`;\n}\n\ninterface TabsBaseProps {\n onValueChange?: (value: string) => void;\n orientation?: TabsOrientation;\n className?: string;\n children: ReactNode;\n}\n\nexport type TabsProps = TabsBaseProps &\n (\n | { value: string; defaultValue?: never }\n | { value?: never; defaultValue: string }\n );\n\nfunction TabsRoot({\n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n className,\n children,\n}: TabsProps): ReactElement {\n const baseId = useId();\n const [current, setValue] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? \"\",\n onChange: onValueChange,\n });\n\n const context = useMemo<TabsContextValue>(\n () => ({\n baseId,\n value: current,\n setValue,\n orientation,\n indicatorId: `${baseId}-indicator`,\n }),\n [baseId, current, orientation, setValue],\n );\n\n return (\n <TabsContext.Provider value={context}>\n <div className={cx(\"uk-tabs\", className)} data-orientation={orientation}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\nconst TabsList: ForwardRefExoticComponent<\n TabsListProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, onKeyDown, ...rest },\n ref,\n) {\n const { orientation } = useTabsContext(\"Tabs.List\");\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation}\n tabIndex={-1}\n className={cx(\"uk-tabs__list\", className)}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n const trigger = target?.closest<HTMLElement>('[role=\"tab\"]');\n\n if (!trigger || trigger.hasAttribute(\"disabled\")) {\n return;\n }\n\n const triggers = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>(\n '[role=\"tab\"]:not([disabled])',\n ),\n );\n const index = triggers.indexOf(trigger);\n\n if (index === -1) {\n return;\n }\n\n const nextKey =\n orientation === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\";\n const previousKey =\n orientation === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\";\n\n let nextIndex = -1;\n\n switch (event.key) {\n case nextKey:\n nextIndex = (index + 1) % triggers.length;\n break;\n case previousKey:\n nextIndex = (index - 1 + triggers.length) % triggers.length;\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = triggers.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n const nextTrigger = triggers[nextIndex];\n\n if (nextTrigger) {\n nextTrigger.focus();\n nextTrigger.click();\n }\n }}\n />\n );\n});\n\nexport interface TabsTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n children?: ReactNode;\n}\n\nconst TabsTrigger: ForwardRefExoticComponent<\n TabsTriggerProps & RefAttributes<HTMLButtonElement>\n> = forwardRef<HTMLButtonElement, TabsTriggerProps>(function TabsTrigger(\n { value, type = \"button\", className, onClick, children, ...rest },\n ref,\n) {\n const context = useTabsContext(\"Tabs.Trigger\");\n const selected = context.value === value;\n const reduceMotion = useReducedMotion() ?? false;\n\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n role=\"tab\"\n id={tabId(context.baseId, value)}\n aria-selected={selected}\n aria-controls={panelId(context.baseId, value)}\n tabIndex={selected ? 0 : -1}\n data-state={selected ? \"active\" : \"inactive\"}\n className={cx(\"uk-tabs__trigger\", className)}\n onClick={(event) => {\n onClick?.(event);\n\n if (!event.defaultPrevented) {\n context.setValue(value);\n }\n }}\n >\n {children}\n {selected ? (\n <motion.span\n className=\"uk-tabs__indicator\"\n layoutId={context.indicatorId}\n aria-hidden=\"true\"\n transition={reduceMotion ? { duration: 0 } : INDICATOR_SPRING}\n />\n ) : null}\n </button>\n );\n});\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children?: ReactNode;\n}\n\nconst TabsContent: ForwardRefExoticComponent<\n TabsContentProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, TabsContentProps>(function TabsContent(\n { value, className, ...rest },\n ref,\n) {\n const context = useTabsContext(\"Tabs.Content\");\n const selected = context.value === value;\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"tabpanel\"\n id={panelId(context.baseId, value)}\n aria-labelledby={tabId(context.baseId, value)}\n hidden={!selected}\n tabIndex={0}\n data-state={selected ? \"active\" : \"inactive\"}\n className={cx(\"uk-tabs__panel\", className)}\n />\n );\n});\n\n/**\n * 标签页。\n *\n * 组合式 API:Tabs / Tabs.List / Tabs.Trigger / Tabs.Content。\n * 实现 roving tabindex、方向键循环、Home/End 跳转,并自动生成\n * aria-controls / aria-labelledby 关联。\n */\nexport interface TabsComponent {\n (props: TabsProps): ReactElement;\n List: typeof TabsList;\n Trigger: typeof TabsTrigger;\n Content: typeof TabsContent;\n}\n\nexport const Tabs: TabsComponent = Object.assign(TabsRoot, {\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n});\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ForwardRefExoticComponent,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n type RefObject,\n} from \"react\";\nimport {\n AnimatePresence,\n motion,\n MotionConfig,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport {\n useControllableState,\n useEventCallback,\n useFocusTrap,\n useLockBodyScroll,\n} from \"seam-hooks\";\nimport { Button } from \"./Button\";\nimport { OVERLAY_SPRING, REDUCED_MOTION_TRANSITION } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport interface DialogProps {\n /** 是否打开。由调用方控制,配合 onOpenChange 使用。 */\n open: boolean;\n /** 打开状态变化时触发,用于同步外部 state。 */\n onOpenChange: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n /** 关闭按钮的无障碍名称,默认 Close。 */\n closeLabel?: string;\n showCloseButton?: boolean;\n /** 点击遮罩是否关闭,默认 true。 */\n closeOnBackdropClick?: boolean;\n /** 按 Esc 是否关闭,默认 true。 */\n closeOnEscape?: boolean;\n /** 打开后优先聚焦的元素;不传则聚焦第一个可聚焦元素。 */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** 关闭后恢复焦点的元素;默认恢复到打开前的活动元素。 */\n returnFocusRef?: RefObject<HTMLElement | null>;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport interface DialogRootProps {\n children: ReactNode;\n /** 受控打开状态。 */\n open?: boolean;\n /** 非受控模式下的初始状态。 */\n defaultOpen?: boolean;\n /** 打开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n}\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerId: string;\n contentId: string;\n titleId: string;\n descriptionId: string;\n hasTitle: boolean;\n setHasTitle: (hasTitle: boolean) => void;\n hasDescription: boolean;\n setHasDescription: (hasDescription: boolean) => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\n\nfunction useDialogContext(component: string): DialogContextValue {\n const context = useContext(DialogContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Dialog.Root>`);\n }\n\n return context;\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\n/** Dialog 状态与语义 ID 的根节点。 */\nfunction DialogRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n}: DialogRootProps): ReactElement {\n const baseId = useId();\n const [hasTitle, setHasTitle] = useState(false);\n const [hasDescription, setHasDescription] = useState(false);\n const [current, setOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n const value = useMemo<DialogContextValue>(\n () => ({\n open: current,\n setOpen,\n triggerId: `${baseId}-trigger`,\n contentId: `${baseId}-content`,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n hasTitle,\n setHasTitle,\n hasDescription,\n setHasDescription,\n }),\n [baseId, current, hasDescription, hasTitle, setOpen],\n );\n\n return (\n <DialogContext.Provider value={value}>{children}</DialogContext.Provider>\n );\n}\n\nexport interface DialogTriggerProps {\n children: ReactElement;\n}\n\n/** 包装一个交互元素,同步 dialog 的状态与 ARIA 关联。 */\nfunction DialogTrigger({ children }: DialogTriggerProps): ReactElement {\n const context = useDialogContext(\"Dialog.Trigger\");\n const child = children as ReactElement<Record<string, unknown>>;\n const childOnClick = child.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n return cloneElement(child, {\n id: context.triggerId,\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : undefined,\n onClick: composeHandler(childOnClick, () => {\n context.setOpen(!context.open);\n }),\n });\n}\n\nexport interface DialogCloseProps {\n children?: ReactElement;\n label?: string;\n}\n\n/** 包装关闭触发器,或渲染一个默认关闭按钮。 */\nfunction DialogClose({\n children,\n label = \"Close\",\n}: DialogCloseProps): ReactElement {\n const context = useDialogContext(\"Dialog.Close\");\n\n if (isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const childOnClick = child.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n return cloneElement(child, {\n onClick: composeHandler(childOnClick, () => {\n context.setOpen(false);\n }),\n });\n }\n\n return (\n <Button variant=\"ghost\" onClick={() => context.setOpen(false)}>\n {label}\n </Button>\n );\n}\n\nexport type DialogHeaderProps = HTMLAttributes<HTMLElement>;\n\nconst DialogHeader: ForwardRefExoticComponent<\n DialogHeaderProps & RefAttributes<HTMLElement>\n> = forwardRef<HTMLElement, DialogHeaderProps>(function DialogHeader(\n { className, ...rest },\n ref,\n) {\n return (\n <header\n {...rest}\n ref={ref}\n className={cx(\"uk-dialog__header\", className)}\n />\n );\n});\n\nexport type DialogTitleProps = HTMLAttributes<HTMLHeadingElement>;\n\nconst DialogTitle: ForwardRefExoticComponent<\n DialogTitleProps & RefAttributes<HTMLHeadingElement>\n> = forwardRef<HTMLHeadingElement, DialogTitleProps>(function DialogTitle(\n { className, children, ...rest },\n ref,\n) {\n const context = useDialogContext(\"Dialog.Title\");\n const setHasTitle = context.setHasTitle;\n\n useEffect(() => {\n setHasTitle(true);\n return () => setHasTitle(false);\n }, [setHasTitle]);\n\n return (\n <h2\n {...rest}\n ref={ref}\n id={context.titleId}\n className={cx(\"uk-dialog__title\", className)}\n >\n {children}\n </h2>\n );\n});\n\nexport type DialogDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nconst DialogDescription: ForwardRefExoticComponent<\n DialogDescriptionProps & RefAttributes<HTMLParagraphElement>\n> = forwardRef<HTMLParagraphElement, DialogDescriptionProps>(\n function DialogDescription({ className, ...rest }, ref) {\n const context = useDialogContext(\"Dialog.Description\");\n const setHasDescription = context.setHasDescription;\n\n useEffect(() => {\n setHasDescription(true);\n return () => setHasDescription(false);\n }, [setHasDescription]);\n\n return (\n <p\n {...rest}\n ref={ref}\n id={context.descriptionId}\n className={cx(\"uk-dialog__description\", className)}\n />\n );\n },\n);\n\nexport type DialogBodyProps = HTMLAttributes<HTMLDivElement>;\n\nconst DialogBody: ForwardRefExoticComponent<\n DialogBodyProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, DialogBodyProps>(function DialogBody(\n { className, ...rest },\n ref,\n) {\n return (\n <div {...rest} ref={ref} className={cx(\"uk-dialog__body\", className)} />\n );\n});\n\nexport type DialogFooterProps = HTMLAttributes<HTMLElement>;\n\nconst DialogFooter: ForwardRefExoticComponent<\n DialogFooterProps & RefAttributes<HTMLElement>\n> = forwardRef<HTMLElement, DialogFooterProps>(function DialogFooter(\n { className, ...rest },\n ref,\n) {\n return (\n <footer\n {...rest}\n ref={ref}\n className={cx(\"uk-dialog__footer\", className)}\n />\n );\n});\n\nexport interface DialogContentProps {\n children?: ReactNode;\n className?: string;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n initialFocusRef?: RefObject<HTMLElement | null>;\n returnFocusRef?: RefObject<HTMLElement | null>;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n}\n\ninterface DialogLayerProps extends DialogContentProps {\n requestClose: () => void;\n contentId: string;\n titleId: string;\n descriptionId: string;\n hasTitle: boolean;\n hasDescription: boolean;\n}\n\nfunction DialogLayer({\n requestClose,\n contentId,\n titleId,\n descriptionId,\n hasTitle,\n hasDescription,\n children,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n}: DialogLayerProps): ReactElement {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const openerRef = useRef<HTMLElement | null>(null);\n const isPresent = useIsPresent();\n const reduceMotion = useReducedMotion() ?? false;\n\n useLockBodyScroll(true);\n\n useLayoutEffect(() => {\n const dialog = dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n openerRef.current ??=\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n if (dialog.open) {\n return;\n }\n\n if (typeof dialog.showModal === \"function\") {\n dialog.showModal();\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n }, []);\n\n useFocusTrap({\n active: true,\n containerRef: dialogRef,\n initialFocusRef,\n returnFocusRef: returnFocusRef ?? openerRef,\n });\n\n useEffect(() => {\n const dialog = dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n const reopen = () => {\n if (dialog.open) {\n return;\n }\n\n if (typeof dialog.showModal === \"function\") {\n dialog.showModal();\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n };\n const onClose = () => {\n if (!closeOnEscape) {\n reopen();\n return;\n }\n\n requestClose();\n };\n const onCancel = (event: Event) => {\n event.preventDefault();\n\n if (closeOnEscape) {\n requestClose();\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (closeOnEscape || event.key !== \"Escape\" || event.defaultPrevented) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n };\n const onClick = (event: globalThis.MouseEvent) => {\n if (closeOnBackdropClick && event.target === dialog) {\n requestClose();\n }\n };\n\n dialog.addEventListener(\"close\", onClose);\n dialog.addEventListener(\"cancel\", onCancel);\n dialog.addEventListener(\"keydown\", onKeyDown, true);\n dialog.addEventListener(\"click\", onClick);\n\n return () => {\n dialog.removeEventListener(\"close\", onClose);\n dialog.removeEventListener(\"cancel\", onCancel);\n dialog.removeEventListener(\"keydown\", onKeyDown, true);\n dialog.removeEventListener(\"click\", onClick);\n };\n }, [closeOnBackdropClick, closeOnEscape, requestClose]);\n\n return (\n <dialog\n ref={dialogRef}\n id={contentId}\n className={cx(\"uk-dialog\", className)}\n closedby={closeOnEscape || closeOnBackdropClick ? \"any\" : \"none\"}\n data-state={isPresent ? \"open\" : \"closed\"}\n inert={!isPresent}\n aria-label={ariaLabel}\n aria-labelledby={\n ariaLabelledBy ??\n (ariaLabel ? undefined : hasTitle ? titleId : undefined)\n }\n aria-describedby={\n ariaDescribedBy ?? (hasDescription ? descriptionId : undefined)\n }\n >\n <motion.div\n className=\"uk-dialog__panel\"\n initial={\n reduceMotion\n ? { opacity: 0 }\n : {\n opacity: 0,\n transform: \"translateY(12px) scale(0.96)\",\n }\n }\n animate={{\n opacity: 1,\n transform: \"translateY(0px) scale(1)\",\n transition: reduceMotion\n ? REDUCED_MOTION_TRANSITION\n : { ...OVERLAY_SPRING, delay: 0.06 },\n }}\n exit={\n reduceMotion\n ? { opacity: 0, transition: REDUCED_MOTION_TRANSITION }\n : {\n opacity: 0,\n transform: \"translateY(8px) scale(0.97)\",\n transition: OVERLAY_SPRING,\n }\n }\n >\n {children}\n </motion.div>\n </dialog>\n );\n}\n\n/** Portal、原生 dialog、焦点与 presence 生命周期的语义层。 */\nfunction DialogContent({\n children,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n}: DialogContentProps): ReactElement | null {\n const context = useDialogContext(\"Dialog.Content\");\n const requestClose = useEventCallback(() => {\n context.setOpen(false);\n });\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n\n if (!isClient) {\n return null;\n }\n\n return createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {context.open ? (\n <DialogLayer\n key=\"uk-dialog\"\n requestClose={requestClose}\n contentId={context.contentId}\n titleId={context.titleId}\n descriptionId={context.descriptionId}\n hasTitle={context.hasTitle}\n hasDescription={context.hasDescription}\n closeOnBackdropClick={closeOnBackdropClick}\n closeOnEscape={closeOnEscape}\n initialFocusRef={initialFocusRef}\n returnFocusRef={returnFocusRef}\n className={className}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n >\n {children}\n </DialogLayer>\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n document.body,\n );\n}\n\n/** 保持既有 slot API 兼容的便捷封装。 */\nfunction LegacyDialog({\n open,\n onOpenChange,\n title,\n description,\n footer,\n children,\n closeLabel = \"Close\",\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n}: DialogProps): ReactElement {\n return (\n <DialogRoot open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={className}\n closeOnBackdropClick={closeOnBackdropClick}\n closeOnEscape={closeOnEscape}\n initialFocusRef={initialFocusRef}\n returnFocusRef={returnFocusRef}\n aria-label={ariaLabel}\n >\n {title || description || showCloseButton ? (\n <DialogHeader>\n <div className=\"uk-dialog__heading\">\n {title ? <DialogTitle>{title}</DialogTitle> : null}\n {description ? (\n <DialogDescription>{description}</DialogDescription>\n ) : null}\n </div>\n {showCloseButton ? (\n <DialogClose>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n aria-label={closeLabel}\n className=\"uk-dialog__close\"\n >\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M5 5l10 10M15 5L5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n </Button>\n </DialogClose>\n ) : null}\n </DialogHeader>\n ) : null}\n\n <DialogBody>{children}</DialogBody>\n\n {footer ? <DialogFooter>{footer}</DialogFooter> : null}\n </DialogContent>\n </DialogRoot>\n );\n}\n\nexport interface DialogComponent {\n (props: DialogProps): ReactElement;\n Root: typeof DialogRoot;\n Trigger: typeof DialogTrigger;\n Content: typeof DialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Close: typeof DialogClose;\n}\n\n/**\n * 模态对话框。\n *\n * 组合式 API 由 Root / Trigger / Content 和各语义层组成;无子组件的调用\n * 保留既有 title / description / footer slot API。\n */\nexport const Dialog: DialogComponent = Object.assign(LegacyDialog, {\n Root: DialogRoot,\n Trigger: DialogTrigger,\n Content: DialogContent,\n Header: DialogHeader,\n Title: DialogTitle,\n Description: DialogDescription,\n Body: DialogBody,\n Footer: DialogFooter,\n Close: DialogClose,\n});\n","import {\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type FocusEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n AnimatePresence,\n motion,\n MotionConfig,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport { useControllableState, useEventCallback } from \"seam-hooks\";\nimport {\n REDUCED_MOTION_TRANSITION,\n TOOLTIP_GROUP_TRANSITION,\n TOOLTIP_TRANSITION,\n} from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type TooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type TooltipAlign = \"start\" | \"center\" | \"end\";\n\nexport interface TooltipRootProps {\n children: ReactNode;\n /** 受控打开状态。 */\n open?: boolean;\n /** 非受控模式下的初始打开状态。 */\n defaultOpen?: boolean;\n /** 打开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n /** 指针停留或聚焦多久后显示,默认 300ms。 */\n delayDuration?: number;\n /** 离开触发器后多久关闭,默认 80ms。 */\n closeDelay?: number;\n}\n\ninterface TooltipContextValue {\n open: boolean;\n triggerElement: HTMLElement | null;\n setTriggerElement: (element: HTMLElement | null) => void;\n contentId: string;\n requestOpen: (immediate?: boolean) => void;\n requestClose: () => void;\n dismiss: () => void;\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null);\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\n\nfunction useTooltipContext(component: string): TooltipContextValue {\n const context = useContext(TooltipContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tooltip.Root>`);\n }\n\n return context;\n}\n\nfunction setRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n (ref as { current: T | null }).current = value;\n }\n}\n\nfunction appendDescription(existing: unknown, id: string): string {\n const ids =\n typeof existing === \"string\" ? existing.split(/\\s+/).filter(Boolean) : [];\n\n return Array.from(new Set([...ids, id])).join(\" \");\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\n/** Tooltip 的状态、计时器与语义 ID 根节点。 */\nfunction TooltipRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n delayDuration = 300,\n closeDelay = 80,\n}: TooltipRootProps): ReactElement {\n const contentId = useId();\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\n null,\n );\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [current, setOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const clearOpenTimer = useCallback(() => {\n if (openTimerRef.current !== null) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n }, []);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current !== null) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const requestOpen = useEventCallback((immediate = false) => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (current) {\n return;\n }\n\n if (immediate || delayDuration <= 0) {\n setOpen(true);\n return;\n }\n\n openTimerRef.current = setTimeout(() => {\n openTimerRef.current = null;\n setOpen(true);\n }, delayDuration);\n });\n\n const requestClose = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (!current) {\n return;\n }\n\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = null;\n setOpen(false);\n }, closeDelay);\n });\n\n const dismiss = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n setOpen(false);\n });\n\n useEffect(() => {\n if (current) {\n clearCloseTimer();\n } else {\n clearOpenTimer();\n }\n }, [clearCloseTimer, clearOpenTimer, current]);\n\n useEffect(\n () => () => {\n clearOpenTimer();\n clearCloseTimer();\n },\n [clearCloseTimer, clearOpenTimer],\n );\n\n const context = useMemo<TooltipContextValue>(\n () => ({\n open: current,\n triggerElement,\n setTriggerElement,\n contentId,\n requestOpen,\n requestClose,\n dismiss,\n }),\n [contentId, current, dismiss, requestClose, requestOpen, triggerElement],\n );\n\n return (\n <TooltipContext.Provider value={context}>\n {children}\n </TooltipContext.Provider>\n );\n}\n\nexport interface TooltipTriggerProps {\n /** 单个可聚焦的交互元素;事件和 ref 会与调用方传入的值合并。 */\n children: ReactElement;\n}\n\n/** 为原生交互元素补充 hover、focus、Escape 与 aria-describedby。 */\nfunction TooltipTrigger({ children }: TooltipTriggerProps): ReactElement {\n const context = useTooltipContext(\"Tooltip.Trigger\");\n const { setTriggerElement } = context;\n\n if (!isValidElement(children)) {\n throw new Error(\"<Tooltip.Trigger> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childRef =\n (childProps.ref as Ref<HTMLElement> | undefined) ??\n (child as unknown as { ref?: Ref<HTMLElement> }).ref;\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childFocus = childProps.onFocus as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childBlur = childProps.onBlur as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childKeyDown = childProps.onKeyDown as\n | ((event: KeyboardEvent<HTMLElement>) => void)\n | undefined;\n const setTriggerRef = useCallback(\n (element: HTMLElement | null) => {\n setRef(childRef, element);\n setTriggerElement(element);\n },\n [childRef, setTriggerElement],\n );\n\n return cloneElement(child, {\n ref: setTriggerRef,\n \"aria-describedby\": context.open\n ? appendDescription(childProps[\"aria-describedby\"], context.contentId)\n : childProps[\"aria-describedby\"],\n onPointerEnter: composeHandler(childPointerEnter, (event) => {\n context.requestOpen(event.pointerType === \"touch\");\n }),\n onPointerLeave: composeHandler(childPointerLeave, (event) => {\n if (event.pointerType !== \"touch\") {\n context.requestClose();\n }\n }),\n onFocus: composeHandler(childFocus, () => {\n context.requestOpen();\n }),\n onBlur: composeHandler(childBlur, () => {\n context.requestClose();\n }),\n onKeyDown: composeHandler(childKeyDown, (event) => {\n if (event.key === \"Escape\" && context.open) {\n event.preventDefault();\n event.stopPropagation();\n context.dismiss();\n }\n }),\n });\n}\n\nexport interface TooltipContentProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"id\" | \"role\"\n> {\n children?: ReactNode;\n /** 首选方向,空间不足时自动翻转。 */\n side?: TooltipSide;\n /** 沿首选方向与触发器的对齐方式。 */\n align?: TooltipAlign;\n /** 与触发器之间的间距,默认 8px。 */\n sideOffset?: number;\n /** 与视口边缘的最小间距,默认 8px。 */\n collisionPadding?: number;\n /** 是否根据视口空间翻转和避让,默认 true。 */\n avoidCollisions?: boolean;\n}\n\ninterface Rectangle {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface TooltipPosition {\n x: number;\n y: number;\n side: TooltipSide;\n arrowOffset: number;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n if (max < min) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nfunction oppositeSide(side: TooltipSide): TooltipSide {\n switch (side) {\n case \"top\":\n return \"bottom\";\n case \"right\":\n return \"left\";\n case \"bottom\":\n return \"top\";\n case \"left\":\n return \"right\";\n }\n}\n\nfunction mainAxisRoom(\n trigger: Rectangle,\n side: TooltipSide,\n viewportWidth: number,\n viewportHeight: number,\n padding: number,\n) {\n switch (side) {\n case \"top\":\n return trigger.top - padding;\n case \"right\":\n return viewportWidth - trigger.right - padding;\n case \"bottom\":\n return viewportHeight - trigger.bottom - padding;\n case \"left\":\n return trigger.left - padding;\n }\n}\n\nfunction fitsOnSide(\n trigger: Rectangle,\n tooltip: Rectangle,\n side: TooltipSide,\n offset: number,\n viewportWidth: number,\n viewportHeight: number,\n padding: number,\n) {\n const room = mainAxisRoom(\n trigger,\n side,\n viewportWidth,\n viewportHeight,\n padding,\n );\n\n return (\n room >=\n (side === \"top\" || side === \"bottom\" ? tooltip.height : tooltip.width) +\n offset\n );\n}\n\nexport function calculateTooltipPosition({\n trigger,\n tooltip,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n viewportWidth,\n viewportHeight,\n}: {\n trigger: Rectangle;\n tooltip: Rectangle;\n side: TooltipSide;\n align: TooltipAlign;\n sideOffset: number;\n collisionPadding: number;\n avoidCollisions: boolean;\n viewportWidth: number;\n viewportHeight: number;\n}): TooltipPosition {\n let resolvedSide = side;\n\n if (\n avoidCollisions &&\n !fitsOnSide(\n trigger,\n tooltip,\n side,\n sideOffset,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n )\n ) {\n const opposite = oppositeSide(side);\n const oppositeFits = fitsOnSide(\n trigger,\n tooltip,\n opposite,\n sideOffset,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n const preferredRoom = mainAxisRoom(\n trigger,\n side,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n const oppositeRoom = mainAxisRoom(\n trigger,\n opposite,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n\n if (oppositeFits || oppositeRoom > preferredRoom) {\n resolvedSide = opposite;\n }\n }\n\n const triggerCenterX = trigger.left + trigger.width / 2;\n const triggerCenterY = trigger.top + trigger.height / 2;\n let x = 0;\n let y = 0;\n\n switch (resolvedSide) {\n case \"top\":\n case \"bottom\":\n x =\n align === \"start\"\n ? trigger.left\n : align === \"end\"\n ? trigger.right - tooltip.width\n : triggerCenterX - tooltip.width / 2;\n y =\n resolvedSide === \"top\"\n ? trigger.top - tooltip.height - sideOffset\n : trigger.bottom + sideOffset;\n break;\n case \"left\":\n case \"right\":\n x =\n resolvedSide === \"left\"\n ? trigger.left - tooltip.width - sideOffset\n : trigger.right + sideOffset;\n y =\n align === \"start\"\n ? trigger.top\n : align === \"end\"\n ? trigger.bottom - tooltip.height\n : triggerCenterY - tooltip.height / 2;\n break;\n }\n\n if (avoidCollisions) {\n x = clamp(\n x,\n collisionPadding,\n viewportWidth - tooltip.width - collisionPadding,\n );\n y = clamp(\n y,\n collisionPadding,\n viewportHeight - tooltip.height - collisionPadding,\n );\n }\n\n const arrowMargin = 10;\n const arrowOffset =\n resolvedSide === \"top\" || resolvedSide === \"bottom\"\n ? clamp(\n triggerCenterX - x,\n arrowMargin,\n Math.max(arrowMargin, tooltip.width - arrowMargin),\n )\n : clamp(\n triggerCenterY - y,\n arrowMargin,\n Math.max(arrowMargin, tooltip.height - arrowMargin),\n );\n\n return { x, y, side: resolvedSide, arrowOffset };\n}\n\ninterface TooltipLayerProps extends TooltipContentProps {\n contentId: string;\n triggerElement: HTMLElement;\n dismiss: () => void;\n}\n\ninterface TooltipPositionOptions {\n side: TooltipSide;\n align: TooltipAlign;\n sideOffset: number;\n collisionPadding: number;\n avoidCollisions: boolean;\n}\n\nfunction useTooltipPosition(\n triggerElement: HTMLElement | null,\n floatingRef: { current: HTMLDivElement | null },\n {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n }: TooltipPositionOptions,\n): TooltipPosition | null {\n const [position, setPosition] = useState<TooltipPosition | null>(null);\n\n useLayoutEffect(() => {\n const floating = floatingRef.current;\n\n if (!floating || !triggerElement) {\n return;\n }\n\n const updatePosition = () => {\n const triggerRect = triggerElement.getBoundingClientRect();\n const tooltipRect = floating.getBoundingClientRect();\n\n setPosition(\n calculateTooltipPosition({\n trigger: triggerRect,\n tooltip: tooltipRect,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n viewportWidth:\n window.innerWidth || document.documentElement.clientWidth,\n viewportHeight:\n window.innerHeight || document.documentElement.clientHeight,\n }),\n );\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(updatePosition);\n resizeObserver?.observe(triggerElement);\n resizeObserver?.observe(floating);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n resizeObserver?.disconnect();\n };\n }, [\n align,\n avoidCollisions,\n collisionPadding,\n floatingRef,\n side,\n sideOffset,\n triggerElement,\n ]);\n\n return position;\n}\n\nfunction useTooltipDismissBehavior(\n triggerElement: HTMLElement,\n floatingRef: { current: HTMLDivElement | null },\n dismiss: () => void,\n) {\n useEffect(() => {\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (\n triggerElement.contains(target) ||\n floatingRef.current?.contains(target)\n ) {\n return;\n }\n\n dismiss();\n };\n const onVisibilityChange = () => {\n if (document.visibilityState === \"hidden\") {\n dismiss();\n }\n };\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n const target = event.target;\n\n if (\n event.key !== \"Escape\" ||\n (target instanceof Node && triggerElement.contains(target))\n ) {\n return;\n }\n\n dismiss();\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n document.addEventListener(\"keydown\", onKeyDown, true);\n window.addEventListener(\"blur\", dismiss);\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n window.removeEventListener(\"blur\", dismiss);\n };\n }, [dismiss, floatingRef, triggerElement]);\n}\n\nfunction transformOriginForSide(\n side: TooltipSide | undefined,\n): CSSProperties[\"transformOrigin\"] {\n switch (side) {\n case \"top\":\n return \"center bottom\";\n case \"bottom\":\n return \"center top\";\n case \"left\":\n return \"right center\";\n case \"right\":\n return \"left center\";\n default:\n return \"center\";\n }\n}\n\nfunction TooltipLayer({\n contentId,\n triggerElement,\n dismiss,\n children,\n className,\n style,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n avoidCollisions = true,\n ...rest\n}: TooltipLayerProps): ReactElement {\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useTooltipPosition(triggerElement, floatingRef, {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n });\n useTooltipDismissBehavior(triggerElement, floatingRef, dismiss);\n\n const transformOrigin = transformOriginForSide(position?.side ?? side);\n const wrapperStyle = {\n ...style,\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties;\n\n return (\n <div\n {...rest}\n ref={floatingRef}\n id={contentId}\n role=\"tooltip\"\n data-side={position?.side ?? side}\n data-align={align}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n className={cx(\"uk-tooltip\", className)}\n style={wrapperStyle}\n >\n <motion.div\n className=\"uk-tooltip__surface\"\n style={{ transformOrigin }}\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : TOOLTIP_TRANSITION\n }\n >\n <span\n className=\"uk-tooltip__arrow\"\n aria-hidden=\"true\"\n style={\n {\n \"--uk-tooltip-arrow-offset\": `${position?.arrowOffset ?? 0}px`,\n } as CSSProperties\n }\n />\n {children}\n </motion.div>\n </div>\n );\n}\n\n/** Portal 并管理 Tooltip 的测量、定位、presence 与退出生命周期。 */\nfunction TooltipContent(props: TooltipContentProps): ReactElement | null {\n const context = useTooltipContext(\"Tooltip.Content\");\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n const portalContainer =\n isClient && context.triggerElement\n ? (context.triggerElement.closest<HTMLElement>(\"dialog\") ?? document.body)\n : null;\n\n if (!portalContainer || !context.triggerElement) {\n return null;\n }\n\n return createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {context.open ? (\n <TooltipLayer\n key=\"uk-tooltip\"\n contentId={context.contentId}\n triggerElement={context.triggerElement}\n dismiss={context.dismiss}\n {...props}\n />\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n portalContainer,\n );\n}\n\ninterface RegisteredTooltipItem {\n triggerElement: HTMLElement;\n content: ReactNode;\n}\n\ninterface TooltipGroupContextValue {\n open: boolean;\n activeValue: string | null;\n contentId: string;\n activate: (value: string, immediate?: boolean) => void;\n requestClose: () => void;\n dismiss: () => void;\n register: (\n value: string,\n triggerElement: HTMLElement,\n content: ReactNode,\n ) => void;\n unregister: (value: string) => void;\n}\n\nconst TooltipGroupContext = createContext<TooltipGroupContextValue | null>(\n null,\n);\n\nfunction useTooltipGroupContext(component: string): TooltipGroupContextValue {\n const context = useContext(TooltipGroupContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tooltip.Group>`);\n }\n\n return context;\n}\n\nexport interface TooltipGroupProps {\n children: ReactNode;\n /** 组内所有 Tooltip 共用的方向。 */\n side?: TooltipSide;\n /** 组内所有 Tooltip 共用的对齐方式。 */\n align?: TooltipAlign;\n sideOffset?: number;\n collisionPadding?: number;\n avoidCollisions?: boolean;\n /** 刚进入组时延迟多久显示,默认 180ms;组已经打开后切换立即生效。 */\n delayDuration?: number;\n /** 完全离开组内触发器后多久关闭,默认 80ms。 */\n closeDelay?: number;\n contentClassName?: string;\n}\n\nexport interface TooltipItemProps {\n /** 组内唯一值,用于切换共享 Tooltip。 */\n value: string;\n /** 该项激活时显示在共享 Tooltip 中的内容。 */\n content: ReactNode;\n /** 单个可聚焦交互元素。 */\n children: ReactElement;\n}\n\ninterface TooltipGroupLayerProps extends TooltipPositionOptions {\n activeValue: string;\n content: ReactNode;\n contentClassName?: string;\n contentId: string;\n dismiss: () => void;\n triggerElement: HTMLElement;\n}\n\nfunction TooltipGroupLayer({\n activeValue,\n content,\n contentClassName,\n contentId,\n dismiss,\n triggerElement,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n}: TooltipGroupLayerProps): ReactElement {\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useTooltipPosition(triggerElement, floatingRef, {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n });\n useTooltipDismissBehavior(triggerElement, floatingRef, dismiss);\n\n const floatingStyle = {\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n transformOrigin: transformOriginForSide(position?.side ?? side),\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties;\n\n return (\n <motion.div\n ref={floatingRef}\n id={contentId}\n role=\"tooltip\"\n layout={!reduceMotion}\n layoutDependency={activeValue}\n data-side={position?.side ?? side}\n data-align={align}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n className={cx(\n \"uk-tooltip\",\n \"uk-tooltip__surface\",\n \"uk-tooltip--group\",\n contentClassName,\n )}\n style={floatingStyle}\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n transition={\n reduceMotion\n ? { ...REDUCED_MOTION_TRANSITION, layout: { duration: 0 } }\n : TOOLTIP_GROUP_TRANSITION\n }\n >\n <span\n className=\"uk-tooltip__arrow\"\n aria-hidden=\"true\"\n style={\n {\n \"--uk-tooltip-arrow-offset\": `${position?.arrowOffset ?? 0}px`,\n } as CSSProperties\n }\n />\n <motion.div\n key={activeValue}\n className=\"uk-tooltip__content\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : TOOLTIP_TRANSITION\n }\n >\n {content}\n </motion.div>\n </motion.div>\n );\n}\n\n/**\n * 一组共享同一浮动表面的 Tooltip。\n *\n * 首次进入按 delayDuration 显示;已打开后在相邻 Item 间切换会立即更新内容,\n * 并由 Motion layout 连续移动到新触发器的位置。\n */\nfunction TooltipGroup({\n children,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n avoidCollisions = true,\n delayDuration = 180,\n closeDelay = 80,\n contentClassName,\n}: TooltipGroupProps): ReactElement {\n const contentId = useId();\n const [items, setItems] = useState<Map<string, RegisteredTooltipItem>>(\n () => new Map(),\n );\n const [open, setOpen] = useState(false);\n const [activeValue, setActiveValue] = useState<string | null>(null);\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n\n const clearOpenTimer = useCallback(() => {\n if (openTimerRef.current !== null) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n }, []);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current !== null) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const activate = useEventCallback((value: string, immediate = false) => {\n clearOpenTimer();\n clearCloseTimer();\n setActiveValue(value);\n\n if (open) {\n return;\n }\n\n if (immediate || delayDuration <= 0) {\n setOpen(true);\n return;\n }\n\n openTimerRef.current = setTimeout(() => {\n openTimerRef.current = null;\n setOpen(true);\n }, delayDuration);\n });\n\n const requestClose = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (!open) {\n return;\n }\n\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = null;\n setOpen(false);\n }, closeDelay);\n });\n\n const dismiss = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n setOpen(false);\n });\n\n const register = useEventCallback(\n (value: string, triggerElement: HTMLElement, content: ReactNode) => {\n setItems((previous) => {\n const existing = previous.get(value);\n\n if (\n existing?.triggerElement === triggerElement &&\n Object.is(existing.content, content)\n ) {\n return previous;\n }\n\n const next = new Map(previous);\n next.set(value, { triggerElement, content });\n return next;\n });\n },\n );\n\n const unregister = useEventCallback((value: string) => {\n setItems((previous) => {\n if (!previous.has(value)) {\n return previous;\n }\n\n const next = new Map(previous);\n next.delete(value);\n return next;\n });\n });\n\n useEffect(\n () => () => {\n clearOpenTimer();\n clearCloseTimer();\n },\n [clearCloseTimer, clearOpenTimer],\n );\n\n const context = useMemo<TooltipGroupContextValue>(\n () => ({\n open,\n activeValue,\n contentId,\n activate,\n requestClose,\n dismiss,\n register,\n unregister,\n }),\n [\n activate,\n activeValue,\n contentId,\n dismiss,\n open,\n register,\n requestClose,\n unregister,\n ],\n );\n const activeItem = activeValue ? items.get(activeValue) : undefined;\n const isOpen = open && Boolean(activeItem);\n const portalContainer =\n isClient && activeItem\n ? (activeItem.triggerElement.closest<HTMLElement>(\"dialog\") ??\n document.body)\n : null;\n\n return (\n <TooltipGroupContext.Provider value={context}>\n {children}\n {portalContainer && activeItem\n ? createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {isOpen ? (\n <TooltipGroupLayer\n key=\"uk-tooltip-group\"\n activeValue={activeValue ?? \"\"}\n content={activeItem.content}\n contentClassName={contentClassName}\n contentId={contentId}\n dismiss={dismiss}\n triggerElement={activeItem.triggerElement}\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n avoidCollisions={avoidCollisions}\n />\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n portalContainer,\n )\n : null}\n </TooltipGroupContext.Provider>\n );\n}\n\n/** 注册组内触发器与内容,但不改变触发器的 DOM 结构或交互语义。 */\nfunction TooltipItem({\n value,\n content,\n children,\n}: TooltipItemProps): ReactElement {\n const context = useTooltipGroupContext(\"Tooltip.Item\");\n const { register, unregister } = context;\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\n null,\n );\n\n if (!isValidElement(children)) {\n throw new Error(\"<Tooltip.Item> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childRef =\n (childProps.ref as Ref<HTMLElement> | undefined) ??\n (child as unknown as { ref?: Ref<HTMLElement> }).ref;\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childFocus = childProps.onFocus as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childBlur = childProps.onBlur as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childKeyDown = childProps.onKeyDown as\n | ((event: KeyboardEvent<HTMLElement>) => void)\n | undefined;\n const active = context.open && context.activeValue === value;\n const setTriggerRef = useCallback(\n (element: HTMLElement | null) => {\n setRef(childRef, element);\n setTriggerElement(element);\n },\n [childRef, setTriggerElement],\n );\n\n useLayoutEffect(() => {\n if (!triggerElement) {\n return;\n }\n\n register(value, triggerElement, content);\n return () => unregister(value);\n }, [content, register, triggerElement, unregister, value]);\n\n return cloneElement(child, {\n ref: setTriggerRef,\n \"aria-describedby\": active\n ? appendDescription(childProps[\"aria-describedby\"], context.contentId)\n : childProps[\"aria-describedby\"],\n onPointerEnter: composeHandler(childPointerEnter, (event) => {\n context.activate(value, event.pointerType === \"touch\");\n }),\n onPointerLeave: composeHandler(childPointerLeave, (event) => {\n if (event.pointerType !== \"touch\") {\n context.requestClose();\n }\n }),\n onFocus: composeHandler(childFocus, () => {\n context.activate(value);\n }),\n onBlur: composeHandler(childBlur, () => {\n context.requestClose();\n }),\n onKeyDown: composeHandler(childKeyDown, (event) => {\n if (event.key === \"Escape\" && active) {\n event.preventDefault();\n event.stopPropagation();\n context.dismiss();\n }\n }),\n });\n}\n\nexport interface TooltipComponent {\n Root: typeof TooltipRoot;\n Trigger: typeof TooltipTrigger;\n Content: typeof TooltipContent;\n Group: typeof TooltipGroup;\n Item: typeof TooltipItem;\n}\n\n/**\n * 简短说明性浮层。\n *\n * 组合式 API:单个 Tooltip 使用 Root / Trigger / Content;相邻说明使用\n * Group / Item 共享同一个浮动表面。触发器保留原生语义,Content 只承担\n * role=\"tooltip\";需要交互或较长内容时应使用可见说明或 Popover。\n */\nexport const Tooltip: TooltipComponent = {\n Root: TooltipRoot,\n Trigger: TooltipTrigger,\n Content: TooltipContent,\n Group: TooltipGroup,\n Item: TooltipItem,\n};\n"],"names":["cx","values","Button","forwardRef","variant","size","loading","iconOnly","type","className","children","rest","ref","jsxs","Input","inputSize","invalid","ariaInvalid","jsx","EASE_OUT","UI_SPRING","OVERLAY_SPRING","INDICATOR_SPRING","TOOLTIP_TRANSITION","TOOLTIP_GROUP_TRANSITION","REDUCED_MOTION_TRANSITION","Switch","checked","defaultChecked","onCheckedChange","disabled","id","generatedId","useId","inputId","reduceMotion","useReducedMotion","suppressClickRef","useRef","dragRef","current","setCurrent","useControllableState","thumbX","useMotionValue","useEffect","controls","animate","finishDrag","event","drag","first","last","elapsed","velocity","next","delta","sample","motion","TabsContext","createContext","useTabsContext","component","context","useContext","tabId","baseId","value","panelId","TabsRoot","defaultValue","onValueChange","orientation","setValue","useMemo","TabsList","onKeyDown","trigger","triggers","index","nextKey","previousKey","nextIndex","nextTrigger","TabsTrigger","onClick","selected","TabsContent","Tabs","DialogContext","subscribeToNothing","getClientSnapshot","getServerSnapshot","useDialogContext","composeHandler","childHandler","handler","DialogRoot","open","defaultOpen","onOpenChange","hasTitle","setHasTitle","useState","hasDescription","setHasDescription","setOpen","DialogTrigger","child","childOnClick","cloneElement","DialogClose","label","isValidElement","DialogHeader","DialogTitle","DialogDescription","DialogBody","DialogFooter","DialogLayer","requestClose","contentId","titleId","descriptionId","closeOnBackdropClick","closeOnEscape","initialFocusRef","returnFocusRef","ariaLabel","ariaLabelledBy","ariaDescribedBy","dialogRef","openerRef","isPresent","useIsPresent","useLockBodyScroll","useLayoutEffect","dialog","useFocusTrap","reopen","onClose","onCancel","DialogContent","useEventCallback","useSyncExternalStore","createPortal","MotionConfig","AnimatePresence","LegacyDialog","title","description","footer","closeLabel","showCloseButton","Dialog","TooltipContext","useTooltipContext","setRef","appendDescription","existing","ids","TooltipRoot","delayDuration","closeDelay","triggerElement","setTriggerElement","openTimerRef","closeTimerRef","clearOpenTimer","useCallback","clearCloseTimer","requestOpen","immediate","dismiss","TooltipTrigger","childProps","childRef","childPointerEnter","childPointerLeave","childFocus","childBlur","childKeyDown","setTriggerRef","element","clamp","min","max","oppositeSide","side","mainAxisRoom","viewportWidth","viewportHeight","padding","fitsOnSide","tooltip","offset","calculateTooltipPosition","align","sideOffset","collisionPadding","avoidCollisions","resolvedSide","opposite","oppositeFits","preferredRoom","oppositeRoom","triggerCenterX","triggerCenterY","x","y","arrowMargin","arrowOffset","useTooltipPosition","floatingRef","position","setPosition","floating","updatePosition","triggerRect","tooltipRect","resizeObserver","useTooltipDismissBehavior","onPointerDown","target","onVisibilityChange","transformOriginForSide","TooltipLayer","style","transformOrigin","wrapperStyle","TooltipContent","props","portalContainer","TooltipGroupContext","useTooltipGroupContext","TooltipGroupLayer","activeValue","content","contentClassName","floatingStyle","TooltipGroup","items","setItems","setActiveValue","isClient","activate","register","previous","unregister","activeItem","isOpen","TooltipItem","active","Tooltip"],"mappings":"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"}
package/dist/motion.d.ts CHANGED
@@ -4,4 +4,11 @@ export declare const EASE_IN_OUT: readonly [0.77, 0, 0.175, 1];
4
4
  export declare const UI_SPRING: Transition;
5
5
  export declare const OVERLAY_SPRING: Transition;
6
6
  export declare const INDICATOR_SPRING: Transition;
7
+ /** Frequent explanatory surface: near-immediate presence without spring settle. */
8
+ export declare const TOOLTIP_TRANSITION: Transition;
9
+ /**
10
+ * Grouped tooltips move between nearby triggers. The short layout spring keeps
11
+ * spatial continuity without delaying the content switch.
12
+ */
13
+ export declare const TOOLTIP_GROUP_TRANSITION: Transition;
7
14
  export declare const REDUCED_MOTION_TRANSITION: Transition;
package/dist/styles.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),r=`@layer uk.tokens {
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),a=`@layer uk.tokens {
2
2
  :root {
3
3
  color-scheme: light dark;
4
4
 
@@ -66,6 +66,7 @@
66
66
  --uk-scale-press: 0.97;
67
67
 
68
68
  --uk-z-dialog: 1000;
69
+ --uk-z-tooltip: 1100;
69
70
  }
70
71
 
71
72
  @media (prefers-reduced-motion: reduce) {
@@ -578,5 +579,95 @@
578
579
  backdrop-filter: none;
579
580
  }
580
581
  }
581
- }`;function t({nonce:n}){return a.jsx("style",{"data-seam-ui":"",nonce:n,children:r})}exports.SeamStyles=t;
582
+ }
583
+
584
+ @layer uk.components {
585
+ .uk-tooltip {
586
+ position: fixed;
587
+ z-index: var(--uk-z-tooltip);
588
+ pointer-events: none;
589
+ }
590
+
591
+ .uk-tooltip__surface {
592
+ position: relative;
593
+ width: max-content;
594
+ max-width: min(
595
+ var(--uk-tooltip-max-width, 20rem),
596
+ calc(100vw - var(--uk-space-4))
597
+ );
598
+ padding: var(--uk-space-2) var(--uk-space-3);
599
+ border: 1px solid var(--uk-tooltip-border, var(--uk-border-strong));
600
+ border-radius: var(--uk-tooltip-radius, var(--uk-radius-sm));
601
+ background: var(--uk-tooltip-background, var(--uk-surface-raised));
602
+ color: var(--uk-tooltip-text, var(--uk-text));
603
+ box-shadow: var(--uk-shadow-md);
604
+ font-family: var(--uk-font-sans);
605
+ font-size: var(--uk-text-xs);
606
+ font-weight: 500;
607
+ line-height: 1.45;
608
+ overflow-wrap: anywhere;
609
+ pointer-events: none;
610
+ user-select: none;
611
+ }
612
+
613
+ .uk-tooltip--group {
614
+ position: fixed;
615
+ }
616
+
617
+ .uk-tooltip__content {
618
+ display: block;
619
+ }
620
+
621
+ .uk-tooltip__arrow {
622
+ position: absolute;
623
+ width: 8px;
624
+ height: 8px;
625
+ border: 1px solid var(--uk-tooltip-border, var(--uk-border-strong));
626
+ background: var(--uk-tooltip-background, var(--uk-surface-raised));
627
+ transform: rotate(45deg);
628
+ pointer-events: none;
629
+ }
630
+
631
+ .uk-tooltip[data-side="top"] .uk-tooltip__arrow {
632
+ bottom: -5px;
633
+ left: var(--uk-tooltip-arrow-offset);
634
+ border-top: 0;
635
+ border-left: 0;
636
+ translate: -50% 0;
637
+ }
638
+
639
+ .uk-tooltip[data-side="bottom"] .uk-tooltip__arrow {
640
+ top: -5px;
641
+ left: var(--uk-tooltip-arrow-offset);
642
+ border-right: 0;
643
+ border-bottom: 0;
644
+ translate: -50% 0;
645
+ }
646
+
647
+ .uk-tooltip[data-side="left"] .uk-tooltip__arrow {
648
+ top: var(--uk-tooltip-arrow-offset);
649
+ right: -5px;
650
+ border-bottom: 0;
651
+ border-left: 0;
652
+ translate: 0 -50%;
653
+ }
654
+
655
+ .uk-tooltip[data-side="right"] .uk-tooltip__arrow {
656
+ top: var(--uk-tooltip-arrow-offset);
657
+ left: -5px;
658
+ border-top: 0;
659
+ border-right: 0;
660
+ translate: 0 -50%;
661
+ }
662
+
663
+ @media (prefers-contrast: more) {
664
+ .uk-tooltip__surface {
665
+ border-color: currentColor;
666
+ }
667
+
668
+ .uk-tooltip__arrow {
669
+ border-color: currentColor;
670
+ }
671
+ }
672
+ }`;function t({nonce:n}){return r.jsx("style",{"data-seam-ui":"",nonce:n,children:a})}exports.SeamStyles=t;
582
673
  //# sourceMappingURL=styles.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.cjs","sources":["../src/styles.generated.ts","../src/SeamStyles.tsx"],"sourcesContent":["// Generated by scripts/generate-styles.mjs. Do not edit.\nexport const UI_CSS: string =\n '@layer uk.tokens {\\n :root {\\n color-scheme: light dark;\\n\\n --uk-bg: light-dark(#ffffff, #0b0d12);\\n --uk-surface: light-dark(#f6f7fb, #141821);\\n --uk-surface-raised: light-dark(#ffffff, #1a1f2b);\\n --uk-text: light-dark(#0f172a, #e7eaf0);\\n --uk-text-muted: light-dark(#64748b, #98a2b3);\\n --uk-border: light-dark(#e2e8f0, #2a3141);\\n --uk-border-strong: light-dark(#cbd5e1, #3b4457);\\n\\n --uk-primary: light-dark(#4338ca, #a5b4fc);\\n --uk-primary-solid: light-dark(#4338ca, #4f46e5);\\n --uk-primary-solid-hover: light-dark(#3730a3, #6366f1);\\n --uk-primary-contrast: #ffffff;\\n --uk-danger: light-dark(#b91c1c, #fca5a5);\\n --uk-danger-solid: light-dark(#b91c1c, #b91c1c);\\n --uk-danger-solid-hover: light-dark(#991b1b, #991b1b);\\n --uk-danger-contrast: #ffffff;\\n --uk-success: light-dark(#15803d, #86efac);\\n --uk-warning: light-dark(#b45309, #fcd34d);\\n --uk-info: light-dark(#0369a1, #7dd3fc);\\n\\n --uk-focus-ring: light-dark(#6366f1, #a5b4fc);\\n --uk-overlay: light-dark(rgb(15 23 42 / 0.45), rgb(0 0 0 / 0.65));\\n\\n --uk-space-1: 0.25rem;\\n --uk-space-2: 0.5rem;\\n --uk-space-3: 0.75rem;\\n --uk-space-4: 1rem;\\n --uk-space-5: 1.25rem;\\n --uk-space-6: 1.5rem;\\n --uk-space-8: 2rem;\\n\\n --uk-radius-sm: 0.375rem;\\n --uk-radius-md: 0.625rem;\\n --uk-radius-lg: 0.875rem;\\n --uk-radius-full: 9999px;\\n\\n --uk-font-sans:\\n -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\",\\n \"Hiragino Sans GB\", \"Microsoft YaHei\", sans-serif;\\n --uk-font-mono: ui-monospace, \"SFMono-Regular\", Consolas, monospace;\\n\\n --uk-text-xs: 0.75rem;\\n --uk-text-sm: 0.8125rem;\\n --uk-text-md: 0.875rem;\\n --uk-text-lg: 1rem;\\n --uk-text-xl: 1.125rem;\\n\\n --uk-shadow-sm: 0 1px 2px rgb(15 23 42 / 0.08);\\n --uk-shadow-md: 0 6px 16px -6px rgb(15 23 42 / 0.24);\\n --uk-shadow-lg:\\n 0 24px 48px -16px rgb(15 23 42 / 0.32), 0 2px 6px rgb(15 23 42 / 0.08);\\n\\n --uk-duration-fast: 120ms;\\n --uk-duration-base: 160ms;\\n --uk-duration-control: 200ms;\\n --uk-duration-overlay: 240ms;\\n --uk-duration-exit: 180ms;\\n --uk-ease-out: cubic-bezier(0.23, 1, 0.32, 1);\\n --uk-ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);\\n --uk-ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);\\n --uk-transition: var(--uk-duration-base) var(--uk-ease-out);\\n --uk-scale-press: 0.97;\\n\\n --uk-z-dialog: 1000;\\n }\\n\\n @media (prefers-reduced-motion: reduce) {\\n :root {\\n --uk-duration-fast: 100ms;\\n --uk-duration-base: 100ms;\\n --uk-duration-control: 100ms;\\n --uk-duration-overlay: 100ms;\\n --uk-duration-exit: 100ms;\\n --uk-transition: 100ms ease;\\n }\\n }\\n}\\n\\n@layer uk.components {\\n .uk-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--uk-space-2);\\n border: 1px solid transparent;\\n border-radius: var(--uk-button-radius, var(--uk-radius-md));\\n font-family: var(--uk-font-sans);\\n font-weight: var(--uk-button-font-weight, 600);\\n line-height: 1;\\n white-space: nowrap;\\n cursor: pointer;\\n user-select: none;\\n text-decoration: none;\\n transition:\\n background-color var(--uk-transition),\\n border-color var(--uk-transition),\\n color var(--uk-transition),\\n box-shadow var(--uk-transition),\\n transform var(--uk-duration-fast) var(--uk-ease-out);\\n }\\n\\n .uk-button:focus-visible {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: 2px;\\n }\\n\\n .uk-button:active:not(:disabled) {\\n transform: scale(var(--uk-scale-press));\\n }\\n\\n .uk-button:disabled,\\n .uk-button[data-loading=\"true\"] {\\n cursor: not-allowed;\\n opacity: 0.6;\\n }\\n\\n .uk-button[data-size=\"sm\"] {\\n height: var(--uk-button-height-sm, 2rem);\\n padding: 0 var(--uk-space-3);\\n font-size: var(--uk-text-sm);\\n }\\n\\n .uk-button[data-size=\"md\"] {\\n height: var(--uk-button-height-md, 2.5rem);\\n padding: 0 var(--uk-space-4);\\n font-size: var(--uk-text-md);\\n }\\n\\n .uk-button[data-size=\"lg\"] {\\n height: var(--uk-button-height-lg, 3rem);\\n padding: 0 var(--uk-space-5);\\n font-size: var(--uk-text-lg);\\n }\\n\\n .uk-button[data-icon-only=\"true\"] {\\n aspect-ratio: 1;\\n padding: 0;\\n }\\n\\n .uk-button[data-variant=\"primary\"] {\\n background: var(--uk-primary-solid);\\n color: var(--uk-primary-contrast);\\n }\\n\\n .uk-button[data-variant=\"secondary\"] {\\n background: var(--uk-surface);\\n border-color: var(--uk-border);\\n color: var(--uk-text);\\n }\\n\\n .uk-button[data-variant=\"outline\"] {\\n background: transparent;\\n border-color: var(--uk-border-strong);\\n color: var(--uk-text);\\n }\\n\\n .uk-button[data-variant=\"ghost\"] {\\n background: transparent;\\n color: var(--uk-text);\\n }\\n\\n .uk-button[data-variant=\"danger\"] {\\n background: var(--uk-danger-solid);\\n color: var(--uk-danger-contrast);\\n }\\n\\n @media (hover: hover) and (pointer: fine) {\\n .uk-button[data-variant=\"primary\"]:hover:not(:disabled) {\\n background: var(--uk-primary-solid-hover);\\n }\\n\\n .uk-button[data-variant=\"secondary\"]:hover:not(:disabled) {\\n border-color: var(--uk-border-strong);\\n }\\n\\n .uk-button[data-variant=\"outline\"]:hover:not(:disabled) {\\n background: var(--uk-surface);\\n }\\n\\n .uk-button[data-variant=\"ghost\"]:hover:not(:disabled) {\\n background: var(--uk-surface);\\n }\\n\\n .uk-button[data-variant=\"danger\"]:hover:not(:disabled) {\\n background: var(--uk-danger-solid-hover);\\n }\\n }\\n\\n .uk-button__spinner {\\n width: 1em;\\n height: 1em;\\n flex: none;\\n border: 2px solid currentColor;\\n border-right-color: transparent;\\n border-radius: 50%;\\n animation: uk-button-spin 0.6s linear infinite;\\n }\\n\\n @keyframes uk-button-spin {\\n to {\\n transform: rotate(360deg);\\n }\\n }\\n\\n @media (prefers-reduced-motion: reduce) {\\n .uk-button:active:not(:disabled) {\\n transform: none;\\n }\\n\\n .uk-button__spinner {\\n animation-duration: 1.6s;\\n }\\n }\\n}\\n\\n@layer uk.components {\\n .uk-input {\\n width: 100%;\\n border: 1px solid var(--uk-border-strong);\\n border-radius: var(--uk-input-radius, var(--uk-radius-md));\\n background: var(--uk-bg);\\n color: var(--uk-text);\\n font-family: var(--uk-font-sans);\\n transition:\\n border-color var(--uk-transition),\\n box-shadow var(--uk-transition);\\n }\\n\\n .uk-input[data-size=\"sm\"] {\\n height: 2rem;\\n padding: 0 var(--uk-space-3);\\n font-size: var(--uk-text-sm);\\n }\\n\\n .uk-input[data-size=\"md\"] {\\n height: 2.5rem;\\n padding: 0 var(--uk-space-3);\\n font-size: var(--uk-text-md);\\n }\\n\\n .uk-input[data-size=\"lg\"] {\\n height: 3rem;\\n padding: 0 var(--uk-space-4);\\n font-size: var(--uk-text-lg);\\n }\\n\\n .uk-input::placeholder {\\n color: var(--uk-text-muted);\\n }\\n\\n .uk-input:hover:not(:disabled) {\\n border-color: var(--uk-border-strong);\\n }\\n\\n .uk-input:focus-visible {\\n outline: none;\\n border-color: var(--uk-primary);\\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--uk-primary) 24%, transparent);\\n }\\n\\n .uk-input:disabled {\\n cursor: not-allowed;\\n opacity: 0.6;\\n background: var(--uk-surface);\\n }\\n\\n .uk-input[aria-invalid=\"true\"] {\\n border-color: var(--uk-danger);\\n }\\n\\n .uk-input[aria-invalid=\"true\"]:focus-visible {\\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--uk-danger) 24%, transparent);\\n }\\n}\\n\\n@layer uk.components {\\n .uk-switch {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--uk-space-3);\\n color: var(--uk-text);\\n font-family: var(--uk-font-sans);\\n font-size: var(--uk-text-md);\\n cursor: pointer;\\n user-select: none;\\n }\\n\\n .uk-switch__input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n margin: -1px;\\n padding: 0;\\n overflow: hidden;\\n clip: rect(0 0 0 0);\\n white-space: nowrap;\\n border: 0;\\n }\\n\\n .uk-switch__track {\\n position: relative;\\n flex: none;\\n width: 2.5rem;\\n height: 1.5rem;\\n border-radius: var(--uk-radius-full);\\n background: var(--uk-switch-track, var(--uk-border-strong));\\n cursor: pointer;\\n touch-action: none;\\n user-select: none;\\n transition: background-color var(--uk-transition);\\n }\\n\\n .uk-switch__thumb {\\n position: absolute;\\n top: 2px;\\n left: 2px;\\n width: 1.25rem;\\n height: 1.25rem;\\n border-radius: 50%;\\n background: var(--uk-switch-thumb, #ffffff);\\n box-shadow: var(--uk-shadow-sm);\\n }\\n\\n .uk-switch__input:checked + .uk-switch__track {\\n background: var(--uk-switch-track-checked, var(--uk-primary-solid));\\n }\\n\\n .uk-switch__input:focus-visible + .uk-switch__track {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: 2px;\\n }\\n\\n .uk-switch[data-disabled=\"true\"] {\\n cursor: not-allowed;\\n opacity: 0.6;\\n }\\n\\n .uk-switch[data-disabled=\"true\"] .uk-switch__track {\\n cursor: not-allowed;\\n }\\n}\\n\\n@layer uk.components {\\n .uk-tabs {\\n font-family: var(--uk-font-sans);\\n color: var(--uk-text);\\n }\\n\\n .uk-tabs__list {\\n display: flex;\\n gap: var(--uk-space-1);\\n border-bottom: 1px solid var(--uk-border);\\n }\\n\\n .uk-tabs__trigger {\\n position: relative;\\n appearance: none;\\n border: 0;\\n background: transparent;\\n color: var(--uk-text-muted);\\n font: inherit;\\n font-size: var(--uk-text-md);\\n font-weight: 500;\\n padding: var(--uk-space-2) var(--uk-space-3);\\n border-radius: var(--uk-radius-sm) var(--uk-radius-sm) 0 0;\\n cursor: pointer;\\n transition:\\n color var(--uk-transition),\\n background-color var(--uk-transition);\\n }\\n\\n .uk-tabs__trigger:hover:not(:disabled) {\\n color: var(--uk-text);\\n background: var(--uk-surface);\\n }\\n\\n .uk-tabs__trigger[data-state=\"active\"] {\\n color: var(--uk-primary);\\n }\\n\\n .uk-tabs__indicator {\\n position: absolute;\\n right: var(--uk-space-2);\\n bottom: -1px;\\n left: var(--uk-space-2);\\n height: var(--uk-tabs-indicator-size, 2px);\\n border-radius: 2px;\\n background: var(--uk-tabs-indicator, var(--uk-primary));\\n pointer-events: none;\\n }\\n\\n .uk-tabs__trigger:focus-visible {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: -2px;\\n }\\n\\n .uk-tabs__trigger:disabled {\\n cursor: not-allowed;\\n opacity: 0.5;\\n }\\n\\n .uk-tabs__panel {\\n padding-top: var(--uk-space-4);\\n color: var(--uk-text);\\n }\\n\\n .uk-tabs__panel:focus-visible {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: 2px;\\n border-radius: var(--uk-radius-sm);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] {\\n display: flex;\\n gap: var(--uk-space-4);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__list {\\n flex-direction: column;\\n border-bottom: 0;\\n border-inline-end: 1px solid var(--uk-border);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__trigger {\\n text-align: start;\\n border-radius: var(--uk-radius-sm) 0 0 var(--uk-radius-sm);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__indicator {\\n top: var(--uk-space-2);\\n right: -1px;\\n bottom: var(--uk-space-2);\\n left: auto;\\n width: var(--uk-tabs-indicator-size, 2px);\\n height: auto;\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__panel {\\n flex: 1;\\n padding-top: 0;\\n }\\n}\\n\\n@layer uk.components {\\n .uk-dialog {\\n width: min(var(--uk-dialog-width, 32rem), calc(100vw - var(--uk-space-8)));\\n max-width: none;\\n max-height: none;\\n margin: auto;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: var(--uk-text);\\n z-index: var(--uk-z-dialog);\\n }\\n\\n .uk-dialog::backdrop {\\n background: var(--uk-overlay);\\n backdrop-filter: blur(8px) saturate(125%);\\n opacity: 1;\\n transition: opacity var(--uk-duration-exit) var(--uk-ease-out);\\n }\\n\\n .uk-dialog[data-state=\"closed\"]::backdrop {\\n opacity: 0;\\n transition-delay: 220ms;\\n }\\n\\n .uk-dialog[data-state=\"closed\"] {\\n pointer-events: none;\\n }\\n\\n @starting-style {\\n .uk-dialog[data-state=\"open\"]::backdrop {\\n opacity: 0;\\n }\\n }\\n\\n .uk-dialog__panel {\\n display: flex;\\n flex-direction: column;\\n max-height: min(85vh, 42rem);\\n border: 1px solid var(--uk-border);\\n border-radius: var(--uk-dialog-radius, var(--uk-radius-lg));\\n background: var(--uk-surface-raised);\\n box-shadow: var(--uk-shadow-lg);\\n font-family: var(--uk-font-sans);\\n overflow: hidden;\\n transform-origin: center;\\n }\\n\\n .uk-dialog__header {\\n display: grid;\\n grid-template-columns: minmax(0, 1fr) auto;\\n align-items: flex-start;\\n column-gap: var(--uk-space-4);\\n row-gap: 0;\\n padding: var(--uk-space-5);\\n border-bottom: 1px solid var(--uk-border);\\n }\\n\\n .uk-dialog__header > .uk-dialog__title,\\n .uk-dialog__header > .uk-dialog__description {\\n grid-column: 1;\\n }\\n\\n .uk-dialog__header > .uk-dialog__description {\\n grid-row: 2;\\n }\\n\\n .uk-dialog__header > .uk-dialog__close {\\n grid-column: 2;\\n grid-row: 1 / span 2;\\n }\\n\\n .uk-dialog__heading {\\n flex: 1;\\n min-width: 0;\\n }\\n\\n .uk-dialog__title {\\n margin: 0;\\n color: var(--uk-text);\\n font-size: var(--uk-text-xl);\\n font-weight: 600;\\n line-height: 1.3;\\n }\\n\\n .uk-dialog__description {\\n margin: var(--uk-space-1) 0 0;\\n color: var(--uk-text-muted);\\n font-size: var(--uk-text-md);\\n line-height: 1.5;\\n }\\n\\n .uk-dialog__close {\\n flex: none;\\n }\\n\\n .uk-dialog__body {\\n padding: var(--uk-space-5);\\n overflow-y: auto;\\n font-size: var(--uk-text-md);\\n line-height: 1.6;\\n }\\n\\n .uk-dialog__footer {\\n display: flex;\\n justify-content: flex-end;\\n gap: var(--uk-space-2);\\n padding: var(--uk-space-4) var(--uk-space-5);\\n border-top: 1px solid var(--uk-border);\\n background: transparent;\\n }\\n\\n @media (prefers-reduced-motion: reduce) {\\n .uk-dialog::backdrop {\\n transition-duration: var(--uk-duration-fast);\\n transition-timing-function: ease;\\n transition-delay: 0ms;\\n }\\n }\\n\\n @media (prefers-reduced-transparency: reduce) {\\n .uk-dialog::backdrop {\\n backdrop-filter: none;\\n }\\n }\\n\\n @media (prefers-contrast: more) {\\n .uk-dialog__panel {\\n border-color: var(--uk-text-muted);\\n background: var(--uk-surface-raised);\\n backdrop-filter: none;\\n }\\n }\\n}';\n","import type { ReactElement } from \"react\";\nimport { UI_CSS } from \"./styles.generated\";\n\nexport interface SeamStylesProps {\n /** 与 Content Security Policy 的 style-src nonce 保持一致。 */\n nonce?: string;\n}\n\n/**\n * JSR 不支持 CSS package exports,因此将样式以内联 style 标签提供。\n *\n * 在应用根部渲染一次即可。使用 npm 构建时仍可继续导入 styles.css。\n */\nexport function SeamStyles({ nonce }: SeamStylesProps): ReactElement {\n return (\n <style data-seam-ui=\"\" nonce={nonce}>\n {UI_CSS}\n </style>\n );\n}\n"],"names":["UI_CSS","SeamStyles","nonce","jsx"],"mappings":"qHACaA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCWK,SAASC,EAAW,CAAE,MAAAC,GAAwC,CACnE,OACEC,EAAAA,IAAC,QAAA,CAAM,eAAa,GAAG,MAAAD,EACpB,SAAAF,EACH,CAEJ"}
1
+ {"version":3,"file":"styles.cjs","sources":["../src/styles.generated.ts","../src/SeamStyles.tsx"],"sourcesContent":["// Generated by scripts/generate-styles.mjs. Do not edit.\nexport const UI_CSS: string =\n '@layer uk.tokens {\\n :root {\\n color-scheme: light dark;\\n\\n --uk-bg: light-dark(#ffffff, #0b0d12);\\n --uk-surface: light-dark(#f6f7fb, #141821);\\n --uk-surface-raised: light-dark(#ffffff, #1a1f2b);\\n --uk-text: light-dark(#0f172a, #e7eaf0);\\n --uk-text-muted: light-dark(#64748b, #98a2b3);\\n --uk-border: light-dark(#e2e8f0, #2a3141);\\n --uk-border-strong: light-dark(#cbd5e1, #3b4457);\\n\\n --uk-primary: light-dark(#4338ca, #a5b4fc);\\n --uk-primary-solid: light-dark(#4338ca, #4f46e5);\\n --uk-primary-solid-hover: light-dark(#3730a3, #6366f1);\\n --uk-primary-contrast: #ffffff;\\n --uk-danger: light-dark(#b91c1c, #fca5a5);\\n --uk-danger-solid: light-dark(#b91c1c, #b91c1c);\\n --uk-danger-solid-hover: light-dark(#991b1b, #991b1b);\\n --uk-danger-contrast: #ffffff;\\n --uk-success: light-dark(#15803d, #86efac);\\n --uk-warning: light-dark(#b45309, #fcd34d);\\n --uk-info: light-dark(#0369a1, #7dd3fc);\\n\\n --uk-focus-ring: light-dark(#6366f1, #a5b4fc);\\n --uk-overlay: light-dark(rgb(15 23 42 / 0.45), rgb(0 0 0 / 0.65));\\n\\n --uk-space-1: 0.25rem;\\n --uk-space-2: 0.5rem;\\n --uk-space-3: 0.75rem;\\n --uk-space-4: 1rem;\\n --uk-space-5: 1.25rem;\\n --uk-space-6: 1.5rem;\\n --uk-space-8: 2rem;\\n\\n --uk-radius-sm: 0.375rem;\\n --uk-radius-md: 0.625rem;\\n --uk-radius-lg: 0.875rem;\\n --uk-radius-full: 9999px;\\n\\n --uk-font-sans:\\n -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\",\\n \"Hiragino Sans GB\", \"Microsoft YaHei\", sans-serif;\\n --uk-font-mono: ui-monospace, \"SFMono-Regular\", Consolas, monospace;\\n\\n --uk-text-xs: 0.75rem;\\n --uk-text-sm: 0.8125rem;\\n --uk-text-md: 0.875rem;\\n --uk-text-lg: 1rem;\\n --uk-text-xl: 1.125rem;\\n\\n --uk-shadow-sm: 0 1px 2px rgb(15 23 42 / 0.08);\\n --uk-shadow-md: 0 6px 16px -6px rgb(15 23 42 / 0.24);\\n --uk-shadow-lg:\\n 0 24px 48px -16px rgb(15 23 42 / 0.32), 0 2px 6px rgb(15 23 42 / 0.08);\\n\\n --uk-duration-fast: 120ms;\\n --uk-duration-base: 160ms;\\n --uk-duration-control: 200ms;\\n --uk-duration-overlay: 240ms;\\n --uk-duration-exit: 180ms;\\n --uk-ease-out: cubic-bezier(0.23, 1, 0.32, 1);\\n --uk-ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);\\n --uk-ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);\\n --uk-transition: var(--uk-duration-base) var(--uk-ease-out);\\n --uk-scale-press: 0.97;\\n\\n --uk-z-dialog: 1000;\\n --uk-z-tooltip: 1100;\\n }\\n\\n @media (prefers-reduced-motion: reduce) {\\n :root {\\n --uk-duration-fast: 100ms;\\n --uk-duration-base: 100ms;\\n --uk-duration-control: 100ms;\\n --uk-duration-overlay: 100ms;\\n --uk-duration-exit: 100ms;\\n --uk-transition: 100ms ease;\\n }\\n }\\n}\\n\\n@layer uk.components {\\n .uk-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: var(--uk-space-2);\\n border: 1px solid transparent;\\n border-radius: var(--uk-button-radius, var(--uk-radius-md));\\n font-family: var(--uk-font-sans);\\n font-weight: var(--uk-button-font-weight, 600);\\n line-height: 1;\\n white-space: nowrap;\\n cursor: pointer;\\n user-select: none;\\n text-decoration: none;\\n transition:\\n background-color var(--uk-transition),\\n border-color var(--uk-transition),\\n color var(--uk-transition),\\n box-shadow var(--uk-transition),\\n transform var(--uk-duration-fast) var(--uk-ease-out);\\n }\\n\\n .uk-button:focus-visible {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: 2px;\\n }\\n\\n .uk-button:active:not(:disabled) {\\n transform: scale(var(--uk-scale-press));\\n }\\n\\n .uk-button:disabled,\\n .uk-button[data-loading=\"true\"] {\\n cursor: not-allowed;\\n opacity: 0.6;\\n }\\n\\n .uk-button[data-size=\"sm\"] {\\n height: var(--uk-button-height-sm, 2rem);\\n padding: 0 var(--uk-space-3);\\n font-size: var(--uk-text-sm);\\n }\\n\\n .uk-button[data-size=\"md\"] {\\n height: var(--uk-button-height-md, 2.5rem);\\n padding: 0 var(--uk-space-4);\\n font-size: var(--uk-text-md);\\n }\\n\\n .uk-button[data-size=\"lg\"] {\\n height: var(--uk-button-height-lg, 3rem);\\n padding: 0 var(--uk-space-5);\\n font-size: var(--uk-text-lg);\\n }\\n\\n .uk-button[data-icon-only=\"true\"] {\\n aspect-ratio: 1;\\n padding: 0;\\n }\\n\\n .uk-button[data-variant=\"primary\"] {\\n background: var(--uk-primary-solid);\\n color: var(--uk-primary-contrast);\\n }\\n\\n .uk-button[data-variant=\"secondary\"] {\\n background: var(--uk-surface);\\n border-color: var(--uk-border);\\n color: var(--uk-text);\\n }\\n\\n .uk-button[data-variant=\"outline\"] {\\n background: transparent;\\n border-color: var(--uk-border-strong);\\n color: var(--uk-text);\\n }\\n\\n .uk-button[data-variant=\"ghost\"] {\\n background: transparent;\\n color: var(--uk-text);\\n }\\n\\n .uk-button[data-variant=\"danger\"] {\\n background: var(--uk-danger-solid);\\n color: var(--uk-danger-contrast);\\n }\\n\\n @media (hover: hover) and (pointer: fine) {\\n .uk-button[data-variant=\"primary\"]:hover:not(:disabled) {\\n background: var(--uk-primary-solid-hover);\\n }\\n\\n .uk-button[data-variant=\"secondary\"]:hover:not(:disabled) {\\n border-color: var(--uk-border-strong);\\n }\\n\\n .uk-button[data-variant=\"outline\"]:hover:not(:disabled) {\\n background: var(--uk-surface);\\n }\\n\\n .uk-button[data-variant=\"ghost\"]:hover:not(:disabled) {\\n background: var(--uk-surface);\\n }\\n\\n .uk-button[data-variant=\"danger\"]:hover:not(:disabled) {\\n background: var(--uk-danger-solid-hover);\\n }\\n }\\n\\n .uk-button__spinner {\\n width: 1em;\\n height: 1em;\\n flex: none;\\n border: 2px solid currentColor;\\n border-right-color: transparent;\\n border-radius: 50%;\\n animation: uk-button-spin 0.6s linear infinite;\\n }\\n\\n @keyframes uk-button-spin {\\n to {\\n transform: rotate(360deg);\\n }\\n }\\n\\n @media (prefers-reduced-motion: reduce) {\\n .uk-button:active:not(:disabled) {\\n transform: none;\\n }\\n\\n .uk-button__spinner {\\n animation-duration: 1.6s;\\n }\\n }\\n}\\n\\n@layer uk.components {\\n .uk-input {\\n width: 100%;\\n border: 1px solid var(--uk-border-strong);\\n border-radius: var(--uk-input-radius, var(--uk-radius-md));\\n background: var(--uk-bg);\\n color: var(--uk-text);\\n font-family: var(--uk-font-sans);\\n transition:\\n border-color var(--uk-transition),\\n box-shadow var(--uk-transition);\\n }\\n\\n .uk-input[data-size=\"sm\"] {\\n height: 2rem;\\n padding: 0 var(--uk-space-3);\\n font-size: var(--uk-text-sm);\\n }\\n\\n .uk-input[data-size=\"md\"] {\\n height: 2.5rem;\\n padding: 0 var(--uk-space-3);\\n font-size: var(--uk-text-md);\\n }\\n\\n .uk-input[data-size=\"lg\"] {\\n height: 3rem;\\n padding: 0 var(--uk-space-4);\\n font-size: var(--uk-text-lg);\\n }\\n\\n .uk-input::placeholder {\\n color: var(--uk-text-muted);\\n }\\n\\n .uk-input:hover:not(:disabled) {\\n border-color: var(--uk-border-strong);\\n }\\n\\n .uk-input:focus-visible {\\n outline: none;\\n border-color: var(--uk-primary);\\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--uk-primary) 24%, transparent);\\n }\\n\\n .uk-input:disabled {\\n cursor: not-allowed;\\n opacity: 0.6;\\n background: var(--uk-surface);\\n }\\n\\n .uk-input[aria-invalid=\"true\"] {\\n border-color: var(--uk-danger);\\n }\\n\\n .uk-input[aria-invalid=\"true\"]:focus-visible {\\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--uk-danger) 24%, transparent);\\n }\\n}\\n\\n@layer uk.components {\\n .uk-switch {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--uk-space-3);\\n color: var(--uk-text);\\n font-family: var(--uk-font-sans);\\n font-size: var(--uk-text-md);\\n cursor: pointer;\\n user-select: none;\\n }\\n\\n .uk-switch__input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n margin: -1px;\\n padding: 0;\\n overflow: hidden;\\n clip: rect(0 0 0 0);\\n white-space: nowrap;\\n border: 0;\\n }\\n\\n .uk-switch__track {\\n position: relative;\\n flex: none;\\n width: 2.5rem;\\n height: 1.5rem;\\n border-radius: var(--uk-radius-full);\\n background: var(--uk-switch-track, var(--uk-border-strong));\\n cursor: pointer;\\n touch-action: none;\\n user-select: none;\\n transition: background-color var(--uk-transition);\\n }\\n\\n .uk-switch__thumb {\\n position: absolute;\\n top: 2px;\\n left: 2px;\\n width: 1.25rem;\\n height: 1.25rem;\\n border-radius: 50%;\\n background: var(--uk-switch-thumb, #ffffff);\\n box-shadow: var(--uk-shadow-sm);\\n }\\n\\n .uk-switch__input:checked + .uk-switch__track {\\n background: var(--uk-switch-track-checked, var(--uk-primary-solid));\\n }\\n\\n .uk-switch__input:focus-visible + .uk-switch__track {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: 2px;\\n }\\n\\n .uk-switch[data-disabled=\"true\"] {\\n cursor: not-allowed;\\n opacity: 0.6;\\n }\\n\\n .uk-switch[data-disabled=\"true\"] .uk-switch__track {\\n cursor: not-allowed;\\n }\\n}\\n\\n@layer uk.components {\\n .uk-tabs {\\n font-family: var(--uk-font-sans);\\n color: var(--uk-text);\\n }\\n\\n .uk-tabs__list {\\n display: flex;\\n gap: var(--uk-space-1);\\n border-bottom: 1px solid var(--uk-border);\\n }\\n\\n .uk-tabs__trigger {\\n position: relative;\\n appearance: none;\\n border: 0;\\n background: transparent;\\n color: var(--uk-text-muted);\\n font: inherit;\\n font-size: var(--uk-text-md);\\n font-weight: 500;\\n padding: var(--uk-space-2) var(--uk-space-3);\\n border-radius: var(--uk-radius-sm) var(--uk-radius-sm) 0 0;\\n cursor: pointer;\\n transition:\\n color var(--uk-transition),\\n background-color var(--uk-transition);\\n }\\n\\n .uk-tabs__trigger:hover:not(:disabled) {\\n color: var(--uk-text);\\n background: var(--uk-surface);\\n }\\n\\n .uk-tabs__trigger[data-state=\"active\"] {\\n color: var(--uk-primary);\\n }\\n\\n .uk-tabs__indicator {\\n position: absolute;\\n right: var(--uk-space-2);\\n bottom: -1px;\\n left: var(--uk-space-2);\\n height: var(--uk-tabs-indicator-size, 2px);\\n border-radius: 2px;\\n background: var(--uk-tabs-indicator, var(--uk-primary));\\n pointer-events: none;\\n }\\n\\n .uk-tabs__trigger:focus-visible {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: -2px;\\n }\\n\\n .uk-tabs__trigger:disabled {\\n cursor: not-allowed;\\n opacity: 0.5;\\n }\\n\\n .uk-tabs__panel {\\n padding-top: var(--uk-space-4);\\n color: var(--uk-text);\\n }\\n\\n .uk-tabs__panel:focus-visible {\\n outline: 2px solid var(--uk-focus-ring);\\n outline-offset: 2px;\\n border-radius: var(--uk-radius-sm);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] {\\n display: flex;\\n gap: var(--uk-space-4);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__list {\\n flex-direction: column;\\n border-bottom: 0;\\n border-inline-end: 1px solid var(--uk-border);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__trigger {\\n text-align: start;\\n border-radius: var(--uk-radius-sm) 0 0 var(--uk-radius-sm);\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__indicator {\\n top: var(--uk-space-2);\\n right: -1px;\\n bottom: var(--uk-space-2);\\n left: auto;\\n width: var(--uk-tabs-indicator-size, 2px);\\n height: auto;\\n }\\n\\n .uk-tabs[data-orientation=\"vertical\"] .uk-tabs__panel {\\n flex: 1;\\n padding-top: 0;\\n }\\n}\\n\\n@layer uk.components {\\n .uk-dialog {\\n width: min(var(--uk-dialog-width, 32rem), calc(100vw - var(--uk-space-8)));\\n max-width: none;\\n max-height: none;\\n margin: auto;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n color: var(--uk-text);\\n z-index: var(--uk-z-dialog);\\n }\\n\\n .uk-dialog::backdrop {\\n background: var(--uk-overlay);\\n backdrop-filter: blur(8px) saturate(125%);\\n opacity: 1;\\n transition: opacity var(--uk-duration-exit) var(--uk-ease-out);\\n }\\n\\n .uk-dialog[data-state=\"closed\"]::backdrop {\\n opacity: 0;\\n transition-delay: 220ms;\\n }\\n\\n .uk-dialog[data-state=\"closed\"] {\\n pointer-events: none;\\n }\\n\\n @starting-style {\\n .uk-dialog[data-state=\"open\"]::backdrop {\\n opacity: 0;\\n }\\n }\\n\\n .uk-dialog__panel {\\n display: flex;\\n flex-direction: column;\\n max-height: min(85vh, 42rem);\\n border: 1px solid var(--uk-border);\\n border-radius: var(--uk-dialog-radius, var(--uk-radius-lg));\\n background: var(--uk-surface-raised);\\n box-shadow: var(--uk-shadow-lg);\\n font-family: var(--uk-font-sans);\\n overflow: hidden;\\n transform-origin: center;\\n }\\n\\n .uk-dialog__header {\\n display: grid;\\n grid-template-columns: minmax(0, 1fr) auto;\\n align-items: flex-start;\\n column-gap: var(--uk-space-4);\\n row-gap: 0;\\n padding: var(--uk-space-5);\\n border-bottom: 1px solid var(--uk-border);\\n }\\n\\n .uk-dialog__header > .uk-dialog__title,\\n .uk-dialog__header > .uk-dialog__description {\\n grid-column: 1;\\n }\\n\\n .uk-dialog__header > .uk-dialog__description {\\n grid-row: 2;\\n }\\n\\n .uk-dialog__header > .uk-dialog__close {\\n grid-column: 2;\\n grid-row: 1 / span 2;\\n }\\n\\n .uk-dialog__heading {\\n flex: 1;\\n min-width: 0;\\n }\\n\\n .uk-dialog__title {\\n margin: 0;\\n color: var(--uk-text);\\n font-size: var(--uk-text-xl);\\n font-weight: 600;\\n line-height: 1.3;\\n }\\n\\n .uk-dialog__description {\\n margin: var(--uk-space-1) 0 0;\\n color: var(--uk-text-muted);\\n font-size: var(--uk-text-md);\\n line-height: 1.5;\\n }\\n\\n .uk-dialog__close {\\n flex: none;\\n }\\n\\n .uk-dialog__body {\\n padding: var(--uk-space-5);\\n overflow-y: auto;\\n font-size: var(--uk-text-md);\\n line-height: 1.6;\\n }\\n\\n .uk-dialog__footer {\\n display: flex;\\n justify-content: flex-end;\\n gap: var(--uk-space-2);\\n padding: var(--uk-space-4) var(--uk-space-5);\\n border-top: 1px solid var(--uk-border);\\n background: transparent;\\n }\\n\\n @media (prefers-reduced-motion: reduce) {\\n .uk-dialog::backdrop {\\n transition-duration: var(--uk-duration-fast);\\n transition-timing-function: ease;\\n transition-delay: 0ms;\\n }\\n }\\n\\n @media (prefers-reduced-transparency: reduce) {\\n .uk-dialog::backdrop {\\n backdrop-filter: none;\\n }\\n }\\n\\n @media (prefers-contrast: more) {\\n .uk-dialog__panel {\\n border-color: var(--uk-text-muted);\\n background: var(--uk-surface-raised);\\n backdrop-filter: none;\\n }\\n }\\n}\\n\\n@layer uk.components {\\n .uk-tooltip {\\n position: fixed;\\n z-index: var(--uk-z-tooltip);\\n pointer-events: none;\\n }\\n\\n .uk-tooltip__surface {\\n position: relative;\\n width: max-content;\\n max-width: min(\\n var(--uk-tooltip-max-width, 20rem),\\n calc(100vw - var(--uk-space-4))\\n );\\n padding: var(--uk-space-2) var(--uk-space-3);\\n border: 1px solid var(--uk-tooltip-border, var(--uk-border-strong));\\n border-radius: var(--uk-tooltip-radius, var(--uk-radius-sm));\\n background: var(--uk-tooltip-background, var(--uk-surface-raised));\\n color: var(--uk-tooltip-text, var(--uk-text));\\n box-shadow: var(--uk-shadow-md);\\n font-family: var(--uk-font-sans);\\n font-size: var(--uk-text-xs);\\n font-weight: 500;\\n line-height: 1.45;\\n overflow-wrap: anywhere;\\n pointer-events: none;\\n user-select: none;\\n }\\n\\n .uk-tooltip--group {\\n position: fixed;\\n }\\n\\n .uk-tooltip__content {\\n display: block;\\n }\\n\\n .uk-tooltip__arrow {\\n position: absolute;\\n width: 8px;\\n height: 8px;\\n border: 1px solid var(--uk-tooltip-border, var(--uk-border-strong));\\n background: var(--uk-tooltip-background, var(--uk-surface-raised));\\n transform: rotate(45deg);\\n pointer-events: none;\\n }\\n\\n .uk-tooltip[data-side=\"top\"] .uk-tooltip__arrow {\\n bottom: -5px;\\n left: var(--uk-tooltip-arrow-offset);\\n border-top: 0;\\n border-left: 0;\\n translate: -50% 0;\\n }\\n\\n .uk-tooltip[data-side=\"bottom\"] .uk-tooltip__arrow {\\n top: -5px;\\n left: var(--uk-tooltip-arrow-offset);\\n border-right: 0;\\n border-bottom: 0;\\n translate: -50% 0;\\n }\\n\\n .uk-tooltip[data-side=\"left\"] .uk-tooltip__arrow {\\n top: var(--uk-tooltip-arrow-offset);\\n right: -5px;\\n border-bottom: 0;\\n border-left: 0;\\n translate: 0 -50%;\\n }\\n\\n .uk-tooltip[data-side=\"right\"] .uk-tooltip__arrow {\\n top: var(--uk-tooltip-arrow-offset);\\n left: -5px;\\n border-top: 0;\\n border-right: 0;\\n translate: 0 -50%;\\n }\\n\\n @media (prefers-contrast: more) {\\n .uk-tooltip__surface {\\n border-color: currentColor;\\n }\\n\\n .uk-tooltip__arrow {\\n border-color: currentColor;\\n }\\n }\\n}';\n","import type { ReactElement } from \"react\";\nimport { UI_CSS } from \"./styles.generated\";\n\nexport interface SeamStylesProps {\n /** 与 Content Security Policy 的 style-src nonce 保持一致。 */\n nonce?: string;\n}\n\n/**\n * JSR 不支持 CSS package exports,因此将样式以内联 style 标签提供。\n *\n * 在应用根部渲染一次即可。使用 npm 构建时仍可继续导入 styles.css。\n */\nexport function SeamStyles({ nonce }: SeamStylesProps): ReactElement {\n return (\n <style data-seam-ui=\"\" nonce={nonce}>\n {UI_CSS}\n </style>\n );\n}\n"],"names":["UI_CSS","SeamStyles","nonce","jsx"],"mappings":"qHACaA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCWK,SAASC,EAAW,CAAE,MAAAC,GAAwC,CACnE,OACEC,EAAAA,IAAC,QAAA,CAAM,eAAa,GAAG,MAAAD,EACpB,SAAAF,EACH,CAEJ"}