@hxdhxd/harmony-flow-ui 0.1.1 → 0.2.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/README.md +312 -197
- package/dist/index.cjs +3536 -1341
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1316 -132
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +329 -2
- package/dist/index.d.ts +329 -2
- package/dist/index.js +3485 -1312
- package/dist/index.js.map +1 -1
- package/package.json +118 -115
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/tokens.ts","../src/theme/ThemeProvider.tsx","../src/components/Button.tsx","../src/components/SplitButton.tsx","../src/foundations/Icon.tsx","../src/overlays/useOverlay.ts","../src/components/Input.tsx","../src/components/Switch.tsx","../src/components/SegmentedControl.tsx","../src/components/Card.tsx","../src/components/Modal.tsx","../src/components/Toast.tsx","../src/components/Content.tsx","../src/components/Accordion.tsx","../src/components/Dropdown.tsx","../src/components/IconButton.tsx","../src/components/AdvancedUtility.tsx","../src/components/Editors.tsx","../src/components/AIInteraction.tsx","../src/components/AIAdvanced.tsx","../src/components/Collaboration.tsx","../src/components/Assets.tsx","../src/components/Scheduling.tsx","../src/foundations/Typography.tsx","../src/navigation/types.ts","../src/navigation/FloatingNav.tsx","../src/navigation/Sidebar.tsx","../src/navigation/Breadcrumb.tsx","../src/navigation/Menu.tsx","../src/navigation/MobileNavigation.tsx","../src/navigation/Scrollspy.tsx","../src/navigation/ShrinkNav.tsx","../src/navigation/Tabs.tsx","../src/navigation/Steps.tsx","../src/navigation/CommandPalette.tsx","../src/layout/Layout.tsx","../src/layout/Skeleton.tsx","../src/feedback/Loading.tsx","../src/forms/Select.tsx","../src/forms/MultiSelect.tsx","../src/forms/ChoiceGroup.tsx","../src/forms/ValidatedInput.tsx","../src/forms/Textarea.tsx","../src/forms/Choice.tsx","../src/forms/Advanced.tsx","../src/forms/Form.tsx","../src/forms/Upload.tsx","../src/forms/Combobox.tsx","../src/forms/NumberInput.tsx","../src/forms/NextBatch.tsx","../src/feedback/Drawer.tsx","../src/feedback/Popover.tsx","../src/feedback/Status.tsx","../src/feedback/Essentials.tsx","../src/data-display/DataDisplay.tsx","../src/data-display/Collections.tsx","../src/data-display/Insight.tsx","../src/data-display/EmptyState.tsx","../src/data-display/DataGrid.tsx","../src/data-display/Tree.tsx","../src/layout/AuthLayout.tsx","../src/layout/Hero.tsx","../src/layout/ResizablePanel.tsx","../src/feedback/NotificationCenter.tsx","../src/data-display/VirtualList.tsx","../src/data-display/DeveloperView.tsx","../src/forms/QueryBuilder.tsx","../src/data-display/WorkflowViews.tsx","../src/forms/FilterBuilder.tsx"],"sourcesContent":["import type { CSSProperties } from 'react';\n\nexport interface ThemeTokens {\n colorPrimary: string;\n colorPrimaryHover: string;\n colorBackground: string;\n colorSurface: string;\n colorText: string;\n colorTextMuted: string;\n colorBorder: string;\n radiusControl?: string;\n radiusPanel?: string;\n radiusOverlay?: string;\n shadowPopover?: string;\n shadowModal?: string;\n /** @deprecated COMPAT: 兼容现有消费者;项目内引用清零并进入下一主版本后移除。请改用 radiusControl 或 radiusPanel。 */\n radiusMd: string;\n /** @deprecated COMPAT: 兼容现有消费者;项目内引用清零并进入下一主版本后移除。请改用 radiusPanel 或 radiusOverlay。 */\n radiusLg: string;\n /** @deprecated COMPAT: 兼容现有消费者;项目内引用清零并进入下一主版本后移除。请改用 shadowPopover 或 shadowModal。 */\n shadowElevated: string;\n motionDuration: string;\n}\n\nexport const defaultTheme: ThemeTokens = {\n colorPrimary: '#0a7cff',\n colorPrimaryHover: '#006fe8',\n colorBackground: '#f5faff',\n colorSurface: '#ffffff',\n colorText: '#142033',\n colorTextMuted: '#66758c',\n colorBorder: '#dce9f7',\n radiusControl: '6px',\n radiusPanel: '8px',\n radiusOverlay: '10px',\n shadowPopover: '0 8px 24px rgba(41, 106, 168, 0.12)',\n shadowModal: '0 18px 48px rgba(41, 106, 168, 0.16)',\n radiusMd: '14px',\n radiusLg: '24px',\n shadowElevated: '0 18px 48px rgba(41, 106, 168, 0.16)',\n motionDuration: '180ms',\n};\nexport const darkTheme: ThemeTokens = {\n ...defaultTheme,\n colorPrimary: '#58a9ff',\n colorPrimaryHover: '#7cbbff',\n colorBackground: '#0d1724',\n colorSurface: '#152337',\n colorText: '#f4f8fc',\n colorTextMuted: '#a9bad0',\n colorBorder: '#30445b',\n shadowPopover: '0 8px 24px rgba(0, 0, 0, 0.32)',\n shadowModal: '0 20px 54px rgba(0, 0, 0, 0.46)',\n shadowElevated: '0 20px 54px rgba(0, 0, 0, 0.46)',\n};\nexport const highContrastTheme: ThemeTokens = {\n ...defaultTheme,\n colorPrimary: '#005fcc',\n colorPrimaryHover: '#004a9f',\n colorBackground: '#ffffff',\n colorSurface: '#ffffff',\n colorText: '#000000',\n colorTextMuted: '#303030',\n colorBorder: '#000000',\n shadowPopover: '0 0 0 2px #000000',\n shadowModal: '0 0 0 2px #000000',\n shadowElevated: '0 0 0 2px #000000',\n motionDuration: '0ms',\n};\n\nconst tokenVariables: Record<keyof ThemeTokens, string> = {\n colorPrimary: '--hf-color-primary',\n colorPrimaryHover: '--hf-color-primary-hover',\n colorBackground: '--hf-color-background',\n colorSurface: '--hf-color-surface',\n colorText: '--hf-color-text',\n colorTextMuted: '--hf-color-text-muted',\n colorBorder: '--hf-color-border',\n radiusControl: '--hf-radius-control',\n radiusPanel: '--hf-radius-panel',\n radiusOverlay: '--hf-radius-overlay',\n shadowPopover: '--hf-shadow-popover',\n shadowModal: '--hf-shadow-modal',\n radiusMd: '--hf-radius-md',\n radiusLg: '--hf-radius-lg',\n shadowElevated: '--hf-shadow-elevated',\n motionDuration: '--hf-motion-duration',\n};\n\nexport function tokensToStyle(tokens: Partial<ThemeTokens>): CSSProperties {\n return Object.fromEntries(\n Object.entries(tokens).map(([key, value]) => [tokenVariables[key as keyof ThemeTokens], value]),\n ) as CSSProperties;\n}\n","import type { HTMLAttributes, PropsWithChildren } from 'react';\nimport { darkTheme, defaultTheme, highContrastTheme, tokensToStyle, type ThemeTokens } from './tokens';\n\nexport interface ThemeProviderProps extends HTMLAttributes<HTMLDivElement> {\n tokens?: Partial<ThemeTokens>;\n mode?: 'light' | 'dark' | 'high-contrast';\n}\n\nexport function ThemeProvider({ children, tokens, mode = 'light', className = '', style, ...props }: PropsWithChildren<ThemeProviderProps>) {\n const mergedTokens = { ...(mode === 'dark' ? darkTheme : mode === 'high-contrast' ? highContrastTheme : defaultTheme), ...tokens };\n return (\n <div\n className={`hf-theme hf-theme--${mode} ${className}`.trim()}\n style={{ ...tokensToStyle(mergedTokens), ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'outline' | 'quiet' | 'danger';\n size?: 'sm' | 'md' | 'lg';\n shape?: 'rounded' | 'pill' | 'square';\n fullWidth?: boolean;\n loading?: boolean;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n iconOnly?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { children, className = '', variant = 'primary', size = 'md', shape = 'rounded', fullWidth = false, loading = false, leadingIcon, trailingIcon, iconOnly = false, disabled, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n className={`hf-button hf-button--${variant} hf-button--${size} hf-button--${shape} ${fullWidth ? 'hf-button--full' : ''} ${iconOnly ? 'hf-button--icon' : ''} ${className}`.trim()}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading ? <span className=\"hf-spinner\" aria-hidden=\"true\" /> : leadingIcon}\n {!iconOnly && <span>{loading ? '处理中' : children}</span>}\n {!loading && trailingIcon}\n </button>\n );\n});\n","import { useState, type ReactNode } from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nexport interface SplitButtonOption { key: string; label: ReactNode; disabled?: boolean; danger?: boolean }\nexport interface SplitButtonProps extends Pick<ButtonProps, 'variant' | 'size' | 'disabled'> { label: ReactNode; options: readonly SplitButtonOption[]; onPrimaryAction: () => void; onOptionSelect: (key: string) => void }\nexport function SplitButton({ label, options, onPrimaryAction, onOptionSelect, variant = 'primary', size = 'md', disabled }: SplitButtonProps) {\n const [open, setOpen] = useState(false); const ref = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false });\n return <div className=\"hf-split-button\" ref={ref}><Button variant={variant} size={size} shape=\"rounded\" disabled={disabled} onClick={onPrimaryAction}>{label}</Button><Button variant={variant} size={size} shape=\"rounded\" disabled={disabled} iconOnly leadingIcon={<Icon name=\"chevron-down\" size={16} />} aria-label=\"更多操作\" aria-expanded={open} onClick={() => setOpen(!open)} />{open && <div className=\"hf-split-button__menu\" role=\"menu\">{options.map((option) => <button role=\"menuitem\" type=\"button\" key={option.key} disabled={option.disabled} className={option.danger ? 'is-danger' : ''} onClick={() => { onOptionSelect(option.key); setOpen(false); }}>{option.label}</button>)}</div>}</div>;\n}\n","import type { SVGAttributes } from 'react';\n\nexport type IconName = 'check' | 'close' | 'info' | 'warning' | 'error' | 'search' | 'chevron-down' | 'arrow-right' | 'user' | 'inbox';\nexport interface IconProps extends Omit<SVGAttributes<SVGSVGElement>, 'children'> { name: IconName; size?: number; label?: string; }\n\nconst paths: Record<IconName, string> = {\n check: 'M5 12.5 9.2 17 19 7', close: 'm7 7 10 10M17 7 7 17', info: 'M12 11v6M12 7.5h.01',\n warning: 'M12 4 3.5 19h17L12 4Zm0 5v4.5m0 2.5h.01', error: 'M8 8l8 8m0-8-8 8',\n search: 'm20 20-4.5-4.5m2.5-4A7 7 0 1 1 4 11a7 7 0 0 1 14 0Z', 'chevron-down': 'm7 10 5 5 5-5',\n 'arrow-right': 'M5 12h14m-5-5 5 5-5 5', user: 'M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm7 8a7 7 0 0 0-14 0',\n inbox: 'M4 5h16v13H4V5Zm0 9h4l2 2h4l2-2h4',\n};\n\nexport function Icon({ name, size = 20, label, className = '', ...props }: IconProps) {\n return <svg className={`hf-icon ${className}`} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" role={label ? 'img' : undefined} aria-label={label} aria-hidden={label ? undefined : true} {...props}><path d={paths[name]} /></svg>;\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\nconst focusableSelector = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\ninterface LayerEntry { id: symbol }\n\nconst layerStack: LayerEntry[] = [];\nlet scrollLockCount = 0;\nlet previousBodyOverflow = '';\n\nexport interface DismissibleLayerOptions {\n modal?: boolean;\n closeOnOutside?: boolean;\n trapFocus?: boolean;\n lockScroll?: boolean;\n autoFocus?: boolean;\n restoreFocus?: boolean;\n}\n\nfunction isTopLayer(id: symbol) { return layerStack.at(-1)?.id === id; }\nfunction addLayer(id: symbol) { layerStack.push({ id }); }\nfunction removeLayer(id: symbol) {\n const index = layerStack.findIndex((layer) => layer.id === id);\n if (index >= 0) layerStack.splice(index, 1);\n}\n\nfunction lockBodyScroll() {\n if (scrollLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n scrollLockCount += 1;\n}\n\nfunction unlockBodyScroll() {\n scrollLockCount = Math.max(0, scrollLockCount - 1);\n if (scrollLockCount === 0) document.body.style.overflow = previousBodyOverflow;\n}\n\nfunction focusInitialElement(root: HTMLElement) {\n const target = root.querySelector<HTMLElement>('[data-autofocus], [autofocus]')\n ?? root.querySelector<HTMLElement>(focusableSelector)\n ?? root;\n target.focus();\n}\n\nfunction trapTabKey(event: KeyboardEvent, root: HTMLElement) {\n const nodes = [...root.querySelectorAll<HTMLElement>(focusableSelector)]\n .filter((node) => !node.hasAttribute('disabled') && node.getAttribute('aria-hidden') !== 'true');\n if (!nodes.length) {\n event.preventDefault();\n root.focus();\n return;\n }\n const first = nodes[0]!;\n const last = nodes[nodes.length - 1]!;\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n}\n\nexport function useDismissibleLayer<T extends HTMLElement>(\n open: boolean,\n onClose: () => void,\n modalOrOptions: boolean | DismissibleLayerOptions = false,\n): RefObject<T | null> {\n const ref = useRef<T>(null);\n const idRef = useRef(Symbol('dismissible-layer'));\n const closeRef = useRef(onClose);\n closeRef.current = onClose;\n\n const options = typeof modalOrOptions === 'boolean' ? { modal: modalOrOptions } : modalOrOptions;\n const modal = options.modal ?? false;\n const closeOnOutside = options.closeOnOutside ?? !modal;\n const trapFocus = options.trapFocus ?? modal;\n const lockScroll = options.lockScroll ?? modal;\n const autoFocus = options.autoFocus ?? true;\n const restoreFocus = options.restoreFocus ?? true;\n\n useEffect(() => {\n if (!open) return undefined;\n const id = idRef.current;\n const previousFocus = document.activeElement as HTMLElement | null;\n addLayer(id);\n if (lockScroll) lockBodyScroll();\n\n const handlePointerDown = (event: PointerEvent) => {\n if (!isTopLayer(id) || !closeOnOutside) return;\n if (!ref.current?.contains(event.target as Node)) closeRef.current();\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isTopLayer(id)) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeRef.current();\n } else if (event.key === 'Tab' && trapFocus && ref.current) {\n trapTabKey(event, ref.current);\n }\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown, true);\n const animationFrame = autoFocus\n ? requestAnimationFrame(() => ref.current && focusInitialElement(ref.current))\n : undefined;\n\n return () => {\n if (animationFrame !== undefined) cancelAnimationFrame(animationFrame);\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown, true);\n removeLayer(id);\n if (lockScroll) unlockBodyScroll();\n if (restoreFocus && previousFocus?.isConnected) previousFocus.focus();\n };\n }, [autoFocus, closeOnOutside, lockScroll, modal, open, restoreFocus, trapFocus]);\n\n return ref;\n}\n","import { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from 'react';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'prefix'> {\n label?: string;\n hint?: string;\n error?: string;\n prefix?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { className = '', id, label, hint, error, prefix, disabled, ...props },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const descriptionId = `${inputId}-description`;\n return (\n <label className={`hf-field ${className}`.trim()} htmlFor={inputId}>\n {label && <span className=\"hf-field__label\">{label}</span>}\n <span className={`hf-input-shell ${error ? 'hf-input-shell--error' : ''}`}>\n {prefix && <span className=\"hf-input-shell__prefix\" aria-hidden=\"true\">{prefix}</span>}\n <input\n ref={ref}\n id={inputId}\n className=\"hf-input\"\n disabled={disabled}\n aria-invalid={Boolean(error)}\n aria-describedby={hint || error ? descriptionId : undefined}\n {...props}\n />\n </span>\n {(error || hint) && (\n <span id={descriptionId} className={`hf-field__hint ${error ? 'hf-field__hint--error' : ''}`}>\n {error ?? hint}\n </span>\n )}\n </label>\n );\n});\n","import { forwardRef, type InputHTMLAttributes } from 'react';\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label: string;\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { label, className = '', ...props },\n ref,\n) {\n return (\n <label className={`hf-switch ${className}`.trim()}>\n <input ref={ref} className=\"hf-switch__input\" type=\"checkbox\" role=\"switch\" {...props} />\n <span className=\"hf-switch__track\" aria-hidden=\"true\"><span className=\"hf-switch__thumb\" /></span>\n <span className=\"hf-switch__label\">{label}</span>\n </label>\n );\n});\n","import { useId } from 'react';\n\nexport interface SegmentOption<T extends string> { label: string; value: T }\nexport interface SegmentedControlProps<T extends string> {\n label: string;\n options: readonly SegmentOption<T>[];\n value: T;\n onChange: (value: T) => void;\n className?: string;\n}\n\nexport function SegmentedControl<T extends string>({ label, options, value, onChange, className = '' }: SegmentedControlProps<T>) {\n const name = useId();\n return (\n <fieldset className={`hf-segmented ${className}`.trim()} aria-label={label}>\n <legend className=\"hf-sr-only\">{label}</legend>\n {options.map((option) => (\n <label key={option.value} className=\"hf-segmented__option\">\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={value === option.value}\n onChange={() => onChange(option.value)}\n />\n <span>{option.label}</span>\n </label>\n ))}\n </fieldset>\n );\n}\n","import type { HTMLAttributes, PropsWithChildren, ReactNode } from 'react';\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n title?: string;\n eyebrow?: string;\n action?: ReactNode;\n interactive?: boolean;\n}\n\nexport function Card({ children, title, eyebrow, action, interactive = false, className = '', ...props }: PropsWithChildren<CardProps>) {\n return (\n <article className={`hf-card ${interactive ? 'hf-card--interactive' : ''} ${className}`.trim()} {...props}>\n {(eyebrow || title || action) && (\n <header className=\"hf-card__header\">\n <div>\n {eyebrow && <p className=\"hf-card__eyebrow\">{eyebrow}</p>}\n {title && <h3 className=\"hf-card__title\">{title}</h3>}\n </div>\n {action}\n </header>\n )}\n <div className=\"hf-card__body\">{children}</div>\n </article>\n );\n}\n","import { useId, type PropsWithChildren, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from './Button';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface ModalProps {\n open: boolean;\n title: string;\n children: ReactNode;\n onClose: () => void;\n footer?: ReactNode;\n}\n\nexport function Modal({ open, title, children, onClose, footer }: PropsWithChildren<ModalProps>) {\n const titleId = useId();\n const dialogRef = useDismissibleLayer<HTMLDivElement>(open, onClose, true);\n\n if (!open) return null;\n return createPortal(\n <div className=\"hf-modal-backdrop\" onMouseDown={(event) => event.target === event.currentTarget && onClose()}>\n <div ref={dialogRef} className=\"hf-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId} tabIndex={-1}>\n <header className=\"hf-modal__header\">\n <h2 id={titleId}>{title}</h2>\n <Button variant=\"quiet\" size=\"sm\" onClick={onClose} aria-label=\"关闭弹窗\">×</Button>\n </header>\n <div className=\"hf-modal__body\">{children}</div>\n {footer && <footer className=\"hf-modal__footer\">{footer}</footer>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface ToastProps {\n open: boolean;\n message: string;\n tone?: 'success' | 'info' | 'error';\n duration?: number;\n onClose: () => void;\n}\n\nexport function Toast({ open, message, tone = 'info', duration = 2600, onClose }: ToastProps) {\n useEffect(() => {\n if (!open || duration <= 0) return;\n const timer = window.setTimeout(onClose, duration);\n return () => window.clearTimeout(timer);\n }, [duration, onClose, open]);\n if (!open) return null;\n return createPortal(\n <div className={`hf-toast hf-toast--${tone}`} role={tone === 'error' ? 'alert' : 'status'}>\n <span className=\"hf-toast__mark\" aria-hidden=\"true\" />\n {message}\n </div>,\n document.body,\n );\n}\n","import type { AnchorHTMLAttributes, HTMLAttributes, ReactNode } from 'react';\nimport { Icon } from '../foundations/Icon';\n\nexport function Divider({ orientation = 'horizontal', label, className = '' }: { orientation?: 'horizontal' | 'vertical'; label?: ReactNode; className?: string }) { return <div className={`hf-divider hf-divider--${orientation}${label ? ' hf-divider--labelled' : ''} ${className}`} role=\"separator\" aria-orientation={orientation}>{label && <span>{label}</span>}</div>; }\nexport function Link({ external, className = '', children, ...props }: AnchorHTMLAttributes<HTMLAnchorElement> & { external?: boolean }) { return <a className={`hf-link ${className}`} target={external ? '_blank' : props.target} rel={external ? 'noreferrer' : props.rel} {...props}>{children}{external && <span aria-hidden=\"true\">↗</span>}</a>; }\n\ntype Tone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport function Badge({ tone = 'neutral', dot, className = '', ...props }: HTMLAttributes<HTMLSpanElement> & { tone?: Tone; dot?: boolean }) { return <span className={`hf-badge hf-tone--${tone} ${className}`} {...props}>{dot && <i aria-hidden=\"true\" />}{props.children}</span>; }\nexport function Tag({ tone = 'neutral', onRemove, removeLabel = '移除标签', className = '', children, ...props }: HTMLAttributes<HTMLSpanElement> & { tone?: Tone; onRemove?: () => void; removeLabel?: string }) { return <span className={`hf-tag hf-tone--${tone} ${className}`} {...props}>{children}{onRemove && <button type=\"button\" aria-label={removeLabel} onClick={onRemove}><Icon name=\"close\" size={14} /></button>}</span>; }\n\nexport function Avatar({ src, name, alt = '', size = 'md', status, className = '' }: { src?: string; name: string; alt?: string; size?: 'sm' | 'md' | 'lg'; status?: 'online' | 'busy' | 'away'; className?: string }) {\n const initials = name.trim().split(/\\s+/).slice(0, 2).map((part) => part[0]).join('').toUpperCase();\n return <span className={`hf-avatar hf-avatar--${size} ${className}`} title={name}>{src ? <img src={src} alt={alt || name} /> : <span aria-hidden=\"true\">{initials}</span>}{status && <i className={`hf-avatar__status hf-avatar__status--${status}`} aria-label={{ online: '在线', busy: '忙碌', away: '离开' }[status]} />}</span>;\n}\n","import { useState, type ReactNode } from 'react';\nexport interface AccordionItem { key: string; title: ReactNode; content: ReactNode; disabled?: boolean }\nexport interface AccordionProps { items: readonly AccordionItem[]; value?: readonly string[]; defaultValue?: readonly string[]; onChange?: (keys: string[]) => void; multiple?: boolean }\nexport function Accordion({ items, value, defaultValue = [], onChange, multiple = false }: AccordionProps) {\n const [inner, setInner] = useState<string[]>([...defaultValue]); const active = value ? [...value] : inner;\n const toggle = (key: string) => { const next = active.includes(key) ? active.filter((item) => item !== key) : multiple ? [...active, key] : [key]; if (!value) setInner(next); onChange?.(next); };\n return <div className=\"hf-accordion\">{items.map((item) => { const open = active.includes(item.key); return <section className={open ? 'is-open' : ''} key={item.key}><h3><button type=\"button\" aria-expanded={open} disabled={item.disabled} onClick={() => toggle(item.key)}><span>{item.title}</span><span aria-hidden=\"true\">⌄</span></button></h3>{open && <div className=\"hf-accordion__panel\">{item.content}</div>}</section>; })}</div>;\n}\n","import { cloneElement, useState, type ReactElement, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nexport interface DropdownItem { key: string; label: ReactNode; icon?: ReactNode; description?: ReactNode; disabled?: boolean; danger?: boolean; separatorBefore?: boolean }\nexport interface DropdownProps { trigger: ReactElement; items: readonly DropdownItem[]; onSelect: (key: string) => void; placement?: 'left' | 'right'; label?: string }\nexport function Dropdown({ trigger, items, onSelect, placement = 'left', label = '操作菜单' }: DropdownProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLSpanElement>(open, () => setOpen(false)); return <span className=\"hf-dropdown\" ref={root}>{cloneElement(trigger, { onClick: () => setOpen((value) => !value), 'aria-expanded': open, 'aria-haspopup': 'menu' } as object)}{open && <div className={`hf-dropdown__menu hf-dropdown__menu--${placement}`} role=\"menu\" aria-label={label}>{items.map((item) => <button type=\"button\" role=\"menuitem\" className={`${item.danger ? 'is-danger' : ''}${item.separatorBefore ? ' has-separator' : ''}`} disabled={item.disabled} key={item.key} onClick={() => { onSelect(item.key); setOpen(false); }}>{item.icon}<span><strong>{item.label}</strong>{item.description && <small>{item.description}</small>}</span></button>)}</div>}</span>; }\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> { label: string; icon: ReactNode; variant?: 'primary' | 'secondary' | 'quiet' | 'danger'; size?: 'sm' | 'md' | 'lg' }\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton({ label, icon, variant = 'quiet', size = 'md', className = '', ...props }, ref) { return <button ref={ref} className={`hf-button hf-button--${variant} hf-button--${size} hf-button--square hf-button--icon ${className}`.trim()} aria-label={label} title={label} {...props}>{icon}</button>; });\n","import { useState, type HTMLAttributes, type MouseEvent, type PropsWithChildren } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nimport type { DropdownItem } from './Dropdown';\n\nexport function ButtonGroup({ children, orientation = 'horizontal', attached = true, className = '', ...props }: PropsWithChildren<HTMLAttributes<HTMLDivElement> & { orientation?: 'horizontal' | 'vertical'; attached?: boolean }>) { return <div role=\"group\" className={`hf-button-group hf-button-group--${orientation}${attached ? ' is-attached' : ''} ${className}`.trim()} {...props}>{children}</div>; }\n\nexport interface ColorPickerProps { value: string; onChange: (value: string) => void; label?: string; presets?: readonly string[]; disabled?: boolean }\nexport function ColorPicker({ value, onChange, label, presets = ['#0a7cff','#19a989','#7657e6','#f0a11a','#e5484d'], disabled }: ColorPickerProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false)); return <div className=\"hf-field hf-color-picker\" ref={root}>{label && <span className=\"hf-field__label\">{label}</span>}<button type=\"button\" className=\"hf-color-picker__trigger\" disabled={disabled} aria-expanded={open} onClick={() => setOpen(!open)}><span style={{ background: value }} /><code>{value.toUpperCase()}</code><span aria-hidden=\"true\">⌄</span></button>{open && <div className=\"hf-color-picker__panel\"><input type=\"color\" aria-label=\"选择颜色\" value={value} onChange={(event) => onChange(event.target.value)} /><div>{presets.map((color) => <button type=\"button\" aria-label={`选择颜色 ${color}`} aria-pressed={value.toLowerCase() === color.toLowerCase()} style={{ background: color }} key={color} onClick={() => onChange(color)} />)}</div><input aria-label=\"颜色值\" value={value} onChange={(event) => /^#[0-9a-f]{0,6}$/i.test(event.target.value) && onChange(event.target.value)} /></div>}</div>; }\n\nexport interface ContextMenuProps { items: readonly DropdownItem[]; onSelect: (key: string) => void; label?: string }\nexport function ContextMenu({ items, onSelect, label = '上下文菜单', children }: PropsWithChildren<ContextMenuProps>) { const [position, setPosition] = useState<{ x: number; y: number }>(); const root = useDismissibleLayer<HTMLDivElement>(Boolean(position), () => setPosition(undefined)); const open = (event: MouseEvent) => { event.preventDefault(); setPosition({ x: event.clientX, y: event.clientY }); }; return <div className=\"hf-context-target\" onContextMenu={open}>{children}{position && <div ref={root} className=\"hf-context-menu\" role=\"menu\" aria-label={label} style={{ left: position.x, top: position.y }}>{items.map((item) => <button type=\"button\" role=\"menuitem\" disabled={item.disabled} className={item.danger ? 'is-danger' : ''} key={item.key} onClick={() => { onSelect(item.key); setPosition(undefined); }}>{item.icon}<span>{item.label}</span></button>)}</div>}</div>; }\n","import { useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react';\n\nexport interface RichTextEditorProps { value: string; onChange: (html: string) => void; label?: string; placeholder?: string; disabled?: boolean }\nexport function RichTextEditor({ value, onChange, label, placeholder = '输入内容…', disabled }: RichTextEditorProps) {\n const editor = useRef<HTMLDivElement>(null);\n useEffect(() => { if (editor.current && editor.current.innerHTML !== value) editor.current.innerHTML = value; }, [value]);\n const format = (command: 'bold' | 'italic' | 'insertUnorderedList') => { editor.current?.focus(); document.execCommand(command); onChange(editor.current?.innerHTML ?? ''); };\n return <div className=\"hf-rich-editor\"><div className=\"hf-rich-editor__header\">{label && <strong>{label}</strong>}<div role=\"toolbar\" aria-label=\"文本格式\"><button type=\"button\" aria-label=\"粗体\" disabled={disabled} onClick={() => format('bold')}><b>B</b></button><button type=\"button\" aria-label=\"斜体\" disabled={disabled} onClick={() => format('italic')}><i>I</i></button><button type=\"button\" aria-label=\"无序列表\" disabled={disabled} onClick={() => format('insertUnorderedList')}>• 列表</button></div></div><div ref={editor} className=\"hf-rich-editor__content\" contentEditable={!disabled} role=\"textbox\" aria-multiline=\"true\" aria-label={label ?? '富文本编辑器'} data-placeholder={placeholder} onInput={(event) => onChange(event.currentTarget.innerHTML)} /></div>;\n}\n\nexport interface MentionOption { value: string; label: string; description?: string }\nexport interface MentionInputProps { value: string; onChange: (value: string) => void; options: readonly MentionOption[]; label?: string; placeholder?: string; disabled?: boolean }\nexport function MentionInput({ value, onChange, options, label, placeholder = '输入 @ 提及成员', disabled }: MentionInputProps) {\n const [active, setActive] = useState(0); const match = value.match(/(?:^|\\s)@([^\\s@]*)$/); const query = match?.[1]?.toLowerCase();\n const results = useMemo(() => query === undefined ? [] : options.filter((item) => `${item.label} ${item.value}`.toLowerCase().includes(query)).slice(0, 6), [options, query]);\n useEffect(() => setActive(0), [query]);\n const choose = (item: MentionOption) => { if (!match) return; onChange(`${value.slice(0, match.index!)}${match[0].startsWith(' ') ? ' ' : ''}@${item.label} `); };\n const keyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => { if (!results.length) return; if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); setActive((index) => (index + (event.key === 'ArrowDown' ? 1 : -1) + results.length) % results.length); } else if (event.key === 'Enter' || event.key === 'Tab') { event.preventDefault(); choose(results[active]!); } else if (event.key === 'Escape') { event.preventDefault(); onChange(`${value} `); } };\n return <label className=\"hf-field hf-mention-input\">{label && <span className=\"hf-field__label\">{label}</span>}<textarea value={value} placeholder={placeholder} disabled={disabled} aria-autocomplete=\"list\" aria-expanded={Boolean(results.length)} onChange={(event) => onChange(event.target.value)} onKeyDown={keyDown} />{results.length > 0 && <div className=\"hf-mention-input__menu\" role=\"listbox\">{results.map((item, index) => <button type=\"button\" role=\"option\" aria-selected={index === active} key={item.value} onMouseDown={(event) => event.preventDefault()} onClick={() => choose(item)}><span>@{item.label}</span>{item.description && <small>{item.description}</small>}</button>)}</div>}</label>;\n}\n\nexport interface CodeEditorProps { value: string; onChange: (value: string) => void; language?: string; label?: string; readOnly?: boolean; height?: number }\nexport function CodeEditor({ value, onChange, language = 'text', label = '代码编辑器', readOnly, height = 260 }: CodeEditorProps) { const lines = value.split('\\n').length; return <div className=\"hf-code-editor\"><header><strong>{label}</strong><span>{language}</span></header><div style={{ height }}><pre aria-hidden=\"true\">{Array.from({ length: lines }, (_, index) => `${index + 1}\\n`)}</pre><textarea spellCheck={false} readOnly={readOnly} aria-label={label} value={value} onChange={(event) => onChange(event.target.value)} onKeyDown={(event) => { if (event.key === 'Tab' && !readOnly) { event.preventDefault(); const input = event.currentTarget; const next = `${value.slice(0, input.selectionStart)} ${value.slice(input.selectionEnd)}`; onChange(next); requestAnimationFrame(() => input.setSelectionRange(input.selectionStart + 2, input.selectionStart + 2)); } }} /></div></div>; }\n","import { useState, type FormEvent, type KeyboardEvent, type ReactNode } from 'react';\n\nexport interface ChatMessageProps { role: 'user' | 'assistant' | 'system'; children: ReactNode; avatar?: ReactNode; name?: ReactNode; timestamp?: ReactNode; actions?: ReactNode; streaming?: boolean; error?: ReactNode }\nexport function ChatMessage({ role, children, avatar, name, timestamp, actions, streaming, error }: ChatMessageProps) { return <article className={`hf-chat-message hf-chat-message--${role}`} aria-live={streaming ? 'polite' : undefined}><div className=\"hf-chat-message__avatar\" aria-hidden=\"true\">{avatar ?? (role === 'assistant' ? 'AI' : role === 'system' ? 'S' : 'U')}</div><div className=\"hf-chat-message__body\"><header>{name && <strong>{name}</strong>}{timestamp && <time>{timestamp}</time>}</header><div className=\"hf-chat-message__content\">{children}{streaming && <span className=\"hf-chat-message__cursor\" aria-label=\"正在生成\" />}</div>{error && <div className=\"hf-chat-message__error\" role=\"alert\">{error}</div>}{actions && <footer>{actions}</footer>}</div></article>; }\n\nexport interface ChatAttachment { id: string; name: string; size?: string; icon?: ReactNode }\nexport interface ChatComposerProps { value: string; onChange: (value: string) => void; onSend: (value: string) => void; attachments?: readonly ChatAttachment[]; onRemoveAttachment?: (id: string) => void; onAttach?: () => void; placeholder?: string; disabled?: boolean; sending?: boolean; footer?: ReactNode; maxLength?: number }\nexport function ChatComposer({ value, onChange, onSend, attachments = [], onRemoveAttachment, onAttach, placeholder = '输入消息,Enter 发送,Shift + Enter 换行', disabled, sending, footer, maxLength }: ChatComposerProps) { const send = () => { const content = value.trim(); if (content && !disabled && !sending) onSend(content); }; const submit = (event: FormEvent) => { event.preventDefault(); send(); }; const keyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => { if (event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing) { event.preventDefault(); send(); } }; return <form className=\"hf-chat-composer\" onSubmit={submit}>{attachments.length > 0 && <div className=\"hf-chat-composer__attachments\">{attachments.map((item) => <span key={item.id}>{item.icon}<strong>{item.name}</strong>{item.size && <small>{item.size}</small>}{onRemoveAttachment && <button type=\"button\" aria-label={`移除附件 ${item.name}`} onClick={() => onRemoveAttachment(item.id)}>×</button>}</span>)}</div>}<textarea aria-label=\"消息内容\" value={value} maxLength={maxLength} disabled={disabled} placeholder={placeholder} onChange={(event) => onChange(event.target.value)} onKeyDown={keyDown} /><footer><div>{onAttach && <button type=\"button\" className=\"hf-chat-composer__attach\" aria-label=\"添加附件\" disabled={disabled} onClick={onAttach}>+</button>}{footer}</div>{maxLength && <small>{value.length}/{maxLength}</small>}<button type=\"submit\" className=\"hf-chat-composer__send\" disabled={disabled || sending || !value.trim()}>{sending ? <span className=\"hf-spinner\" /> : '↑'}<span className=\"hf-sr-only\">发送消息</span></button></footer></form>; }\n\nexport interface PromptSuggestion { id: string; title: ReactNode; description?: ReactNode; icon?: ReactNode; prompt?: string }\nexport interface PromptSuggestionsProps { items: readonly PromptSuggestion[]; onSelect: (item: PromptSuggestion) => void; title?: ReactNode; columns?: 1 | 2 | 3 }\nexport function PromptSuggestions({ items, onSelect, title, columns = 2 }: PromptSuggestionsProps) { return <section className={`hf-prompt-suggestions hf-prompt-suggestions--${columns}`}>{title && <header>{title}</header>}<div>{items.map((item) => <button type=\"button\" key={item.id} onClick={() => onSelect(item)}>{item.icon && <span>{item.icon}</span>}<strong>{item.title}</strong>{item.description && <small>{item.description}</small>}<i aria-hidden=\"true\">→</i></button>)}</div></section>; }\n\nexport type ToolCallStatus = 'queued' | 'running' | 'success' | 'error' | 'cancelled';\nexport interface ToolCallCardProps { name: ReactNode; status: ToolCallStatus; description?: ReactNode; input?: ReactNode; output?: ReactNode; duration?: ReactNode; icon?: ReactNode; defaultExpanded?: boolean; onRetry?: () => void; onCancel?: () => void }\nconst toolStatusLabel: Record<ToolCallStatus, string> = { queued: '等待中', running: '执行中', success: '已完成', error: '执行失败', cancelled: '已取消' };\nexport function ToolCallCard({ name, status, description, input, output, duration, icon, defaultExpanded = false, onRetry, onCancel }: ToolCallCardProps) { const [open, setOpen] = useState(defaultExpanded); return <section className={`hf-tool-call is-${status}`}><button type=\"button\" className=\"hf-tool-call__summary\" aria-expanded={open} onClick={() => setOpen(!open)}><span className=\"hf-tool-call__icon\">{status === 'running' ? <span className=\"hf-spinner\" /> : icon ?? '◇'}</span><span><strong>{name}</strong>{description && <small>{description}</small>}</span><i>{toolStatusLabel[status]}</i>{duration && <time>{duration}</time>}<b aria-hidden=\"true\">⌄</b></button>{open && <div className=\"hf-tool-call__detail\">{input && <section><strong>输入</strong><div>{input}</div></section>}{output && <section><strong>输出</strong><div>{output}</div></section>}{(status === 'error' && onRetry) || (status === 'running' && onCancel) ? <footer>{status === 'error' && onRetry && <button type=\"button\" onClick={onRetry}>重新执行</button>}{status === 'running' && onCancel && <button type=\"button\" onClick={onCancel}>停止执行</button>}</footer> : null}</div>}</section>; }\n\nexport interface CitationItem { id: string; title: ReactNode; url?: string; source?: ReactNode; excerpt?: ReactNode; favicon?: ReactNode }\nexport interface CitationListProps { items: readonly CitationItem[]; title?: ReactNode; onSelect?: (item: CitationItem) => void }\nexport function CitationList({ items, title = '参考来源', onSelect }: CitationListProps) { return <section className=\"hf-citation-list\"><header><strong>{title}</strong><span>{items.length}</span></header><ol>{items.map((item, index) => <li key={item.id}><a href={item.url} target={item.url ? '_blank' : undefined} rel={item.url ? 'noreferrer' : undefined} onClick={(event) => { if (!item.url) event.preventDefault(); onSelect?.(item); }}><span>{item.favicon ?? index + 1}</span><div><strong>{item.title}</strong>{item.source && <small>{item.source}</small>}{item.excerpt && <p>{item.excerpt}</p>}</div><i aria-hidden=\"true\">↗</i></a></li>)}</ol></section>; }\n\nexport type AgentRunStatus = ToolCallStatus;\nexport interface AgentRunStep { id: string; title: ReactNode; status: AgentRunStatus; description?: ReactNode; timestamp?: ReactNode; detail?: ReactNode }\nexport interface AgentRunTimelineProps { steps: readonly AgentRunStep[]; activeId?: string; onSelect?: (id: string) => void; label?: string }\nexport function AgentRunTimeline({ steps, activeId, onSelect, label = 'Agent 执行过程' }: AgentRunTimelineProps) { return <ol className=\"hf-agent-run\" aria-label={label}>{steps.map((step) => <li key={step.id} className={`is-${step.status}${activeId === step.id ? ' is-active' : ''}`}><button type=\"button\" aria-pressed={activeId === step.id} onClick={() => onSelect?.(step.id)}><span>{step.status === 'success' ? '✓' : step.status === 'error' ? '!' : step.status === 'running' ? <i className=\"hf-spinner\" /> : '·'}</span><div><header><strong>{step.title}</strong>{step.timestamp && <time>{step.timestamp}</time>}</header>{step.description && <p>{step.description}</p>}{step.detail && <div>{step.detail}</div>}</div></button></li>)}</ol>; }\n","import { Fragment, useMemo, useState, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nfunction inlineMarkdown(text: string): ReactNode[] { const pattern = /(\\*\\*[^*]+\\*\\*|`[^`]+`|\\[[^\\]]+\\]\\(https?:\\/\\/[^\\s)]+\\))/g; return text.split(pattern).filter(Boolean).map((part, index) => { if (part.startsWith('**') && part.endsWith('**')) return <strong key={index}>{part.slice(2, -2)}</strong>; if (part.startsWith('`') && part.endsWith('`')) return <code key={index}>{part.slice(1, -1)}</code>; const link = part.match(/^\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s)]+)\\)$/); return link ? <a key={index} href={link[2]} target=\"_blank\" rel=\"noreferrer\">{link[1]}</a> : <Fragment key={index}>{part}</Fragment>; }); }\nexport interface MarkdownContentProps { content: string; className?: string }\nexport function MarkdownContent({ content, className = '' }: MarkdownContentProps) { const blocks = useMemo(() => { const lines = content.split('\\n'); const result: ReactNode[] = []; let code: string[] | undefined, language = ''; let list: string[] = []; const flushList = () => { if (list.length) result.push(<ul key={`list-${result.length}`}>{list.map((item, index) => <li key={index}>{inlineMarkdown(item)}</li>)}</ul>); list = []; }; lines.forEach((line) => { if (line.startsWith('```')) { if (code) { result.push(<CodeBlock key={`code-${result.length}`} code={code.join('\\n')} language={language} />); code = undefined; language = ''; } else { flushList(); code = []; language = line.slice(3).trim(); } return; } if (code) { code.push(line); return; } if (line.startsWith('- ')) { list.push(line.slice(2)); return; } flushList(); if (!line.trim()) return; const heading = line.match(/^(#{1,3})\\s+(.+)$/); if (heading) { const Tag = `h${heading[1]!.length}` as 'h1' | 'h2' | 'h3'; result.push(<Tag key={result.length}>{inlineMarkdown(heading[2]!)}</Tag>); } else if (line.startsWith('> ')) result.push(<blockquote key={result.length}>{inlineMarkdown(line.slice(2))}</blockquote>); else result.push(<p key={result.length}>{inlineMarkdown(line)}</p>); }); flushList(); if (code) result.push(<CodeBlock key=\"code-last\" code={code.join('\\n')} language={language} />); return result; }, [content]); return <div className={`hf-markdown ${className}`.trim()}>{blocks}</div>; }\n\nexport interface CodeBlockProps { code: string; language?: string; filename?: ReactNode; wrap?: boolean; showLineNumbers?: boolean; onCopy?: (code: string) => void }\nexport function CodeBlock({ code, language = 'text', filename, wrap, showLineNumbers = true, onCopy }: CodeBlockProps) { const [copied, setCopied] = useState(false); const lines = code.split('\\n'); const copy = async () => { try { await navigator.clipboard.writeText(code); } catch { /* Consumers can provide a fallback through onCopy. */ } onCopy?.(code); setCopied(true); window.setTimeout(() => setCopied(false), 1500); }; return <section className={`hf-code-block${wrap ? ' is-wrapped' : ''}`}><header><span>{filename ?? language}</span><button type=\"button\" onClick={copy}>{copied ? '已复制' : '复制代码'}</button></header><div>{showLineNumbers && <pre aria-hidden=\"true\">{lines.map((_, index) => `${index + 1}\\n`)}</pre>}<pre><code>{code}</code></pre></div></section>; }\n\nexport interface VoiceInputProps { state?: 'idle' | 'listening' | 'processing' | 'error'; duration?: string; level?: number; disabled?: boolean; onStart?: () => void; onStop?: () => void; onCancel?: () => void; error?: ReactNode }\nexport function VoiceInput({ state = 'idle', duration = '00:00', level = 0.45, disabled, onStart, onStop, onCancel, error }: VoiceInputProps) { const active = state === 'listening'; return <div className={`hf-voice-input is-${state}`} role=\"status\" aria-label={active ? '正在录音' : state === 'processing' ? '正在识别语音' : '语音输入'}><button type=\"button\" className=\"hf-voice-input__main\" disabled={disabled || state === 'processing'} onClick={active ? onStop : onStart}>{state === 'processing' ? <span className=\"hf-spinner\" /> : active ? '■' : '●'}</button><div><div className=\"hf-voice-input__wave\" aria-hidden=\"true\">{Array.from({ length: 18 }, (_, index) => <i key={index} style={{ height: `${Math.max(12, ((index * 17) % 75) * level + 12)}%` }} />)}</div><span>{active ? duration : state === 'processing' ? '正在转换文字…' : error ?? '点击开始语音输入'}</span></div>{(active || state === 'error') && onCancel && <button type=\"button\" className=\"hf-voice-input__cancel\" onClick={onCancel}>取消</button>}</div>; }\n\nexport interface ModelOption { id: string; name: ReactNode; description?: ReactNode; icon?: ReactNode; tags?: readonly string[]; disabled?: boolean }\nexport interface ModelSelectorProps { models: readonly ModelOption[]; value: string; onChange: (id: string) => void; label?: string; disabled?: boolean }\nexport function ModelSelector({ models, value, onChange, label = '选择模型', disabled }: ModelSelectorProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false)); const selected = models.find((item) => item.id === value); return <div className=\"hf-model-selector\" ref={root}><button type=\"button\" className=\"hf-model-selector__trigger\" disabled={disabled} aria-expanded={open} onClick={() => setOpen(!open)}><span>{selected?.icon ?? '✦'}</span><span><strong>{selected?.name ?? label}</strong>{selected?.description && <small>{selected.description}</small>}</span><i aria-hidden=\"true\">⌄</i></button>{open && <div className=\"hf-model-selector__menu\" role=\"listbox\" aria-label={label}>{models.map((model) => <button type=\"button\" role=\"option\" aria-selected={model.id === value} disabled={model.disabled} key={model.id} onClick={() => { onChange(model.id); setOpen(false); }}><span>{model.icon ?? '✦'}</span><span><strong>{model.name}</strong>{model.description && <small>{model.description}</small>}{model.tags?.length ? <i>{model.tags.map((tag) => <b key={tag}>{tag}</b>)}</i> : null}</span>{model.id === value && <em>✓</em>}</button>)}</div>}</div>; }\n\nexport interface ConversationBranchProps { current: number; total: number; onChange: (index: number) => void; label?: ReactNode }\nexport function ConversationBranch({ current, total, onChange, label = '回答分支' }: ConversationBranchProps) { const safeTotal = Math.max(1, total), safeCurrent = Math.min(safeTotal - 1, Math.max(0, current)); return <nav className=\"hf-conversation-branch\" aria-label={String(label)}><button type=\"button\" aria-label=\"上一个分支\" disabled={safeCurrent === 0} onClick={() => onChange(safeCurrent - 1)}>‹</button><span>{safeCurrent + 1} / {safeTotal}</span><button type=\"button\" aria-label=\"下一个分支\" disabled={safeCurrent >= safeTotal - 1} onClick={() => onChange(safeCurrent + 1)}>›</button></nav>; }\n\nexport interface TokenUsageProps { used: number; limit: number; input?: number; output?: number; cached?: number; label?: ReactNode; compact?: boolean }\nexport function TokenUsage({ used, limit, input, output, cached, label = '上下文用量', compact }: TokenUsageProps) { const percent = Math.max(0, Math.min(100, limit ? used / limit * 100 : 0)); return <section className={`hf-token-usage${compact ? ' is-compact' : ''}`}><div className=\"hf-token-usage__ring\" role=\"progressbar\" aria-label={String(label)} aria-valuemin={0} aria-valuemax={limit} aria-valuenow={used} style={{ '--hf-token-percent': `${percent * 3.6}deg` } as React.CSSProperties}><span>{Math.round(percent)}%</span></div><div><header><strong>{label}</strong><span>{used.toLocaleString()} / {limit.toLocaleString()}</span></header>{!compact && <div className=\"hf-token-usage__details\">{input !== undefined && <span><i />输入 {input.toLocaleString()}</span>}{output !== undefined && <span><i />输出 {output.toLocaleString()}</span>}{cached !== undefined && <span><i />缓存 {cached.toLocaleString()}</span>}</div>}</div></section>; }\n","import { useState, type ReactNode } from 'react';\nimport { Avatar } from './Content';\n\nexport type PresenceStatus = 'online' | 'away' | 'busy' | 'offline';\nconst presenceLabel: Record<PresenceStatus, string> = { online: '在线', away: '离开', busy: '忙碌', offline: '离线' };\nexport interface PresenceProps { status: PresenceStatus; label?: ReactNode; showLabel?: boolean; pulse?: boolean }\nexport function Presence({ status, label, showLabel = true, pulse = true }: PresenceProps) { return <span className={`hf-presence is-${status}${pulse && status === 'online' ? ' is-pulsing' : ''}`} role=\"status\"><i aria-hidden=\"true\" /><span>{label ?? (showLabel ? presenceLabel[status] : <span className=\"hf-sr-only\">{presenceLabel[status]}</span>)}</span></span>; }\n\nexport interface AvatarGroupItem { id: string; name: string; src?: string; status?: Exclude<PresenceStatus, 'offline'> }\nexport interface AvatarGroupProps { items: readonly AvatarGroupItem[]; max?: number; size?: 'sm' | 'md' | 'lg'; onMore?: () => void; label?: string }\nexport function AvatarGroup({ items, max = 4, size = 'md', onMore, label = '协作成员' }: AvatarGroupProps) { const shown = items.slice(0, max), remaining = Math.max(0, items.length - shown.length); return <div className={`hf-avatar-group hf-avatar-group--${size}`} aria-label={label}>{shown.map((item) => <Avatar key={item.id} src={item.src} name={item.name} size={size} status={item.status} />)}{remaining > 0 && <button type=\"button\" aria-label={`查看其余 ${remaining} 位成员`} onClick={onMore}>+{remaining}</button>}</div>; }\n\nexport interface CommentItem { id: string; author: { name: string; avatar?: string }; content: ReactNode; timestamp?: ReactNode; edited?: boolean; reactions?: readonly { emoji: string; count: number; active?: boolean }[]; replies?: readonly CommentItem[] }\nexport interface CommentThreadProps { comments: readonly CommentItem[]; onReply?: (id: string, content: string) => void; onReact?: (id: string, emoji: string) => void; onDelete?: (id: string) => void; empty?: ReactNode }\nfunction Comment({ item, onReply, onReact, onDelete, depth = 0 }: { item: CommentItem; onReply?: CommentThreadProps['onReply']; onReact?: CommentThreadProps['onReact']; onDelete?: CommentThreadProps['onDelete']; depth?: number }) { const [replying, setReplying] = useState(false), [value, setValue] = useState(''); return <article className=\"hf-comment\" style={{ '--hf-comment-depth': Math.min(depth, 3) } as React.CSSProperties}><Avatar src={item.author.avatar} name={item.author.name} size=\"sm\" /><div><header><strong>{item.author.name}</strong>{item.timestamp && <time>{item.timestamp}</time>}{item.edited && <small>已编辑</small>}</header><div className=\"hf-comment__content\">{item.content}</div><footer>{item.reactions?.map((reaction) => <button type=\"button\" className={reaction.active ? 'is-active' : ''} aria-pressed={reaction.active} key={reaction.emoji} onClick={() => onReact?.(item.id, reaction.emoji)}>{reaction.emoji} {reaction.count}</button>)}{onReply && <button type=\"button\" onClick={() => setReplying(!replying)}>回复</button>}{onDelete && <button type=\"button\" onClick={() => onDelete(item.id)}>删除</button>}</footer>{replying && <form className=\"hf-comment__reply\" onSubmit={(event) => { event.preventDefault(); if (value.trim()) { onReply?.(item.id, value.trim()); setValue(''); setReplying(false); } }}><textarea autoFocus aria-label={`回复 ${item.author.name}`} value={value} onChange={(event) => setValue(event.target.value)} /><div><button type=\"button\" onClick={() => setReplying(false)}>取消</button><button type=\"submit\" disabled={!value.trim()}>发送回复</button></div></form>}{item.replies?.map((reply) => <Comment key={reply.id} item={reply} onReply={onReply} onReact={onReact} onDelete={onDelete} depth={depth + 1} />)}</div></article>; }\nexport function CommentThread({ comments, onReply, onReact, onDelete, empty = '暂无评论,开始讨论吧' }: CommentThreadProps) { return <section className=\"hf-comment-thread\" aria-label=\"评论讨论\">{comments.length ? comments.map((item) => <Comment key={item.id} item={item} onReply={onReply} onReact={onReact} onDelete={onDelete} />) : <div className=\"hf-comment-thread__empty\">{empty}</div>}</section>; }\n\nexport interface ActivityItem { id: string; actor: ReactNode; action: ReactNode; target?: ReactNode; timestamp?: ReactNode; avatar?: ReactNode; icon?: ReactNode; detail?: ReactNode }\nexport interface ActivityFeedProps { items: readonly ActivityItem[]; grouped?: boolean; empty?: ReactNode }\nexport function ActivityFeed({ items, grouped, empty = '暂无动态' }: ActivityFeedProps) { if (!items.length) return <div className=\"hf-activity-feed__empty\">{empty}</div>; return <ol className={`hf-activity-feed${grouped ? ' is-grouped' : ''}`}>{items.map((item) => <li key={item.id}><span className=\"hf-activity-feed__marker\">{item.avatar ?? item.icon ?? '•'}</span><div><p><strong>{item.actor}</strong> {item.action} {item.target && <b>{item.target}</b>}</p>{item.timestamp && <time>{item.timestamp}</time>}{item.detail && <div>{item.detail}</div>}</div></li>)}</ol>; }\n\nexport type ApprovalStatus = 'pending' | 'approved' | 'rejected' | 'skipped';\nexport interface ApprovalStep { id: string; title: ReactNode; approver?: ReactNode; status: ApprovalStatus; timestamp?: ReactNode; comment?: ReactNode }\nexport interface ApprovalFlowProps { steps: readonly ApprovalStep[]; currentId?: string; onApprove?: (id: string) => void; onReject?: (id: string) => void; orientation?: 'horizontal' | 'vertical' }\nexport function ApprovalFlow({ steps, currentId, onApprove, onReject, orientation = 'vertical' }: ApprovalFlowProps) { return <ol className={`hf-approval-flow hf-approval-flow--${orientation}`}>{steps.map((step, index) => <li className={`is-${step.status}${currentId === step.id ? ' is-current' : ''}`} key={step.id}><span>{step.status === 'approved' ? '✓' : step.status === 'rejected' ? '×' : index + 1}</span><div><header><strong>{step.title}</strong><i>{({ pending: '待审批', approved: '已通过', rejected: '已拒绝', skipped: '已跳过' } as const)[step.status]}</i></header>{step.approver && <p>{step.approver}</p>}{step.comment && <blockquote>{step.comment}</blockquote>}{step.timestamp && <time>{step.timestamp}</time>}{step.status === 'pending' && currentId === step.id && (onApprove || onReject) && <footer>{onReject && <button type=\"button\" onClick={() => onReject(step.id)}>拒绝</button>}{onApprove && <button type=\"button\" onClick={() => onApprove(step.id)}>通过</button>}</footer>}</div></li>)}</ol>; }\n\nexport interface AuditEvent { id: string; timestamp: ReactNode; actor: ReactNode; action: ReactNode; resource?: ReactNode; result?: 'success' | 'failure' | 'warning'; ip?: ReactNode; detail?: ReactNode }\nexport interface AuditLogProps { events: readonly AuditEvent[]; onSelect?: (id: string) => void; empty?: ReactNode; caption?: string }\nexport function AuditLog({ events, onSelect, empty = '暂无审计记录', caption = '审计日志' }: AuditLogProps) { return <div className=\"hf-audit-log\"><table><caption>{caption}</caption><thead><tr><th>时间</th><th>操作者</th><th>操作</th><th>资源</th><th>结果</th><th>IP</th></tr></thead><tbody>{events.map((event) => <tr key={event.id} tabIndex={onSelect ? 0 : undefined} onClick={() => onSelect?.(event.id)} onKeyDown={(key) => { if (onSelect && (key.key === 'Enter' || key.key === ' ')) { key.preventDefault(); onSelect(event.id); } }}><td>{event.timestamp}</td><td>{event.actor}</td><td><strong>{event.action}</strong>{event.detail && <small>{event.detail}</small>}</td><td>{event.resource ?? '—'}</td><td><span className={`is-${event.result ?? 'success'}`}>{event.result === 'failure' ? '失败' : event.result === 'warning' ? '警告' : '成功'}</span></td><td><code>{event.ip ?? '—'}</code></td></tr>)}{!events.length && <tr><td colSpan={6} className=\"hf-audit-log__empty\">{empty}</td></tr>}</tbody></table></div>; }\n","import { useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { Avatar } from './Content';\n\nexport interface FileItem { id: string; name: ReactNode; type: 'folder' | 'file'; children?: readonly FileItem[]; size?: ReactNode; modified?: ReactNode; icon?: ReactNode }\ntype VisibleFileItem = { item: FileItem; level: number; parentId?: string };\n\nexport function FileExplorer({ items, selectedId, onSelect, empty = '暂无文件' }: { items: readonly FileItem[]; selectedId?: string; onSelect?: (id: string) => void; empty?: ReactNode }) {\n const [open, setOpen] = useState<readonly string[]>([]);\n const itemRefs = useRef(new Map<string, HTMLButtonElement>());\n const visible = useMemo(() => {\n const result: VisibleFileItem[] = [];\n const visit = (nodes: readonly FileItem[], level: number, parentId?: string) => nodes.forEach((item) => {\n result.push({ item, level, parentId });\n if (item.children?.length && open.includes(item.id)) visit(item.children, level + 1, item.id);\n });\n visit(items, 1);\n return result;\n }, [items, open]);\n const toggle = (id: string) => setOpen((value) => value.includes(id) ? value.filter((key) => key !== id) : [...value, id]);\n const focusAt = (index: number) => itemRefs.current.get(visible[Math.max(0, Math.min(visible.length - 1, index))]?.item.id ?? '')?.focus();\n const onKeyDown = (event: KeyboardEvent<HTMLButtonElement>, entry: VisibleFileItem, index: number) => {\n const expandable = Boolean(entry.item.children?.length);\n if (event.key === 'ArrowDown') focusAt(index + 1);\n else if (event.key === 'ArrowUp') focusAt(index - 1);\n else if (event.key === 'Home') focusAt(0);\n else if (event.key === 'End') focusAt(visible.length - 1);\n else if (event.key === 'ArrowRight' && expandable) open.includes(entry.item.id) ? focusAt(index + 1) : toggle(entry.item.id);\n else if (event.key === 'ArrowLeft') {\n if (expandable && open.includes(entry.item.id)) toggle(entry.item.id);\n else if (entry.parentId) itemRefs.current.get(entry.parentId)?.focus();\n else return;\n } else return;\n event.preventDefault();\n };\n return <div className=\"hf-file-explorer\" role=\"tree\" aria-label=\"文件目录\">\n {items.length ? <ul role=\"none\">{visible.map((entry, index) => {\n const { item, level } = entry; const expandable = Boolean(item.children?.length); const expanded = expandable && open.includes(item.id);\n return <li key={item.id} role=\"none\">\n <div className={selectedId === item.id ? 'is-selected' : ''} style={{ paddingLeft: (level - 1) * 18 + 7 }}>\n <span className=\"hf-file-explorer__toggle\" aria-hidden=\"true\">{expandable ? (expanded ? '⌄' : '›') : ''}</span>\n <button type=\"button\" role=\"treeitem\" aria-level={level} aria-selected={selectedId === item.id} aria-expanded={expandable ? expanded : undefined} ref={(node) => { if (node) itemRefs.current.set(item.id, node); else itemRefs.current.delete(item.id); }} onClick={() => { if (expandable) toggle(item.id); onSelect?.(item.id); }} onKeyDown={(event) => onKeyDown(event, entry, index)}>{item.icon ?? (item.type === 'folder' ? '▰' : '▤')}<span><strong>{item.name}</strong>{item.modified && <small>{item.modified}</small>}</span>{item.size && <i>{item.size}</i>}</button>\n </div>\n </li>;\n })}</ul> : <div>{empty}</div>}\n </div>;\n}\n\nexport function FilePreview({ name, type, children, size, modified, actions, empty = '选择文件后在此预览' }: { name?: ReactNode; type?: string; children?: ReactNode; size?: ReactNode; modified?: ReactNode; actions?: ReactNode; empty?: ReactNode }) { return <section className=\"hf-file-preview\">{name ? <><header><div><strong>{name}</strong><span>{[type, size, modified].filter(Boolean).join(' · ')}</span></div>{actions}</header><div className=\"hf-file-preview__body\">{children}</div></> : <div className=\"hf-file-preview__empty\">▤<span>{empty}</span></div>}</section>; }\n\nexport interface VersionItem { id: string; version: string; author: { name: string; avatar?: string }; timestamp: ReactNode; description?: ReactNode; current?: boolean; tags?: readonly string[] }\nexport function VersionHistory({ versions, selectedId, onSelect, onRestore }: { versions: readonly VersionItem[]; selectedId?: string; onSelect?: (id: string) => void; onRestore?: (id: string) => void }) { return <ol className=\"hf-version-history\">{versions.map((item) => <li className={`${item.current ? 'is-current' : ''}${selectedId === item.id ? ' is-selected' : ''}`} key={item.id}><button type=\"button\" onClick={() => onSelect?.(item.id)}><span /><div><header><strong>{item.version}</strong>{item.current && <i>当前版本</i>}<time>{item.timestamp}</time></header><p><Avatar name={item.author.name} src={item.author.avatar} size=\"sm\" />{item.author.name}</p>{item.description && <div>{item.description}</div>}{item.tags?.map((tag) => <small key={tag}>{tag}</small>)}</div></button>{onRestore && !item.current && <button type=\"button\" onClick={() => onRestore(item.id)}>恢复</button>}</li>)}</ol>; }\n\nexport type PermissionLevel = 'none' | 'view' | 'comment' | 'edit' | 'admin';\nexport interface PermissionSubject { id: string; name: ReactNode; description?: ReactNode; avatar?: ReactNode }\nexport interface PermissionResource { id: string; name: ReactNode }\nexport function PermissionMatrix({ subjects, resources, value, onChange, disabled }: { subjects: readonly PermissionSubject[]; resources: readonly PermissionResource[]; value: Readonly<Record<string, Readonly<Record<string, PermissionLevel>>>>; onChange: (subjectId: string, resourceId: string, level: PermissionLevel) => void; disabled?: boolean }) { return <div className=\"hf-permission-matrix\"><table><thead><tr><th>成员或角色</th>{resources.map((item) => <th key={item.id}>{item.name}</th>)}</tr></thead><tbody>{subjects.map((subject) => <tr key={subject.id}><th><span>{subject.avatar}</span><div><strong>{subject.name}</strong>{subject.description && <small>{subject.description}</small>}</div></th>{resources.map((resource) => <td key={resource.id}><select aria-label={`${String(subject.name)} 对 ${String(resource.name)} 的权限`} disabled={disabled} value={value[subject.id]?.[resource.id] ?? 'none'} onChange={(event) => onChange(subject.id, resource.id, event.target.value as PermissionLevel)}><option value=\"none\">无权限</option><option value=\"view\">查看</option><option value=\"comment\">评论</option><option value=\"edit\">编辑</option><option value=\"admin\">管理</option></select></td>)}</tr>)}</tbody></table></div>; }\n\nexport interface MemberOption { id: string; name: string; avatar?: string; description?: ReactNode }\nexport function MemberPicker({ members, value, onChange, label = '添加成员', disabled }: { members: readonly MemberOption[]; value: readonly string[]; onChange: (ids: string[]) => void; label?: string; disabled?: boolean }) { const [query, setQuery] = useState(''); const results = useMemo(() => members.filter((item) => !value.includes(item.id) && `${item.name} ${String(item.description ?? '')}`.toLowerCase().includes(query.toLowerCase())), [members, query, value]); return <div className=\"hf-member-picker\"><div>{value.map((id) => { const item = members.find((member) => member.id === id); return item && <span key={id}><Avatar name={item.name} src={item.avatar} size=\"sm\" />{item.name}<button type=\"button\" disabled={disabled} aria-label={`移除 ${item.name}`} onClick={() => onChange(value.filter((key) => key !== id))}>×</button></span>; })}</div><input aria-label={label} value={query} disabled={disabled} placeholder={label} onChange={(event) => setQuery(event.target.value)} />{query && <div className=\"hf-member-picker__menu\">{results.map((item) => <button type=\"button\" key={item.id} onClick={() => { onChange([...value, item.id]); setQuery(''); }}><Avatar name={item.name} src={item.avatar} size=\"sm\" /><span><strong>{item.name}</strong>{item.description && <small>{item.description}</small>}</span></button>)}{!results.length && <p>没有匹配成员</p>}</div>}</div>; }\n\nexport type ShareScope = 'restricted' | 'organization' | 'public';\nexport function SharePanel({ scope, onScopeChange, members, onCopyLink, linkCopied, footer }: { scope: ShareScope; onScopeChange: (scope: ShareScope) => void; members?: ReactNode; onCopyLink?: () => void; linkCopied?: boolean; footer?: ReactNode }) { return <section className=\"hf-share-panel\"><header><strong>共享设置</strong><span>控制谁可以访问此内容</span></header><div className=\"hf-share-panel__scope\">{(['restricted','organization','public'] as const).map((item) => <label key={item}><input type=\"radio\" name=\"hf-share-scope\" checked={scope === item} onChange={() => onScopeChange(item)} /><span><strong>{{ restricted: '仅受邀成员', organization: '组织内成员', public: '拥有链接的任何人' }[item]}</strong><small>{{ restricted: '只有列表中的成员可以访问', organization: '同一组织成员均可访问', public: '无需登录即可访问' }[item]}</small></span></label>)}</div>{members && <div className=\"hf-share-panel__members\">{members}</div>}<footer><button type=\"button\" onClick={onCopyLink}>{linkCopied ? '链接已复制' : '复制链接'}</button>{footer}</footer></section>; }\n","import type { ReactNode } from \"react\";\nexport interface ScheduleEvent {\n id: string;\n title: ReactNode;\n start: string;\n end: string;\n color?: string;\n resourceId?: string;\n}\nexport function EventCard({\n event,\n onClick,\n}: {\n event: ScheduleEvent;\n onClick?: (id: string) => void;\n}) {\n return (\n <button\n type=\"button\"\n className=\"hf-event-card\"\n onClick={() => onClick?.(event.id)}\n >\n <strong>{event.title}</strong>\n <time>\n {event.start}–{event.end}\n </time>\n </button>\n );\n}\nexport function Scheduler({\n days,\n events,\n onEventClick,\n}: {\n days: readonly string[];\n events: readonly ScheduleEvent[];\n onEventClick?: (id: string) => void;\n}) {\n return (\n <div className=\"hf-scheduler\">\n {days.map((day) => (\n <section key={day}>\n <strong>{day}</strong>\n {events\n .filter((e) => e.start.startsWith(day))\n .map((e) => (\n <EventCard key={e.id} event={e} onClick={onEventClick} />\n ))}\n </section>\n ))}\n </div>\n );\n}\nexport interface CalendarResource {\n id: string;\n name: ReactNode;\n}\nexport function ResourceCalendar({\n resources,\n events,\n}: {\n resources: readonly CalendarResource[];\n events: readonly ScheduleEvent[];\n}) {\n return (\n <div className=\"hf-resource-calendar\">\n {resources.map((r) => (\n <section key={r.id}>\n <strong>{r.name}</strong>\n {events\n .filter((e) => e.resourceId === r.id)\n .map((e) => (\n <EventCard key={e.id} event={e} />\n ))}\n </section>\n ))}\n </div>\n );\n}\nexport interface RecurrenceValue {\n frequency: \"none\" | \"daily\" | \"weekly\" | \"monthly\";\n interval: number;\n end?: string;\n}\nexport function RecurrenceEditor({\n value,\n onChange,\n}: {\n value: RecurrenceValue;\n onChange: (v: RecurrenceValue) => void;\n}) {\n return (\n <div className=\"hf-recurrence\">\n <select\n aria-label=\"重复频率\"\n value={value.frequency}\n onChange={(e) =>\n onChange({\n ...value,\n frequency: e.target.value as RecurrenceValue[\"frequency\"],\n })\n }\n >\n <option value=\"none\">不重复</option>\n <option value=\"daily\">每天</option>\n <option value=\"weekly\">每周</option>\n <option value=\"monthly\">每月</option>\n </select>\n <input\n aria-label=\"重复间隔\"\n type=\"number\"\n min={1}\n value={value.interval}\n onChange={(e) => onChange({ ...value, interval: +e.target.value })}\n />\n </div>\n );\n}\nexport interface TimezoneOption {\n value: string;\n label: string;\n offset: string;\n}\nexport function TimezoneSelect({\n options,\n value,\n onChange,\n}: {\n options: readonly TimezoneOption[];\n value: string;\n onChange: (v: string) => void;\n}) {\n return (\n <select\n aria-label=\"时区\"\n className=\"hf-timezone\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {options.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label} ({o.offset})\n </option>\n ))}\n </select>\n );\n}\nexport type AvailabilityState =\n | \"available\"\n | \"busy\"\n | \"tentative\"\n | \"unavailable\";\nexport function AvailabilityGrid({\n people,\n slots,\n value,\n}: {\n people: readonly { id: string; name: ReactNode }[];\n slots: readonly string[];\n value: Readonly<Record<string, Readonly<Record<string, AvailabilityState>>>>;\n}) {\n return (\n <div className=\"hf-availability\">\n <table>\n <thead>\n <tr>\n <th>成员</th>\n {slots.map((s) => (\n <th key={s}>{s}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {people.map((p) => (\n <tr key={p.id}>\n <th>{p.name}</th>\n {slots.map((s) => (\n <td key={s}>\n <i className={`is-${value[p.id]?.[s] ?? \"unavailable\"}`} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","import type { ElementType, HTMLAttributes } from 'react';\n\nexport type TypographyVariant = 'display' | 'h1' | 'h2' | 'h3' | 'body' | 'body-sm' | 'caption' | 'code';\nexport interface TypographyProps extends HTMLAttributes<HTMLElement> { as?: 'h1' | 'h2' | 'h3' | 'h4' | 'p' | 'span' | 'code'; variant?: TypographyVariant; muted?: boolean; truncate?: boolean; }\n\nexport function Typography({ as, variant = 'body', muted, truncate, className = '', ...props }: TypographyProps) {\n const defaults: Partial<Record<TypographyVariant, ElementType>> = { display: 'h1', h1: 'h1', h2: 'h2', h3: 'h3', code: 'code' };\n const Tag: ElementType = as ?? defaults[variant] ?? 'p';\n return <Tag className={`hf-typography hf-typography--${variant}${muted ? ' is-muted' : ''}${truncate ? ' is-truncated' : ''} ${className}`} {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nexport interface NavigationItem {\n key: string;\n label: string;\n href?: string;\n icon?: ReactNode;\n description?: string;\n children?: readonly NavigationItem[];\n}\n\nexport interface NavigationSelectionProps {\n activeKey?: string;\n onItemSelect?: (item: NavigationItem) => void;\n}\n\nexport function activateNavigationItem(item: NavigationItem, onItemSelect?: (item: NavigationItem) => void) {\n onItemSelect?.(item);\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\n\nexport interface FloatingNavProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n brand: ReactNode;\n items: readonly NavigationItem[];\n action?: ReactNode;\n}\n\nexport function FloatingNav({ brand, items, action, activeKey, onItemSelect, className = '', ...props }: FloatingNavProps) {\n return (\n <nav className={`hf-floating-nav ${className}`.trim()} aria-label=\"主导航\" {...props}>\n <div className=\"hf-floating-nav__brand\">{brand}</div>\n <div className=\"hf-floating-nav__items\">\n {items.map((item) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} onClick={() => activateNavigationItem(item, onItemSelect)}>{item.label}</a>)}\n </div>\n {action && <div className=\"hf-floating-nav__action\">{action}</div>}\n </nav>\n );\n}\n","import { useState, type HTMLAttributes, type ReactNode } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n brand?: ReactNode;\n items: readonly NavigationItem[];\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n appearance?: 'flush' | 'floating' | 'inset';\n}\n\nexport function Sidebar({ brand, items, activeKey, collapsed, defaultCollapsed = false, onCollapsedChange, onItemSelect, appearance = 'flush', className = '', ...props }: SidebarProps) {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const isCollapsed = collapsed ?? internalCollapsed;\n const toggle = () => {\n const next = !isCollapsed;\n if (collapsed === undefined) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n };\n return (\n <aside className={`hf-sidebar hf-sidebar--${appearance} ${isCollapsed ? 'hf-sidebar--collapsed' : ''} ${className}`.trim()} {...props}>\n <div className=\"hf-sidebar__top\">{brand && <div className=\"hf-sidebar__brand\">{brand}</div>}<button type=\"button\" onClick={toggle} aria-label={isCollapsed ? '展开侧边栏' : '收起侧边栏'} aria-expanded={!isCollapsed}>‹</button></div>\n <nav aria-label=\"侧边导航\">\n {items.map((item) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} title={isCollapsed ? item.label : undefined} onClick={() => activateNavigationItem(item, onItemSelect)}><span className=\"hf-sidebar__icon\">{item.icon ?? item.label.slice(0, 1)}</span><span className=\"hf-sidebar__label\">{item.label}</span></a>)}\n </nav>\n </aside>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n items: readonly NavigationItem[];\n separator?: string;\n}\n\nexport function Breadcrumb({ items, separator = '/', onItemSelect, className = '', ...props }: BreadcrumbProps) {\n return (\n <nav className={`hf-breadcrumb ${className}`.trim()} aria-label=\"面包屑\" {...props}>\n <ol>{items.map((item, index) => {\n const current = index === items.length - 1;\n return <li key={item.key}>{current ? <span aria-current=\"page\">{item.label}</span> : <a href={item.href ?? '#'} onClick={() => activateNavigationItem(item, onItemSelect)}>{item.label}</a>}{!current && <i aria-hidden=\"true\">{separator}</i>}</li>;\n })}</ol>\n </nav>\n );\n}\n","import { useState, type HTMLAttributes } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\ninterface BaseMenuProps extends HTMLAttributes<HTMLDivElement>, NavigationSelectionProps {\n label: string;\n items: readonly NavigationItem[];\n}\n\nexport function DropdownMenu({ label, items, activeKey, onItemSelect, className = '', ...props }: BaseMenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false });\n return <div ref={ref} className={`hf-menu ${className}`.trim()} {...props}><button type=\"button\" aria-expanded={open} aria-haspopup=\"menu\" onClick={() => setOpen((value) => !value)}>{label}<span aria-hidden=\"true\">⌄</span></button>{open && <div className=\"hf-menu__panel\" role=\"menu\">{items.map((item) => <a key={item.key} role=\"menuitem\" href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} onClick={() => { activateNavigationItem(item, onItemSelect); setOpen(false); }}>{item.label}</a>)}</div>}</div>;\n}\n\nexport function MegaMenu({ label, items, onItemSelect, className = '', ...props }: BaseMenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false });\n return <div ref={ref} className={`hf-menu hf-mega-menu ${className}`.trim()} {...props}><button type=\"button\" aria-expanded={open} aria-haspopup=\"menu\" onClick={() => setOpen((value) => !value)}>{label}<span aria-hidden=\"true\">⌄</span></button>{open && <div className=\"hf-mega-menu__panel\" role=\"menu\">{items.map((group) => <section key={group.key}><h3>{group.label}</h3>{group.children?.map((item) => <a key={item.key} role=\"menuitem\" href={item.href ?? '#'} onClick={() => { activateNavigationItem(item, onItemSelect); setOpen(false); }}><span>{item.icon}</span><span><strong>{item.label}</strong>{item.description && <small>{item.description}</small>}</span></a>)}</section>)}</div>}</div>;\n}\n","import { useId, useState, type HTMLAttributes, type ReactNode } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface MobileNavigationProps extends HTMLAttributes<HTMLDivElement>, NavigationSelectionProps {\n brand: ReactNode;\n items: readonly NavigationItem[];\n mode?: 'drawer' | 'fullscreen';\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function MobileNavigation({ brand, items, mode = 'drawer', activeKey, open, onOpenChange, onItemSelect, className = '', ...props }: MobileNavigationProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpen = open ?? internalOpen;\n const panelId = useId();\n const setOpen = (next: boolean) => {\n if (open === undefined) setInternalOpen(next);\n onOpenChange?.(next);\n };\n const panelRef = useDismissibleLayer<HTMLElement>(isOpen, () => setOpen(false), true);\n return (\n <div className={`hf-mobile-nav ${className}`.trim()} {...props}>\n <div className=\"hf-mobile-nav__bar\"><div>{brand}</div><button type=\"button\" aria-label=\"打开导航\" aria-expanded={isOpen} aria-controls={panelId} onClick={() => setOpen(true)}><i /><i /><i /></button></div>\n {isOpen && <div className={`hf-mobile-nav__backdrop hf-mobile-nav__backdrop--${mode}`} onMouseDown={(event) => event.target === event.currentTarget && setOpen(false)}>\n <nav ref={panelRef} id={panelId} className=\"hf-mobile-nav__panel\" aria-label=\"移动导航\" tabIndex={-1}>\n <header><div>{brand}</div><button type=\"button\" aria-label=\"关闭导航\" onClick={() => setOpen(false)}>×</button></header>\n <div className=\"hf-mobile-nav__links\">{items.map((item, index) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} style={{ '--hf-nav-index': index } as React.CSSProperties} onClick={() => { activateNavigationItem(item, onItemSelect); setOpen(false); }}><span>{item.label}</span>{item.description && <small>{item.description}</small>}</a>)}</div>\n </nav>\n </div>}\n </div>\n );\n}\n","import { useEffect, useState, type HTMLAttributes } from 'react';\nimport type { NavigationItem, NavigationSelectionProps } from './types';\n\nexport interface ScrollspyProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n items: readonly NavigationItem[];\n rootMargin?: string;\n}\n\nexport function Scrollspy({ items, activeKey, onItemSelect, rootMargin = '-20% 0px -65%', className = '', ...props }: ScrollspyProps) {\n const [observedKey, setObservedKey] = useState(items[0]?.key);\n const currentKey = activeKey ?? observedKey;\n useEffect(() => {\n if (activeKey || !('IntersectionObserver' in window)) return;\n const observer = new IntersectionObserver((entries) => {\n const visible = entries.find((entry) => entry.isIntersecting);\n if (visible?.target.id) setObservedKey(visible.target.id);\n }, { rootMargin });\n items.forEach((item) => { const section = document.getElementById(item.key); if (section) observer.observe(section); });\n return () => observer.disconnect();\n }, [activeKey, items, rootMargin]);\n return <nav className={`hf-scrollspy ${className}`.trim()} aria-label=\"页内导航\" {...props}>{items.map((item) => <a key={item.key} href={item.href ?? `#${item.key}`} aria-current={currentKey === item.key ? 'location' : undefined} onClick={() => onItemSelect?.(item)}>{item.label}</a>)}</nav>;\n}\n","import { useEffect, useState, type HTMLAttributes, type ReactNode } from 'react';\nimport type { NavigationItem, NavigationSelectionProps } from './types';\n\nexport interface ShrinkNavProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n brand: ReactNode;\n items: readonly NavigationItem[];\n threshold?: number;\n action?: ReactNode;\n}\n\nexport function ShrinkNav({ brand, items, threshold = 48, action, activeKey, onItemSelect, className = '', ...props }: ShrinkNavProps) {\n const [compact, setCompact] = useState(false);\n useEffect(() => {\n let frame = 0;\n const update = () => { cancelAnimationFrame(frame); frame = requestAnimationFrame(() => setCompact(window.scrollY > threshold)); };\n update();\n window.addEventListener('scroll', update, { passive: true });\n return () => { cancelAnimationFrame(frame); window.removeEventListener('scroll', update); };\n }, [threshold]);\n return <nav className={`hf-shrink-nav ${compact ? 'hf-shrink-nav--compact' : ''} ${className}`.trim()} aria-label=\"滚动导航\" {...props}><div className=\"hf-shrink-nav__brand\">{brand}</div><div className=\"hf-shrink-nav__items\">{items.map((item) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} onClick={() => onItemSelect?.(item)}>{item.label}</a>)}</div>{action}</nav>;\n}\n","import { useId, type KeyboardEvent, type ReactNode } from 'react';\nexport interface TabItem<T extends string = string> { key: T; label: ReactNode; content: ReactNode; badge?: ReactNode; disabled?: boolean; icon?: ReactNode }\nexport interface TabsProps<T extends string = string> { items: readonly TabItem<T>[]; value: T; onChange: (value: T) => void; variant?: 'line' | 'card' | 'pill' | 'underline' | 'vertical' | 'scroll'; label?: string }\nexport function Tabs<T extends string>({ items, value, onChange, variant = 'line', label = '内容标签' }: TabsProps<T>) {\n const id = useId(); const active = items.find((item) => item.key === value) ?? items[0];\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => { if (!['ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(event.key)) return; event.preventDefault(); const enabled = items.filter((item) => !item.disabled); const current = enabled.findIndex((item) => item.key === value); const offset = event.key === 'ArrowLeft' || event.key === 'ArrowUp' ? -1 : 1; const next = enabled[(current + offset + enabled.length) % enabled.length]; if (next) onChange(next.key); };\n return <div className={`hf-tabs hf-tabs--${variant}`}><div role=\"tablist\" aria-label={label} onKeyDown={onKeyDown}>{items.map((item) => <button type=\"button\" role=\"tab\" id={`${id}-${item.key}`} aria-controls={`${id}-${item.key}-panel`} aria-selected={item.key === value} tabIndex={item.key === value ? 0 : -1} disabled={item.disabled} key={item.key} onClick={() => onChange(item.key)}>{item.icon}<span>{item.label}</span>{item.badge && <small>{item.badge}</small>}</button>)}</div>{active && <div role=\"tabpanel\" id={`${id}-${active.key}-panel`} aria-labelledby={`${id}-${active.key}`} tabIndex={0}>{active.content}</div>}</div>;\n}\n","import type { ReactNode } from 'react';\nexport interface StepItem { key: string; title: ReactNode; description?: ReactNode; disabled?: boolean; optional?: boolean }\nexport interface StepsProps { items: readonly StepItem[]; current: string; onChange?: (key: string) => void; orientation?: 'horizontal' | 'vertical' }\nexport function Steps({ items, current, onChange, orientation = 'horizontal' }: StepsProps) { const currentIndex = Math.max(0, items.findIndex((item) => item.key === current)); return <ol className={`hf-steps hf-steps--${orientation}`}>{items.map((item, index) => { const state = index < currentIndex ? 'complete' : index === currentIndex ? 'current' : 'upcoming'; return <li className={`is-${state}`} aria-current={state === 'current' ? 'step' : undefined} key={item.key}><button type=\"button\" disabled={item.disabled || !onChange} onClick={() => onChange?.(item.key)}><span>{state === 'complete' ? '✓' : index + 1}</span><span><strong>{item.title}</strong>{item.optional && <small>可选</small>}{item.description && <small>{item.description}</small>}</span></button></li>; })}</ol>; }\n","import { useEffect, useMemo, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nexport interface CommandItem { key: string; label: string; description?: string; group?: string; shortcut?: string; icon?: ReactNode; disabled?: boolean }\nexport interface CommandPaletteProps { open: boolean; onOpenChange: (open: boolean) => void; items: readonly CommandItem[]; onSelect: (key: string) => void; placeholder?: string }\nexport function CommandPalette({ open, onOpenChange, items, onSelect, placeholder = '输入命令或搜索…' }: CommandPaletteProps) {\n const [query, setQuery] = useState(''); const [active, setActive] = useState(0); const enabled = useMemo(() => items.filter((item) => !item.disabled && `${item.label} ${item.description ?? ''} ${item.group ?? ''}`.toLowerCase().includes(query.toLowerCase())), [items, query]); const dialogRef = useDismissibleLayer<HTMLDivElement>(open, () => onOpenChange(false), true);\n useEffect(() => { if (!open) { setQuery(''); setActive(0); } }, [open]);\n const keydown = (event: KeyboardEvent<HTMLInputElement>) => { if (!enabled.length) return; if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); setActive((current) => (current + (event.key === 'ArrowDown' ? 1 : -1) + enabled.length) % enabled.length); } else if (event.key === 'Home' || event.key === 'End') { event.preventDefault(); setActive(event.key === 'Home' ? 0 : enabled.length - 1); } else if (event.key === 'Enter') { event.preventDefault(); const item = enabled[active]; if (item) { onSelect(item.key); onOpenChange(false); } } };\n if (!open) return null;\n return createPortal(<div className=\"hf-command-backdrop\" onMouseDown={(event) => event.target === event.currentTarget && onOpenChange(false)}><div ref={dialogRef} tabIndex={-1} className=\"hf-command\" role=\"dialog\" aria-modal=\"true\" aria-label=\"命令面板\"><div className=\"hf-command__search\"><span aria-hidden=\"true\">⌕</span><input autoFocus role=\"combobox\" aria-expanded=\"true\" aria-controls=\"hf-command-list\" value={query} placeholder={placeholder} onChange={(event) => { setQuery(event.target.value); setActive(0); }} onKeyDown={keydown} /><kbd>Esc</kbd></div><div id=\"hf-command-list\" className=\"hf-command__list\" role=\"listbox\">{enabled.map((item, index) => <button type=\"button\" role=\"option\" aria-selected={index === active} key={item.key} onPointerMove={() => setActive(index)} onClick={() => { onSelect(item.key); onOpenChange(false); }}>{item.icon}<span><strong>{item.label}</strong>{item.description && <small>{item.description}</small>}</span>{item.shortcut && <kbd>{item.shortcut}</kbd>}</button>)}{!enabled.length && <div className=\"hf-command__empty\">没有匹配命令</div>}</div></div></div>, document.body);\n}\n","import type { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode } from 'react';\n\nexport interface GridProps extends HTMLAttributes<HTMLDivElement> {\n columns?: number | 'auto';\n minItemWidth?: number;\n gap?: number;\n}\n\nexport interface ContainerProps extends HTMLAttributes<HTMLDivElement> { size?: 'sm' | 'md' | 'lg' | 'full'; padding?: number; }\nexport function Container({ size = 'lg', padding = 24, className = '', style, ...props }: PropsWithChildren<ContainerProps>) {\n return <div className={`hf-container hf-container--${size} ${className}`.trim()} style={{ '--hf-container-padding': `${padding}px`, ...style } as CSSProperties} {...props} />;\n}\n\nexport interface StackProps extends HTMLAttributes<HTMLDivElement> { direction?: 'row' | 'column'; gap?: number; align?: CSSProperties['alignItems']; justify?: CSSProperties['justifyContent']; wrap?: boolean; }\nexport function Stack({ direction = 'column', gap = 12, align, justify, wrap = false, className = '', style, ...props }: PropsWithChildren<StackProps>) {\n return <div className={`hf-stack hf-stack--${direction} ${className}`.trim()} style={{ '--hf-stack-gap': `${gap}px`, alignItems: align, justifyContent: justify, flexWrap: wrap ? 'wrap' : undefined, ...style } as CSSProperties} {...props} />;\n}\n\nexport function Grid({ columns = 'auto', minItemWidth = 240, gap = 16, className = '', style, ...props }: PropsWithChildren<GridProps>) {\n const gridStyle = {\n '--hf-grid-columns': columns === 'auto' ? `repeat(auto-fit, minmax(min(100%, ${minItemWidth}px), 1fr))` : `repeat(${columns}, minmax(0, 1fr))`,\n '--hf-grid-gap': `${gap}px`,\n ...style,\n } as CSSProperties;\n return <div className={`hf-grid ${className}`.trim()} style={gridStyle} {...props} />;\n}\n\nexport interface MasonryProps extends HTMLAttributes<HTMLDivElement> {\n columns?: number;\n minColumnWidth?: number;\n gap?: number;\n}\n\nexport function Masonry({ columns, minColumnWidth = 260, gap = 16, className = '', style, children, ...props }: PropsWithChildren<MasonryProps>) {\n const masonryStyle = {\n '--hf-masonry-columns': columns ?? 'auto',\n '--hf-masonry-width': `${minColumnWidth}px`,\n '--hf-masonry-gap': `${gap}px`,\n ...style,\n } as CSSProperties;\n return <div className={`hf-masonry ${className}`.trim()} style={masonryStyle} {...props}>{children}</div>;\n}\n\nexport interface PageLayoutProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'single' | 'sidebar-left' | 'sidebar-right' | 'split' | 'dashboard' | 'full-screen';\n sidebar?: ReactNode;\n header?: ReactNode;\n sidebarWidth?: number;\n}\n\nexport function PageLayout({ variant = 'single', sidebar, header, sidebarWidth = 280, className = '', style, children, ...props }: PropsWithChildren<PageLayoutProps>) {\n const layoutStyle = { '--hf-layout-sidebar': `${sidebarWidth}px`, ...style } as CSSProperties;\n return <div className={`hf-page-layout hf-page-layout--${variant} ${className}`.trim()} style={layoutStyle} {...props}>{header && <header className=\"hf-page-layout__header\">{header}</header>}{sidebar && <aside className=\"hf-page-layout__sidebar\">{sidebar}</aside>}<main className=\"hf-page-layout__main\">{children}</main></div>;\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n width?: number | string;\n height?: number | string;\n radius?: number | string;\n circle?: boolean;\n animated?: boolean;\n}\n\nexport function Skeleton({ width = '100%', height = 16, radius, circle, animated = true, className = '', style, ...props }: SkeletonProps) {\n const value = (input: number | string) => typeof input === 'number' ? `${input}px` : input;\n return <span aria-hidden=\"true\" className={`hf-skeleton ${animated ? 'is-animated' : ''} ${circle ? 'is-circle' : ''} ${className}`.trim()} style={{ width: value(width), height: value(height), borderRadius: radius ? value(radius) : undefined, ...style } as CSSProperties} {...props} />;\n}\n","import type { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode } from 'react';\n\nexport function Spinner({ label = '正在加载', size = 20, className = '' }: { label?: string; size?: number; className?: string }) {\n return <span className={`hf-loading-spinner ${className}`.trim()} role=\"status\" aria-label={label} style={{ '--hf-loading-size': `${size}px` } as CSSProperties} />;\n}\n\nexport function LoadingDots({ label = '正在加载' }: { label?: string }) {\n return <span className=\"hf-loading-dots\" role=\"status\" aria-label={label}><i /><i /><i /></span>;\n}\n\nexport function ProgressBar({ value, label, indeterminate = false, className = '' }: { value?: number; label?: ReactNode; indeterminate?: boolean; className?: string }) {\n const percent = Math.min(100, Math.max(0, value ?? 0));\n return <div className={`hf-progress ${indeterminate ? 'is-indeterminate' : ''} ${className}`.trim()}>{label && <div className=\"hf-progress__label\"><span>{label}</span>{!indeterminate && <strong>{percent}%</strong>}</div>}<div className=\"hf-progress__track\" role=\"progressbar\" aria-valuemin={0} aria-valuemax={100} aria-valuenow={indeterminate ? undefined : percent}><i style={{ '--hf-progress': `${percent}%` } as CSSProperties} /></div></div>;\n}\n\nexport function ProgressRing({ value, size = 72, label }: { value: number; size?: number; label?: string }) {\n const percent = Math.min(100, Math.max(0, value));\n return <span className=\"hf-progress-ring\" role=\"progressbar\" aria-label={label} aria-valuemin={0} aria-valuemax={100} aria-valuenow={percent} style={{ '--hf-ring-value': `${percent * 3.6}deg`, '--hf-ring-size': `${size}px` } as CSSProperties}><strong>{percent}%</strong></span>;\n}\n\nexport interface LoadingOverlayProps extends HTMLAttributes<HTMLDivElement> { active?: boolean; label?: string }\nexport function LoadingOverlay({ active = true, label = '正在准备内容', className = '', children, ...props }: PropsWithChildren<LoadingOverlayProps>) {\n return <div className={`hf-loading-overlay ${className}`.trim()} aria-busy={active} {...props}>{children}{active && <div className=\"hf-loading-overlay__veil\" role=\"status\"><Spinner label={label} size={28} /><span>{label}</span></div>}</div>;\n}\n","import { forwardRef, useEffect, useId, useRef, useState, type ChangeEvent, type KeyboardEvent, type ReactNode, type SelectHTMLAttributes } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface SelectOption { label: ReactNode; value: string; disabled?: boolean }\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'children'> { label?: string; hint?: string; error?: string; options: readonly SelectOption[]; placeholder?: string }\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\n { id, label, hint, error, options, placeholder, className = '', value, defaultValue, onChange, disabled, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, ...props }, forwardedRef,\n) {\n const generatedId = useId(); const inputId = id ?? generatedId; const triggerId = `${inputId}-trigger`; const listboxId = `${inputId}-listbox`; const descriptionId = `${inputId}-description`;\n const [open, setOpen] = useState(false);\n const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false }); const nativeRef = useRef<HTMLSelectElement | null>(null);\n const [innerValue, setInnerValue] = useState(() => String(defaultValue ?? (placeholder ? '' : options.find((option) => !option.disabled)?.value ?? '')));\n const selectedValue = value === undefined ? innerValue : String(value); const selectedOption = options.find((option) => option.value === selectedValue);\n const enabledIndices = options.map((option, index) => option.disabled ? -1 : index).filter((index) => index >= 0); const selectedIndex = options.findIndex((option) => option.value === selectedValue);\n const [activeIndex, setActiveIndex] = useState(selectedIndex >= 0 ? selectedIndex : enabledIndices[0] ?? -1);\n const assignRef = (node: HTMLSelectElement | null) => { nativeRef.current = node; if (typeof forwardedRef === 'function') forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; };\n const handleNativeChange = (event: ChangeEvent<HTMLSelectElement>) => { if (value === undefined) setInnerValue(event.currentTarget.value); onChange?.(event); };\n const choose = (nextValue: string) => { const native = nativeRef.current; if (!native) return; Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set?.call(native, nextValue); native.dispatchEvent(new Event('change', { bubbles: true })); if (value === undefined) setInnerValue(nextValue); setOpen(false); window.requestAnimationFrame(() => document.getElementById(triggerId)?.focus()); };\n useEffect(() => { if (selectedIndex >= 0) setActiveIndex(selectedIndex); }, [selectedIndex]);\n const move = (direction: 1 | -1) => { if (!enabledIndices.length) return; const current = enabledIndices.indexOf(activeIndex); const next = current < 0 ? 0 : (current + direction + enabledIndices.length) % enabledIndices.length; setActiveIndex(enabledIndices[next]!); };\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); if (!open) setOpen(true); move(event.key === 'ArrowDown' ? 1 : -1); }\n else if ((event.key === 'Enter' || event.key === ' ') && open) { event.preventDefault(); const option = options[activeIndex]; if (option && !option.disabled) choose(option.value); }\n else if (event.key === 'Escape' && open) { event.preventDefault(); setOpen(false); }\n else if (event.key === 'Home' && open && enabledIndices.length) { event.preventDefault(); setActiveIndex(enabledIndices[0]!); }\n else if (event.key === 'End' && open && enabledIndices.length) { event.preventDefault(); setActiveIndex(enabledIndices[enabledIndices.length - 1]!); }\n else if (event.key === 'Tab') setOpen(false);\n };\n return <div className={`hf-field ${className}`.trim()} ref={rootRef}>\n {label && <label className=\"hf-field__label\" htmlFor={triggerId}>{label}</label>}\n <div className={`hf-select-shell ${open ? 'hf-select-shell--open' : ''} ${error ? 'hf-select-shell--error' : ''}`}>\n <select ref={assignRef} id={inputId} className=\"hf-select-native\" tabIndex={-1} aria-hidden=\"true\" value={selectedValue} disabled={disabled} onChange={handleNativeChange} {...props}>{placeholder && <option value=\"\" disabled>{placeholder}</option>}{options.map((option) => <option key={option.value} value={option.value} disabled={option.disabled}>{typeof option.label === 'string' ? option.label : option.value}</option>)}</select>\n <button id={triggerId} type=\"button\" className=\"hf-select\" disabled={disabled} aria-label={ariaLabel} aria-labelledby={ariaLabelledBy} aria-haspopup=\"listbox\" aria-expanded={open} aria-controls={open ? listboxId : undefined} aria-activedescendant={open && activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined} aria-invalid={Boolean(error)} aria-describedby={hint || error ? descriptionId : undefined} onClick={() => { setActiveIndex(selectedIndex >= 0 ? selectedIndex : enabledIndices[0] ?? -1); setOpen((current) => !current); }} onKeyDown={handleKeyDown}><span className={!selectedOption ? 'hf-select__placeholder' : ''}>{selectedOption?.label ?? placeholder ?? '请选择'}</span><svg className=\"hf-select__chevron\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\" aria-hidden=\"true\"><path d={open ? 'm4.5 9.75 3.5-3.5 3.5 3.5' : 'm4.5 6.25 3.5 3.5 3.5-3.5'} stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg></button>\n {open && <div id={listboxId} className=\"hf-select-menu\" role=\"listbox\" aria-labelledby={triggerId}>{options.map((option, index) => <button id={`${listboxId}-option-${index}`} type=\"button\" role=\"option\" aria-selected={option.value === selectedValue} disabled={option.disabled} className={index === activeIndex ? 'is-active' : ''} key={option.value} onPointerMove={() => !option.disabled && setActiveIndex(index)} onClick={() => choose(option.value)}><span>{option.label}</span>{option.value === selectedValue && <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\" aria-hidden=\"true\"><path d=\"m3.5 8 3 3 6-6\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>}</button>)}</div>}\n </div>\n {(error || hint) && <span id={descriptionId} className={`hf-field__hint ${error ? 'hf-field__hint--error' : ''}`}>{error ?? hint}</span>}\n </div>;\n});\n","import { useId, useState, type ReactNode } from 'react';\nimport type { SelectOption } from './Select';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface MultiSelectProps { label?: string; options: readonly SelectOption[]; value: readonly string[]; onChange: (value: string[]) => void; placeholder?: string; max?: number; hint?: ReactNode; disabled?: boolean }\nexport function MultiSelect({ label, options, value, onChange, placeholder = '请选择', max, hint, disabled }: MultiSelectProps) {\n const [open, setOpen] = useState(false); const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false }); const listId = useId();\n const toggle = (next: string) => { const selected = value.includes(next); if (!selected && max && value.length >= max) return; onChange(selected ? value.filter((item) => item !== next) : [...value, next]); };\n return <div className=\"hf-field hf-multiselect\" ref={rootRef}>{label && <span className=\"hf-field__label\">{label}</span>}<div className=\"hf-multiselect__trigger\" role=\"combobox\" tabIndex={disabled ? -1 : 0} aria-disabled={disabled} aria-expanded={open} aria-controls={listId} onClick={() => !disabled && setOpen(!open)} onKeyDown={(event) => { if (!disabled && (event.key === 'Enter' || event.key === ' ')) { event.preventDefault(); setOpen(!open); } }}><span>{value.length ? value.map((item) => { const option = options.find((candidate) => candidate.value === item); return <i key={item}>{option?.label}<button type=\"button\" aria-label={`移除 ${String(option?.label)}`} onClick={(event) => { event.stopPropagation(); toggle(item); }}>×</button></i>; }) : <em>{placeholder}</em>}</span><Icon name=\"chevron-down\" size={16} className=\"hf-multiselect__chevron\" /></div>{open && <div id={listId} className=\"hf-multiselect__menu\" role=\"listbox\" aria-multiselectable=\"true\">{options.map((option) => <button type=\"button\" role=\"option\" aria-selected={value.includes(option.value)} key={option.value} disabled={option.disabled} onClick={() => toggle(option.value)}><span>{option.label}</span><i>{value.includes(option.value) ? '✓' : ''}</i></button>)}</div>}{hint && <span className=\"hf-field__hint\">{hint}</span>}</div>;\n}\n","import { useId, type ReactNode } from 'react';\n\nexport interface ChoiceOption<T extends string = string> {\n label: ReactNode;\n value: T;\n description?: ReactNode;\n disabled?: boolean;\n}\n\ninterface ChoiceGroupProps<T extends string> {\n label?: string;\n options: readonly ChoiceOption<T>[];\n value?: T | T[];\n defaultValue?: T | T[];\n onChange?: (value: T | T[]) => void;\n type?: 'radio' | 'checkbox';\n direction?: 'row' | 'column';\n disabled?: boolean;\n name?: string;\n}\n\nexport function ChoiceGroup<T extends string>({ label, options, value, defaultValue, onChange, type = 'radio', direction = 'column', disabled, name }: ChoiceGroupProps<T>) {\n const id = useId();\n const groupName = name ?? id;\n const values = Array.isArray(value) ? value : value ? [value] : undefined;\n const defaults = Array.isArray(defaultValue) ? defaultValue : defaultValue ? [defaultValue] : [];\n return <fieldset className={`hf-choice-group hf-choice-group--${direction}`} disabled={disabled}>\n {label && <legend>{label}</legend>}\n {options.map((option) => {\n const checked = values?.includes(option.value);\n return <label className=\"hf-choice\" key={option.value}>\n <input type={type} name={type === 'radio' ? groupName : `${groupName}-${option.value}`} value={option.value} checked={checked} defaultChecked={values ? undefined : defaults.includes(option.value)} disabled={option.disabled} onChange={(event) => {\n if (type === 'radio') onChange?.(option.value);\n else {\n const next = new Set(values ?? defaults);\n event.currentTarget.checked ? next.add(option.value) : next.delete(option.value);\n onChange?.([...next]);\n }\n }} />\n <span className=\"hf-choice__control\" aria-hidden=\"true\" />\n <span className=\"hf-choice__copy\"><strong>{option.label}</strong>{option.description && <small>{option.description}</small>}</span>\n </label>;\n })}\n </fieldset>;\n}\n\nexport function RadioGroup<T extends string>(props: Omit<ChoiceGroupProps<T>, 'type' | 'value' | 'defaultValue' | 'onChange'> & { value?: T; defaultValue?: T; onChange?: (value: T) => void }) {\n return <ChoiceGroup {...props} type=\"radio\" onChange={(next) => props.onChange?.(next as T)} />;\n}\n\nexport function CheckboxGroup<T extends string>(props: Omit<ChoiceGroupProps<T>, 'type' | 'value' | 'defaultValue' | 'onChange'> & { value?: T[]; defaultValue?: T[]; onChange?: (value: T[]) => void }) {\n return <ChoiceGroup {...props} type=\"checkbox\" onChange={(next) => props.onChange?.(next as T[])} />;\n}\n","import { useState, type FormEvent } from 'react';\nimport { Input, type InputProps } from '../components/Input';\n\nexport interface ValidationRule {\n validate: (value: string) => boolean;\n message: string;\n}\n\nexport interface ValidatedInputProps extends Omit<InputProps, 'error' | 'onChange' | 'onBlur'> {\n value: string;\n rules: readonly ValidationRule[];\n validateOn?: 'blur' | 'change';\n onChange: (value: string) => void;\n onValidityChange?: (valid: boolean) => void;\n}\n\nexport function validateValue(value: string, rules: readonly ValidationRule[]) {\n return rules.find((rule) => !rule.validate(value))?.message;\n}\n\nexport function ValidatedInput({ value, rules, validateOn = 'blur', onChange, onValidityChange, ...props }: ValidatedInputProps) {\n const [touched, setTouched] = useState(false);\n const error = touched ? validateValue(value, rules) : undefined;\n const update = (next: string) => {\n onChange(next);\n if (validateOn === 'change') setTouched(true);\n onValidityChange?.(!validateValue(next, rules));\n };\n return <Input {...props} value={value} error={error} onChange={(event) => update(event.target.value)} onBlur={() => setTouched(true)} />;\n}\n\nexport function validateForm(event: FormEvent<HTMLFormElement>) {\n if (!event.currentTarget.checkValidity()) {\n event.preventDefault();\n event.currentTarget.reportValidity();\n return false;\n }\n return true;\n}\n","import { forwardRef, useId, type TextareaHTMLAttributes, type ReactNode } from 'react';\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> { label?: ReactNode; hint?: ReactNode; error?: ReactNode; resize?: 'none' | 'vertical' | 'both'; }\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea({ label, hint, error, resize = 'vertical', id, className = '', ...props }, ref) {\n const generated = useId(); const fieldId = id ?? generated; const message = error ?? hint; const messageId = message ? `${fieldId}-message` : undefined;\n return <label className=\"hf-field\" htmlFor={fieldId}>{label && <span className=\"hf-field__label\">{label}</span>}<textarea ref={ref} id={fieldId} className={`hf-textarea hf-textarea--${resize}${error ? ' hf-textarea--error' : ''} ${className}`} aria-invalid={error ? true : undefined} aria-describedby={messageId} {...props} />{message && <span id={messageId} className={`hf-field__hint${error ? ' hf-field__hint--error' : ''}`}>{message}</span>}</label>;\n});\n","import { forwardRef, useEffect, useRef, type InputHTMLAttributes, type ReactNode } from 'react';\ntype BaseProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & { label: ReactNode; description?: ReactNode };\nexport const Checkbox = forwardRef<HTMLInputElement, BaseProps & { indeterminate?: boolean }>(function Checkbox({ label, description, indeterminate, className = '', ...props }, forwardedRef) {\n const local = useRef<HTMLInputElement>(null); useEffect(() => { if (local.current) local.current.indeterminate = Boolean(indeterminate); }, [indeterminate]);\n const setRef = (node: HTMLInputElement | null) => { local.current = node; if (typeof forwardedRef === 'function') forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; };\n return <label className={`hf-choice-control ${className}`}><input ref={setRef} type=\"checkbox\" {...props} /><span className=\"hf-choice-control__mark\"><IconCheck /></span><span><strong>{label}</strong>{description && <small>{description}</small>}</span></label>;\n});\nexport const Radio = forwardRef<HTMLInputElement, BaseProps>(function Radio({ label, description, className = '', ...props }, ref) { return <label className={`hf-choice-control hf-choice-control--radio ${className}`}><input ref={ref} type=\"radio\" {...props} /><span className=\"hf-choice-control__mark\"><i /></span><span><strong>{label}</strong>{description && <small>{description}</small>}</span></label>; });\nfunction IconCheck() { return <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"m3.5 8 3 3 6-6\" /></svg>; }\n","import {\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nconst iso = (date: Date) =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n\nexport interface CalendarProps {\n value?: string;\n onChange?: (value: string) => void;\n min?: string;\n max?: string;\n className?: string;\n}\n\nexport function Calendar({ value, onChange, min, max, className = '' }: CalendarProps) {\n const initial = value ? new Date(`${value}T00:00:00`) : new Date();\n const [view, setView] = useState(new Date(initial.getFullYear(), initial.getMonth(), 1));\n const first = view.getDay();\n const days = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();\n const cells = Array.from(\n { length: Math.ceil((first + days) / 7) * 7 },\n (_, index) => index - first + 1,\n );\n\n return (\n <div className={`hf-calendar ${className}`}>\n <header>\n <button\n type=\"button\"\n aria-label=\"上个月\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1))}\n >\n <Icon name=\"chevron-down\" className=\"hf-calendar__prev\" />\n </button>\n <strong>{view.getFullYear()} 年 {view.getMonth() + 1} 月</strong>\n <button\n type=\"button\"\n aria-label=\"下个月\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1))}\n >\n <Icon name=\"chevron-down\" className=\"hf-calendar__next\" />\n </button>\n </header>\n <div className=\"hf-calendar__week\">\n {'日一二三四五六'.split('').map((day) => <span key={day}>{day}</span>)}\n </div>\n <div className=\"hf-calendar__days\">\n {cells.map((day, index) => {\n if (day < 1 || day > days) return <span key={index} />;\n const date = iso(new Date(view.getFullYear(), view.getMonth(), day));\n const disabled = Boolean((min && date < min) || (max && date > max));\n const stateClass = date === value ? 'is-selected' : date === iso(new Date()) ? 'is-today' : '';\n return (\n <button\n type=\"button\"\n key={date}\n disabled={disabled}\n className={stateClass}\n aria-pressed={date === value}\n onClick={() => onChange?.(date)}\n >\n {day}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface DatePickerProps {\n label?: ReactNode;\n value?: string;\n onChange: (value: string) => void;\n placeholder?: string;\n min?: string;\n max?: string;\n error?: ReactNode;\n}\n\nexport function DatePicker({\n label,\n value,\n onChange,\n placeholder = '选择日期',\n min,\n max,\n error,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), {\n autoFocus: false,\n });\n return (\n <div ref={rootRef} className=\"hf-field hf-date-picker\">\n {label && <span className=\"hf-field__label\">{label}</span>}\n <button\n type=\"button\"\n className={`hf-picker-trigger${error ? ' is-error' : ''}`}\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n >\n <span className={value ? '' : 'is-placeholder'}>{value || placeholder}</span>\n <Icon name=\"chevron-down\" size={16} />\n </button>\n {open && (\n <div className=\"hf-date-picker__panel\">\n <Calendar\n value={value}\n min={min}\n max={max}\n onChange={(next) => {\n onChange(next);\n setOpen(false);\n }}\n />\n </div>\n )}\n {error && <span className=\"hf-field__hint hf-field__hint--error\">{error}</span>}\n </div>\n );\n}\n\nexport interface TimePickerProps {\n label?: ReactNode;\n value?: string;\n onChange: (value: string) => void;\n step?: number;\n}\n\nexport function TimePicker({ label, value, onChange, step = 30 }: TimePickerProps) {\n const [open, setOpen] = useState(false);\n const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), {\n autoFocus: false,\n });\n const times = Array.from({ length: Math.ceil(1440 / step) }, (_, index) => {\n const minutes = index * step;\n return `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`;\n });\n return (\n <div ref={rootRef} className=\"hf-field hf-time-picker\">\n {label && <span className=\"hf-field__label\">{label}</span>}\n <button\n type=\"button\"\n className=\"hf-picker-trigger\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n >\n <span className={value ? '' : 'is-placeholder'}>{value || '选择时间'}</span>\n <Icon name=\"chevron-down\" size={16} />\n </button>\n {open && (\n <div className=\"hf-time-picker__panel\" role=\"listbox\">\n {times.map((time) => (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={time === value}\n key={time}\n onClick={() => {\n onChange(time);\n setOpen(false);\n }}\n >\n {time}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> {\n label?: ReactNode;\n value: number;\n onChange: (value: number) => void;\n showValue?: boolean;\n}\n\nexport function Slider({\n label,\n value,\n min = 0,\n max = 100,\n step = 1,\n onChange,\n showValue = true,\n ...props\n}: SliderProps) {\n const percent = (value - Number(min)) / (Number(max) - Number(min)) * 100;\n return (\n <label className=\"hf-slider\">\n <span>{label}{showValue && <strong>{value}</strong>}</span>\n <input\n type=\"range\"\n value={value}\n min={min}\n max={max}\n step={step}\n style={{ '--hf-slider-value': `${percent}%` } as CSSProperties}\n onChange={(event) => onChange(Number(event.target.value))}\n {...props}\n />\n </label>\n );\n}\n","import {\n createContext,\n useContext,\n type FormHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\n\nconst FormContext = createContext<{ disabled?: boolean }>({});\n\nexport interface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n layout?: 'vertical' | 'horizontal';\n disabled?: boolean;\n}\n\nexport function Form({\n layout = 'vertical',\n disabled,\n className = '',\n children,\n ...props\n}: FormProps) {\n return (\n <FormContext.Provider value={{ disabled }}>\n <form\n className={`hf-form hf-form--${layout} ${className}`.trim()}\n aria-disabled={disabled || undefined}\n {...props}\n >\n <fieldset className=\"hf-form__fieldset\" disabled={disabled}>\n {children}\n </fieldset>\n </form>\n </FormContext.Provider>\n );\n}\n\nexport interface FormItemProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n required?: boolean;\n hint?: ReactNode;\n error?: ReactNode;\n children: ReactNode;\n}\n\nexport function FormItem({\n label,\n required,\n hint,\n error,\n children,\n className = '',\n ...props\n}: FormItemProps) {\n const { disabled } = useContext(FormContext);\n return (\n <div\n className={`hf-form-item${error ? ' is-error' : ''} ${className}`.trim()}\n aria-disabled={disabled || undefined}\n {...props}\n >\n {label && (\n <div className=\"hf-form-item__label\">\n {label}\n {required && <span aria-hidden=\"true\">*</span>}\n </div>\n )}\n <div>\n {children}\n {(error || hint) && <small className={error ? 'is-error' : ''}>{error || hint}</small>}\n </div>\n </div>\n );\n}\n","import {\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from 'react';\nimport { Icon } from '../foundations/Icon';\n\nexport type UploadRejectionReason =\n | 'file-too-large'\n | 'file-type-not-accepted'\n | 'too-many-files';\n\nexport interface UploadRejection {\n file: File;\n reason: UploadRejectionReason;\n message: string;\n}\n\ninterface UploadValidationOptions {\n accept?: string;\n maxFiles?: number;\n maxSize?: number;\n}\n\ninterface UploadValidationResult {\n accepted: File[];\n rejected: UploadRejection[];\n}\n\nexport interface UploadProps extends UploadValidationOptions {\n label?: ReactNode;\n multiple?: boolean;\n onFiles: (files: File[]) => void;\n onReject?: (rejections: UploadRejection[]) => void;\n hint?: ReactNode;\n disabled?: boolean;\n}\n\nfunction formatFileSize(bytes: number) {\n if (bytes >= 1024 * 1024) {\n const megabytes = bytes / (1024 * 1024);\n return `${Number.isInteger(megabytes) ? megabytes : megabytes.toFixed(1)} MB`;\n }\n if (bytes >= 1024) return `${Math.ceil(bytes / 1024)} KB`;\n return `${bytes} B`;\n}\n\nfunction acceptsFile(file: File, accept?: string) {\n if (!accept?.trim()) return true;\n const fileName = file.name.toLowerCase();\n const mimeType = file.type.toLowerCase();\n\n return accept\n .split(',')\n .map((value) => value.trim().toLowerCase())\n .filter(Boolean)\n .some((rule) => {\n if (rule.startsWith('.')) return fileName.endsWith(rule);\n if (rule.endsWith('/*')) return mimeType.startsWith(rule.slice(0, -1));\n return mimeType === rule;\n });\n}\n\nfunction validateUploadFiles(\n files: readonly File[],\n options: UploadValidationOptions = {},\n): UploadValidationResult {\n const accepted: File[] = [];\n const rejected: UploadRejection[] = [];\n const limit = options.maxFiles ?? Number.POSITIVE_INFINITY;\n\n files.forEach((file) => {\n if (!acceptsFile(file, options.accept)) {\n rejected.push({ file, reason: 'file-type-not-accepted', message: '不支持该文件类型' });\n return;\n }\n if (options.maxSize !== undefined && file.size > options.maxSize) {\n rejected.push({\n file,\n reason: 'file-too-large',\n message: `文件不能超过 ${formatFileSize(options.maxSize)}`,\n });\n return;\n }\n if (accepted.length >= limit) {\n rejected.push({\n file,\n reason: 'too-many-files',\n message: `最多只能选择 ${limit} 个文件`,\n });\n return;\n }\n accepted.push(file);\n });\n\n return { accepted, rejected };\n}\n\nexport function Upload({\n label = '上传文件',\n accept,\n multiple,\n maxFiles,\n maxSize,\n onFiles,\n onReject,\n hint,\n disabled,\n}: UploadProps) {\n const id = useId();\n const ref = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n const [rejections, setRejections] = useState<UploadRejection[]>([]);\n\n const takeFiles = (list: FileList | null) => {\n const result = validateUploadFiles(Array.from(list ?? []), {\n accept,\n maxFiles,\n maxSize,\n });\n setRejections(result.rejected);\n onFiles(result.accepted);\n if (result.rejected.length) onReject?.(result.rejected);\n };\n\n return (\n <div className=\"hf-upload\">\n <input\n ref={ref}\n id={id}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event: ChangeEvent<HTMLInputElement>) => takeFiles(event.target.files)}\n />\n <button\n type=\"button\"\n disabled={disabled}\n className={dragging ? 'is-dragging' : ''}\n onClick={() => ref.current?.click()}\n onDragOver={(event) => {\n event.preventDefault();\n if (!disabled) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={(event) => {\n event.preventDefault();\n setDragging(false);\n if (!disabled) takeFiles(event.dataTransfer.files);\n }}\n >\n <Icon name=\"inbox\" size={24} />\n <strong>{label}</strong>\n <span>拖放到这里,或点击选择</span>\n </button>\n {rejections.length > 0 && (\n <div className=\"hf-upload__errors\" role=\"alert\">\n {rejections.map(({ file, reason, message }, index) => (\n <span key={`${file.name}-${reason}-${index}`}>{file.name}:{message}</span>\n ))}\n </div>\n )}\n {hint && <small>{hint}</small>}\n </div>\n );\n}\n","import { useId, useMemo, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface ComboboxOption { label: ReactNode; value: string; keywords?: string; disabled?: boolean }\nexport interface ComboboxProps { label?: ReactNode; options: readonly ComboboxOption[]; value?: string; onChange: (value: string) => void; placeholder?: string; hint?: ReactNode; error?: ReactNode; disabled?: boolean; emptyText?: ReactNode }\n\nexport function Combobox({ label, options, value = '', onChange, placeholder = '搜索或选择', hint, error, disabled, emptyText = '没有匹配项' }: ComboboxProps) {\n const id = useId(); const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false }); const [query, setQuery] = useState(''); const [active, setActive] = useState(0);\n const selected = options.find((item) => item.value === value);\n const filtered = useMemo(() => options.filter((item) => `${typeof item.label === 'string' ? item.label : item.value} ${item.keywords ?? ''}`.toLowerCase().includes(query.toLowerCase())), [options, query]);\n const choose = (next: string) => { onChange(next); setQuery(''); setOpen(false); };\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => { if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); setOpen(true); setActive((current) => Math.max(0, Math.min(filtered.length - 1, current + (event.key === 'ArrowDown' ? 1 : -1)))); } else if (event.key === 'Enter' && open) { event.preventDefault(); const option = filtered[active]; if (option && !option.disabled) choose(option.value); } else if (event.key === 'Escape') setOpen(false); };\n return <div className=\"hf-field hf-combobox\" ref={root}>{label && <label className=\"hf-field__label\" htmlFor={id}>{label}</label>}<div className={`hf-combobox__control${open ? ' is-open' : ''}${error ? ' is-error' : ''}`}><input id={id} role=\"combobox\" aria-expanded={open} aria-controls={`${id}-listbox`} aria-autocomplete=\"list\" aria-invalid={Boolean(error)} disabled={disabled} placeholder={selected && !open ? String(selected.label) : placeholder} value={open ? query : selected ? String(selected.label) : ''} onFocus={() => setOpen(true)} onChange={(event) => { setQuery(event.target.value); setActive(0); setOpen(true); }} onKeyDown={onKeyDown} /><button type=\"button\" aria-label={open ? '关闭选项' : '打开选项'} disabled={disabled} onClick={() => setOpen((current) => !current)}>⌄</button></div>{open && <div id={`${id}-listbox`} className=\"hf-combobox__menu\" role=\"listbox\">{filtered.length ? filtered.map((option, index) => <button type=\"button\" role=\"option\" aria-selected={option.value === value} disabled={option.disabled} className={index === active ? 'is-active' : ''} key={option.value} onPointerMove={() => setActive(index)} onClick={() => choose(option.value)}><span>{option.label}</span>{option.value === value && <span aria-hidden=\"true\">✓</span>}</button>) : <div className=\"hf-combobox__empty\">{emptyText}</div>}</div>}{(error || hint) && <span className={`hf-field__hint${error ? ' hf-field__hint--error' : ''}`}>{error ?? hint}</span>}</div>;\n}\n","import { useId, type ReactNode } from 'react';\n\nexport interface NumberInputProps { label?: ReactNode; value: number; onChange: (value: number) => void; min?: number; max?: number; step?: number; prefix?: ReactNode; suffix?: ReactNode; hint?: ReactNode; error?: ReactNode; disabled?: boolean }\nexport function NumberInput({ label, value, onChange, min, max, step = 1, prefix, suffix, hint, error, disabled }: NumberInputProps) {\n const id = useId(); const clamp = (next: number) => Math.min(max ?? Infinity, Math.max(min ?? -Infinity, next));\n return <div className=\"hf-field hf-number-input\">{label && <label className=\"hf-field__label\" htmlFor={id}>{label}</label>}<div className={`hf-number-input__control${error ? ' is-error' : ''}`}>{prefix && <span>{prefix}</span>}<input id={id} type=\"number\" value={value} min={min} max={max} step={step} disabled={disabled} aria-invalid={Boolean(error)} onChange={(event) => { const next = event.currentTarget.valueAsNumber; if (!Number.isNaN(next)) onChange(clamp(next)); }} /><div><button type=\"button\" disabled={disabled || (max !== undefined && value >= max)} aria-label=\"增加\" onClick={() => onChange(clamp(value + step))}>+</button><button type=\"button\" disabled={disabled || (min !== undefined && value <= min)} aria-label=\"减少\" onClick={() => onChange(clamp(value - step))}>−</button></div>{suffix && <span>{suffix}</span>}</div>{(error || hint) && <span className={`hf-field__hint${error ? ' hf-field__hint--error' : ''}`}>{error ?? hint}</span>}</div>;\n}\n","import { useState, type InputHTMLAttributes, type ReactNode } from 'react';\nexport interface CascaderOption { value: string; label: string; children?: readonly CascaderOption[]; disabled?: boolean }\nexport function Cascader({ options, value = [], onChange, label }: { options: readonly CascaderOption[]; value?: readonly string[]; onChange: (value: string[]) => void; label?: ReactNode }) {\n const levels: (readonly CascaderOption[])[] = [options]; let current = options; for (const key of value) { const next = current.find((item) => item.value === key)?.children; if (!next) break; levels.push(next); current = next; }\n return <div className=\"hf-field hf-cascader\">{label && <span className=\"hf-field__label\">{label}</span>}<div>{levels.map((items, level) => <select aria-label={`第 ${level + 1} 级`} value={value[level] ?? ''} key={level} onChange={(event) => onChange([...value.slice(0, level), event.target.value])}><option value=\"\">请选择</option>{items.map((item) => <option disabled={item.disabled} value={item.value} key={item.value}>{item.label}</option>)}</select>)}</div></div>;\n}\nexport interface TreeSelectOption { key: string; label: string; children?: readonly TreeSelectOption[]; disabled?: boolean }\nexport function TreeSelect({ options, value, onChange, label, placeholder = '选择节点' }: { options: readonly TreeSelectOption[]; value?: string; onChange: (value: string) => void; label?: ReactNode; placeholder?: string }) {\n const [open, setOpen] = useState(false); const flatten = (nodes: readonly TreeSelectOption[], depth = 0): { node: TreeSelectOption; depth: number }[] => nodes.flatMap((node) => [{ node, depth }, ...flatten(node.children ?? [], depth + 1)]); const all = flatten(options);\n return <div className=\"hf-field hf-tree-select\">{label && <span className=\"hf-field__label\">{label}</span>}<button type=\"button\" className=\"hf-picker-trigger\" aria-expanded={open} onClick={() => setOpen(!open)}>{all.find((item) => item.node.key === value)?.node.label ?? placeholder}<span>⌄</span></button>{open && <div role=\"listbox\">{all.map(({ node, depth }) => <button type=\"button\" role=\"option\" aria-selected={node.key === value} disabled={node.disabled} style={{ paddingLeft: 12 + depth * 18 }} key={node.key} onClick={() => { onChange(node.key); setOpen(false); }}>{node.label}</button>)}</div>}</div>;\n}\nexport interface TransferItem { key: string; label: ReactNode; disabled?: boolean }\nexport function Transfer({ items, value, onChange, titles = ['可选项', '已选择'] }: { items: readonly TransferItem[]; value: readonly string[]; onChange: (value: string[]) => void; titles?: readonly [string, string] }) {\n const [marked, setMarked] = useState<string[]>([]); const pane = (selected: boolean) => <section><strong>{titles[selected ? 1 : 0]}</strong>{items.filter((item) => value.includes(item.key) === selected).map((item) => <label key={item.key}><input type=\"checkbox\" disabled={item.disabled} checked={marked.includes(item.key)} onChange={() => setMarked((keys) => keys.includes(item.key) ? keys.filter((key) => key !== item.key) : [...keys, item.key])} />{item.label}</label>)}</section>;\n return <div className=\"hf-transfer\">{pane(false)}<div><button type=\"button\" aria-label=\"移至已选择\" onClick={() => { onChange([...new Set([...value, ...marked])]); setMarked([]); }}>→</button><button type=\"button\" aria-label=\"移回可选项\" onClick={() => { onChange(value.filter((key) => !marked.includes(key))); setMarked([]); }}>←</button></div>{pane(true)}</div>;\n}\nexport function DateRangePicker({ label, value, onChange, min, max }: { label?: ReactNode; value: readonly [string, string]; onChange: (value: [string, string]) => void; min?: string; max?: string }) { return <div className=\"hf-field hf-date-range\">{label && <span className=\"hf-field__label\">{label}</span>}<div><input aria-label=\"开始日期\" type=\"date\" value={value[0]} min={min} max={value[1] || max} onChange={(event) => onChange([event.target.value, value[1]])} /><span>至</span><input aria-label=\"结束日期\" type=\"date\" value={value[1]} min={value[0] || min} max={max} onChange={(event) => onChange([value[0], event.target.value])} /></div></div>; }\nexport function SearchInput({ onSearch, loading, clearable = true, ...props }: Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & { onSearch: (value: string) => void; loading?: boolean; clearable?: boolean }) { const [value, setValue] = useState(String(props.defaultValue ?? props.value ?? '')); return <form className=\"hf-search-input\" role=\"search\" onSubmit={(event) => { event.preventDefault(); onSearch(value); }}><span aria-hidden=\"true\">⌕</span><input {...props} value={value} onChange={(event) => { setValue(event.target.value); props.onChange?.(event); }} />{clearable && value && <button type=\"button\" aria-label=\"清除搜索\" onClick={() => setValue('')}>×</button>}<button type=\"submit\" disabled={loading}>{loading ? '搜索中' : '搜索'}</button></form>; }\n","import { useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../components/Button';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface DrawerProps { open: boolean; title: string; children: ReactNode; onClose: () => void; footer?: ReactNode; side?: 'left' | 'right' | 'bottom'; size?: 'sm' | 'md' | 'lg' }\n\nexport function Drawer({ open, title, children, onClose, footer, side = 'right', size = 'md' }: DrawerProps) {\n const titleId = useId();\n const drawerRef = useDismissibleLayer<HTMLDivElement>(open, onClose, true);\n if (!open) return null;\n return createPortal(<div className=\"hf-drawer-backdrop\" onMouseDown={(event) => event.target === event.currentTarget && onClose()}>\n <div ref={drawerRef} className={`hf-drawer hf-drawer--${side} hf-drawer--${size}`} role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId} tabIndex={-1}>\n <header><h2 id={titleId}>{title}</h2><Button variant=\"quiet\" size=\"sm\" onClick={onClose} aria-label=\"关闭抽屉\">×</Button></header>\n <div className=\"hf-drawer__body\">{children}</div>{footer && <footer>{footer}</footer>}\n </div>\n </div>, document.body);\n}\n","import { cloneElement, isValidElement, useId, useState, type ReactElement, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface PopoverProps { trigger: ReactElement; children: ReactNode; open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; placement?: 'top' | 'bottom' | 'left' | 'right'; label?: string }\n\nexport function Popover({ trigger, children, open, defaultOpen = false, onOpenChange, placement = 'bottom', label = '更多内容' }: PopoverProps) {\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const controlled = open !== undefined;\n const visible = controlled ? open : innerOpen;\n const contentId = useId();\n const update = (next: boolean) => { if (!controlled) setInnerOpen(next); onOpenChange?.(next); };\n const rootRef = useDismissibleLayer<HTMLSpanElement>(visible, () => update(false));\n const triggerProps = { 'aria-expanded': visible, 'aria-controls': visible ? contentId : undefined, 'aria-haspopup': 'dialog' as const, onClick: () => update(!visible) };\n return <span className=\"hf-popover\" ref={rootRef}>{isValidElement(trigger) && cloneElement(trigger, triggerProps)}{visible && <span id={contentId} role=\"dialog\" aria-label={label} className={`hf-popover__content hf-popover__content--${placement}`}>{children}</span>}</span>;\n}\n","import { cloneElement, useId, useState, type ReactElement, type ReactNode } from 'react';\nimport { Icon, type IconName } from '../foundations/Icon';\ntype StatusTone = 'info' | 'success' | 'warning' | 'danger';\nexport function Tooltip({ content, children, placement = 'top' }: { content: ReactNode; children: ReactElement; placement?: 'top' | 'right' | 'bottom' | 'left' }) { const [open, setOpen] = useState(false); const id = useId(); const trigger = cloneElement(children, { 'aria-describedby': open ? id : undefined } as object); return <span className=\"hf-tooltip\" onMouseEnter={() => setOpen(true)} onMouseLeave={() => setOpen(false)} onFocus={() => setOpen(true)} onBlur={() => setOpen(false)}>{trigger}{open && <span id={id} role=\"tooltip\" className={`hf-tooltip__bubble hf-tooltip__bubble--${placement}`}>{content}</span>}</span>; }\nexport function Alert({ tone = 'info', title, children, onClose, action }: { tone?: StatusTone; title: ReactNode; children?: ReactNode; onClose?: () => void; action?: ReactNode }) { const icon: Record<StatusTone, IconName> = { info: 'info', success: 'check', warning: 'warning', danger: 'error' }; return <div className={`hf-alert hf-alert--${tone}`} role={tone === 'danger' ? 'alert' : 'status'}><Icon name={icon[tone]} /><div><strong>{title}</strong>{children && <div>{children}</div>}{action && <div className=\"hf-alert__action\">{action}</div>}</div>{onClose && <button type=\"button\" onClick={onClose} aria-label=\"关闭提示\"><Icon name=\"close\" size={16} /></button>}</div>; }\n","import { cloneElement, isValidElement, useEffect, useId, useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\nimport { Icon, type IconName } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface PopconfirmProps { trigger: ReactElement; title: ReactNode; description?: ReactNode; confirmText?: string; cancelText?: string; tone?: 'primary' | 'danger'; onConfirm: () => void }\nexport function Popconfirm({ trigger, title, description, confirmText = '确认', cancelText = '取消', tone = 'primary', onConfirm }: PopconfirmProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLSpanElement>(open, () => setOpen(false), { autoFocus: false }); return <span className=\"hf-popconfirm\" ref={root}>{isValidElement(trigger) && cloneElement(trigger, { onClick: () => setOpen(true), 'aria-expanded': open } as object)}{open && <div role=\"alertdialog\" aria-modal=\"false\" className=\"hf-popconfirm__panel\"><strong>{title}</strong>{description && <p>{description}</p>}<div><Button size=\"sm\" variant=\"quiet\" onClick={() => setOpen(false)}>{cancelText}</Button><Button size=\"sm\" variant={tone === 'danger' ? 'danger' : 'primary'} onClick={() => { onConfirm(); setOpen(false); }}>{confirmText}</Button></div></div>}</span>; }\n\nexport interface NotificationProps { title: ReactNode; children?: ReactNode; tone?: 'info' | 'success' | 'warning' | 'danger'; time?: ReactNode; unread?: boolean; action?: ReactNode; onClose?: () => void }\nexport function Notification({ title, children, tone = 'info', time, unread, action, onClose }: NotificationProps) { const icons: Record<NonNullable<NotificationProps['tone']>, IconName> = { info: 'info', success: 'check', warning: 'warning', danger: 'error' }; return <article className={`hf-notification hf-notification--${tone}${unread ? ' is-unread' : ''}`}><span className=\"hf-notification__icon\"><Icon name={icons[tone]} size={18} /></span><div><header><strong>{title}</strong>{time && <time>{time}</time>}</header>{children && <p>{children}</p>}{action && <div className=\"hf-notification__action\">{action}</div>}</div>{onClose && <button type=\"button\" aria-label=\"关闭通知\" onClick={onClose}>×</button>}</article>; }\n\nexport interface ResultProps { status?: 'success' | 'error' | 'warning' | 'info' | '404' | '403'; title: ReactNode; description?: ReactNode; actions?: ReactNode; extra?: ReactNode }\nexport function Result({ status = 'info', title, description, actions, extra }: ResultProps) { const icon = status === 'success' ? '✓' : status === 'error' ? '×' : status === 'warning' ? '!' : status === 'info' ? 'i' : status; return <section className={`hf-result hf-result--${status}`}><span className=\"hf-result__icon\" aria-hidden=\"true\">{icon}</span><h2>{title}</h2>{description && <p>{description}</p>}{actions && <div className=\"hf-result__actions\">{actions}</div>}{extra && <div className=\"hf-result__extra\">{extra}</div>}</section>; }\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nexport interface StatisticCardProps extends HTMLAttributes<HTMLElement> { label: ReactNode; value: ReactNode; trend?: ReactNode; icon?: ReactNode; tone?: 'blue' | 'green' | 'violet' | 'amber' }\nexport function StatisticCard({ label, value, trend, icon, tone = 'blue', className = '', ...props }: StatisticCardProps) {\n return <article className={`hf-stat hf-stat--${tone} ${className}`.trim()} {...props}><div className=\"hf-stat__top\"><span>{label}</span>{icon && <i>{icon}</i>}</div><strong>{value}</strong>{trend && <small>{trend}</small>}<span className=\"hf-stat__glow\" aria-hidden=\"true\" /></article>;\n}\n/** COMPAT: StatisticCard remains available for existing consumers; Stat is the concise public name. */\nexport const Stat = StatisticCard;\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> { value: number; max?: number; label?: ReactNode; showValue?: boolean; size?: 'sm' | 'md' | 'lg'; tone?: 'primary' | 'success' | 'warning' }\nexport function Progress({ value, max = 100, label, showValue = true, size = 'md', tone = 'primary', className = '', ...props }: ProgressProps) {\n const percent = Math.min(100, Math.max(0, max ? value / max * 100 : 0));\n return <div className={`hf-progress hf-progress--${size} hf-progress--${tone} ${className}`.trim()} {...props}>{(label || showValue) && <div className=\"hf-progress__meta\"><span>{label}</span>{showValue && <strong>{Math.round(percent)}%</strong>}</div>}<div className=\"hf-progress__track\" role=\"progressbar\" aria-valuemin={0} aria-valuemax={max} aria-valuenow={value}><span style={{ '--hf-progress': `${percent}%` } as CSSProperties} /></div></div>;\n}\n\nexport interface CircularProgressProps extends HTMLAttributes<HTMLDivElement> { value: number; max?: number; label?: ReactNode; size?: number; thickness?: number }\nexport function CircularProgress({ value, max = 100, label, size = 92, thickness = 8, className = '', ...props }: CircularProgressProps) {\n const percent = Math.min(100, Math.max(0, max ? value / max * 100 : 0));\n return <div className={`hf-circular-progress ${className}`.trim()} style={{ '--hf-circle': `${percent * 3.6}deg`, '--hf-circle-size': `${size}px`, '--hf-circle-thickness': `${thickness}px` } as CSSProperties} role=\"progressbar\" aria-valuemin={0} aria-valuemax={max} aria-valuenow={value} {...props}><span><strong>{Math.round(percent)}%</strong>{label && <small>{label}</small>}</span></div>;\n}\n\nexport interface StepProgressProps extends HTMLAttributes<HTMLOListElement> { steps: readonly ReactNode[]; current: number }\nexport function StepProgress({ steps, current, className = '', ...props }: StepProgressProps) {\n return <ol className={`hf-step-progress ${className}`.trim()} {...props}>{steps.map((step, index) => <li key={index} className={index < current ? 'is-complete' : index === current ? 'is-current' : ''}><span>{index < current ? '✓' : index + 1}</span><small>{step}</small></li>)}</ol>;\n}\n\nexport interface ActivityIndicatorProps extends HTMLAttributes<HTMLSpanElement> { variant?: 'spinner' | 'dots' | 'radar' | 'wave'; label?: string; size?: 'sm' | 'md' | 'lg' }\nexport function ActivityIndicator({ variant = 'spinner', label = '正在加载', size = 'md', className = '', ...props }: ActivityIndicatorProps) {\n return <span className={`hf-activity hf-activity--${variant} hf-activity--${size} ${className}`.trim()} role=\"status\" aria-label={label} {...props}>{variant === 'dots' && <><i /><i /><i /></>}{variant === 'wave' && Array.from({ length: 5 }, (_, index) => <i key={index} />)}{variant === 'radar' && <i />}</span>;\n}\n\nexport interface SparklineProps extends HTMLAttributes<SVGSVGElement> { data: readonly number[]; width?: number; height?: number; label?: string; filled?: boolean }\nexport function Sparkline({ data, width = 160, height = 48, label = '趋势图', filled = true, ...props }: SparklineProps) {\n const min = Math.min(...data); const max = Math.max(...data); const range = max - min || 1;\n const points = data.map((value, index) => `${data.length === 1 ? width / 2 : index / (data.length - 1) * width},${height - ((value - min) / range * (height - 8) + 4)}`).join(' ');\n const area = `0,${height} ${points} ${width},${height}`;\n return <svg className=\"hf-sparkline\" viewBox={`0 0 ${width} ${height}`} role=\"img\" aria-label={label} {...props}>{filled && <polygon points={area} className=\"hf-sparkline__area\" />}<polyline points={points} className=\"hf-sparkline__line\" /></svg>;\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { Icon } from '../foundations/Icon';\n\nexport interface TableColumn<T> { key: string; header: ReactNode; render?: (item: T, index: number) => ReactNode; align?: 'left' | 'center' | 'right'; width?: number | string; }\nexport interface TableProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> { columns: readonly TableColumn<T>[]; data: readonly T[]; rowKey: keyof T | ((item: T, index: number) => string | number); caption?: string; empty?: ReactNode; striped?: boolean; onRowClick?: (item: T, index: number) => void; }\nexport function Table<T extends object>({ columns, data, rowKey, caption, empty = '暂无数据', striped, onRowClick, className = '', ...props }: TableProps<T>) {\n const keyOf = (item: T, index: number) => typeof rowKey === 'function' ? rowKey(item, index) : String(item[rowKey]);\n return <div className={`hf-table-wrap ${className}`} {...props}><table className={`hf-table${striped ? ' hf-table--striped' : ''}`}>{caption && <caption>{caption}</caption>}<thead><tr>{columns.map((column) => <th key={column.key} style={{ textAlign: column.align, width: column.width }}>{column.header}</th>)}</tr></thead><tbody>{data.map((item, index) => <tr key={keyOf(item, index)} className={onRowClick ? 'is-clickable' : ''} onClick={() => onRowClick?.(item, index)} tabIndex={onRowClick ? 0 : undefined} onKeyDown={(event) => { if (onRowClick && (event.key === 'Enter' || event.key === ' ')) { event.preventDefault(); onRowClick(item, index); } }}>{columns.map((column) => <td key={column.key} style={{ textAlign: column.align }}>{column.render ? column.render(item, index) : String(item[column.key as keyof T] ?? '')}</td>)}</tr>)}{!data.length && <tr><td className=\"hf-table__empty\" colSpan={columns.length}>{empty}</td></tr>}</tbody></table></div>;\n}\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> { page: number; total: number; pageSize?: number; siblingCount?: number; onChange: (page: number) => void; }\nexport function Pagination({ page, total, pageSize = 10, siblingCount = 1, onChange, className = '', ...props }: PaginationProps) {\n const count = Math.max(1, Math.ceil(total / pageSize)); const current = Math.min(count, Math.max(1, page));\n const visible = Array.from({ length: count }, (_, i) => i + 1).filter((value) => value === 1 || value === count || Math.abs(value - current) <= siblingCount); const parts: (number | 'ellipsis')[] = [];\n visible.forEach((value, index) => { if (index && value - visible[index - 1]! > 1) parts.push('ellipsis'); parts.push(value); });\n return <nav className={`hf-pagination ${className}`} aria-label=\"分页\" {...props}><button disabled={current === 1} onClick={() => onChange(current - 1)} aria-label=\"上一页\"><Icon name=\"chevron-down\" size={16} className=\"hf-pagination__prev\" /></button>{parts.map((part, index) => part === 'ellipsis' ? <span key={`e-${index}`} aria-hidden=\"true\">…</span> : <button key={part} className={part === current ? 'is-active' : ''} aria-current={part === current ? 'page' : undefined} onClick={() => onChange(part)}>{part}</button>)}<button disabled={current === count} onClick={() => onChange(current + 1)} aria-label=\"下一页\"><Icon name=\"chevron-down\" size={16} className=\"hf-pagination__next\" /></button></nav>;\n}\n\nexport interface ListItem { key: string | number; title: ReactNode; description?: ReactNode; leading?: ReactNode; trailing?: ReactNode; }\nexport function List({ items, divided = true, className = '', ...props }: HTMLAttributes<HTMLUListElement> & { items: readonly ListItem[]; divided?: boolean }) { return <ul className={`hf-list${divided ? ' hf-list--divided' : ''} ${className}`} {...props}>{items.map((item) => <li key={item.key}>{item.leading && <span className=\"hf-list__leading\">{item.leading}</span>}<div><strong>{item.title}</strong>{item.description && <small>{item.description}</small>}</div>{item.trailing && <span className=\"hf-list__trailing\">{item.trailing}</span>}</li>)}</ul>; }\n\nexport interface DescriptionItem { key: string | number; label: ReactNode; value: ReactNode; span?: 1 | 2 | 3; }\nexport function Descriptions({ items, columns = 2, bordered, className = '', ...props }: HTMLAttributes<HTMLDListElement> & { items: readonly DescriptionItem[]; columns?: 1 | 2 | 3; bordered?: boolean }) { return <dl className={`hf-descriptions hf-descriptions--${columns}${bordered ? ' hf-descriptions--bordered' : ''} ${className}`} {...props}>{items.map((item) => <div key={item.key} style={{ gridColumn: `span ${Math.min(item.span ?? 1, columns)}` }}><dt>{item.label}</dt><dd>{item.value}</dd></div>)}</dl>; }\n","import type { ReactNode } from 'react';\nexport interface TimelineItem { key: string; title: ReactNode; description?: ReactNode; time?: ReactNode; status?: 'complete' | 'current' | 'upcoming' }\nexport function Timeline({ items, label = '时间轴' }: { items: readonly TimelineItem[]; label?: string }) { return <ol className=\"hf-timeline\" aria-label={label}>{items.map((item) => <li key={item.key} className={`hf-timeline--${item.status ?? 'upcoming'}`}><i aria-hidden=\"true\" /><div><strong>{item.title}</strong>{item.description && <p>{item.description}</p>}</div>{item.time && <time>{item.time}</time>}</li>)}</ol>; }\nexport interface InsightBoardProps { summary: ReactNode; trend: ReactNode; detail: ReactNode; heading?: ReactNode; filters?: ReactNode }\nexport function InsightBoard({ summary, trend, detail, heading, filters }: InsightBoardProps) { return <section className=\"hf-insight-board\">{(heading || filters) && <header><div>{heading}</div>{filters}</header>}<div className=\"hf-insight-board__summary\" aria-label=\"核心结果\">{summary}</div><div className=\"hf-insight-board__trend\" aria-label=\"变化趋势\">{trend}</div><div className=\"hf-insight-board__detail\" aria-label=\"明细与原因\">{detail}</div></section>; }\n","import type { ReactNode } from 'react';\nimport { Icon, type IconName } from '../foundations/Icon';\nexport function EmptyState({ icon = 'inbox', title, description, action, size = 'md' }: { icon?: IconName; title: ReactNode; description?: ReactNode; action?: ReactNode; size?: 'sm' | 'md' }) { return <div className={`hf-empty hf-empty--${size}`}><span className=\"hf-empty__icon\"><Icon name={icon} size={size === 'sm' ? 22 : 28} /></span><strong>{title}</strong>{description && <p>{description}</p>}{action && <div>{action}</div>}</div>; }\n","import { useMemo, useState, type ReactNode } from 'react';\n\nexport interface DataGridColumn<T> { key: string; header: ReactNode; render?: (item: T) => ReactNode; value?: (item: T) => string | number; sortable?: boolean; width?: string | number }\nexport interface DataGridProps<T> { columns: readonly DataGridColumn<T>[]; data: readonly T[]; rowKey: keyof T | ((item: T) => string); selectedKeys?: readonly string[]; onSelectionChange?: (keys: string[]) => void; empty?: ReactNode; caption?: string }\nexport function DataGrid<T extends object>({ columns, data, rowKey, selectedKeys = [], onSelectionChange, empty = '暂无数据', caption }: DataGridProps<T>) {\n const [sort, setSort] = useState<{ key: string; direction: 'asc' | 'desc' }>(); const keyOf = (item: T) => typeof rowKey === 'function' ? rowKey(item) : String(item[rowKey]);\n const rows = useMemo(() => { if (!sort) return [...data]; const column = columns.find((item) => item.key === sort.key); if (!column) return [...data]; return [...data].sort((a, b) => { const av = column.value?.(a) ?? String(a[column.key as keyof T] ?? ''); const bv = column.value?.(b) ?? String(b[column.key as keyof T] ?? ''); const compared = typeof av === 'number' && typeof bv === 'number' ? av - bv : String(av).localeCompare(String(bv), 'zh-CN'); return sort.direction === 'asc' ? compared : -compared; }); }, [columns, data, sort]);\n const all = data.length > 0 && data.every((item) => selectedKeys.includes(keyOf(item))); const changeAll = () => onSelectionChange?.(all ? [] : data.map(keyOf));\n return <div className=\"hf-data-grid\" onKeyDown={(event) => { if (!['ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(event.key)) return; const controls = [...event.currentTarget.querySelectorAll<HTMLElement>('button,input')]; const current = controls.indexOf(event.target as HTMLElement); if (current < 0) return; event.preventDefault(); const direction = event.key === 'ArrowLeft' || event.key === 'ArrowUp' ? -1 : 1; controls[(current + direction + controls.length) % controls.length]?.focus(); }}><table>\n {caption && <caption>{caption}</caption>}\n <thead><tr>\n {onSelectionChange && <th className=\"hf-data-grid__check\"><input type=\"checkbox\" aria-label=\"选择全部\" checked={all} onChange={changeAll} /></th>}\n {columns.map((column) => <th key={column.key} style={{ width: column.width }}>{column.sortable ? <button type=\"button\" onClick={() => setSort((current) => ({ key: column.key, direction: current?.key === column.key && current.direction === 'asc' ? 'desc' : 'asc' }))}>{column.header}<span aria-hidden=\"true\">{sort?.key === column.key ? (sort.direction === 'asc' ? '↑' : '↓') : '↕'}</span></button> : column.header}</th>)}\n </tr></thead>\n <tbody>{rows.map((item) => { const key = keyOf(item); return <tr key={key} className={selectedKeys.includes(key) ? 'is-selected' : ''}>{onSelectionChange && <td><input type=\"checkbox\" aria-label={`选择行 ${key}`} checked={selectedKeys.includes(key)} onChange={() => onSelectionChange(selectedKeys.includes(key) ? selectedKeys.filter((item) => item !== key) : [...selectedKeys, key])} /></td>}{columns.map((column) => <td key={column.key}>{column.render ? column.render(item) : String(item[column.key as keyof T] ?? '')}</td>)}</tr>; })}{!rows.length && <tr><td className=\"hf-data-grid__empty\" colSpan={columns.length + (onSelectionChange ? 1 : 0)}>{empty}</td></tr>}</tbody>\n </table></div>;\n}\n","import { useState, type ReactNode } from 'react';\nexport interface TreeNode { key: string; label: ReactNode; children?: readonly TreeNode[]; disabled?: boolean; icon?: ReactNode }\nexport interface TreeProps { nodes: readonly TreeNode[]; selectedKey?: string; onSelect?: (key: string) => void; defaultExpandedKeys?: readonly string[]; label?: string }\nexport function Tree({ nodes, selectedKey, onSelect, defaultExpandedKeys = [], label = '树形列表' }: TreeProps) { const [expanded, setExpanded] = useState<string[]>([...defaultExpandedKeys]); const render = (items: readonly TreeNode[], level: number): ReactNode => <ul role={level ? 'group' : 'tree'} aria-label={level ? undefined : label}>{items.map((node) => { const open = expanded.includes(node.key); const branch = Boolean(node.children?.length); return <li role=\"treeitem\" aria-level={level + 1} aria-expanded={branch ? open : undefined} aria-selected={node.key === selectedKey} key={node.key}><div className={node.key === selectedKey ? 'is-selected' : ''} style={{ paddingLeft: level * 18 + 8 }}>{branch ? <button type=\"button\" aria-label={open ? '收起' : '展开'} onClick={() => setExpanded((keys) => open ? keys.filter((key) => key !== node.key) : [...keys, node.key])}>{open ? '⌄' : '›'}</button> : <span />}{node.icon}<button type=\"button\" disabled={node.disabled} onClick={() => onSelect?.(node.key)}>{node.label}</button></div>{branch && open && render(node.children!, level + 1)}</li>; })}</ul>; return <div className=\"hf-tree\" onKeyDown={(event) => { const labels = [...event.currentTarget.querySelectorAll<HTMLButtonElement>('li[role=treeitem]>div>button:last-child:not(:disabled)')]; const current = labels.indexOf(event.target as HTMLButtonElement); if (current < 0) return; if (['ArrowDown','ArrowUp','Home','End'].includes(event.key)) { event.preventDefault(); const next = event.key === 'Home' ? 0 : event.key === 'End' ? labels.length - 1 : (current + (event.key === 'ArrowDown' ? 1 : -1) + labels.length) % labels.length; labels[next]?.focus(); } }}>{render(nodes, 0)}</div>; }\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface AuthLayoutProps {\n children: ReactNode;\n brand?: ReactNode;\n aside?: ReactNode;\n footer?: ReactNode;\n variant?: 'split' | 'card' | 'immersive' | 'step';\n backgroundImage?: string;\n currentStep?: number;\n steps?: number;\n}\n\nexport function AuthLayout({ children, brand, aside, footer, variant = 'card', backgroundImage, currentStep = 1, steps = 1 }: AuthLayoutProps) {\n const style = backgroundImage ? { '--hf-auth-image': `url(\"${backgroundImage}\")` } as CSSProperties : undefined;\n return <section className={`hf-auth hf-auth--${variant}`} style={style}>\n {brand && <header className=\"hf-auth__brand\">{brand}</header>}\n {aside && <aside className=\"hf-auth__aside\">{aside}</aside>}\n <main className=\"hf-auth__main\">\n {variant === 'step' && <div className=\"hf-auth__steps\" aria-label={`第 ${currentStep} 步,共 ${steps} 步`}>{Array.from({ length: steps }, (_, index) => <span key={index} className={index < currentStep ? 'is-active' : ''} />)}</div>}\n <div className=\"hf-auth__card\">{children}</div>\n {footer && <footer>{footer}</footer>}\n </main>\n </section>;\n}\n","import type { ReactNode } from 'react';\n\nexport interface HeroProps {\n eyebrow?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n primaryAction?: ReactNode;\n secondaryAction?: ReactNode;\n visual?: ReactNode;\n proof?: ReactNode;\n align?: 'left' | 'center';\n kind?: 'product' | 'personal' | 'event' | 'commerce';\n}\n\nexport function Hero({ eyebrow, title, description, primaryAction, secondaryAction, visual, proof, align = 'left', kind = 'product' }: HeroProps) {\n return <section className={`hf-hero hf-hero--${align} hf-hero--${kind}`}>\n <div className=\"hf-hero__content\">{eyebrow && <div className=\"hf-hero__eyebrow\">{eyebrow}</div>}<h1>{title}</h1>{description && <p>{description}</p>}{(primaryAction || secondaryAction) && <div className=\"hf-hero__actions\">{primaryAction}{secondaryAction}</div>}{proof && <div className=\"hf-hero__proof\">{proof}</div>}</div>\n {visual && <div className=\"hf-hero__visual\">{visual}</div>}\n </section>;\n}\n","import { useState, type PointerEvent, type ReactNode } from 'react';\nexport interface ResizablePanelProps { primary: ReactNode; secondary: ReactNode; defaultSize?: number; minSize?: number; maxSize?: number; direction?: 'horizontal' | 'vertical'; onResize?: (size: number) => void }\nexport function ResizablePanel({ primary, secondary, defaultSize = 50, minSize = 20, maxSize = 80, direction = 'horizontal', onResize }: ResizablePanelProps) { const [size, setSize] = useState(defaultSize); const start = (event: PointerEvent<HTMLDivElement>) => { const root = event.currentTarget.parentElement!; event.currentTarget.setPointerCapture(event.pointerId); const move = (next: globalThis.PointerEvent) => { const rect = root.getBoundingClientRect(); const raw = direction === 'horizontal' ? (next.clientX - rect.left) / rect.width * 100 : (next.clientY - rect.top) / rect.height * 100; const value = Math.min(maxSize, Math.max(minSize, raw)); setSize(value); onResize?.(value); }; const end = () => { document.removeEventListener('pointermove', move); document.removeEventListener('pointerup', end); }; document.addEventListener('pointermove', move); document.addEventListener('pointerup', end); }; return <div className={`hf-resizable hf-resizable--${direction}`}><div style={{ flexBasis: `${size}%` }}>{primary}</div><div className=\"hf-resizable__handle\" role=\"separator\" aria-orientation={direction} aria-valuemin={minSize} aria-valuemax={maxSize} aria-valuenow={Math.round(size)} tabIndex={0} onPointerDown={start} onKeyDown={(event) => { if (!['ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(event.key)) return; event.preventDefault(); const grow = event.key === 'ArrowRight' || event.key === 'ArrowDown'; const value = Math.min(maxSize, Math.max(minSize, size + (grow ? 2 : -2))); setSize(value); onResize?.(value); }} /><div>{secondary}</div></div>; }\n","import type { ReactNode } from 'react';\nimport { Notification, type NotificationProps } from './Essentials';\nexport interface NotificationItem extends Omit<NotificationProps, 'onClose'> { key: string; content?: ReactNode }\nexport interface NotificationCenterProps { items: readonly NotificationItem[]; onRead?: (key: string) => void; onDismiss?: (key: string) => void; onReadAll?: () => void; empty?: ReactNode; title?: ReactNode }\nexport function NotificationCenter({ items, onRead, onDismiss, onReadAll, empty = '暂无通知', title = '通知中心' }: NotificationCenterProps) { const unread = items.filter((item) => item.unread).length; return <section className=\"hf-notification-center\"><header><div><strong>{title}</strong>{unread > 0 && <span>{unread}</span>}</div>{unread > 0 && onReadAll && <button type=\"button\" onClick={onReadAll}>全部已读</button>}</header><div>{items.length ? items.map(({ key, content, ...item }) => <div key={key} onClick={() => item.unread && onRead?.(key)}><Notification {...item} onClose={onDismiss ? () => onDismiss(key) : undefined}>{content}</Notification></div>) : <p className=\"hf-notification-center__empty\">{empty}</p>}</div></section>; }\n","import { useState, type ReactNode } from 'react';\nexport interface VirtualListProps<T> { items: readonly T[]; itemHeight: number; height: number; renderItem: (item: T, index: number) => ReactNode; itemKey: (item: T, index: number) => string | number; overscan?: number; label?: string }\nexport function VirtualList<T>({ items, itemHeight, height, renderItem, itemKey, overscan = 3, label = '虚拟列表' }: VirtualListProps<T>) { const [scrollTop, setScrollTop] = useState(0); const start = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan); const end = Math.min(items.length, Math.ceil((scrollTop + height) / itemHeight) + overscan); return <div className=\"hf-virtual-list\" role=\"list\" aria-label={label} style={{ height }} onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}><div style={{ height: items.length * itemHeight, position: 'relative' }}>{items.slice(start, end).map((item, offset) => { const index = start + offset; return <div role=\"listitem\" key={itemKey(item, index)} style={{ height: itemHeight, left: 0, position: 'absolute', right: 0, top: index * itemHeight }}>{renderItem(item, index)}</div>; })}</div></div>; }\n","import { useState, type ReactNode } from 'react';\n\nexport interface JsonViewerProps { data: unknown; name?: string; defaultExpanded?: boolean; maxDepth?: number }\nfunction JsonNode({ name, value, depth, defaultExpanded, maxDepth }: { name?: string; value: unknown; depth: number; defaultExpanded: boolean; maxDepth: number }) { const complex = value !== null && typeof value === 'object'; const [open, setOpen] = useState(defaultExpanded && depth < maxDepth); if (!complex) return <div className=\"hf-json-viewer__row\"><span>{name !== undefined && `${name}: `}</span><code className={`is-${value === null ? 'null' : typeof value}`}>{value === null ? 'null' : JSON.stringify(value)}</code></div>; const entries = Object.entries(value as Record<string, unknown>); return <div className=\"hf-json-viewer__node\"><button type=\"button\" aria-expanded={open} onClick={() => setOpen(!open)}><span>{open ? '⌄' : '›'}</span><strong>{name ?? (Array.isArray(value) ? 'Array' : 'Object')}</strong><small>{Array.isArray(value) ? `[${entries.length}]` : `{${entries.length}}`}</small></button>{open && <div>{entries.map(([key, item]) => <JsonNode key={key} name={key} value={item} depth={depth + 1} defaultExpanded={defaultExpanded} maxDepth={maxDepth} />)}</div>}</div>; }\nexport function JsonViewer({ data, name, defaultExpanded = true, maxDepth = 2 }: JsonViewerProps) { return <div className=\"hf-json-viewer\" role=\"tree\" aria-label={name ?? 'JSON 查看器'}><JsonNode name={name} value={data} depth={0} defaultExpanded={defaultExpanded} maxDepth={maxDepth} /></div>; }\n\nexport interface DiffViewerProps { before: string; after: string; beforeLabel?: string; afterLabel?: string; mode?: 'split' | 'unified' }\ntype DiffLine = { kind: 'same' | 'add' | 'remove'; left?: string; right?: string; leftNo?: number; rightNo?: number };\nfunction compareLines(before: string, after: string): DiffLine[] { const a = before.split('\\n'), b = after.split('\\n'), matrix = Array.from({ length: a.length + 1 }, () => Array<number>(b.length + 1).fill(0)); for (let i = a.length - 1; i >= 0; i--) for (let j = b.length - 1; j >= 0; j--) matrix[i]![j] = a[i] === b[j] ? matrix[i + 1]![j + 1]! + 1 : Math.max(matrix[i + 1]![j]!, matrix[i]![j + 1]!); const rows: DiffLine[] = []; let i = 0, j = 0, leftNo = 1, rightNo = 1; while (i < a.length || j < b.length) { if (i < a.length && j < b.length && a[i] === b[j]) { rows.push({ kind: 'same', left: a[i++], right: b[j++], leftNo: leftNo++, rightNo: rightNo++ }); } else if (j < b.length && (i === a.length || matrix[i]![j + 1]! >= matrix[i + 1]![j]!)) { rows.push({ kind: 'add', right: b[j++], rightNo: rightNo++ }); } else { rows.push({ kind: 'remove', left: a[i++], leftNo: leftNo++ }); } } return rows; }\nfunction DiffCell({ number, marker, children }: { number?: number; marker: string; children?: ReactNode }) { return <div className=\"hf-diff-viewer__cell\"><span>{number ?? ''}</span><i>{marker}</i><code>{children ?? ''}</code></div>; }\nexport function DiffViewer({ before, after, beforeLabel = '修改前', afterLabel = '修改后', mode = 'split' }: DiffViewerProps) { const rows = compareLines(before, after); return <div className={`hf-diff-viewer hf-diff-viewer--${mode}`}><header><strong>{beforeLabel}</strong>{mode === 'split' && <strong>{afterLabel}</strong>}</header><div>{rows.map((row, index) => mode === 'split' ? <div className={`is-${row.kind}`} key={index}><DiffCell number={row.leftNo} marker={row.kind === 'remove' ? '−' : ' '}>{row.left}</DiffCell><DiffCell number={row.rightNo} marker={row.kind === 'add' ? '+' : ' '}>{row.right}</DiffCell></div> : <div className={`is-${row.kind}`} key={index}><DiffCell number={row.leftNo ?? row.rightNo} marker={row.kind === 'add' ? '+' : row.kind === 'remove' ? '−' : ' '}>{row.kind === 'add' ? row.right : row.left}</DiffCell></div>)}</div></div>; }\n","export interface QueryField { key: string; label: string; type?: 'text' | 'number' | 'date'; operators?: readonly QueryOperator[] }\nexport interface QueryOperator { value: string; label: string }\nexport interface QueryRule { id: string; field: string; operator: string; value: string }\nexport interface QueryBuilderProps { fields: readonly QueryField[]; rules: readonly QueryRule[]; onChange: (rules: QueryRule[]) => void; conjunction?: 'and' | 'or'; onConjunctionChange?: (value: 'and' | 'or') => void; disabled?: boolean }\nconst defaultOperators: readonly QueryOperator[] = [{ value: 'equals', label: '等于' }, { value: 'notEquals', label: '不等于' }, { value: 'contains', label: '包含' }];\nexport function QueryBuilder({ fields, rules, onChange, conjunction = 'and', onConjunctionChange, disabled }: QueryBuilderProps) { const update = (id: string, patch: Partial<QueryRule>) => onChange(rules.map((rule) => rule.id === id ? { ...rule, ...patch } : rule)); const add = () => { const field = fields[0]; if (!field) return; const operator = (field.operators ?? defaultOperators)[0]?.value ?? 'equals'; onChange([...rules, { id: `rule-${Date.now()}`, field: field.key, operator, value: '' }]); }; return <div className=\"hf-query-builder\"><header><strong>满足</strong><select aria-label=\"条件关系\" value={conjunction} disabled={disabled} onChange={(event) => onConjunctionChange?.(event.target.value as 'and' | 'or')}><option value=\"and\">全部条件</option><option value=\"or\">任一条件</option></select></header><div>{rules.map((rule, index) => { const field = fields.find((item) => item.key === rule.field) ?? fields[0]; const operators = field?.operators ?? defaultOperators; return <div className=\"hf-query-builder__rule\" key={rule.id}><span>{index + 1}</span><select aria-label={`条件 ${index + 1} 字段`} value={rule.field} disabled={disabled} onChange={(event) => { const next = fields.find((item) => item.key === event.target.value)!; update(rule.id, { field: next.key, operator: (next.operators ?? defaultOperators)[0]?.value ?? 'equals', value: '' }); }}>{fields.map((item) => <option key={item.key} value={item.key}>{item.label}</option>)}</select><select aria-label={`条件 ${index + 1} 运算符`} value={rule.operator} disabled={disabled} onChange={(event) => update(rule.id, { operator: event.target.value })}>{operators.map((item) => <option key={item.value} value={item.value}>{item.label}</option>)}</select><input aria-label={`条件 ${index + 1} 值`} type={field?.type ?? 'text'} value={rule.value} disabled={disabled} onChange={(event) => update(rule.id, { value: event.target.value })} /><button type=\"button\" aria-label={`删除条件 ${index + 1}`} disabled={disabled} onClick={() => onChange(rules.filter((item) => item.id !== rule.id))}>×</button></div>; })}</div><button type=\"button\" className=\"hf-query-builder__add\" disabled={disabled || !fields.length} onClick={add}>+ 添加条件</button></div>; }\n","import { useMemo, type DragEvent, type ReactNode } from 'react';\n\nexport interface FlowNode { id: string; label: ReactNode; x: number; y: number; status?: 'default' | 'active' | 'success' | 'warning'; description?: ReactNode }\nexport interface FlowEdge { id?: string; from: string; to: string; label?: string }\nexport interface FlowCanvasProps { nodes: readonly FlowNode[]; edges: readonly FlowEdge[]; width?: number; height?: number; selectedId?: string; onSelect?: (id: string) => void; empty?: ReactNode }\nexport function FlowCanvas({ nodes, edges, width = 900, height = 420, selectedId, onSelect, empty = '暂无流程节点' }: FlowCanvasProps) { const map = new Map(nodes.map((node) => [node.id, node])); if (!nodes.length) return <div className=\"hf-flow-canvas hf-flow-canvas__empty\">{empty}</div>; return <div className=\"hf-flow-canvas\" role=\"group\" aria-label=\"流程画布\"><div style={{ width, height }}><svg viewBox={`0 0 ${width} ${height}`} aria-hidden=\"true\">{edges.map((edge, index) => { const from = map.get(edge.from), to = map.get(edge.to); if (!from || !to) return null; const x1 = from.x + 82, y1 = from.y + 28, x2 = to.x, y2 = to.y + 28, bend = Math.max(30, Math.abs(x2 - x1) / 2); return <g key={edge.id ?? index}><path d={`M${x1} ${y1} C${x1 + bend} ${y1},${x2 - bend} ${y2},${x2} ${y2}`} /><circle cx={x2} cy={y2} r=\"3\" />{edge.label && <text x={(x1 + x2) / 2} y={(y1 + y2) / 2 - 8}>{edge.label}</text>}</g>; })}</svg>{nodes.map((node) => <button type=\"button\" key={node.id} className={`hf-flow-canvas__node is-${node.status ?? 'default'}${selectedId === node.id ? ' is-selected' : ''}`} style={{ left: node.x, top: node.y }} aria-pressed={selectedId === node.id} onClick={() => onSelect?.(node.id)}><strong>{node.label}</strong>{node.description && <small>{node.description}</small>}</button>)}</div></div>; }\n\nexport interface KanbanCard { id: string; title: ReactNode; description?: ReactNode; meta?: ReactNode; tags?: readonly string[] }\nexport interface KanbanColumn { id: string; title: ReactNode; cards: readonly KanbanCard[]; limit?: number; accent?: string }\nexport interface KanbanBoardProps { columns: readonly KanbanColumn[]; onMove?: (cardId: string, fromColumnId: string, toColumnId: string) => void; onCardClick?: (cardId: string, columnId: string) => void; empty?: ReactNode }\nexport function KanbanBoard({ columns, onMove, onCardClick, empty = '暂无看板列' }: KanbanBoardProps) { const drop = (event: DragEvent, target: string) => { event.preventDefault(); const card = event.dataTransfer.getData('application/x-hf-card'), from = event.dataTransfer.getData('application/x-hf-column'); if (card && from && from !== target) onMove?.(card, from, target); }; if (!columns.length) return <div className=\"hf-kanban-board__empty\">{empty}</div>; return <div className=\"hf-kanban-board\" aria-label=\"看板\">{columns.map((column) => <section key={column.id} style={{ '--hf-kanban-accent': column.accent } as React.CSSProperties} onDragOver={(event) => event.preventDefault()} onDrop={(event) => drop(event, column.id)}><header><strong>{column.title}</strong><span>{column.cards.length}{column.limit ? ` / ${column.limit}` : ''}</span></header><div>{column.cards.map((card) => <button type=\"button\" draggable={Boolean(onMove)} className=\"hf-kanban-card\" key={card.id} onDragStart={(event) => { event.dataTransfer.setData('application/x-hf-card', card.id); event.dataTransfer.setData('application/x-hf-column', column.id); }} onClick={() => onCardClick?.(card.id, column.id)}><strong>{card.title}</strong>{card.description && <p>{card.description}</p>}{card.tags?.length ? <span>{card.tags.map((tag) => <i key={tag}>{tag}</i>)}</span> : null}{card.meta && <small>{card.meta}</small>}</button>)}</div></section>)}</div>; }\n\nexport interface GanttTask { id: string; label: ReactNode; start: string | Date; end: string | Date; progress?: number; group?: string; color?: string }\nexport interface GanttChartProps { tasks: readonly GanttTask[]; start?: string | Date; end?: string | Date; onTaskClick?: (id: string) => void; empty?: ReactNode }\nconst day = 86400000; const toTime = (value: string | Date) => new Date(value).setHours(0, 0, 0, 0);\nexport function GanttChart({ tasks, start, end, onTaskClick, empty = '暂无排期任务' }: GanttChartProps) { const range = useMemo(() => { const starts = tasks.map((task) => toTime(task.start)), ends = tasks.map((task) => toTime(task.end)); const from = start ? toTime(start) : Math.min(...starts), to = end ? toTime(end) : Math.max(...ends); return { from, days: Math.max(1, Math.round((to - from) / day) + 1) }; }, [tasks, start, end]); if (!tasks.length) return <div className=\"hf-gantt-chart__empty\">{empty}</div>; return <div className=\"hf-gantt-chart\"><header><strong>任务</strong><div>{Array.from({ length: Math.min(range.days, 31) }, (_, index) => <span key={index}>{new Date(range.from + index * day).getDate()}</span>)}</div></header>{tasks.map((task) => { const offset = Math.max(0, (toTime(task.start) - range.from) / day), length = Math.max(1, (toTime(task.end) - toTime(task.start)) / day + 1); return <div className=\"hf-gantt-chart__row\" key={task.id}><span><strong>{task.label}</strong>{task.group && <small>{task.group}</small>}</span><div><button type=\"button\" style={{ left: `${offset / range.days * 100}%`, width: `${length / range.days * 100}%`, '--hf-gantt-color': task.color } as React.CSSProperties} onClick={() => onTaskClick?.(task.id)}><i style={{ width: `${Math.max(0, Math.min(100, task.progress ?? 0))}%` }} /><span>{task.progress ?? 0}%</span></button></div></div>; })}</div>; }\n\nexport interface ChartLegendItem { label: ReactNode; color: string; value?: ReactNode }\nexport interface ChartContainerProps { title?: ReactNode; description?: ReactNode; actions?: ReactNode; legend?: readonly ChartLegendItem[]; children: ReactNode; height?: number; loading?: boolean; empty?: boolean; emptyContent?: ReactNode }\nexport function ChartContainer({ title, description, actions, legend, children, height = 320, loading, empty, emptyContent = '暂无图表数据' }: ChartContainerProps) { return <section className=\"hf-chart-container\"><header><div>{title && <strong>{title}</strong>}{description && <p>{description}</p>}</div>{actions}</header>{legend?.length ? <div className=\"hf-chart-container__legend\">{legend.map((item, index) => <span key={index}><i style={{ background: item.color }} />{item.label}{item.value && <strong>{item.value}</strong>}</span>)}</div> : null}<div className=\"hf-chart-container__body\" style={{ height }}>{loading ? <div className=\"hf-chart-container__state\"><span className=\"hf-spinner\" />正在加载图表</div> : empty ? <div className=\"hf-chart-container__state\">{emptyContent}</div> : children}</div></section>; }\n\nexport interface PivotValue<T> { key: string; label: ReactNode; value: (item: T) => number; aggregate?: 'sum' | 'average' | 'count'; format?: (value: number) => ReactNode }\nexport interface PivotTableProps<T> { data: readonly T[]; row: (item: T) => string; column: (item: T) => string; values: readonly PivotValue<T>[]; rowLabel?: ReactNode; showTotals?: boolean; empty?: ReactNode }\nexport function PivotTable<T>({ data, row, column, values, rowLabel = '项目', showTotals = true, empty = '暂无透视数据' }: PivotTableProps<T>) { const rows = [...new Set(data.map(row))], columns = [...new Set(data.map(column))]; const calculate = (items: readonly T[], metric: PivotValue<T>) => { if (metric.aggregate === 'count') return items.length; const sum = items.reduce((total, item) => total + metric.value(item), 0); return metric.aggregate === 'average' ? (items.length ? sum / items.length : 0) : sum; }; if (!data.length || !values.length) return <div className=\"hf-pivot-table__empty\">{empty}</div>; return <div className=\"hf-pivot-table\"><table><thead><tr><th rowSpan={2}>{rowLabel}</th>{columns.map((item) => <th colSpan={values.length} key={item}>{item}</th>)}{showTotals && <th colSpan={values.length}>合计</th>}</tr><tr>{[...columns, ...(showTotals ? ['__total'] : [])].flatMap((col) => values.map((metric) => <th key={`${col}-${metric.key}`}>{metric.label}</th>))}</tr></thead><tbody>{rows.map((rowName) => <tr key={rowName}><th>{rowName}</th>{[...columns, ...(showTotals ? ['__total'] : [])].flatMap((columnName) => values.map((metric) => { const items = data.filter((item) => row(item) === rowName && (columnName === '__total' || column(item) === columnName)); const result = calculate(items, metric); return <td key={`${columnName}-${metric.key}`}>{metric.format?.(result) ?? result}</td>; }))}</tr>)}</tbody></table></div>; }\n","export interface FilterOption { value: string; label: string }\nexport interface FilterField { key: string; label: string; options?: readonly FilterOption[]; type?: 'text' | 'number' | 'date' }\nexport interface FilterValue { id: string; field: string; value: string }\nexport interface FilterBuilderProps { fields: readonly FilterField[]; value: readonly FilterValue[]; onChange: (value: FilterValue[]) => void; disabled?: boolean; addLabel?: string }\nexport function FilterBuilder({ fields, value, onChange, disabled, addLabel = '添加筛选' }: FilterBuilderProps) { const add = () => { const field = fields.find((item) => !value.some((filter) => filter.field === item.key)) ?? fields[0]; if (field) onChange([...value, { id: `filter-${Date.now()}`, field: field.key, value: '' }]); }; const update = (id: string, patch: Partial<FilterValue>) => onChange(value.map((item) => item.id === id ? { ...item, ...patch } : item)); return <div className=\"hf-filter-builder\" role=\"group\" aria-label=\"筛选条件\"><div>{value.map((filter, index) => { const field = fields.find((item) => item.key === filter.field) ?? fields[0]; return <div className=\"hf-filter-builder__item\" key={filter.id}><select aria-label={`筛选 ${index + 1} 字段`} value={filter.field} disabled={disabled} onChange={(event) => update(filter.id, { field: event.target.value, value: '' })}>{fields.map((item) => <option value={item.key} key={item.key}>{item.label}</option>)}</select>{field?.options ? <select aria-label={`筛选 ${index + 1} 值`} value={filter.value} disabled={disabled} onChange={(event) => update(filter.id, { value: event.target.value })}><option value=\"\">请选择</option>{field.options.map((item) => <option value={item.value} key={item.value}>{item.label}</option>)}</select> : <input aria-label={`筛选 ${index + 1} 值`} type={field?.type ?? 'text'} value={filter.value} disabled={disabled} onChange={(event) => update(filter.id, { value: event.target.value })} />}<button type=\"button\" aria-label={`删除筛选 ${index + 1}`} disabled={disabled} onClick={() => onChange(value.filter((item) => item.id !== filter.id))}>×</button></div>; })}</div><button type=\"button\" className=\"hf-filter-builder__add\" disabled={disabled || !fields.length} onClick={add}>+ {addLabel}</button>{value.length > 0 && <button type=\"button\" className=\"hf-filter-builder__clear\" disabled={disabled} onClick={() => onChange([])}>清空</button>}</div>; }\n"],"mappings":"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","names":["jsx","Button","jsx","jsx","jsxs","forwardRef","jsx","jsxs","Input","forwardRef","jsx","jsxs","Switch","useId","jsx","jsxs","jsx","jsxs","useId","jsx","jsxs","useId","useEffect","createPortal","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","forwardRef","jsx","IconButton","useState","jsx","jsxs","useState","useEffect","useRef","useState","jsx","jsxs","useState","jsx","jsxs","useMemo","useState","jsx","jsxs","useMemo","Tag","useState","useState","jsx","jsxs","useState","useMemo","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useMemo","jsx","jsxs","day","jsx","Tag","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","useId","useState","jsx","jsxs","useState","useId","useEffect","useState","jsx","useEffect","useState","jsx","jsxs","useId","jsx","jsxs","jsx","jsxs","useEffect","useMemo","useState","createPortal","jsx","jsxs","useState","useMemo","useEffect","createPortal","jsx","jsxs","jsx","jsx","jsxs","forwardRef","useEffect","useId","useRef","useState","jsx","jsxs","forwardRef","Select","useId","useState","useRef","useEffect","useId","useState","jsx","jsxs","useState","useId","useId","jsx","jsxs","useState","jsx","useState","forwardRef","useId","jsx","jsxs","Textarea","forwardRef","useEffect","useRef","jsx","jsxs","Checkbox","Radio","useState","jsx","jsxs","useState","day","jsx","jsxs","useId","useRef","useState","jsx","jsxs","useId","useRef","useState","useId","useMemo","useState","jsx","jsxs","useId","useState","useMemo","useId","jsx","jsxs","useState","jsx","jsxs","useId","createPortal","jsx","jsxs","useId","createPortal","cloneElement","useId","useState","jsx","jsxs","useState","useId","cloneElement","cloneElement","useId","useState","jsx","jsxs","useState","useId","cloneElement","cloneElement","isValidElement","useState","jsx","jsxs","useState","isValidElement","cloneElement","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","useMemo","useState","jsx","jsxs","item","useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","useState","jsx","useState","jsx","jsxs","i","j","jsx","jsxs","useMemo","jsx","jsxs","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../src/feedback/HotspotGuide.tsx","../src/components/Button.tsx","../src/overlays/useOverlay.ts","../src/data-display/ChartCrosshair.tsx","../src/data-display/crosshairGeometry.ts","../src/data-display/DrilldownChart.tsx","../src/data-display/LegendFilter.tsx","../src/data-display/RangeBrush.tsx","../src/data-display/ExpandablePanel.tsx","../src/feedback/ProductTour.tsx","../src/feedback/useTourPosition.ts","../src/data-display/ReadMore.tsx","../src/data-display/SortableList.tsx","../src/data-display/useSortableOrder.ts","../src/feedback/AnnouncementBar.tsx","../src/foundations/Icon.tsx","../src/feedback/OnboardingChecklist.tsx","../src/theme/tokens.ts","../src/theme/ThemeProvider.tsx","../src/components/SplitButton.tsx","../src/components/Input.tsx","../src/components/Switch.tsx","../src/components/SegmentedControl.tsx","../src/components/Card.tsx","../src/components/Modal.tsx","../src/components/Toast.tsx","../src/components/Content.tsx","../src/components/Accordion.tsx","../src/components/Dropdown.tsx","../src/components/IconButton.tsx","../src/components/AdvancedUtility.tsx","../src/components/Editors.tsx","../src/components/AIInteraction.tsx","../src/components/AIAdvanced.tsx","../src/components/Collaboration.tsx","../src/components/Assets.tsx","../src/forms/Select.tsx","../src/components/Scheduling.tsx","../src/foundations/Typography.tsx","../src/navigation/types.ts","../src/navigation/FloatingNav.tsx","../src/navigation/Sidebar.tsx","../src/navigation/Breadcrumb.tsx","../src/navigation/Menu.tsx","../src/navigation/MobileNavigation.tsx","../src/navigation/Scrollspy.tsx","../src/navigation/ShrinkNav.tsx","../src/navigation/Tabs.tsx","../src/navigation/Steps.tsx","../src/navigation/CommandPalette.tsx","../src/layout/Layout.tsx","../src/layout/Skeleton.tsx","../src/feedback/Loading.tsx","../src/forms/MultiSelect.tsx","../src/forms/ChoiceGroup.tsx","../src/forms/ValidatedInput.tsx","../src/forms/Textarea.tsx","../src/forms/Choice.tsx","../src/forms/Advanced.tsx","../src/forms/Form.tsx","../src/forms/Upload.tsx","../src/forms/Combobox.tsx","../src/forms/NumberInput.tsx","../src/forms/NextBatch.tsx","../src/feedback/Drawer.tsx","../src/feedback/Popover.tsx","../src/feedback/Status.tsx","../src/feedback/Essentials.tsx","../src/data-display/DataDisplay.tsx","../src/data-display/Collections.tsx","../src/data-display/Insight.tsx","../src/data-display/EmptyState.tsx","../src/data-display/DataGrid.tsx","../src/data-display/Tree.tsx","../src/layout/AuthLayout.tsx","../src/layout/Hero.tsx","../src/layout/ResizablePanel.tsx","../src/feedback/NotificationCenter.tsx","../src/data-display/VirtualList.tsx","../src/data-display/DeveloperView.tsx","../src/forms/QueryBuilder.tsx","../src/data-display/WorkflowViews.tsx","../src/data-display/useKanbanMove.ts","../src/data-display/KanbanBoardView.tsx","../src/forms/FilterBuilder.tsx","../src/data-display/ZoomableChart.tsx","../src/feedback/HoldToConfirm.tsx","../src/feedback/useHoldConfirmation.ts","../src/feedback/ConfirmationAlternative.tsx","../src/feedback/TypedConfirm.tsx","../src/data-display/SwipeActions.tsx","../src/data-display/useSwipeReveal.ts","../src/feedback/ChecklistConfirm.tsx","../src/feedback/UndoNotice.tsx","../src/feedback/useUndoDeadline.ts","../src/feedback/useUndoRequest.ts","../src/navigation/useReadingPosition.ts","../src/navigation/ReadingProgress.tsx","../src/data-display/LoadMore.tsx","../src/data-display/InfiniteScroll.tsx","../src/data-display/LazyLoad.tsx","../src/feedback/OptimisticUpdate.tsx","../src/feedback/useOptimisticRequest.ts"],"sourcesContent":["import { useId, useRef, useState, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface HotspotGuideProps {\n title: string;\n children: ReactNode;\n unread?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onAcknowledge?: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function HotspotGuide({ title, children, unread = true, open, defaultOpen = false,\n onOpenChange, onAcknowledge, disabled = false, className = '' }: HotspotGuideProps) {\n const [internal, setInternal] = useState(defaultOpen);\n const visible = !disabled && (open ?? internal);\n const id = useId();\n const trigger = useRef<HTMLButtonElement>(null);\n const root = useDismissibleLayer<HTMLDivElement>(visible, () => update(false), {\n autoFocus: false, restoreFocus: false, closeOnOutside: true,\n });\n function update(next: boolean) {\n if (open === undefined) setInternal(next);\n onOpenChange?.(next);\n if (!next && root.current?.contains(document.activeElement)) trigger.current?.focus();\n }\n return <div ref={root} className={`hf-hotspot-guide ${className}`}>\n <Button ref={trigger} type=\"button\" variant=\"quiet\" size=\"sm\" disabled={disabled}\n aria-expanded={visible} aria-controls={visible ? id : undefined}\n onClick={() => update(!visible)}>\n <span className=\"hf-hotspot-guide__dot\" data-unread={unread} aria-hidden=\"true\">{unread ? '●' : '✓'}</span>\n {title}<span className=\"hf-hotspot-guide__state\">{unread ? '未读提示' : '已读提示'}</span>\n </Button>\n {visible && <section id={id} className=\"hf-hotspot-guide__content\" aria-labelledby={`${id}-title`}>\n <h3 id={`${id}-title`}>{title}</h3>\n <div>{children}</div>\n <div className=\"hf-hotspot-guide__actions\">\n <Button type=\"button\" variant=\"quiet\" size=\"sm\" onClick={() => update(false)}>关闭提示</Button>\n {unread && onAcknowledge && <Button type=\"button\" size=\"sm\" onClick={() => {\n onAcknowledge();\n update(false);\n }}>知道了</Button>}\n </div>\n </section>}\n </div>;\n}\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'outline' | 'quiet' | 'danger';\n size?: 'sm' | 'md' | 'lg';\n shape?: 'rounded' | 'pill' | 'square';\n fullWidth?: boolean;\n loading?: boolean;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n iconOnly?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { children, className = '', variant = 'primary', size = 'md', shape = 'rounded', fullWidth = false, loading = false, leadingIcon, trailingIcon, iconOnly = false, disabled, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n className={`hf-button hf-button--${variant} hf-button--${size} hf-button--${shape} ${fullWidth ? 'hf-button--full' : ''} ${iconOnly ? 'hf-button--icon' : ''} ${className}`.trim()}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading ? <span className=\"hf-spinner\" aria-hidden=\"true\" /> : leadingIcon}\n {!iconOnly && <span>{loading ? '处理中' : children}</span>}\n {!loading && trailingIcon}\n </button>\n );\n});\n","import { useEffect, useRef, type RefObject } from 'react';\n\nconst focusableSelector = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\ninterface LayerEntry { id: symbol }\n\nconst layerStack: LayerEntry[] = [];\nlet scrollLockCount = 0;\nlet previousBodyOverflow = '';\n\nexport interface DismissibleLayerOptions {\n modal?: boolean;\n closeOnOutside?: boolean;\n trapFocus?: boolean;\n lockScroll?: boolean;\n autoFocus?: boolean;\n restoreFocus?: boolean;\n}\n\nfunction isTopLayer(id: symbol) { return layerStack.at(-1)?.id === id; }\nfunction addLayer(id: symbol) { layerStack.push({ id }); }\nfunction removeLayer(id: symbol) {\n const index = layerStack.findIndex((layer) => layer.id === id);\n if (index >= 0) layerStack.splice(index, 1);\n}\n\nfunction lockBodyScroll() {\n if (scrollLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n scrollLockCount += 1;\n}\n\nfunction unlockBodyScroll() {\n scrollLockCount = Math.max(0, scrollLockCount - 1);\n if (scrollLockCount === 0) document.body.style.overflow = previousBodyOverflow;\n}\n\nfunction focusInitialElement(root: HTMLElement) {\n const target = root.querySelector<HTMLElement>('[data-autofocus], [autofocus]')\n ?? root.querySelector<HTMLElement>(focusableSelector)\n ?? root;\n target.focus();\n}\n\nfunction trapTabKey(event: KeyboardEvent, root: HTMLElement) {\n const nodes = [...root.querySelectorAll<HTMLElement>(focusableSelector)]\n .filter((node) => !node.hasAttribute('disabled') && node.getAttribute('aria-hidden') !== 'true');\n if (!nodes.length) {\n event.preventDefault();\n root.focus();\n return;\n }\n const first = nodes[0]!;\n const last = nodes[nodes.length - 1]!;\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n}\n\nexport function useDismissibleLayer<T extends HTMLElement>(\n open: boolean,\n onClose: () => void,\n modalOrOptions: boolean | DismissibleLayerOptions = false,\n): RefObject<T | null> {\n const ref = useRef<T>(null);\n const idRef = useRef(Symbol('dismissible-layer'));\n const closeRef = useRef(onClose);\n closeRef.current = onClose;\n\n const options = typeof modalOrOptions === 'boolean' ? { modal: modalOrOptions } : modalOrOptions;\n const modal = options.modal ?? false;\n const closeOnOutside = options.closeOnOutside ?? !modal;\n const trapFocus = options.trapFocus ?? modal;\n const lockScroll = options.lockScroll ?? modal;\n const autoFocus = options.autoFocus ?? true;\n const restoreFocus = options.restoreFocus ?? true;\n\n useEffect(() => {\n if (!open) return undefined;\n const id = idRef.current;\n const previousFocus = document.activeElement as HTMLElement | null;\n addLayer(id);\n if (lockScroll) lockBodyScroll();\n\n const handlePointerDown = (event: PointerEvent) => {\n if (!isTopLayer(id) || !closeOnOutside) return;\n if (!ref.current?.contains(event.target as Node)) closeRef.current();\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isTopLayer(id)) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeRef.current();\n } else if (event.key === 'Tab' && trapFocus && ref.current) {\n trapTabKey(event, ref.current);\n }\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown, true);\n const animationFrame = autoFocus\n ? requestAnimationFrame(() => ref.current && focusInitialElement(ref.current))\n : undefined;\n\n return () => {\n if (animationFrame !== undefined) cancelAnimationFrame(animationFrame);\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown, true);\n removeLayer(id);\n if (lockScroll) unlockBodyScroll();\n if (restoreFocus && previousFocus?.isConnected) previousFocus.focus();\n };\n }, [autoFocus, closeOnOutside, lockScroll, modal, open, restoreFocus, trapFocus]);\n\n return ref;\n}\n","import { useId, useMemo, useState, type PointerEvent } from 'react';\nimport { crosshairGeometry } from './crosshairGeometry';\n\nexport interface CrosshairPoint { id: string; label: string; value: number | null }\nexport interface ChartCrosshairProps {\n points: readonly CrosshairPoint[];\n label?: string;\n selectedId?: string;\n defaultSelectedId?: string;\n onSelectedIdChange?: (id: string) => void;\n formatValue?: (value: number) => string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function ChartCrosshair({ points, label = '逐点读数', selectedId, defaultSelectedId,\n onSelectedIdChange, formatValue = String, disabled = false, className = '' }: ChartCrosshairProps) {\n const [internal, setInternal] = useState(defaultSelectedId);\n const id = useId();\n const geometry = useMemo(() => crosshairGeometry(points), [points]);\n const index = geometry.indexById.get(selectedId ?? internal ?? '') ?? 0;\n const point = points[index];\n const position = geometry.coordinates[index];\n const valueText = point?.value !== null && point?.value !== undefined && Number.isFinite(point.value)\n ? formatValue(point.value) : '暂无读数';\n function select(next: number) {\n const candidate = points[next];\n if (disabled || !candidate || candidate.id === point?.id) return;\n if (selectedId === undefined) setInternal(candidate.id);\n onSelectedIdChange?.(candidate.id);\n }\n function locate(event: PointerEvent<SVGSVGElement>) {\n const bounds = event.currentTarget.getBoundingClientRect();\n if (!bounds.width) return;\n const fraction = ((event.clientX - bounds.left) / bounds.width * 600 - 24) / 552;\n select(Math.max(0, Math.min(points.length - 1, Math.round(fraction * (points.length - 1)))));\n }\n return <section className={`hf-chart-crosshair ${className}`} aria-labelledby={`${id}-title`}>\n <h3 id={`${id}-title`}>{label}</h3>\n {!point ? <p role=\"status\">暂无图表数据</p> : <>\n <div className=\"hf-chart-crosshair__scale\" aria-hidden=\"true\">\n <span>纵轴下界 {formatValue(geometry.min)}</span><span>上界 {formatValue(geometry.max)}</span>\n </div>\n <svg viewBox=\"0 0 600 220\" preserveAspectRatio=\"none\" aria-hidden=\"true\"\n onPointerMove={(event) => { if (event.pointerType !== 'touch') locate(event); }} onPointerDown={locate}>\n <path className=\"hf-chart-crosshair__axis\" d=\"M24 24V196H576\" />\n <path className=\"hf-chart-crosshair__line\" d={geometry.path} />\n {position && <>\n <path className=\"hf-chart-crosshair__cursor\" d={`M${position.x} 24V196${position.y === null ? '' : ` M24 ${position.y}H576`}`} />\n {position.y !== null && <circle cx={position.x} cy={position.y} r=\"5\" />}\n </>}\n </svg>\n <div className=\"hf-chart-crosshair__reading\"><span>{point.label}</span><strong>{valueText}</strong></div>\n <label htmlFor={`${id}-point`}>选择数据点({index + 1}/{points.length})</label>\n <input id={`${id}-point`} type=\"range\" min={0} max={Math.max(0, points.length - 1)} step={1}\n value={index} disabled={disabled || points.length < 2} aria-valuetext={`${point.label}:${valueText}`}\n onChange={(event) => select(Number(event.target.value))} />\n {!geometry.hasValues && <p role=\"status\">当前序列没有有效数值</p>}\n </>}\n </section>;\n}\n","import type { CrosshairPoint } from './ChartCrosshair';\n\nexport function crosshairGeometry(points: readonly CrosshairPoint[]) {\n const finite = points.map((point) => point.value).filter((value): value is number => value !== null && Number.isFinite(value));\n let min = 0;\n let max = 0;\n for (const value of finite) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n const scale = Math.max(Math.abs(min), Math.abs(max), 1);\n const span = max / scale - min / scale;\n const coordinates = points.map((point, index) => ({\n x: points.length <= 1 ? 300 : 24 + index / (points.length - 1) * 552,\n y: point.value === null || !Number.isFinite(point.value) ? null\n : span === 0 ? 110 : 196 - (point.value / scale - min / scale) / span * 172,\n }));\n let path = '';\n let connected = false;\n for (const point of coordinates) {\n if (point.y === null) { connected = false; continue; }\n path += `${connected ? 'L' : 'M'}${point.x.toFixed(3)},${point.y.toFixed(3)} `;\n connected = true;\n }\n const indexById = new Map(points.map((point, index) => [point.id, index]));\n return { coordinates, path, min, max, indexById, hasValues: finite.length > 0 };\n}\n","import { useEffect, useId, useRef, useState } from 'react';\nimport { Button } from '../components/Button';\n\nexport interface DrilldownItem {\n id: string;\n label: string;\n value: number;\n children?: readonly DrilldownItem[];\n disabled?: boolean;\n}\nexport interface DrilldownChartProps {\n items: readonly DrilldownItem[];\n title?: string;\n path?: readonly string[];\n defaultPath?: readonly string[];\n onPathChange?: (path: string[]) => void;\n onLeafSelect?: (item: DrilldownItem, path: string[]) => void;\n formatValue?: (value: number) => string;\n disabled?: boolean;\n className?: string;\n}\n\nfunction resolveLevel(items: readonly DrilldownItem[], path: readonly string[]) {\n const ancestors: DrilldownItem[] = [];\n let current = items;\n for (const key of path) {\n const item = current.find((candidate) => candidate.id === key);\n if (!item?.children?.length || item.disabled) break;\n ancestors.push(item);\n current = item.children;\n }\n return { ancestors, current };\n}\n\nexport function DrilldownChart({ items, title = '层级数据', path, defaultPath = [], onPathChange,\n onLeafSelect, formatValue = String, disabled = false, className = '' }: DrilldownChartProps) {\n const [internal, setInternal] = useState<readonly string[]>(defaultPath);\n const requested = path ?? internal;\n const { ancestors, current } = resolveLevel(items, requested);\n const keys = ancestors.map((item) => item.id);\n const key = JSON.stringify(keys);\n const previous = useRef(key);\n const heading = useRef<HTMLHeadingElement>(null);\n const id = useId();\n useEffect(() => {\n if (previous.current !== key) heading.current?.focus();\n previous.current = key;\n }, [key]);\n function navigate(next: string[]) {\n if (path === undefined) setInternal(next);\n onPathChange?.(next);\n }\n let maximum = 1;\n for (const item of current) if (Number.isFinite(item.value)) maximum = Math.max(maximum, item.value);\n return <section className={`hf-drilldown-chart ${className}`} aria-labelledby={id}>\n <nav aria-label={`${title}路径`}><Button type=\"button\" variant=\"quiet\" size=\"sm\" disabled={disabled || !keys.length}\n onClick={() => navigate([])}>{title}</Button>\n {ancestors.map((item, index) => <Button key={JSON.stringify(keys.slice(0, index + 1))} type=\"button\" variant=\"quiet\" size=\"sm\"\n disabled={disabled || index === ancestors.length - 1} onClick={() => navigate(keys.slice(0, index + 1))}>{item.label}</Button>)}\n </nav>\n <div className=\"hf-drilldown-chart__header\">\n <h3 id={id} ref={heading} tabIndex={-1}>{ancestors.at(-1)?.label ?? title}</h3>\n {keys.length > 0 && <Button type=\"button\" variant=\"outline\" size=\"sm\" disabled={disabled}\n onClick={() => navigate(keys.slice(0, -1))}>返回上层</Button>}\n </div>\n {requested.length !== keys.length && <p role=\"status\">原路径已失效,已显示最近的有效层级。</p>}\n {!current.length && <p role=\"status\">暂无层级数据</p>}\n <ul>{current.map((item) => {\n const valid = Number.isFinite(item.value) && item.value >= 0;\n const branch = !!item.children?.length;\n const actionable = branch || !!onLeafSelect;\n const content = <><span className=\"hf-drilldown-chart__label\">{item.label}</span>\n <span>{valid ? formatValue(item.value) : '数值无效'}{branch ? ' · 查看明细' : ''}</span>\n <span className=\"hf-drilldown-chart__track\" aria-hidden=\"true\"><span style={{ width: `${valid ? item.value / maximum * 100 : 0}%` }} /></span></>;\n return <li key={item.id}>{actionable ? <button type=\"button\" disabled={disabled || item.disabled || !valid}\n onClick={() => branch ? navigate([...keys, item.id]) : onLeafSelect?.(item, [...keys, item.id])}>{content}</button>\n : <div className=\"hf-drilldown-chart__leaf\">{content}</div>}</li>;\n })}</ul>\n </section>;\n}\n","import type { ReactNode } from 'react';\n\nexport interface LegendFilterItem {\n id: string;\n label: ReactNode;\n color?: string;\n disabled?: boolean;\n}\n\nexport interface LegendFilterProps {\n items: readonly LegendFilterItem[];\n visibleKeys: readonly string[];\n onVisibleKeysChange: (keys: string[]) => void;\n label?: string;\n allowEmpty?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\nexport function LegendFilter({ items, visibleKeys, onVisibleKeysChange, label = '图例筛选',\n allowEmpty = false, disabled = false, className = '' }: LegendFilterProps) {\n const keys = items.filter((item) => visibleKeys.includes(item.id)).map((item) => item.id);\n function toggle(id: string) {\n const next = keys.includes(id) ? keys.filter((key) => key !== id) : [...keys, id];\n if (allowEmpty || next.length) onVisibleKeysChange(next);\n }\n return <div className={`hf-legend-filter ${className}`} role=\"group\" aria-label={label}>\n {items.length === 0 && <span>暂无图例</span>}\n {items.map((item) => {\n const active = keys.includes(item.id);\n return <button key={item.id} type=\"button\" aria-pressed={active}\n disabled={disabled || item.disabled || (!allowEmpty && active && keys.length === 1)}\n onClick={() => toggle(item.id)}>\n <span className=\"hf-legend-filter__swatch\" aria-hidden=\"true\" style={{ backgroundColor: item.color }} />\n <span>{item.label}</span><span aria-hidden=\"true\">{active ? '✓' : '−'}</span>\n </button>;\n })}\n </div>;\n}\n","import { useId, type ReactNode } from 'react';\n\nexport interface RangeBrushProps {\n value: readonly [number, number];\n onValueChange: (value: [number, number]) => void;\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n disabled?: boolean;\n formatValue?: (value: number) => string;\n children?: ReactNode;\n className?: string;\n}\n\nexport function RangeBrush({ value, onValueChange, min = 0, max = 100, step = 1,\n label = '区间筛选', disabled = false, formatValue = String, children, className = '' }: RangeBrushProps) {\n const id = useId();\n const valid = Number.isFinite(min) && Number.isFinite(max) && max > min && Number.isFinite(max - min);\n const lower = valid ? min : 0;\n const upper = valid ? max : 100;\n const increment = Number.isFinite(step) && step > 0 ? step : 1;\n const steps = (upper - lower) / increment;\n const effectiveStep = Number.isFinite(steps) ? increment : upper - lower;\n const effectiveCount = (upper - lower) / effectiveStep;\n const lastStep = Math.floor(effectiveCount + Number.EPSILON * Math.max(1, effectiveCount) * 2);\n const snap = (number: number, fallback: number) => {\n const candidate = Math.min(upper, Math.max(lower, Number.isFinite(number) ? number : fallback));\n const position = Math.min(lastStep, Math.round((candidate - lower) / effectiveStep));\n return Math.min(upper, Number((lower + position * effectiveStep).toPrecision(12)));\n };\n const values = [snap(value[0], lower), snap(value[1], upper)].sort((a, b) => a - b);\n const start = values[0]!;\n const end = values[1]!;\n const percent = (number: number) => `${(number - lower) / (upper - lower) * 100}%`;\n return <fieldset className={`hf-range-brush ${className}`} disabled={disabled || !valid}>\n <legend>{label}</legend>\n <div className=\"hf-range-brush__plot\" aria-hidden=\"true\" inert>\n {children}\n <div className=\"hf-range-brush__selection\" style={{ left: percent(start), right: percent(upper - end + lower) }} />\n </div>\n {!valid && <p role=\"status\">区间范围无效:max 必须大于 min,且边界必须为有限数。</p>}\n <div className=\"hf-range-brush__controls\">\n <label htmlFor={`${id}-start`}>起点 <output>{formatValue(start)}</output></label>\n <input id={`${id}-start`} type=\"range\" min={lower} max={upper} step={effectiveStep} value={start}\n aria-valuetext={formatValue(start)} onChange={(event) => onValueChange([Math.min(end, snap(Number(event.target.value), start)), end])} />\n <label htmlFor={`${id}-end`}>终点 <output>{formatValue(end)}</output></label>\n <input id={`${id}-end`} type=\"range\" min={lower} max={upper} step={effectiveStep} value={end}\n aria-valuetext={formatValue(end)} onChange={(event) => onValueChange([start, Math.max(start, snap(Number(event.target.value), end))])} />\n </div>\n </fieldset>;\n}\n","import { useEffect, useId, useRef, useState, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\n\nexport interface ExpandablePanelProps {\n title: string;\n summary?: ReactNode;\n children: ReactNode;\n expanded?: boolean;\n defaultExpanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function ExpandablePanel({ title, summary, children, expanded, defaultExpanded = false,\n onExpandedChange, disabled = false, className = '' }: ExpandablePanelProps) {\n const [internal, setInternal] = useState(defaultExpanded);\n const open = expanded ?? internal;\n const id = useId();\n const body = useRef<HTMLDivElement>(null);\n const header = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (!open && body.current?.contains(document.activeElement)) {\n header.current?.querySelector('button')?.focus();\n }\n }, [open]);\n function toggle() {\n if (expanded === undefined) setInternal(!open);\n onExpandedChange?.(!open);\n }\n return <section className={`hf-expandable-panel ${className}`} aria-labelledby={`${id}-title`}>\n <div className=\"hf-expandable-panel__header\" ref={header}>\n <h3 id={`${id}-title`}>{title}</h3>\n <Button variant=\"quiet\" size=\"sm\" disabled={disabled} aria-expanded={open} aria-controls={id} onClick={toggle}>\n {open ? '收起详情' : '展开详情'}\n </Button>\n </div>\n {summary && <div className=\"hf-expandable-panel__summary\">{summary}</div>}\n <div id={id} ref={body} className=\"hf-expandable-panel__reveal\" data-open={open} aria-hidden={!open} inert={!open}>\n <div><div className=\"hf-expandable-panel__content\">{children}</div></div>\n </div>\n </section>;\n}\n","import { useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../components/Button';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nimport { useTourPosition } from './useTourPosition';\n\nexport interface ProductTourStep {\n id: string;\n title: string;\n description: ReactNode;\n target?: () => HTMLElement | null;\n}\n\nexport interface ProductTourProps {\n steps: readonly ProductTourStep[];\n open: boolean;\n current: number;\n onCurrentChange: (current: number) => void;\n onClose: () => void;\n onFinish?: () => void;\n className?: string;\n}\n\nexport function ProductTour({ steps, open, current, onCurrentChange, onClose, onFinish, className = '' }: ProductTourProps) {\n const index = Number.isFinite(current) ? Math.max(0, Math.min(steps.length - 1, Math.floor(current))) : 0;\n const step = steps[index];\n const active = open && !!step;\n const ref = useDismissibleLayer<HTMLDivElement>(active, onClose, true);\n const { marker, rect, theme } = useTourPosition(active, step?.target);\n const id = useId();\n return <><span ref={marker} hidden />{active && step && typeof document !== 'undefined' && createPortal(\n <div className={`hf-product-tour ${className}`} style={theme}>\n <svg className=\"hf-product-tour__shade\" aria-hidden=\"true\" width=\"100%\" height=\"100%\">\n <defs><mask id={`${id}-mask`}><rect width=\"100%\" height=\"100%\" fill=\"white\" />\n {rect && <rect width={rect.width} height={rect.height} x={rect.left} y={rect.top} fill=\"black\" />}\n </mask></defs>\n <rect width=\"100%\" height=\"100%\" fill=\"currentColor\" mask={`url(#${id}-mask)`} />\n </svg>\n {rect && <div className=\"hf-product-tour__target\" style={rect} aria-hidden=\"true\" />}\n <div ref={ref} className=\"hf-product-tour__card\" role=\"dialog\" aria-modal=\"true\"\n aria-labelledby={`${id}-title`} aria-describedby={`${id}-body`} tabIndex={-1}>\n <span className=\"hf-product-tour__count\">{index + 1} / {steps.length}</span>\n <h3 id={`${id}-title`}>{step.title}</h3>\n <div id={`${id}-body`}>{step.description}</div>\n {step.target && !rect && <p role=\"status\">目标当前不可见,请关闭导览后检查页面。</p>}\n <div className=\"hf-product-tour__actions\">\n <Button variant=\"quiet\" onClick={onClose}>关闭导览</Button>\n <Button variant=\"outline\" disabled={index === 0} onClick={() => onCurrentChange(index - 1)}>上一步</Button>\n <Button onClick={() => index < steps.length - 1 ? onCurrentChange(index + 1) : (onFinish ?? onClose)()}>\n {index < steps.length - 1 ? '下一步' : '结束导览'}\n </Button>\n </div>\n </div>\n </div>, document.body)}</>;\n}\n","import { useLayoutEffect, useRef, useState, type CSSProperties } from 'react';\n\nexport function useTourPosition(open: boolean, target: (() => HTMLElement | null) | undefined) {\n const marker = useRef<HTMLSpanElement>(null);\n const [rect, setRect] = useState<{ top: number; left: number; width: number; height: number } | null>(null);\n const [theme, setTheme] = useState<CSSProperties>({});\n useLayoutEffect(() => {\n if (!open) return;\n const host = marker.current?.closest('.hf-theme') ?? marker.current;\n if (host) {\n const computed = getComputedStyle(host);\n const variables: Record<string, string> = { fontFamily: computed.fontFamily, colorScheme: computed.colorScheme };\n for (const key of computed) if (key.startsWith('--hf-')) variables[key] = computed.getPropertyValue(key);\n setTheme(variables);\n }\n let observed: HTMLElement | null = null;\n const resize = new ResizeObserver(update);\n function update() {\n const node = target?.() ?? null;\n if (observed !== node) {\n if (observed) resize.unobserve(observed);\n observed = node;\n if (node) resize.observe(node);\n }\n const bounds = node?.isConnected ? node.getBoundingClientRect() : null;\n const visible = bounds && node && getComputedStyle(node).visibility !== 'hidden'\n && bounds.width > 0 && bounds.height > 0 && bounds.bottom > 0\n && bounds.top < window.innerHeight && bounds.right > 0 && bounds.left < window.innerWidth;\n const next = visible ? { top: Math.max(0, bounds.top), left: Math.max(0, bounds.left),\n width: Math.min(window.innerWidth, bounds.right) - Math.max(0, bounds.left),\n height: Math.min(window.innerHeight, bounds.bottom) - Math.max(0, bounds.top) } : null;\n setRect((previous) => JSON.stringify(previous) === JSON.stringify(next) ? previous : next);\n }\n update();\n let frame = 0;\n const schedule = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(update);\n };\n const mutation = new MutationObserver((records) => {\n if (records.some((record) => !(record.target instanceof Element)\n || !record.target.closest('.hf-product-tour'))) schedule();\n });\n mutation.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class', 'hidden'] });\n window.addEventListener('resize', update);\n window.addEventListener('scroll', update, true);\n document.addEventListener('transitionend', schedule, true);\n document.addEventListener('animationend', schedule, true);\n return () => {\n resize.disconnect();\n mutation.disconnect();\n cancelAnimationFrame(frame);\n window.removeEventListener('resize', update);\n window.removeEventListener('scroll', update, true);\n document.removeEventListener('transitionend', schedule, true);\n document.removeEventListener('animationend', schedule, true);\n };\n }, [open, target]);\n return { marker, rect, theme };\n}\n","import { useEffect, useId, useRef, useState, type CSSProperties } from 'react';\nimport { Button } from '../components/Button';\n\nexport interface ReadMoreProps {\n text: string;\n lines?: number;\n expanded?: boolean;\n defaultExpanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n expandLabel?: string;\n collapseLabel?: string;\n className?: string;\n}\n\n/** 仅截断纯文本,避免折叠区中出现不可见但可聚焦的链接或按钮。 */\nexport function ReadMore({\n text, lines = 3, expanded, defaultExpanded = false, onExpandedChange,\n expandLabel = '展开全文', collapseLabel = '收起全文', className = '',\n}: ReadMoreProps) {\n const id = useId();\n const content = useRef<HTMLParagraphElement>(null);\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const [overflow, setOverflow] = useState(false);\n const isExpanded = expanded ?? internalExpanded;\n const lineCount = Number.isFinite(lines) ? Math.max(1, Math.floor(lines)) : 3;\n\n useEffect(() => {\n const element = content.current;\n if (!element || isExpanded) return;\n const measure = () => setOverflow(element.scrollHeight > element.clientHeight + 1);\n measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [text, lineCount, isExpanded]);\n\n function toggle() {\n if (expanded === undefined) setInternalExpanded(!isExpanded);\n onExpandedChange?.(!isExpanded);\n }\n\n return (\n <div className={`hf-read-more ${className}`.trim()}>\n <p\n ref={content}\n id={id}\n className={isExpanded ? 'hf-read-more__text' : 'hf-read-more__text is-clamped'}\n style={{ '--hf-read-more-lines': lineCount } as CSSProperties}\n >{text}</p>\n {(overflow || (isExpanded && Boolean(text))) && (\n <Button variant=\"quiet\" size=\"sm\" onClick={toggle} aria-expanded={isExpanded} aria-controls={id}>\n {isExpanded ? collapseLabel : expandLabel}\n </Button>\n )}\n </div>\n );\n}\n","import { useId, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\nimport { useSortableOrder } from './useSortableOrder';\n\nexport interface SortableListItem {\n id: string;\n label: string;\n description?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SortableListProps {\n items: readonly SortableListItem[];\n onOrderChange: (items: SortableListItem[]) => void;\n label?: string;\n disabled?: boolean;\n emptyMessage?: ReactNode;\n className?: string;\n}\n\n/** 指针预览不修改业务数据;只有松手或明确的键盘移动才提交新数组。 */\nexport function SortableList({\n items, onOrderChange, label = '排序列表', disabled = false,\n emptyMessage = '暂无可排序项目', className = '',\n}: SortableListProps) {\n const hintId = useId();\n const { root, preview, announcement, commit, cancel, start, move, finish } = useSortableOrder({ items, disabled, onOrderChange });\n const sourceIndex = items.findIndex((item) => item.id === preview?.id);\n return (\n <section className={`hf-sortable ${className}`.trim()} aria-label={label}>\n <p id={hintId} className=\"hf-sortable__hint\">拖动手柄调整顺序,也可使用上下移动按钮或 Alt + 方向键。</p>\n {items.length === 0 ? <p>{emptyMessage}</p> : (\n <ol ref={root} data-hf-sortable-list=\"true\" className=\"hf-sortable__list\" aria-label={label}>\n {items.map((item, index) => {\n const unavailable = disabled || Boolean(item.disabled);\n const destination = preview?.targetId === item.id && preview.id !== item.id;\n const state = preview?.id === item.id ? 'is-dragging' : destination\n ? (sourceIndex < index ? 'is-drop-after' : 'is-drop-before') : '';\n return (\n <li key={item.id} data-hf-sortable-id={item.id} className={state}>\n <button type=\"button\" className=\"hf-sortable__handle\" disabled={unavailable}\n aria-label={`拖动${item.label}`} aria-describedby={hintId}\n onPointerDown={(event) => start(event, item.id)} onPointerMove={move}\n onPointerUp={finish} onPointerCancel={cancel} onLostPointerCapture={cancel}\n onKeyDown={(event) => {\n if (event.key === 'Escape') { event.preventDefault(); cancel(); }\n if (event.altKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n event.preventDefault();\n cancel();\n commit(item.id, index + (event.key === 'ArrowUp' ? -1 : 1));\n }\n }}>\n <svg width=\"18\" height=\"20\" viewBox=\"0 0 18 20\" aria-hidden=\"true\" fill=\"currentColor\">\n {[5, 10, 15].map((y) => <g key={y}><circle cx=\"6\" cy={y} r=\"1.4\" /><circle cx=\"12\" cy={y} r=\"1.4\" /></g>)}\n </svg>\n </button>\n <div className=\"hf-sortable__content\"><strong>{item.label}</strong>{item.description && <div>{item.description}</div>}</div>\n <div className=\"hf-sortable__actions\">\n <Button variant=\"quiet\" size=\"sm\" disabled={unavailable || index === 0}\n aria-label={`上移${item.label}`} onClick={() => commit(item.id, index - 1)}>↑</Button>\n <Button variant=\"quiet\" size=\"sm\" disabled={unavailable || index === items.length - 1}\n aria-label={`下移${item.label}`} onClick={() => commit(item.id, index + 1)}>↓</Button>\n </div>\n </li>\n );\n })}\n </ol>\n )}\n <span className=\"hf-sr-only\" role=\"status\">{announcement}</span>\n </section>\n );\n}\n","import { useRef, useState, type PointerEvent, type RefObject } from 'react';\nimport type { SortableListItem, SortableListProps } from './SortableList';\n\ntype DragSession = {\n id: string;\n targetId: string;\n pointerId: number;\n x: number;\n y: number;\n moved: boolean;\n snapshot: string;\n};\n\nfunction itemAtPointer(event: PointerEvent, root: RefObject<HTMLOListElement | null>) {\n const target = document.elementFromPoint(event.clientX, event.clientY)?.closest<HTMLElement>('[data-hf-sortable-id]');\n return target?.closest('[data-hf-sortable-list]') === root.current ? target : undefined;\n}\n\nfunction reordered(items: readonly SortableListItem[], id: string, destination: number) {\n const source = items.findIndex((item) => item.id === id);\n const item = items[source];\n if (!item || item.disabled || destination < 0 || destination >= items.length || source === destination) return;\n const next = [...items];\n next.splice(source, 1);\n next.splice(destination, 0, item);\n return { next, item };\n}\n\n/** 将临时指针会话和业务提交分开,卸载无需遗留全局事件或定时器。 */\nexport function useSortableOrder({ items, disabled, onOrderChange }: SortableListProps) {\n const root = useRef<HTMLOListElement>(null);\n const drag = useRef<DragSession | null>(null);\n const [preview, setPreview] = useState<{ id: string; targetId: string } | null>(null);\n const [announcement, setAnnouncement] = useState('');\n const snapshot = JSON.stringify(items.map((item) => [item.id, Boolean(item.disabled)]));\n\n function commit(id: string, destination: number) {\n const result = reordered(items, id, destination);\n if (disabled || !result) return;\n onOrderChange(result.next);\n setAnnouncement(`已请求将${result.item.label}移至第${destination + 1}项,共${items.length}项`);\n }\n\n function cancel() {\n if (drag.current) setAnnouncement('已取消排序,原顺序未提交');\n drag.current = null;\n setPreview(null);\n }\n\n function start(event: PointerEvent<HTMLButtonElement>, id: string) {\n if (disabled || event.button !== 0 || !event.isPrimary) return;\n event.currentTarget.focus();\n event.currentTarget.setPointerCapture(event.pointerId);\n drag.current = { id, targetId: id, pointerId: event.pointerId,\n x: event.clientX, y: event.clientY, moved: false, snapshot };\n }\n\n function move(event: PointerEvent<HTMLButtonElement>) {\n const session = drag.current;\n if (!session || event.pointerId !== session.pointerId) return;\n if (disabled || session.snapshot !== snapshot) { cancel(); return; }\n if (Math.hypot(event.clientX - session.x, event.clientY - session.y) < 5 && !session.moved) return;\n session.moved = true;\n const target = itemAtPointer(event, root);\n if (target?.dataset.hfSortableId) session.targetId = target.dataset.hfSortableId;\n setPreview({ id: session.id, targetId: session.targetId });\n }\n\n function finish(event: PointerEvent<HTMLButtonElement>) {\n const session = drag.current;\n if (!session || session.pointerId !== event.pointerId) return;\n const inside = document.elementFromPoint(event.clientX, event.clientY)?.closest('[data-hf-sortable-list]') === root.current;\n if (session.moved && inside && session.snapshot === snapshot && !disabled) {\n commit(session.id, items.findIndex((item) => item.id === session.targetId));\n drag.current = null;\n setPreview(null);\n } else cancel();\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);\n }\n\n return { root, preview, announcement, commit, cancel, start, move, finish };\n}\n","import { useEffect, useState } from 'react';\nimport { Button } from '../components/Button';\nimport { Icon } from '../foundations/Icon';\n\nexport interface Announcement {\n id: string;\n message: string;\n actionLabel?: string;\n}\n\nexport interface AnnouncementBarProps {\n items: readonly Announcement[];\n label?: string;\n autoPlay?: boolean;\n interval?: number;\n onAction?: (id: string) => void;\n onDismiss?: () => void;\n className?: string;\n}\n\nexport function AnnouncementBar({\n items, label = '公告', autoPlay = false, interval = 6000,\n onAction, onDismiss, className = '',\n}: AnnouncementBarProps) {\n const [selectedId, setSelectedId] = useState(items[0]?.id);\n const [playing, setPlaying] = useState(autoPlay);\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n const [pageHidden, setPageHidden] = useState(false);\n const [reducedMotion, setReducedMotion] = useState(true);\n const index = Math.max(0, items.findIndex((item) => item.id === selectedId));\n const selected = items[index];\n const rotating = playing && !hovered && !focused && !pageHidden && !reducedMotion && items.length > 1;\n const delay = Number.isFinite(interval) ? Math.max(3000, interval) : 6000;\n\n useEffect(() => setPlaying(autoPlay), [autoPlay]);\n useEffect(() => {\n const preference = window.matchMedia('(prefers-reduced-motion: reduce)');\n const syncMotion = () => setReducedMotion(preference.matches);\n const syncVisibility = () => setPageHidden(document.hidden);\n syncMotion();\n syncVisibility();\n preference.addEventListener('change', syncMotion);\n document.addEventListener('visibilitychange', syncVisibility);\n return () => {\n preference.removeEventListener('change', syncMotion);\n document.removeEventListener('visibilitychange', syncVisibility);\n };\n }, []);\n useEffect(() => {\n if (!rotating) return;\n const timer = window.setTimeout(() => setSelectedId(items[(index + 1) % items.length]?.id), delay);\n return () => window.clearTimeout(timer);\n }, [rotating, items, index, delay]);\n\n if (!selected) return null;\n function move(direction: number) {\n setPlaying(false);\n setSelectedId(items[(index + direction + items.length) % items.length]?.id);\n }\n\n return (\n <section className={`hf-announcement ${className}`.trim()} aria-label={label}\n onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)}\n onFocusCapture={() => setFocused(true)}\n onBlurCapture={(event) => { if (!event.currentTarget.contains(event.relatedTarget)) setFocused(false); }}>\n <span className=\"hf-announcement__label\"><Icon name=\"info\" size={18} />{label}</span>\n <div className=\"hf-announcement__message\" aria-live={rotating ? 'off' : 'polite'} aria-atomic=\"true\">\n <span>{selected.message}</span>\n {selected.actionLabel && onAction && <Button variant=\"quiet\" size=\"sm\"\n onClick={() => onAction(selected.id)}>{selected.actionLabel}</Button>}\n </div>\n <div className=\"hf-announcement__controls\">\n {items.length > 1 && <>\n <span aria-label={`第${index + 1}条,共${items.length}条`}>{index + 1} / {items.length}</span>\n <Button size=\"sm\" variant=\"quiet\" onClick={() => move(-1)} aria-label=\"上一条公告\">上一条</Button>\n <Button size=\"sm\" variant=\"quiet\" onClick={() => move(1)} aria-label=\"下一条公告\">下一条</Button>\n {!reducedMotion && <Button size=\"sm\" variant=\"quiet\" onClick={() => setPlaying(!playing)}\n aria-label={playing ? '暂停公告轮播' : '开始公告轮播'}>{playing ? '暂停' : '播放'}</Button>}\n </>}\n {onDismiss && <Button size=\"sm\" variant=\"quiet\" onClick={onDismiss} aria-label=\"关闭公告\">关闭</Button>}\n </div>\n </section>\n );\n}\n","import type { SVGAttributes } from 'react';\n\nexport type IconName = 'check' | 'close' | 'info' | 'warning' | 'error' | 'search' | 'chevron-down' | 'arrow-right' | 'user' | 'inbox';\nexport interface IconProps extends Omit<SVGAttributes<SVGSVGElement>, 'children'> { name: IconName; size?: number; label?: string; }\n\nconst paths: Record<IconName, string> = {\n check: 'M5 12.5 9.2 17 19 7', close: 'm7 7 10 10M17 7 7 17', info: 'M12 11v6M12 7.5h.01',\n warning: 'M12 4 3.5 19h17L12 4Zm0 5v4.5m0 2.5h.01', error: 'M8 8l8 8m0-8-8 8',\n search: 'm20 20-4.5-4.5m2.5-4A7 7 0 1 1 4 11a7 7 0 0 1 14 0Z', 'chevron-down': 'm7 10 5 5 5-5',\n 'arrow-right': 'M5 12h14m-5-5 5 5-5 5', user: 'M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm7 8a7 7 0 0 0-14 0',\n inbox: 'M4 5h16v13H4V5Zm0 9h4l2 2h4l2-2h4',\n};\n\nexport function Icon({ name, size = 20, label, className = '', ...props }: IconProps) {\n return <svg className={`hf-icon ${className}`} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" role={label ? 'img' : undefined} aria-label={label} aria-hidden={label ? undefined : true} {...props}><path d={paths[name]} /></svg>;\n}\n","import { useId, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\nimport { Icon } from '../foundations/Icon';\n\nexport interface OnboardingTask {\n id: string;\n title: string;\n description?: ReactNode;\n completed?: boolean;\n disabled?: boolean;\n actionLabel?: string;\n}\n\nexport interface OnboardingChecklistProps {\n items: readonly OnboardingTask[];\n title?: string;\n onTaskAction?: (id: string) => void;\n onDismiss?: () => void;\n completedMessage?: ReactNode;\n emptyMessage?: ReactNode;\n className?: string;\n}\n\n/** 只展示调用方确认的完成状态;点击操作不代表业务任务成功。 */\nexport function OnboardingChecklist({\n items, title = '开始使用', onTaskAction, onDismiss,\n completedMessage = '全部任务已完成', emptyMessage = '暂无引导任务', className = '',\n}: OnboardingChecklistProps) {\n const titleId = useId();\n const completed = items.filter((item) => item.completed).length;\n const nextId = items.find((item) => !item.completed && !item.disabled)?.id;\n\n return (\n <section className={`hf-onboarding ${className}`.trim()} aria-labelledby={titleId}>\n <header className=\"hf-onboarding__header\">\n <h3 id={titleId}>{title}</h3>\n {onDismiss && <Button variant=\"quiet\" size=\"sm\" onClick={onDismiss} aria-label={`关闭${title}`}>关闭</Button>}\n </header>\n {items.length === 0 ? <p>{emptyMessage}</p> : <>\n <div className=\"hf-onboarding__progress\">\n <span role=\"status\">已完成 {completed} / {items.length}</span>\n <progress value={completed} max={items.length} aria-label={`${title}完成进度`} />\n </div>\n <ol className=\"hf-onboarding__tasks\">\n {items.map((item, index) => (\n <li key={item.id} className={item.completed ? 'is-complete' : ''}>\n <span className=\"hf-onboarding__marker\" aria-hidden=\"true\">\n {item.completed ? <Icon name=\"check\" size={16} /> : index + 1}\n </span>\n <div className=\"hf-onboarding__detail\">\n <strong>{item.title}</strong>\n <span className=\"hf-onboarding__state\">\n {item.completed ? '已完成' : item.disabled ? '暂不可用' : nextId === item.id ? '下一步' : '待完成'}\n </span>\n {item.description && <div>{item.description}</div>}\n </div>\n {!item.completed && onTaskAction && (\n <Button size=\"sm\" variant={nextId === item.id ? 'primary' : 'secondary'}\n disabled={item.disabled} onClick={() => onTaskAction(item.id)}\n aria-label={`${item.actionLabel ?? '去完成'}:${item.title}`}>\n {item.actionLabel ?? '去完成'}\n </Button>\n )}\n </li>\n ))}\n </ol>\n {completed === items.length && <p className=\"hf-onboarding__done\" role=\"status\">{completedMessage}</p>}\n </>}\n </section>\n );\n}\n","import type { CSSProperties } from 'react';\n\nexport interface ThemeTokens {\n colorPrimary: string;\n colorPrimaryHover: string;\n colorBackground: string;\n colorSurface: string;\n colorText: string;\n colorTextMuted: string;\n colorBorder: string;\n radiusControl?: string;\n radiusPanel?: string;\n radiusOverlay?: string;\n shadowPopover?: string;\n shadowModal?: string;\n /** @deprecated COMPAT: 兼容现有消费者;项目内引用清零并进入下一主版本后移除。请改用 radiusControl 或 radiusPanel。 */\n radiusMd: string;\n /** @deprecated COMPAT: 兼容现有消费者;项目内引用清零并进入下一主版本后移除。请改用 radiusPanel 或 radiusOverlay。 */\n radiusLg: string;\n /** @deprecated COMPAT: 兼容现有消费者;项目内引用清零并进入下一主版本后移除。请改用 shadowPopover 或 shadowModal。 */\n shadowElevated: string;\n motionDuration: string;\n}\n\nexport const defaultTheme: ThemeTokens = {\n colorPrimary: '#0a7cff',\n colorPrimaryHover: '#006fe8',\n colorBackground: '#f5faff',\n colorSurface: '#ffffff',\n colorText: '#142033',\n colorTextMuted: '#66758c',\n colorBorder: '#dce9f7',\n radiusControl: '6px',\n radiusPanel: '8px',\n radiusOverlay: '10px',\n shadowPopover: '0 8px 24px rgba(41, 106, 168, 0.12)',\n shadowModal: '0 18px 48px rgba(41, 106, 168, 0.16)',\n radiusMd: '14px',\n radiusLg: '24px',\n shadowElevated: '0 18px 48px rgba(41, 106, 168, 0.16)',\n motionDuration: '180ms',\n};\nexport const darkTheme: ThemeTokens = {\n ...defaultTheme,\n colorPrimary: '#58a9ff',\n colorPrimaryHover: '#7cbbff',\n colorBackground: '#0d1724',\n colorSurface: '#152337',\n colorText: '#f4f8fc',\n colorTextMuted: '#a9bad0',\n colorBorder: '#30445b',\n shadowPopover: '0 8px 24px rgba(0, 0, 0, 0.32)',\n shadowModal: '0 20px 54px rgba(0, 0, 0, 0.46)',\n shadowElevated: '0 20px 54px rgba(0, 0, 0, 0.46)',\n};\nexport const highContrastTheme: ThemeTokens = {\n ...defaultTheme,\n colorPrimary: '#005fcc',\n colorPrimaryHover: '#004a9f',\n colorBackground: '#ffffff',\n colorSurface: '#ffffff',\n colorText: '#000000',\n colorTextMuted: '#303030',\n colorBorder: '#000000',\n shadowPopover: '0 0 0 2px #000000',\n shadowModal: '0 0 0 2px #000000',\n shadowElevated: '0 0 0 2px #000000',\n motionDuration: '0ms',\n};\n\nconst tokenVariables: Record<keyof ThemeTokens, string> = {\n colorPrimary: '--hf-color-primary',\n colorPrimaryHover: '--hf-color-primary-hover',\n colorBackground: '--hf-color-background',\n colorSurface: '--hf-color-surface',\n colorText: '--hf-color-text',\n colorTextMuted: '--hf-color-text-muted',\n colorBorder: '--hf-color-border',\n radiusControl: '--hf-radius-control',\n radiusPanel: '--hf-radius-panel',\n radiusOverlay: '--hf-radius-overlay',\n shadowPopover: '--hf-shadow-popover',\n shadowModal: '--hf-shadow-modal',\n radiusMd: '--hf-radius-md',\n radiusLg: '--hf-radius-lg',\n shadowElevated: '--hf-shadow-elevated',\n motionDuration: '--hf-motion-duration',\n};\n\nexport function tokensToStyle(tokens: Partial<ThemeTokens>): CSSProperties {\n return Object.fromEntries(\n Object.entries(tokens).map(([key, value]) => [tokenVariables[key as keyof ThemeTokens], value]),\n ) as CSSProperties;\n}\n","import type { HTMLAttributes, PropsWithChildren } from 'react';\nimport { darkTheme, defaultTheme, highContrastTheme, tokensToStyle, type ThemeTokens } from './tokens';\n\nexport interface ThemeProviderProps extends HTMLAttributes<HTMLDivElement> {\n tokens?: Partial<ThemeTokens>;\n mode?: 'light' | 'dark' | 'high-contrast';\n}\n\nexport function ThemeProvider({ children, tokens, mode = 'light', className = '', style, ...props }: PropsWithChildren<ThemeProviderProps>) {\n const mergedTokens = { ...(mode === 'dark' ? darkTheme : mode === 'high-contrast' ? highContrastTheme : defaultTheme), ...tokens };\n return (\n <div\n className={`hf-theme hf-theme--${mode} ${className}`.trim()}\n style={{ ...tokensToStyle(mergedTokens), ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import { useState, type ReactNode } from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nexport interface SplitButtonOption { key: string; label: ReactNode; disabled?: boolean; danger?: boolean }\nexport interface SplitButtonProps extends Pick<ButtonProps, 'variant' | 'size' | 'disabled'> { label: ReactNode; options: readonly SplitButtonOption[]; onPrimaryAction: () => void; onOptionSelect: (key: string) => void }\nexport function SplitButton({ label, options, onPrimaryAction, onOptionSelect, variant = 'primary', size = 'md', disabled }: SplitButtonProps) {\n const [open, setOpen] = useState(false); const ref = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false });\n return <div className=\"hf-split-button\" ref={ref}><Button variant={variant} size={size} shape=\"rounded\" disabled={disabled} onClick={onPrimaryAction}>{label}</Button><Button variant={variant} size={size} shape=\"rounded\" disabled={disabled} iconOnly leadingIcon={<Icon name=\"chevron-down\" size={16} />} aria-label=\"更多操作\" aria-expanded={open} onClick={() => setOpen(!open)} />{open && <div className=\"hf-split-button__menu\" role=\"menu\">{options.map((option) => <button role=\"menuitem\" type=\"button\" key={option.key} disabled={option.disabled} className={option.danger ? 'is-danger' : ''} onClick={() => { onOptionSelect(option.key); setOpen(false); }}>{option.label}</button>)}</div>}</div>;\n}\n","import { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from 'react';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'prefix'> {\n label?: string;\n hint?: string;\n error?: string;\n prefix?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { className = '', id, label, hint, error, prefix, disabled, ...props },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const descriptionId = `${inputId}-description`;\n return (\n <label className={`hf-field ${className}`.trim()} htmlFor={inputId}>\n {label && <span className=\"hf-field__label\">{label}</span>}\n <span className={`hf-input-shell ${error ? 'hf-input-shell--error' : ''}`}>\n {prefix && <span className=\"hf-input-shell__prefix\" aria-hidden=\"true\">{prefix}</span>}\n <input\n ref={ref}\n id={inputId}\n className=\"hf-input\"\n disabled={disabled}\n aria-invalid={Boolean(error)}\n aria-describedby={hint || error ? descriptionId : undefined}\n {...props}\n />\n </span>\n {(error || hint) && (\n <span id={descriptionId} className={`hf-field__hint ${error ? 'hf-field__hint--error' : ''}`}>\n {error ?? hint}\n </span>\n )}\n </label>\n );\n});\n","import { forwardRef, type InputHTMLAttributes } from 'react';\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label: string;\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { label, className = '', ...props },\n ref,\n) {\n return (\n <label className={`hf-switch ${className}`.trim()}>\n <input ref={ref} className=\"hf-switch__input\" type=\"checkbox\" role=\"switch\" {...props} />\n <span className=\"hf-switch__track\" aria-hidden=\"true\"><span className=\"hf-switch__thumb\" /></span>\n <span className=\"hf-switch__label\">{label}</span>\n </label>\n );\n});\n","import { useId } from 'react';\n\nexport interface SegmentOption<T extends string> { label: string; value: T }\nexport interface SegmentedControlProps<T extends string> {\n label: string;\n options: readonly SegmentOption<T>[];\n value: T;\n onChange: (value: T) => void;\n className?: string;\n}\n\nexport function SegmentedControl<T extends string>({ label, options, value, onChange, className = '' }: SegmentedControlProps<T>) {\n const name = useId();\n return (\n <fieldset className={`hf-segmented ${className}`.trim()} aria-label={label}>\n <legend className=\"hf-sr-only\">{label}</legend>\n {options.map((option) => (\n <label key={option.value} className=\"hf-segmented__option\">\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={value === option.value}\n onChange={() => onChange(option.value)}\n />\n <span>{option.label}</span>\n </label>\n ))}\n </fieldset>\n );\n}\n","import type { HTMLAttributes, PropsWithChildren, ReactNode } from 'react';\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n title?: string;\n eyebrow?: string;\n action?: ReactNode;\n interactive?: boolean;\n}\n\nexport function Card({ children, title, eyebrow, action, interactive = false, className = '', ...props }: PropsWithChildren<CardProps>) {\n return (\n <article className={`hf-card ${interactive ? 'hf-card--interactive' : ''} ${className}`.trim()} {...props}>\n {(eyebrow || title || action) && (\n <header className=\"hf-card__header\">\n <div>\n {eyebrow && <p className=\"hf-card__eyebrow\">{eyebrow}</p>}\n {title && <h3 className=\"hf-card__title\">{title}</h3>}\n </div>\n {action}\n </header>\n )}\n <div className=\"hf-card__body\">{children}</div>\n </article>\n );\n}\n","import { useId, type PropsWithChildren, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from './Button';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface ModalProps {\n open: boolean;\n title: string;\n children: ReactNode;\n onClose: () => void;\n footer?: ReactNode;\n}\n\nexport function Modal({ open, title, children, onClose, footer }: PropsWithChildren<ModalProps>) {\n const titleId = useId();\n const dialogRef = useDismissibleLayer<HTMLDivElement>(open, onClose, true);\n\n if (!open) return null;\n return createPortal(\n <div className=\"hf-modal-backdrop\" onMouseDown={(event) => event.target === event.currentTarget && onClose()}>\n <div ref={dialogRef} className=\"hf-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId} tabIndex={-1}>\n <header className=\"hf-modal__header\">\n <h2 id={titleId}>{title}</h2>\n <Button variant=\"quiet\" size=\"sm\" iconOnly leadingIcon={<Icon name=\"close\" size={16} />} onClick={onClose} aria-label=\"关闭弹窗\" />\n </header>\n <div className=\"hf-modal__body\">{children}</div>\n {footer && <footer className=\"hf-modal__footer\">{footer}</footer>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface ToastProps {\n open: boolean;\n message: string;\n tone?: 'success' | 'info' | 'error';\n duration?: number;\n onClose: () => void;\n}\n\nexport function Toast({ open, message, tone = 'info', duration = 2600, onClose }: ToastProps) {\n useEffect(() => {\n if (!open || duration <= 0) return;\n const timer = window.setTimeout(onClose, duration);\n return () => window.clearTimeout(timer);\n }, [duration, onClose, open]);\n if (!open) return null;\n return createPortal(\n <div className={`hf-toast hf-toast--${tone}`} role={tone === 'error' ? 'alert' : 'status'}>\n <span className=\"hf-toast__mark\" aria-hidden=\"true\" />\n {message}\n </div>,\n document.body,\n );\n}\n","import type { AnchorHTMLAttributes, HTMLAttributes, ReactNode } from 'react';\nimport { Icon } from '../foundations/Icon';\n\nexport function Divider({ orientation = 'horizontal', label, className = '' }: { orientation?: 'horizontal' | 'vertical'; label?: ReactNode; className?: string }) { return <div className={`hf-divider hf-divider--${orientation}${label ? ' hf-divider--labelled' : ''} ${className}`} role=\"separator\" aria-orientation={orientation}>{label && <span>{label}</span>}</div>; }\nexport function Link({ external, className = '', children, ...props }: AnchorHTMLAttributes<HTMLAnchorElement> & { external?: boolean }) { return <a className={`hf-link ${className}`} target={external ? '_blank' : props.target} rel={external ? 'noreferrer' : props.rel} {...props}>{children}{external && <span aria-hidden=\"true\">↗</span>}</a>; }\n\ntype Tone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport function Badge({ tone = 'neutral', dot, className = '', ...props }: HTMLAttributes<HTMLSpanElement> & { tone?: Tone; dot?: boolean }) { return <span className={`hf-badge hf-tone--${tone} ${className}`} {...props}>{dot && <i aria-hidden=\"true\" />}{props.children}</span>; }\nexport function Tag({ tone = 'neutral', onRemove, removeLabel = '移除标签', className = '', children, ...props }: HTMLAttributes<HTMLSpanElement> & { tone?: Tone; onRemove?: () => void; removeLabel?: string }) { return <span className={`hf-tag hf-tone--${tone} ${className}`} {...props}>{children}{onRemove && <button type=\"button\" aria-label={removeLabel} onClick={onRemove}><Icon name=\"close\" size={14} /></button>}</span>; }\n\nexport function Avatar({ src, name, alt = '', size = 'md', status, className = '' }: { src?: string; name: string; alt?: string; size?: 'sm' | 'md' | 'lg'; status?: 'online' | 'busy' | 'away'; className?: string }) {\n const initials = name.trim().split(/\\s+/).slice(0, 2).map((part) => part[0]).join('').toUpperCase();\n return <span className={`hf-avatar hf-avatar--${size} ${className}`} title={name}>{src ? <img src={src} alt={alt || name} /> : <span aria-hidden=\"true\">{initials}</span>}{status && <i className={`hf-avatar__status hf-avatar__status--${status}`} aria-label={{ online: '在线', busy: '忙碌', away: '离开' }[status]} />}</span>;\n}\n","import { useState, type ReactNode } from 'react';\nexport interface AccordionItem { key: string; title: ReactNode; content: ReactNode; disabled?: boolean }\nexport interface AccordionProps { items: readonly AccordionItem[]; value?: readonly string[]; defaultValue?: readonly string[]; onChange?: (keys: string[]) => void; multiple?: boolean }\nexport function Accordion({ items, value, defaultValue = [], onChange, multiple = false }: AccordionProps) {\n const [inner, setInner] = useState<string[]>([...defaultValue]); const active = value ? [...value] : inner;\n const toggle = (key: string) => { const next = active.includes(key) ? active.filter((item) => item !== key) : multiple ? [...active, key] : [key]; if (!value) setInner(next); onChange?.(next); };\n return <div className=\"hf-accordion\">{items.map((item) => { const open = active.includes(item.key); return <section className={open ? 'is-open' : ''} key={item.key}><h3><button type=\"button\" aria-expanded={open} disabled={item.disabled} onClick={() => toggle(item.key)}><span>{item.title}</span><span className=\"hf-accordion__toggle\" aria-hidden=\"true\"><i /><i /></span></button></h3>{open && <div className=\"hf-accordion__panel\">{item.content}</div>}</section>; })}</div>;\n}\n","import { cloneElement, useState, type ReactElement, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nexport interface DropdownItem { key: string; label: ReactNode; icon?: ReactNode; description?: ReactNode; disabled?: boolean; danger?: boolean; separatorBefore?: boolean }\nexport interface DropdownProps { trigger: ReactElement; items: readonly DropdownItem[]; onSelect: (key: string) => void; placement?: 'left' | 'right'; label?: string }\nexport function Dropdown({ trigger, items, onSelect, placement = 'left', label = '操作菜单' }: DropdownProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLSpanElement>(open, () => setOpen(false)); return <span className=\"hf-dropdown\" ref={root}>{cloneElement(trigger, { onClick: () => setOpen((value) => !value), 'aria-expanded': open, 'aria-haspopup': 'menu' } as object)}{open && <div className={`hf-dropdown__menu hf-dropdown__menu--${placement}`} role=\"menu\" aria-label={label}>{items.map((item) => <button type=\"button\" role=\"menuitem\" className={`${item.danger ? 'is-danger' : ''}${item.separatorBefore ? ' has-separator' : ''}`} disabled={item.disabled} key={item.key} onClick={() => { onSelect(item.key); setOpen(false); }}>{item.icon}<span><strong>{item.label}</strong>{item.description && <small>{item.description}</small>}</span></button>)}</div>}</span>; }\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> { label: string; icon: ReactNode; variant?: 'primary' | 'secondary' | 'quiet' | 'danger'; size?: 'sm' | 'md' | 'lg' }\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton({ label, icon, variant = 'quiet', size = 'md', className = '', ...props }, ref) { return <button ref={ref} className={`hf-button hf-button--${variant} hf-button--${size} hf-button--square hf-button--icon ${className}`.trim()} aria-label={label} title={label} {...props}>{icon}</button>; });\n","import { useState, type HTMLAttributes, type MouseEvent, type PropsWithChildren } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nimport type { DropdownItem } from './Dropdown';\nimport { Icon } from '../foundations/Icon';\n\nexport function ButtonGroup({ children, orientation = 'horizontal', attached = true, className = '', ...props }: PropsWithChildren<HTMLAttributes<HTMLDivElement> & { orientation?: 'horizontal' | 'vertical'; attached?: boolean }>) { return <div role=\"group\" className={`hf-button-group hf-button-group--${orientation}${attached ? ' is-attached' : ''} ${className}`.trim()} {...props}>{children}</div>; }\n\nexport interface ColorPickerProps { value: string; onChange: (value: string) => void; label?: string; presets?: readonly string[]; disabled?: boolean }\nexport function ColorPicker({ value, onChange, label, presets = ['#0a7cff','#19a989','#7657e6','#f0a11a','#e5484d'], disabled }: ColorPickerProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false)); return <div className=\"hf-field hf-color-picker\" ref={root}>{label && <span className=\"hf-field__label\">{label}</span>}<button type=\"button\" className=\"hf-color-picker__trigger\" disabled={disabled} aria-expanded={open} onClick={() => setOpen(!open)}><span style={{ background: value }} /><code>{value.toUpperCase()}</code><Icon className=\"hf-picker-trigger__chevron\" name=\"chevron-down\" size={16} /></button>{open && <div className=\"hf-color-picker__panel\"><input type=\"color\" aria-label=\"选择颜色\" value={value} onChange={(event) => onChange(event.target.value)} /><div>{presets.map((color) => <button type=\"button\" aria-label={`选择颜色 ${color}`} aria-pressed={value.toLowerCase() === color.toLowerCase()} style={{ background: color }} key={color} onClick={() => onChange(color)} />)}</div><input aria-label=\"颜色值\" value={value} onChange={(event) => /^#[0-9a-f]{0,6}$/i.test(event.target.value) && onChange(event.target.value)} /></div>}</div>; }\n\nexport interface ContextMenuProps { items: readonly DropdownItem[]; onSelect: (key: string) => void; label?: string }\nexport function ContextMenu({ items, onSelect, label = '上下文菜单', children }: PropsWithChildren<ContextMenuProps>) { const [position, setPosition] = useState<{ x: number; y: number }>(); const root = useDismissibleLayer<HTMLDivElement>(Boolean(position), () => setPosition(undefined)); const open = (event: MouseEvent) => { event.preventDefault(); setPosition({ x: event.clientX, y: event.clientY }); }; return <div className=\"hf-context-target\" onContextMenu={open}>{children}{position && <div ref={root} className=\"hf-context-menu\" role=\"menu\" aria-label={label} style={{ left: position.x, top: position.y }}>{items.map((item) => <button type=\"button\" role=\"menuitem\" disabled={item.disabled} className={item.danger ? 'is-danger' : ''} key={item.key} onClick={() => { onSelect(item.key); setPosition(undefined); }}>{item.icon}<span>{item.label}</span></button>)}</div>}</div>; }\n","import { useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react';\n\nexport interface RichTextEditorProps { value: string; onChange: (html: string) => void; label?: string; placeholder?: string; disabled?: boolean }\nexport function RichTextEditor({ value, onChange, label, placeholder = '输入内容…', disabled }: RichTextEditorProps) {\n const editor = useRef<HTMLDivElement>(null);\n useEffect(() => { if (editor.current && editor.current.innerHTML !== value) editor.current.innerHTML = value; }, [value]);\n const format = (command: 'bold' | 'italic' | 'insertUnorderedList') => { editor.current?.focus(); document.execCommand(command); onChange(editor.current?.innerHTML ?? ''); };\n return <div className=\"hf-rich-editor\"><div className=\"hf-rich-editor__header\">{label && <strong>{label}</strong>}<div role=\"toolbar\" aria-label=\"文本格式\"><button type=\"button\" aria-label=\"粗体\" disabled={disabled} onClick={() => format('bold')}><b>B</b></button><button type=\"button\" aria-label=\"斜体\" disabled={disabled} onClick={() => format('italic')}><i>I</i></button><button type=\"button\" aria-label=\"无序列表\" disabled={disabled} onClick={() => format('insertUnorderedList')}>• 列表</button></div></div><div ref={editor} className=\"hf-rich-editor__content\" contentEditable={!disabled} role=\"textbox\" aria-multiline=\"true\" aria-label={label ?? '富文本编辑器'} data-placeholder={placeholder} onInput={(event) => onChange(event.currentTarget.innerHTML)} /></div>;\n}\n\nexport interface MentionOption { value: string; label: string; description?: string }\nexport interface MentionInputProps { value: string; onChange: (value: string) => void; options: readonly MentionOption[]; label?: string; placeholder?: string; disabled?: boolean }\nexport function MentionInput({ value, onChange, options, label, placeholder = '输入 @ 提及成员', disabled }: MentionInputProps) {\n const [active, setActive] = useState(0); const match = value.match(/(?:^|\\s)@([^\\s@]*)$/); const query = match?.[1]?.toLowerCase();\n const results = useMemo(() => query === undefined ? [] : options.filter((item) => `${item.label} ${item.value}`.toLowerCase().includes(query)).slice(0, 6), [options, query]);\n useEffect(() => setActive(0), [query]);\n const choose = (item: MentionOption) => { if (!match) return; onChange(`${value.slice(0, match.index!)}${match[0].startsWith(' ') ? ' ' : ''}@${item.label} `); };\n const keyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => { if (!results.length) return; if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); setActive((index) => (index + (event.key === 'ArrowDown' ? 1 : -1) + results.length) % results.length); } else if (event.key === 'Enter' || event.key === 'Tab') { event.preventDefault(); choose(results[active]!); } else if (event.key === 'Escape') { event.preventDefault(); onChange(`${value} `); } };\n return <label className=\"hf-field hf-mention-input\">{label && <span className=\"hf-field__label\">{label}</span>}<textarea value={value} placeholder={placeholder} disabled={disabled} aria-autocomplete=\"list\" aria-expanded={Boolean(results.length)} onChange={(event) => onChange(event.target.value)} onKeyDown={keyDown} />{results.length > 0 && <div className=\"hf-mention-input__menu\" role=\"listbox\">{results.map((item, index) => <button type=\"button\" role=\"option\" aria-selected={index === active} key={item.value} onMouseDown={(event) => event.preventDefault()} onClick={() => choose(item)}><span>@{item.label}</span>{item.description && <small>{item.description}</small>}</button>)}</div>}</label>;\n}\n\nexport interface CodeEditorProps { value: string; onChange: (value: string) => void; language?: string; label?: string; readOnly?: boolean; height?: number }\nexport function CodeEditor({ value, onChange, language = 'text', label = '代码编辑器', readOnly, height = 260 }: CodeEditorProps) { const lines = value.split('\\n').length; return <div className=\"hf-code-editor\"><header><strong>{label}</strong><span>{language}</span></header><div style={{ height }}><pre aria-hidden=\"true\">{Array.from({ length: lines }, (_, index) => `${index + 1}\\n`)}</pre><textarea spellCheck={false} readOnly={readOnly} aria-label={label} value={value} onChange={(event) => onChange(event.target.value)} onKeyDown={(event) => { if (event.key === 'Tab' && !readOnly) { event.preventDefault(); const input = event.currentTarget; const next = `${value.slice(0, input.selectionStart)} ${value.slice(input.selectionEnd)}`; onChange(next); requestAnimationFrame(() => input.setSelectionRange(input.selectionStart + 2, input.selectionStart + 2)); } }} /></div></div>; }\n","import { useState, type FormEvent, type KeyboardEvent, type ReactNode } from 'react';\nimport { Icon } from '../foundations/Icon';\n\nexport interface ChatMessageProps { role: 'user' | 'assistant' | 'system'; children: ReactNode; avatar?: ReactNode; name?: ReactNode; timestamp?: ReactNode; actions?: ReactNode; streaming?: boolean; error?: ReactNode }\nexport function ChatMessage({ role, children, avatar, name, timestamp, actions, streaming, error }: ChatMessageProps) { return <article className={`hf-chat-message hf-chat-message--${role}`} aria-live={streaming ? 'polite' : undefined}><div className=\"hf-chat-message__avatar\" aria-hidden=\"true\">{avatar ?? (role === 'assistant' ? 'AI' : role === 'system' ? 'S' : 'U')}</div><div className=\"hf-chat-message__body\"><header>{name && <strong>{name}</strong>}{timestamp && <time>{timestamp}</time>}</header><div className=\"hf-chat-message__content\">{children}{streaming && <span className=\"hf-chat-message__cursor\" aria-label=\"正在生成\" />}</div>{error && <div className=\"hf-chat-message__error\" role=\"alert\">{error}</div>}{actions && <footer>{actions}</footer>}</div></article>; }\n\nexport interface ChatAttachment { id: string; name: string; size?: string; icon?: ReactNode }\nexport interface ChatComposerProps { value: string; onChange: (value: string) => void; onSend: (value: string) => void; attachments?: readonly ChatAttachment[]; onRemoveAttachment?: (id: string) => void; onAttach?: () => void; placeholder?: string; disabled?: boolean; sending?: boolean; footer?: ReactNode; maxLength?: number }\nexport function ChatComposer({ value, onChange, onSend, attachments = [], onRemoveAttachment, onAttach, placeholder = '输入消息,Enter 发送,Shift + Enter 换行', disabled, sending, footer, maxLength }: ChatComposerProps) { const send = () => { const content = value.trim(); if (content && !disabled && !sending) onSend(content); }; const submit = (event: FormEvent) => { event.preventDefault(); send(); }; const keyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => { if (event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing) { event.preventDefault(); send(); } }; return <form className=\"hf-chat-composer\" onSubmit={submit}>{attachments.length > 0 && <div className=\"hf-chat-composer__attachments\">{attachments.map((item) => <span key={item.id}>{item.icon}<strong>{item.name}</strong>{item.size && <small>{item.size}</small>}{onRemoveAttachment && <button type=\"button\" aria-label={`移除附件 ${item.name}`} onClick={() => onRemoveAttachment(item.id)}><Icon name=\"close\" size={14} /></button>}</span>)}</div>}<textarea aria-label=\"消息内容\" value={value} maxLength={maxLength} disabled={disabled} placeholder={placeholder} onChange={(event) => onChange(event.target.value)} onKeyDown={keyDown} /><footer><div>{onAttach && <button type=\"button\" className=\"hf-chat-composer__attach\" aria-label=\"添加附件\" disabled={disabled} onClick={onAttach}>+</button>}{footer}</div>{maxLength && <small>{value.length}/{maxLength}</small>}<button type=\"submit\" className=\"hf-chat-composer__send\" disabled={disabled || sending || !value.trim()}>{sending ? <span className=\"hf-spinner\" /> : '↑'}<span className=\"hf-sr-only\">发送消息</span></button></footer></form>; }\n\nexport interface PromptSuggestion { id: string; title: ReactNode; description?: ReactNode; icon?: ReactNode; prompt?: string }\nexport interface PromptSuggestionsProps { items: readonly PromptSuggestion[]; onSelect: (item: PromptSuggestion) => void; title?: ReactNode; columns?: 1 | 2 | 3 }\nexport function PromptSuggestions({ items, onSelect, title, columns = 2 }: PromptSuggestionsProps) { return <section className={`hf-prompt-suggestions hf-prompt-suggestions--${columns}`}>{title && <header>{title}</header>}<div>{items.map((item) => <button type=\"button\" key={item.id} onClick={() => onSelect(item)}>{item.icon && <span>{item.icon}</span>}<strong>{item.title}</strong>{item.description && <small>{item.description}</small>}<i aria-hidden=\"true\">→</i></button>)}</div></section>; }\n\nexport type ToolCallStatus = 'queued' | 'running' | 'success' | 'error' | 'cancelled';\nexport interface ToolCallCardProps { name: ReactNode; status: ToolCallStatus; description?: ReactNode; input?: ReactNode; output?: ReactNode; duration?: ReactNode; icon?: ReactNode; defaultExpanded?: boolean; onRetry?: () => void; onCancel?: () => void }\nconst toolStatusLabel: Record<ToolCallStatus, string> = { queued: '等待中', running: '执行中', success: '已完成', error: '执行失败', cancelled: '已取消' };\nexport function ToolCallCard({ name, status, description, input, output, duration, icon, defaultExpanded = false, onRetry, onCancel }: ToolCallCardProps) { const [open, setOpen] = useState(defaultExpanded); return <section className={`hf-tool-call is-${status}`}><button type=\"button\" className=\"hf-tool-call__summary\" aria-expanded={open} onClick={() => setOpen(!open)}><span className=\"hf-tool-call__icon\">{status === 'running' ? <span className=\"hf-spinner\" /> : icon ?? '◇'}</span><span><strong>{name}</strong>{description && <small>{description}</small>}</span><i>{toolStatusLabel[status]}</i>{duration && <time>{duration}</time>}<b aria-hidden=\"true\">⌄</b></button>{open && <div className=\"hf-tool-call__detail\">{input && <section><strong>输入</strong><div>{input}</div></section>}{output && <section><strong>输出</strong><div>{output}</div></section>}{(status === 'error' && onRetry) || (status === 'running' && onCancel) ? <footer>{status === 'error' && onRetry && <button type=\"button\" onClick={onRetry}>重新执行</button>}{status === 'running' && onCancel && <button type=\"button\" onClick={onCancel}>停止执行</button>}</footer> : null}</div>}</section>; }\n\nexport interface CitationItem { id: string; title: ReactNode; url?: string; source?: ReactNode; excerpt?: ReactNode; favicon?: ReactNode }\nexport interface CitationListProps { items: readonly CitationItem[]; title?: ReactNode; onSelect?: (item: CitationItem) => void }\nexport function CitationList({ items, title = '参考来源', onSelect }: CitationListProps) { return <section className=\"hf-citation-list\"><header><strong>{title}</strong><span>{items.length}</span></header><ol>{items.map((item, index) => <li key={item.id}><a href={item.url} target={item.url ? '_blank' : undefined} rel={item.url ? 'noreferrer' : undefined} onClick={(event) => { if (!item.url) event.preventDefault(); onSelect?.(item); }}><span>{item.favicon ?? index + 1}</span><div><strong>{item.title}</strong>{item.source && <small>{item.source}</small>}{item.excerpt && <p>{item.excerpt}</p>}</div><i aria-hidden=\"true\">↗</i></a></li>)}</ol></section>; }\n\nexport type AgentRunStatus = ToolCallStatus;\nexport interface AgentRunStep { id: string; title: ReactNode; status: AgentRunStatus; description?: ReactNode; timestamp?: ReactNode; detail?: ReactNode }\nexport interface AgentRunTimelineProps { steps: readonly AgentRunStep[]; activeId?: string; onSelect?: (id: string) => void; label?: string }\nexport function AgentRunTimeline({ steps, activeId, onSelect, label = 'Agent 执行过程' }: AgentRunTimelineProps) { return <ol className=\"hf-agent-run\" aria-label={label}>{steps.map((step) => <li key={step.id} className={`is-${step.status}${activeId === step.id ? ' is-active' : ''}`}><button type=\"button\" aria-pressed={activeId === step.id} onClick={() => onSelect?.(step.id)}><span>{step.status === 'success' ? '✓' : step.status === 'error' ? '!' : step.status === 'running' ? <i className=\"hf-spinner\" /> : '·'}</span><div><header><strong>{step.title}</strong>{step.timestamp && <time>{step.timestamp}</time>}</header>{step.description && <p>{step.description}</p>}{step.detail && <div>{step.detail}</div>}</div></button></li>)}</ol>; }\n","import { Fragment, useMemo, useState, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nimport { Icon } from '../foundations/Icon';\n\nfunction inlineMarkdown(text: string): ReactNode[] { const pattern = /(\\*\\*[^*]+\\*\\*|`[^`]+`|\\[[^\\]]+\\]\\(https?:\\/\\/[^\\s)]+\\))/g; return text.split(pattern).filter(Boolean).map((part, index) => { if (part.startsWith('**') && part.endsWith('**')) return <strong key={index}>{part.slice(2, -2)}</strong>; if (part.startsWith('`') && part.endsWith('`')) return <code key={index}>{part.slice(1, -1)}</code>; const link = part.match(/^\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s)]+)\\)$/); return link ? <a key={index} href={link[2]} target=\"_blank\" rel=\"noreferrer\">{link[1]}</a> : <Fragment key={index}>{part}</Fragment>; }); }\nexport interface MarkdownContentProps { content: string; className?: string }\nexport function MarkdownContent({ content, className = '' }: MarkdownContentProps) { const blocks = useMemo(() => { const lines = content.split('\\n'); const result: ReactNode[] = []; let code: string[] | undefined, language = ''; let list: string[] = []; const flushList = () => { if (list.length) result.push(<ul key={`list-${result.length}`}>{list.map((item, index) => <li key={index}>{inlineMarkdown(item)}</li>)}</ul>); list = []; }; lines.forEach((line) => { if (line.startsWith('```')) { if (code) { result.push(<CodeBlock key={`code-${result.length}`} code={code.join('\\n')} language={language} />); code = undefined; language = ''; } else { flushList(); code = []; language = line.slice(3).trim(); } return; } if (code) { code.push(line); return; } if (line.startsWith('- ')) { list.push(line.slice(2)); return; } flushList(); if (!line.trim()) return; const heading = line.match(/^(#{1,3})\\s+(.+)$/); if (heading) { const Tag = `h${heading[1]!.length}` as 'h1' | 'h2' | 'h3'; result.push(<Tag key={result.length}>{inlineMarkdown(heading[2]!)}</Tag>); } else if (line.startsWith('> ')) result.push(<blockquote key={result.length}>{inlineMarkdown(line.slice(2))}</blockquote>); else result.push(<p key={result.length}>{inlineMarkdown(line)}</p>); }); flushList(); if (code) result.push(<CodeBlock key=\"code-last\" code={code.join('\\n')} language={language} />); return result; }, [content]); return <div className={`hf-markdown ${className}`.trim()}>{blocks}</div>; }\n\nexport interface CodeBlockProps { code: string; language?: string; filename?: ReactNode; wrap?: boolean; showLineNumbers?: boolean; onCopy?: (code: string) => void }\nexport function CodeBlock({ code, language = 'text', filename, wrap, showLineNumbers = true, onCopy }: CodeBlockProps) { const [copied, setCopied] = useState(false); const lines = code.split('\\n'); const copy = async () => { try { await navigator.clipboard.writeText(code); } catch { /* Consumers can provide a fallback through onCopy. */ } onCopy?.(code); setCopied(true); window.setTimeout(() => setCopied(false), 1500); }; return <section className={`hf-code-block${wrap ? ' is-wrapped' : ''}`}><header><span>{filename ?? language}</span><button type=\"button\" onClick={copy}>{copied ? '已复制' : '复制代码'}</button></header><div>{showLineNumbers && <pre aria-hidden=\"true\">{lines.map((_, index) => `${index + 1}\\n`)}</pre>}<pre><code>{code}</code></pre></div></section>; }\n\nexport interface VoiceInputProps { state?: 'idle' | 'listening' | 'processing' | 'error'; duration?: string; level?: number; disabled?: boolean; onStart?: () => void; onStop?: () => void; onCancel?: () => void; error?: ReactNode }\nexport function VoiceInput({ state = 'idle', duration = '00:00', level = 0.45, disabled, onStart, onStop, onCancel, error }: VoiceInputProps) { const active = state === 'listening'; return <div className={`hf-voice-input is-${state}`} role=\"status\" aria-label={active ? '正在录音' : state === 'processing' ? '正在识别语音' : '语音输入'}><button type=\"button\" className=\"hf-voice-input__main\" aria-label={active ? '停止录音' : state === 'processing' ? '正在识别语音' : '开始语音输入'} disabled={disabled || state === 'processing'} onClick={active ? onStop : onStart}>{state === 'processing' ? <span className=\"hf-spinner\" /> : <span className={active ? 'hf-voice-input__stop-icon' : 'hf-voice-input__record-icon'} />}</button><div><div className=\"hf-voice-input__wave\" aria-hidden=\"true\">{Array.from({ length: 18 }, (_, index) => <i key={index} style={{ height: `${Math.max(12, ((index * 17) % 75) * level + 12)}%` }} />)}</div><span>{active ? duration : state === 'processing' ? '正在转换文字…' : error ?? '点击开始语音输入'}</span></div>{(active || state === 'error') && onCancel && <button type=\"button\" className=\"hf-voice-input__cancel\" onClick={onCancel}>取消</button>}</div>; }\n\nexport interface ModelOption { id: string; name: ReactNode; description?: ReactNode; icon?: ReactNode; tags?: readonly string[]; disabled?: boolean }\nexport interface ModelSelectorProps { models: readonly ModelOption[]; value: string; onChange: (id: string) => void; label?: string; disabled?: boolean }\nexport function ModelSelector({ models, value, onChange, label = '选择模型', disabled }: ModelSelectorProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false)); const selected = models.find((item) => item.id === value); return <div className=\"hf-model-selector\" ref={root}><button type=\"button\" className=\"hf-model-selector__trigger\" disabled={disabled} aria-expanded={open} onClick={() => setOpen(!open)}><span>{selected?.icon ?? '✦'}</span><span><strong>{selected?.name ?? label}</strong>{selected?.description && <small>{selected.description}</small>}</span><Icon className=\"hf-model-selector__chevron\" name=\"chevron-down\" size={16} /></button>{open && <div className=\"hf-model-selector__menu\" role=\"listbox\" aria-label={label}>{models.map((model) => <button type=\"button\" role=\"option\" aria-selected={model.id === value} disabled={model.disabled} key={model.id} onClick={() => { onChange(model.id); setOpen(false); }}><span>{model.icon ?? '✦'}</span><span><strong>{model.name}</strong>{model.description && <small>{model.description}</small>}{model.tags?.length ? <i>{model.tags.map((tag) => <b key={tag}>{tag}</b>)}</i> : null}</span>{model.id === value && <em>✓</em>}</button>)}</div>}</div>; }\n\nexport interface ConversationBranchProps { current: number; total: number; onChange: (index: number) => void; label?: ReactNode }\nexport function ConversationBranch({ current, total, onChange, label = '回答分支' }: ConversationBranchProps) { const safeTotal = Math.max(1, total), safeCurrent = Math.min(safeTotal - 1, Math.max(0, current)); return <nav className=\"hf-conversation-branch\" aria-label={String(label)}><button type=\"button\" aria-label=\"上一个分支\" disabled={safeCurrent === 0} onClick={() => onChange(safeCurrent - 1)}>‹</button><span>{safeCurrent + 1} / {safeTotal}</span><button type=\"button\" aria-label=\"下一个分支\" disabled={safeCurrent >= safeTotal - 1} onClick={() => onChange(safeCurrent + 1)}>›</button></nav>; }\n\nexport interface TokenUsageProps { used: number; limit: number; input?: number; output?: number; cached?: number; label?: ReactNode; compact?: boolean }\nexport function TokenUsage({ used, limit, input, output, cached, label = '上下文用量', compact }: TokenUsageProps) { const percent = Math.max(0, Math.min(100, limit ? used / limit * 100 : 0)); return <section className={`hf-token-usage${compact ? ' is-compact' : ''}`}><div className=\"hf-token-usage__ring\" role=\"progressbar\" aria-label={String(label)} aria-valuemin={0} aria-valuemax={limit} aria-valuenow={used} style={{ '--hf-token-percent': `${percent * 3.6}deg` } as React.CSSProperties}><span>{Math.round(percent)}%</span></div><div><header><strong>{label}</strong><span>{used.toLocaleString()} / {limit.toLocaleString()}</span></header>{!compact && <div className=\"hf-token-usage__details\">{input !== undefined && <span><i />输入 {input.toLocaleString()}</span>}{output !== undefined && <span><i />输出 {output.toLocaleString()}</span>}{cached !== undefined && <span><i />缓存 {cached.toLocaleString()}</span>}</div>}</div></section>; }\n","import { useState, type ReactNode } from 'react';\nimport { Avatar } from './Content';\n\nexport type PresenceStatus = 'online' | 'away' | 'busy' | 'offline';\nconst presenceLabel: Record<PresenceStatus, string> = { online: '在线', away: '离开', busy: '忙碌', offline: '离线' };\nexport interface PresenceProps { status: PresenceStatus; label?: ReactNode; showLabel?: boolean; pulse?: boolean }\nexport function Presence({ status, label, showLabel = true, pulse = true }: PresenceProps) { return <span className={`hf-presence is-${status}${pulse && status === 'online' ? ' is-pulsing' : ''}`} role=\"status\"><i aria-hidden=\"true\" /><span>{label ?? (showLabel ? presenceLabel[status] : <span className=\"hf-sr-only\">{presenceLabel[status]}</span>)}</span></span>; }\n\nexport interface AvatarGroupItem { id: string; name: string; src?: string; status?: Exclude<PresenceStatus, 'offline'> }\nexport interface AvatarGroupProps { items: readonly AvatarGroupItem[]; max?: number; size?: 'sm' | 'md' | 'lg'; onMore?: () => void; label?: string }\nexport function AvatarGroup({ items, max = 4, size = 'md', onMore, label = '协作成员' }: AvatarGroupProps) { const shown = items.slice(0, max), remaining = Math.max(0, items.length - shown.length); return <div className={`hf-avatar-group hf-avatar-group--${size}`} aria-label={label}>{shown.map((item) => <Avatar key={item.id} src={item.src} name={item.name} size={size} status={item.status} />)}{remaining > 0 && <button type=\"button\" aria-label={`查看其余 ${remaining} 位成员`} onClick={onMore}>+{remaining}</button>}</div>; }\n\nexport interface CommentItem { id: string; author: { name: string; avatar?: string }; content: ReactNode; timestamp?: ReactNode; edited?: boolean; reactions?: readonly { emoji: string; count: number; active?: boolean }[]; replies?: readonly CommentItem[] }\nexport interface CommentThreadProps { comments: readonly CommentItem[]; onReply?: (id: string, content: string) => void; onReact?: (id: string, emoji: string) => void; onDelete?: (id: string) => void; empty?: ReactNode }\nfunction Comment({ item, onReply, onReact, onDelete, depth = 0 }: { item: CommentItem; onReply?: CommentThreadProps['onReply']; onReact?: CommentThreadProps['onReact']; onDelete?: CommentThreadProps['onDelete']; depth?: number }) { const [replying, setReplying] = useState(false), [value, setValue] = useState(''); return <article className=\"hf-comment\" style={{ '--hf-comment-depth': Math.min(depth, 3) } as React.CSSProperties}><Avatar src={item.author.avatar} name={item.author.name} size=\"sm\" /><div><header><strong>{item.author.name}</strong>{item.timestamp && <time>{item.timestamp}</time>}{item.edited && <small>已编辑</small>}</header><div className=\"hf-comment__content\">{item.content}</div><footer>{item.reactions?.map((reaction) => <button type=\"button\" className={reaction.active ? 'is-active' : ''} aria-pressed={reaction.active} key={reaction.emoji} onClick={() => onReact?.(item.id, reaction.emoji)}>{reaction.emoji} {reaction.count}</button>)}{onReply && <button type=\"button\" onClick={() => setReplying(!replying)}>回复</button>}{onDelete && <button type=\"button\" onClick={() => onDelete(item.id)}>删除</button>}</footer>{replying && <form className=\"hf-comment__reply\" onSubmit={(event) => { event.preventDefault(); if (value.trim()) { onReply?.(item.id, value.trim()); setValue(''); setReplying(false); } }}><textarea autoFocus aria-label={`回复 ${item.author.name}`} value={value} onChange={(event) => setValue(event.target.value)} /><div><button type=\"button\" onClick={() => setReplying(false)}>取消</button><button type=\"submit\" disabled={!value.trim()}>发送回复</button></div></form>}{item.replies?.map((reply) => <Comment key={reply.id} item={reply} onReply={onReply} onReact={onReact} onDelete={onDelete} depth={depth + 1} />)}</div></article>; }\nexport function CommentThread({ comments, onReply, onReact, onDelete, empty = '暂无评论,开始讨论吧' }: CommentThreadProps) { return <section className=\"hf-comment-thread\" aria-label=\"评论讨论\">{comments.length ? comments.map((item) => <Comment key={item.id} item={item} onReply={onReply} onReact={onReact} onDelete={onDelete} />) : <div className=\"hf-comment-thread__empty\">{empty}</div>}</section>; }\n\nexport interface ActivityItem { id: string; actor: ReactNode; action: ReactNode; target?: ReactNode; timestamp?: ReactNode; avatar?: ReactNode; icon?: ReactNode; detail?: ReactNode }\nexport interface ActivityFeedProps { items: readonly ActivityItem[]; grouped?: boolean; empty?: ReactNode }\nexport function ActivityFeed({ items, grouped, empty = '暂无动态' }: ActivityFeedProps) { if (!items.length) return <div className=\"hf-activity-feed__empty\">{empty}</div>; return <ol className={`hf-activity-feed${grouped ? ' is-grouped' : ''}`}>{items.map((item) => <li key={item.id}><span className=\"hf-activity-feed__marker\">{item.avatar ?? item.icon ?? '•'}</span><div><p><strong>{item.actor}</strong> {item.action} {item.target && <b>{item.target}</b>}</p>{item.timestamp && <time>{item.timestamp}</time>}{item.detail && <div>{item.detail}</div>}</div></li>)}</ol>; }\n\nexport type ApprovalStatus = 'pending' | 'approved' | 'rejected' | 'skipped';\nexport interface ApprovalStep { id: string; title: ReactNode; approver?: ReactNode; status: ApprovalStatus; timestamp?: ReactNode; comment?: ReactNode }\nexport interface ApprovalFlowProps { steps: readonly ApprovalStep[]; currentId?: string; onApprove?: (id: string) => void; onReject?: (id: string) => void; orientation?: 'horizontal' | 'vertical' }\nexport function ApprovalFlow({ steps, currentId, onApprove, onReject, orientation = 'vertical' }: ApprovalFlowProps) { return <ol className={`hf-approval-flow hf-approval-flow--${orientation}`}>{steps.map((step, index) => <li className={`is-${step.status}${currentId === step.id ? ' is-current' : ''}`} key={step.id}><span>{step.status === 'approved' ? '✓' : step.status === 'rejected' ? '×' : index + 1}</span><div><header><strong>{step.title}</strong><i>{({ pending: '待审批', approved: '已通过', rejected: '已拒绝', skipped: '已跳过' } as const)[step.status]}</i></header>{step.approver && <p>{step.approver}</p>}{step.comment && <blockquote>{step.comment}</blockquote>}{step.timestamp && <time>{step.timestamp}</time>}{step.status === 'pending' && currentId === step.id && (onApprove || onReject) && <footer>{onReject && <button type=\"button\" onClick={() => onReject(step.id)}>拒绝</button>}{onApprove && <button type=\"button\" onClick={() => onApprove(step.id)}>通过</button>}</footer>}</div></li>)}</ol>; }\n\nexport interface AuditEvent { id: string; timestamp: ReactNode; actor: ReactNode; action: ReactNode; resource?: ReactNode; result?: 'success' | 'failure' | 'warning'; ip?: ReactNode; detail?: ReactNode }\nexport interface AuditLogProps { events: readonly AuditEvent[]; onSelect?: (id: string) => void; empty?: ReactNode; caption?: string }\nexport function AuditLog({ events, onSelect, empty = '暂无审计记录', caption = '审计日志' }: AuditLogProps) { return <div className=\"hf-audit-log\"><table><caption>{caption}</caption><thead><tr><th>时间</th><th>操作者</th><th>操作</th><th>资源</th><th>结果</th><th>IP</th></tr></thead><tbody>{events.map((event) => <tr key={event.id} tabIndex={onSelect ? 0 : undefined} onClick={() => onSelect?.(event.id)} onKeyDown={(key) => { if (onSelect && (key.key === 'Enter' || key.key === ' ')) { key.preventDefault(); onSelect(event.id); } }}><td>{event.timestamp}</td><td>{event.actor}</td><td><strong>{event.action}</strong>{event.detail && <small>{event.detail}</small>}</td><td>{event.resource ?? '—'}</td><td><span className={`is-${event.result ?? 'success'}`}>{event.result === 'failure' ? '失败' : event.result === 'warning' ? '警告' : '成功'}</span></td><td><code>{event.ip ?? '—'}</code></td></tr>)}{!events.length && <tr><td colSpan={6} className=\"hf-audit-log__empty\">{empty}</td></tr>}</tbody></table></div>; }\n","import { useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { Avatar } from './Content';\nimport { Button } from './Button';\nimport { Icon } from '../foundations/Icon';\n\nexport interface FileItem { id: string; name: ReactNode; type: 'folder' | 'file'; children?: readonly FileItem[]; size?: ReactNode; modified?: ReactNode; icon?: ReactNode }\ntype VisibleFileItem = { item: FileItem; level: number; parentId?: string };\n\nexport function FileExplorer({ items, selectedId, onSelect, empty = '暂无文件' }: { items: readonly FileItem[]; selectedId?: string; onSelect?: (id: string) => void; empty?: ReactNode }) {\n const [open, setOpen] = useState<readonly string[]>([]);\n const itemRefs = useRef(new Map<string, HTMLButtonElement>());\n const visible = useMemo(() => {\n const result: VisibleFileItem[] = [];\n const visit = (nodes: readonly FileItem[], level: number, parentId?: string) => nodes.forEach((item) => {\n result.push({ item, level, parentId });\n if (item.children?.length && open.includes(item.id)) visit(item.children, level + 1, item.id);\n });\n visit(items, 1);\n return result;\n }, [items, open]);\n const toggle = (id: string) => setOpen((value) => value.includes(id) ? value.filter((key) => key !== id) : [...value, id]);\n const focusAt = (index: number) => itemRefs.current.get(visible[Math.max(0, Math.min(visible.length - 1, index))]?.item.id ?? '')?.focus();\n const onKeyDown = (event: KeyboardEvent<HTMLButtonElement>, entry: VisibleFileItem, index: number) => {\n const expandable = Boolean(entry.item.children?.length);\n if (event.key === 'ArrowDown') focusAt(index + 1);\n else if (event.key === 'ArrowUp') focusAt(index - 1);\n else if (event.key === 'Home') focusAt(0);\n else if (event.key === 'End') focusAt(visible.length - 1);\n else if (event.key === 'ArrowRight' && expandable) open.includes(entry.item.id) ? focusAt(index + 1) : toggle(entry.item.id);\n else if (event.key === 'ArrowLeft') {\n if (expandable && open.includes(entry.item.id)) toggle(entry.item.id);\n else if (entry.parentId) itemRefs.current.get(entry.parentId)?.focus();\n else return;\n } else return;\n event.preventDefault();\n };\n return <div className=\"hf-file-explorer\" role=\"tree\" aria-label=\"文件目录\">\n {items.length ? <ul role=\"none\">{visible.map((entry, index) => {\n const { item, level } = entry; const expandable = Boolean(item.children?.length); const expanded = expandable && open.includes(item.id);\n return <li key={item.id} role=\"none\">\n <div className={selectedId === item.id ? 'is-selected' : ''} style={{ paddingLeft: (level - 1) * 18 + 7 }}>\n <span className=\"hf-file-explorer__toggle\" aria-hidden=\"true\">{expandable ? (expanded ? '⌄' : '›') : ''}</span>\n <button type=\"button\" role=\"treeitem\" aria-level={level} aria-selected={selectedId === item.id} aria-expanded={expandable ? expanded : undefined} ref={(node) => { if (node) itemRefs.current.set(item.id, node); else itemRefs.current.delete(item.id); }} onClick={() => { if (expandable) toggle(item.id); onSelect?.(item.id); }} onKeyDown={(event) => onKeyDown(event, entry, index)}>{item.icon ?? (item.type === 'folder' ? '▰' : '▤')}<span><strong>{item.name}</strong>{item.modified && <small>{item.modified}</small>}</span>{item.size && <i>{item.size}</i>}</button>\n </div>\n </li>;\n })}</ul> : <div>{empty}</div>}\n </div>;\n}\n\nexport function FilePreview({ name, type, children, size, modified, actions, empty = '选择文件后在此预览' }: { name?: ReactNode; type?: string; children?: ReactNode; size?: ReactNode; modified?: ReactNode; actions?: ReactNode; empty?: ReactNode }) { return <section className=\"hf-file-preview\">{name ? <><header><div><strong>{name}</strong><span>{[type, size, modified].filter(Boolean).join(' · ')}</span></div>{actions}</header><div className=\"hf-file-preview__body\">{children}</div></> : <div className=\"hf-file-preview__empty\">▤<span>{empty}</span></div>}</section>; }\n\nexport interface VersionItem { id: string; version: string; author: { name: string; avatar?: string }; timestamp: ReactNode; description?: ReactNode; current?: boolean; tags?: readonly string[] }\nexport function VersionHistory({ versions, selectedId, onSelect, onRestore }: { versions: readonly VersionItem[]; selectedId?: string; onSelect?: (id: string) => void; onRestore?: (id: string) => void }) { return <ol className=\"hf-version-history\">{versions.map((item) => <li className={`${item.current ? 'is-current' : ''}${selectedId === item.id ? ' is-selected' : ''}`} key={item.id}><button type=\"button\" onClick={() => onSelect?.(item.id)}><span /><div><header><strong>{item.version}</strong>{item.current && <i>当前版本</i>}<time>{item.timestamp}</time></header><p><Avatar name={item.author.name} src={item.author.avatar} size=\"sm\" />{item.author.name}</p>{item.description && <div>{item.description}</div>}{item.tags?.map((tag) => <small key={tag}>{tag}</small>)}</div></button>{onRestore && !item.current && <button type=\"button\" onClick={() => onRestore(item.id)}>恢复</button>}</li>)}</ol>; }\n\nexport type PermissionLevel = 'none' | 'view' | 'comment' | 'edit' | 'admin';\nexport interface PermissionSubject { id: string; name: ReactNode; description?: ReactNode; avatar?: ReactNode }\nexport interface PermissionResource { id: string; name: ReactNode }\nexport function PermissionMatrix({ subjects, resources, value, onChange, disabled }: { subjects: readonly PermissionSubject[]; resources: readonly PermissionResource[]; value: Readonly<Record<string, Readonly<Record<string, PermissionLevel>>>>; onChange: (subjectId: string, resourceId: string, level: PermissionLevel) => void; disabled?: boolean }) { return <div className=\"hf-permission-matrix\"><table><thead><tr><th>成员或角色</th>{resources.map((item) => <th key={item.id}>{item.name}</th>)}</tr></thead><tbody>{subjects.map((subject) => <tr key={subject.id}><th><span>{subject.avatar}</span><div><strong>{subject.name}</strong>{subject.description && <small>{subject.description}</small>}</div></th>{resources.map((resource) => <td key={resource.id}><select aria-label={`${String(subject.name)} 对 ${String(resource.name)} 的权限`} disabled={disabled} value={value[subject.id]?.[resource.id] ?? 'none'} onChange={(event) => onChange(subject.id, resource.id, event.target.value as PermissionLevel)}><option value=\"none\">无权限</option><option value=\"view\">查看</option><option value=\"comment\">评论</option><option value=\"edit\">编辑</option><option value=\"admin\">管理</option></select></td>)}</tr>)}</tbody></table></div>; }\n\nexport interface MemberOption { id: string; name: string; avatar?: string; description?: ReactNode }\nexport function MemberPicker({ members, value, onChange, label = '添加成员', disabled }: { members: readonly MemberOption[]; value: readonly string[]; onChange: (ids: string[]) => void; label?: string; disabled?: boolean }) { const [query, setQuery] = useState(''); const results = useMemo(() => members.filter((item) => !value.includes(item.id) && `${item.name} ${String(item.description ?? '')}`.toLowerCase().includes(query.toLowerCase())), [members, query, value]); return <div className=\"hf-member-picker\"><div>{value.map((id) => { const item = members.find((member) => member.id === id); return item && <span key={id}><Avatar name={item.name} src={item.avatar} size=\"sm\" />{item.name}<button type=\"button\" disabled={disabled} aria-label={`移除 ${item.name}`} onClick={() => onChange(value.filter((key) => key !== id))}><Icon name=\"close\" size={14} /></button></span>; })}</div><input aria-label={label} value={query} disabled={disabled} placeholder={label} onChange={(event) => setQuery(event.target.value)} />{query && <div className=\"hf-member-picker__menu\">{results.map((item) => <button type=\"button\" key={item.id} onClick={() => { onChange([...value, item.id]); setQuery(''); }}><Avatar name={item.name} src={item.avatar} size=\"sm\" /><span><strong>{item.name}</strong>{item.description && <small>{item.description}</small>}</span></button>)}{!results.length && <p>没有匹配成员</p>}</div>}</div>; }\n\nexport type ShareScope = 'restricted' | 'organization' | 'public';\nexport function SharePanel({ scope, onScopeChange, members, onCopyLink, linkCopied, footer }: { scope: ShareScope; onScopeChange: (scope: ShareScope) => void; members?: ReactNode; onCopyLink?: () => void; linkCopied?: boolean; footer?: ReactNode }) { return <section className=\"hf-share-panel\"><header><strong>共享设置</strong><span>控制谁可以访问此内容</span></header><div className=\"hf-share-panel__scope\">{(['restricted','organization','public'] as const).map((item) => <label key={item}><input type=\"radio\" name=\"hf-share-scope\" checked={scope === item} onChange={() => onScopeChange(item)} /><span><strong>{{ restricted: '仅受邀成员', organization: '组织内成员', public: '拥有链接的任何人' }[item]}</strong><small>{{ restricted: '只有列表中的成员可以访问', organization: '同一组织成员均可访问', public: '无需登录即可访问' }[item]}</small></span></label>)}</div>{members && <div className=\"hf-share-panel__members\">{members}</div>}<footer><Button type=\"button\" size=\"sm\" variant=\"secondary\" onClick={onCopyLink}>{linkCopied ? '链接已复制' : '复制链接'}</Button>{footer}</footer></section>; }\n","import { forwardRef, useEffect, useId, useRef, useState, type ChangeEvent, type KeyboardEvent, type ReactNode, type SelectHTMLAttributes } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface SelectOption { label: ReactNode; value: string; disabled?: boolean }\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'children'> { label?: string; hint?: string; error?: string; options: readonly SelectOption[]; placeholder?: string }\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\n { id, label, hint, error, options, placeholder, className = '', value, defaultValue, onChange, disabled, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, ...props }, forwardedRef,\n) {\n const generatedId = useId(); const inputId = id ?? generatedId; const triggerId = `${inputId}-trigger`; const listboxId = `${inputId}-listbox`; const descriptionId = `${inputId}-description`;\n const [open, setOpen] = useState(false);\n const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false }); const nativeRef = useRef<HTMLSelectElement | null>(null);\n const [innerValue, setInnerValue] = useState(() => String(defaultValue ?? (placeholder ? '' : options.find((option) => !option.disabled)?.value ?? '')));\n const selectedValue = value === undefined ? innerValue : String(value); const selectedOption = options.find((option) => option.value === selectedValue);\n const enabledIndices = options.map((option, index) => option.disabled ? -1 : index).filter((index) => index >= 0); const selectedIndex = options.findIndex((option) => option.value === selectedValue);\n const [activeIndex, setActiveIndex] = useState(selectedIndex >= 0 ? selectedIndex : enabledIndices[0] ?? -1);\n const assignRef = (node: HTMLSelectElement | null) => { nativeRef.current = node; if (typeof forwardedRef === 'function') forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; };\n const handleNativeChange = (event: ChangeEvent<HTMLSelectElement>) => { if (value === undefined) setInnerValue(event.currentTarget.value); onChange?.(event); };\n const choose = (nextValue: string) => { const native = nativeRef.current; if (!native) return; Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set?.call(native, nextValue); native.dispatchEvent(new Event('change', { bubbles: true })); if (value === undefined) setInnerValue(nextValue); setOpen(false); window.requestAnimationFrame(() => document.getElementById(triggerId)?.focus()); };\n useEffect(() => { if (selectedIndex >= 0) setActiveIndex(selectedIndex); }, [selectedIndex]);\n const move = (direction: 1 | -1) => { if (!enabledIndices.length) return; const current = enabledIndices.indexOf(activeIndex); const next = current < 0 ? 0 : (current + direction + enabledIndices.length) % enabledIndices.length; setActiveIndex(enabledIndices[next]!); };\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); if (!open) setOpen(true); move(event.key === 'ArrowDown' ? 1 : -1); }\n else if ((event.key === 'Enter' || event.key === ' ') && open) { event.preventDefault(); const option = options[activeIndex]; if (option && !option.disabled) choose(option.value); }\n else if (event.key === 'Escape' && open) { event.preventDefault(); setOpen(false); }\n else if (event.key === 'Home' && open && enabledIndices.length) { event.preventDefault(); setActiveIndex(enabledIndices[0]!); }\n else if (event.key === 'End' && open && enabledIndices.length) { event.preventDefault(); setActiveIndex(enabledIndices[enabledIndices.length - 1]!); }\n else if (event.key === 'Tab') setOpen(false);\n };\n return <div className={`hf-field ${className}`.trim()} ref={rootRef}>\n {label && <label className=\"hf-field__label\" htmlFor={triggerId}>{label}</label>}\n <div className={`hf-select-shell ${open ? 'hf-select-shell--open' : ''} ${error ? 'hf-select-shell--error' : ''}`}>\n <select ref={assignRef} id={inputId} className=\"hf-select-native\" tabIndex={-1} aria-hidden=\"true\" value={selectedValue} disabled={disabled} onChange={handleNativeChange} {...props}>{placeholder && <option value=\"\" disabled>{placeholder}</option>}{options.map((option) => <option key={option.value} value={option.value} disabled={option.disabled}>{typeof option.label === 'string' ? option.label : option.value}</option>)}</select>\n <button id={triggerId} type=\"button\" className=\"hf-select\" disabled={disabled} aria-label={ariaLabel} aria-labelledby={ariaLabelledBy} aria-haspopup=\"listbox\" aria-expanded={open} aria-controls={open ? listboxId : undefined} aria-activedescendant={open && activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined} aria-invalid={Boolean(error)} aria-describedby={hint || error ? descriptionId : undefined} onClick={() => { setActiveIndex(selectedIndex >= 0 ? selectedIndex : enabledIndices[0] ?? -1); setOpen((current) => !current); }} onKeyDown={handleKeyDown}><span className={!selectedOption ? 'hf-select__placeholder' : ''}>{selectedOption?.label ?? placeholder ?? '请选择'}</span><svg className=\"hf-select__chevron\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\" aria-hidden=\"true\"><path d={open ? 'm4.5 9.75 3.5-3.5 3.5 3.5' : 'm4.5 6.25 3.5 3.5 3.5-3.5'} stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg></button>\n {open && <div id={listboxId} className=\"hf-select-menu\" role=\"listbox\" aria-labelledby={triggerId}>{options.map((option, index) => <button id={`${listboxId}-option-${index}`} type=\"button\" role=\"option\" aria-selected={option.value === selectedValue} disabled={option.disabled} className={index === activeIndex ? 'is-active' : ''} key={option.value} onPointerMove={() => !option.disabled && setActiveIndex(index)} onClick={() => choose(option.value)}><span>{option.label}</span>{option.value === selectedValue && <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\" aria-hidden=\"true\"><path d=\"m3.5 8 3 3 6-6\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>}</button>)}</div>}\n </div>\n {(error || hint) && <span id={descriptionId} className={`hf-field__hint ${error ? 'hf-field__hint--error' : ''}`}>{error ?? hint}</span>}\n </div>;\n});\n","import type { ReactNode } from \"react\";\nimport { Select } from \"../forms/Select\";\nexport interface ScheduleEvent {\n id: string;\n title: ReactNode;\n start: string;\n end: string;\n color?: string;\n resourceId?: string;\n}\nexport function EventCard({\n event,\n onClick,\n}: {\n event: ScheduleEvent;\n onClick?: (id: string) => void;\n}) {\n return (\n <button\n type=\"button\"\n className=\"hf-event-card\"\n onClick={() => onClick?.(event.id)}\n >\n <strong>{event.title}</strong>\n <time>\n {event.start}–{event.end}\n </time>\n </button>\n );\n}\nexport function Scheduler({\n days,\n events,\n onEventClick,\n}: {\n days: readonly string[];\n events: readonly ScheduleEvent[];\n onEventClick?: (id: string) => void;\n}) {\n return (\n <div className=\"hf-scheduler\">\n {days.map((day) => (\n <section key={day}>\n <strong>{day}</strong>\n {events\n .filter((e) => e.start.startsWith(day))\n .map((e) => (\n <EventCard key={e.id} event={e} onClick={onEventClick} />\n ))}\n </section>\n ))}\n </div>\n );\n}\nexport interface CalendarResource {\n id: string;\n name: ReactNode;\n}\nexport function ResourceCalendar({\n resources,\n events,\n}: {\n resources: readonly CalendarResource[];\n events: readonly ScheduleEvent[];\n}) {\n return (\n <div className=\"hf-resource-calendar\">\n {resources.map((r) => (\n <section key={r.id}>\n <strong>{r.name}</strong>\n {events\n .filter((e) => e.resourceId === r.id)\n .map((e) => (\n <EventCard key={e.id} event={e} />\n ))}\n </section>\n ))}\n </div>\n );\n}\nexport interface RecurrenceValue {\n frequency: \"none\" | \"daily\" | \"weekly\" | \"monthly\";\n interval: number;\n end?: string;\n}\nexport function RecurrenceEditor({\n value,\n onChange,\n}: {\n value: RecurrenceValue;\n onChange: (v: RecurrenceValue) => void;\n}) {\n return (\n <div className=\"hf-recurrence\">\n <Select\n className=\"hf-recurrence__select\"\n aria-label=\"重复频率\"\n value={value.frequency}\n options={[\n { value: \"none\", label: \"不重复\" },\n { value: \"daily\", label: \"每天\" },\n { value: \"weekly\", label: \"每周\" },\n { value: \"monthly\", label: \"每月\" },\n ]}\n onChange={(e) =>\n onChange({\n ...value,\n frequency: e.target.value as RecurrenceValue[\"frequency\"],\n })\n }\n />\n <input\n aria-label=\"重复间隔\"\n type=\"number\"\n min={1}\n value={value.interval}\n onChange={(e) => onChange({ ...value, interval: +e.target.value })}\n />\n </div>\n );\n}\nexport interface TimezoneOption {\n value: string;\n label: string;\n offset: string;\n}\nexport function TimezoneSelect({\n options,\n value,\n onChange,\n}: {\n options: readonly TimezoneOption[];\n value: string;\n onChange: (v: string) => void;\n}) {\n return (\n <Select\n aria-label=\"时区\"\n className=\"hf-timezone\"\n value={value}\n options={options.map((option) => ({\n value: option.value,\n label: `${option.label} (${option.offset})`,\n }))}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\nexport type AvailabilityState =\n | \"available\"\n | \"busy\"\n | \"tentative\"\n | \"unavailable\";\nexport function AvailabilityGrid({\n people,\n slots,\n value,\n}: {\n people: readonly { id: string; name: ReactNode }[];\n slots: readonly string[];\n value: Readonly<Record<string, Readonly<Record<string, AvailabilityState>>>>;\n}) {\n return (\n <div className=\"hf-availability\">\n <table>\n <thead>\n <tr>\n <th>成员</th>\n {slots.map((s) => (\n <th key={s}>{s}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {people.map((p) => (\n <tr key={p.id}>\n <th>{p.name}</th>\n {slots.map((s) => (\n <td key={s}>\n <i className={`is-${value[p.id]?.[s] ?? \"unavailable\"}`} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","import type { ElementType, HTMLAttributes } from 'react';\n\nexport type TypographyVariant = 'display' | 'h1' | 'h2' | 'h3' | 'body' | 'body-sm' | 'caption' | 'code';\nexport interface TypographyProps extends HTMLAttributes<HTMLElement> { as?: 'h1' | 'h2' | 'h3' | 'h4' | 'p' | 'span' | 'code'; variant?: TypographyVariant; muted?: boolean; truncate?: boolean; }\n\nexport function Typography({ as, variant = 'body', muted, truncate, className = '', ...props }: TypographyProps) {\n const defaults: Partial<Record<TypographyVariant, ElementType>> = { display: 'h1', h1: 'h1', h2: 'h2', h3: 'h3', code: 'code' };\n const Tag: ElementType = as ?? defaults[variant] ?? 'p';\n return <Tag className={`hf-typography hf-typography--${variant}${muted ? ' is-muted' : ''}${truncate ? ' is-truncated' : ''} ${className}`} {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nexport interface NavigationItem {\n key: string;\n label: string;\n href?: string;\n icon?: ReactNode;\n description?: string;\n children?: readonly NavigationItem[];\n}\n\nexport interface NavigationSelectionProps {\n activeKey?: string;\n onItemSelect?: (item: NavigationItem) => void;\n}\n\nexport function activateNavigationItem(item: NavigationItem, onItemSelect?: (item: NavigationItem) => void) {\n onItemSelect?.(item);\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\n\nexport interface FloatingNavProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n brand: ReactNode;\n items: readonly NavigationItem[];\n action?: ReactNode;\n}\n\nexport function FloatingNav({ brand, items, action, activeKey, onItemSelect, className = '', ...props }: FloatingNavProps) {\n return (\n <nav className={`hf-floating-nav ${className}`.trim()} aria-label=\"主导航\" {...props}>\n <div className=\"hf-floating-nav__brand\">{brand}</div>\n <div className=\"hf-floating-nav__items\">\n {items.map((item) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} onClick={() => activateNavigationItem(item, onItemSelect)}>{item.label}</a>)}\n </div>\n {action && <div className=\"hf-floating-nav__action\">{action}</div>}\n </nav>\n );\n}\n","import { useState, type HTMLAttributes, type ReactNode } from 'react';\nimport { Icon } from '../foundations/Icon';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n brand?: ReactNode;\n items: readonly NavigationItem[];\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n appearance?: 'flush' | 'floating' | 'inset';\n}\n\nexport function Sidebar({ brand, items, activeKey, collapsed, defaultCollapsed = false, onCollapsedChange, onItemSelect, appearance = 'flush', className = '', ...props }: SidebarProps) {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const isCollapsed = collapsed ?? internalCollapsed;\n const toggle = () => {\n const next = !isCollapsed;\n if (collapsed === undefined) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n };\n return (\n <aside className={`hf-sidebar hf-sidebar--${appearance} ${isCollapsed ? 'hf-sidebar--collapsed' : ''} ${className}`.trim()} {...props}>\n <div className=\"hf-sidebar__top\">{brand && <div className=\"hf-sidebar__brand\">{brand}</div>}<button className=\"hf-sidebar__collapse\" type=\"button\" onClick={toggle} aria-label={isCollapsed ? '展开侧边栏' : '收起侧边栏'} aria-expanded={!isCollapsed}><Icon name=\"arrow-right\" size={17} /></button></div>\n <nav aria-label=\"侧边导航\">\n {items.map((item) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} title={isCollapsed ? item.label : undefined} onClick={() => activateNavigationItem(item, onItemSelect)}><span className=\"hf-sidebar__icon\">{item.icon ?? item.label.slice(0, 1)}</span><span className=\"hf-sidebar__label\">{item.label}</span></a>)}\n </nav>\n </aside>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n items: readonly NavigationItem[];\n separator?: string;\n}\n\nexport function Breadcrumb({ items, separator = '/', onItemSelect, className = '', ...props }: BreadcrumbProps) {\n return (\n <nav className={`hf-breadcrumb ${className}`.trim()} aria-label=\"面包屑\" {...props}>\n <ol>{items.map((item, index) => {\n const current = index === items.length - 1;\n return <li key={item.key}>{current ? <span aria-current=\"page\">{item.label}</span> : <a href={item.href ?? '#'} onClick={() => activateNavigationItem(item, onItemSelect)}>{item.label}</a>}{!current && <i aria-hidden=\"true\">{separator}</i>}</li>;\n })}</ol>\n </nav>\n );\n}\n","import { useState, type HTMLAttributes } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nimport { Icon } from '../foundations/Icon';\n\ninterface BaseMenuProps extends HTMLAttributes<HTMLDivElement>, NavigationSelectionProps {\n label: string;\n items: readonly NavigationItem[];\n}\n\nexport function DropdownMenu({ label, items, activeKey, onItemSelect, className = '', ...props }: BaseMenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false });\n return <div ref={ref} className={`hf-menu ${className}`.trim()} {...props}><button type=\"button\" aria-expanded={open} aria-haspopup=\"menu\" onClick={() => setOpen((value) => !value)}><span>{label}</span><Icon className=\"hf-menu__chevron\" name=\"chevron-down\" size={16} /></button>{open && <div className=\"hf-menu__panel\" role=\"menu\">{items.map((item) => <a key={item.key} role=\"menuitem\" href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} onClick={() => { activateNavigationItem(item, onItemSelect); setOpen(false); }}>{item.label}</a>)}</div>}</div>;\n}\n\nexport function MegaMenu({ label, items, onItemSelect, className = '', ...props }: BaseMenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false });\n return <div ref={ref} className={`hf-menu hf-mega-menu ${className}`.trim()} {...props}><button type=\"button\" aria-expanded={open} aria-haspopup=\"menu\" onClick={() => setOpen((value) => !value)}><span>{label}</span><Icon className=\"hf-menu__chevron\" name=\"chevron-down\" size={16} /></button>{open && <div className=\"hf-mega-menu__panel\" role=\"menu\">{items.map((group) => <section key={group.key}><h3>{group.label}</h3>{group.children?.map((item) => <a key={item.key} role=\"menuitem\" href={item.href ?? '#'} onClick={() => { activateNavigationItem(item, onItemSelect); setOpen(false); }}><span>{item.icon}</span><span><strong>{item.label}</strong>{item.description && <small>{item.description}</small>}</span></a>)}</section>)}</div>}</div>;\n}\n","import { useId, useState, type HTMLAttributes, type ReactNode } from 'react';\nimport { activateNavigationItem, type NavigationItem, type NavigationSelectionProps } from './types';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nimport { Icon } from '../foundations/Icon';\n\nexport interface MobileNavigationProps extends HTMLAttributes<HTMLDivElement>, NavigationSelectionProps {\n brand: ReactNode;\n items: readonly NavigationItem[];\n mode?: 'drawer' | 'fullscreen';\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function MobileNavigation({ brand, items, mode = 'drawer', activeKey, open, onOpenChange, onItemSelect, className = '', ...props }: MobileNavigationProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpen = open ?? internalOpen;\n const panelId = useId();\n const setOpen = (next: boolean) => {\n if (open === undefined) setInternalOpen(next);\n onOpenChange?.(next);\n };\n const panelRef = useDismissibleLayer<HTMLElement>(isOpen, () => setOpen(false), true);\n return (\n <div className={`hf-mobile-nav ${className}`.trim()} {...props}>\n <div className=\"hf-mobile-nav__bar\"><div>{brand}</div><button type=\"button\" aria-label=\"打开导航\" aria-expanded={isOpen} aria-controls={panelId} onClick={() => setOpen(true)}><i /><i /><i /></button></div>\n {isOpen && <div className={`hf-mobile-nav__backdrop hf-mobile-nav__backdrop--${mode}`} onMouseDown={(event) => event.target === event.currentTarget && setOpen(false)}>\n <nav ref={panelRef} id={panelId} className=\"hf-mobile-nav__panel\" aria-label=\"移动导航\" tabIndex={-1}>\n <header><div>{brand}</div><button type=\"button\" aria-label=\"关闭导航\" onClick={() => setOpen(false)}><Icon name=\"close\" size={18} /></button></header>\n <div className=\"hf-mobile-nav__links\">{items.map((item, index) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} style={{ '--hf-nav-index': index } as React.CSSProperties} onClick={() => { activateNavigationItem(item, onItemSelect); setOpen(false); }}><span>{item.label}</span>{item.description && <small>{item.description}</small>}</a>)}</div>\n </nav>\n </div>}\n </div>\n );\n}\n","import { useEffect, useState, type HTMLAttributes } from 'react';\nimport type { NavigationItem, NavigationSelectionProps } from './types';\n\nexport interface ScrollspyProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n items: readonly NavigationItem[];\n rootMargin?: string;\n}\n\nexport function Scrollspy({ items, activeKey, onItemSelect, rootMargin = '-20% 0px -65%', className = '', ...props }: ScrollspyProps) {\n const [observedKey, setObservedKey] = useState(items[0]?.key);\n const currentKey = activeKey ?? observedKey;\n useEffect(() => {\n if (activeKey || !('IntersectionObserver' in window)) return;\n const observer = new IntersectionObserver((entries) => {\n const visible = entries.find((entry) => entry.isIntersecting);\n if (visible?.target.id) setObservedKey(visible.target.id);\n }, { rootMargin });\n items.forEach((item) => { const section = document.getElementById(item.key); if (section) observer.observe(section); });\n return () => observer.disconnect();\n }, [activeKey, items, rootMargin]);\n return <nav className={`hf-scrollspy ${className}`.trim()} aria-label=\"页内导航\" {...props}>{items.map((item) => <a key={item.key} href={item.href ?? `#${item.key}`} aria-current={currentKey === item.key ? 'location' : undefined} onClick={() => onItemSelect?.(item)}>{item.label}</a>)}</nav>;\n}\n","import { useEffect, useState, type HTMLAttributes, type ReactNode } from 'react';\nimport type { NavigationItem, NavigationSelectionProps } from './types';\n\nexport interface ShrinkNavProps extends HTMLAttributes<HTMLElement>, NavigationSelectionProps {\n brand: ReactNode;\n items: readonly NavigationItem[];\n threshold?: number;\n action?: ReactNode;\n}\n\nexport function ShrinkNav({ brand, items, threshold = 48, action, activeKey, onItemSelect, className = '', ...props }: ShrinkNavProps) {\n const [compact, setCompact] = useState(false);\n useEffect(() => {\n let frame = 0;\n const update = () => { cancelAnimationFrame(frame); frame = requestAnimationFrame(() => setCompact(window.scrollY > threshold)); };\n update();\n window.addEventListener('scroll', update, { passive: true });\n return () => { cancelAnimationFrame(frame); window.removeEventListener('scroll', update); };\n }, [threshold]);\n return <nav className={`hf-shrink-nav ${compact ? 'hf-shrink-nav--compact' : ''} ${className}`.trim()} aria-label=\"滚动导航\" {...props}><div className=\"hf-shrink-nav__brand\">{brand}</div><div className=\"hf-shrink-nav__items\">{items.map((item) => <a key={item.key} href={item.href ?? '#'} aria-current={activeKey === item.key ? 'page' : undefined} onClick={() => onItemSelect?.(item)}>{item.label}</a>)}</div>{action}</nav>;\n}\n","import { useId, type KeyboardEvent, type ReactNode } from 'react';\nexport interface TabItem<T extends string = string> { key: T; label: ReactNode; content: ReactNode; badge?: ReactNode; disabled?: boolean; icon?: ReactNode }\nexport interface TabsProps<T extends string = string> { items: readonly TabItem<T>[]; value: T; onChange: (value: T) => void; variant?: 'line' | 'card' | 'pill' | 'underline' | 'vertical' | 'scroll'; label?: string }\nexport function Tabs<T extends string>({ items, value, onChange, variant = 'line', label = '内容标签' }: TabsProps<T>) {\n const id = useId(); const active = items.find((item) => item.key === value) ?? items[0];\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => { if (!['ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(event.key)) return; event.preventDefault(); const enabled = items.filter((item) => !item.disabled); const current = enabled.findIndex((item) => item.key === value); const offset = event.key === 'ArrowLeft' || event.key === 'ArrowUp' ? -1 : 1; const next = enabled[(current + offset + enabled.length) % enabled.length]; if (next) onChange(next.key); };\n return <div className={`hf-tabs hf-tabs--${variant}`}><div role=\"tablist\" aria-label={label} onKeyDown={onKeyDown}>{items.map((item) => <button type=\"button\" role=\"tab\" id={`${id}-${item.key}`} aria-controls={`${id}-${item.key}-panel`} aria-selected={item.key === value} tabIndex={item.key === value ? 0 : -1} disabled={item.disabled} key={item.key} onClick={() => onChange(item.key)}>{item.icon}<span>{item.label}</span>{item.badge && <small>{item.badge}</small>}</button>)}</div>{active && <div role=\"tabpanel\" id={`${id}-${active.key}-panel`} aria-labelledby={`${id}-${active.key}`} tabIndex={0}>{active.content}</div>}</div>;\n}\n","import type { ReactNode } from 'react';\nexport interface StepItem { key: string; title: ReactNode; description?: ReactNode; disabled?: boolean; optional?: boolean }\nexport interface StepsProps { items: readonly StepItem[]; current: string; onChange?: (key: string) => void; orientation?: 'horizontal' | 'vertical' }\nexport function Steps({ items, current, onChange, orientation = 'horizontal' }: StepsProps) { const currentIndex = Math.max(0, items.findIndex((item) => item.key === current)); return <ol className={`hf-steps hf-steps--${orientation}`}>{items.map((item, index) => { const state = index < currentIndex ? 'complete' : index === currentIndex ? 'current' : 'upcoming'; return <li className={`is-${state}`} aria-current={state === 'current' ? 'step' : undefined} key={item.key}><button type=\"button\" disabled={item.disabled || !onChange} onClick={() => onChange?.(item.key)}><span>{state === 'complete' ? '✓' : index + 1}</span><span><strong>{item.title}</strong>{item.optional && <small>可选</small>}{item.description && <small>{item.description}</small>}</span></button></li>; })}</ol>; }\n","import { useEffect, useMemo, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nexport interface CommandItem { key: string; label: string; description?: string; group?: string; shortcut?: string; icon?: ReactNode; disabled?: boolean }\nexport interface CommandPaletteProps { open: boolean; onOpenChange: (open: boolean) => void; items: readonly CommandItem[]; onSelect: (key: string) => void; placeholder?: string }\nexport function CommandPalette({ open, onOpenChange, items, onSelect, placeholder = '输入命令或搜索…' }: CommandPaletteProps) {\n const [query, setQuery] = useState(''); const [active, setActive] = useState(0); const enabled = useMemo(() => items.filter((item) => !item.disabled && `${item.label} ${item.description ?? ''} ${item.group ?? ''}`.toLowerCase().includes(query.toLowerCase())), [items, query]); const dialogRef = useDismissibleLayer<HTMLDivElement>(open, () => onOpenChange(false), true);\n useEffect(() => { if (!open) { setQuery(''); setActive(0); } }, [open]);\n const keydown = (event: KeyboardEvent<HTMLInputElement>) => { if (!enabled.length) return; if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); setActive((current) => (current + (event.key === 'ArrowDown' ? 1 : -1) + enabled.length) % enabled.length); } else if (event.key === 'Home' || event.key === 'End') { event.preventDefault(); setActive(event.key === 'Home' ? 0 : enabled.length - 1); } else if (event.key === 'Enter') { event.preventDefault(); const item = enabled[active]; if (item) { onSelect(item.key); onOpenChange(false); } } };\n if (!open) return null;\n return createPortal(<div className=\"hf-command-backdrop\" onMouseDown={(event) => event.target === event.currentTarget && onOpenChange(false)}><div ref={dialogRef} tabIndex={-1} className=\"hf-command\" role=\"dialog\" aria-modal=\"true\" aria-label=\"命令面板\"><div className=\"hf-command__search\"><span aria-hidden=\"true\">⌕</span><input autoFocus role=\"combobox\" aria-expanded=\"true\" aria-controls=\"hf-command-list\" value={query} placeholder={placeholder} onChange={(event) => { setQuery(event.target.value); setActive(0); }} onKeyDown={keydown} /><kbd>Esc</kbd></div><div id=\"hf-command-list\" className=\"hf-command__list\" role=\"listbox\">{enabled.map((item, index) => <button type=\"button\" role=\"option\" aria-selected={index === active} key={item.key} onPointerMove={() => setActive(index)} onClick={() => { onSelect(item.key); onOpenChange(false); }}>{item.icon}<span><strong>{item.label}</strong>{item.description && <small>{item.description}</small>}</span>{item.shortcut && <kbd>{item.shortcut}</kbd>}</button>)}{!enabled.length && <div className=\"hf-command__empty\">没有匹配命令</div>}</div></div></div>, document.body);\n}\n","import type { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode } from 'react';\n\nexport interface GridProps extends HTMLAttributes<HTMLDivElement> {\n columns?: number | 'auto';\n minItemWidth?: number;\n gap?: number;\n}\n\nexport interface ContainerProps extends HTMLAttributes<HTMLDivElement> { size?: 'sm' | 'md' | 'lg' | 'full'; padding?: number; }\nexport function Container({ size = 'lg', padding = 24, className = '', style, ...props }: PropsWithChildren<ContainerProps>) {\n return <div className={`hf-container hf-container--${size} ${className}`.trim()} style={{ '--hf-container-padding': `${padding}px`, ...style } as CSSProperties} {...props} />;\n}\n\nexport interface StackProps extends HTMLAttributes<HTMLDivElement> { direction?: 'row' | 'column'; gap?: number; align?: CSSProperties['alignItems']; justify?: CSSProperties['justifyContent']; wrap?: boolean; }\nexport function Stack({ direction = 'column', gap = 12, align, justify, wrap = false, className = '', style, ...props }: PropsWithChildren<StackProps>) {\n return <div className={`hf-stack hf-stack--${direction} ${className}`.trim()} style={{ '--hf-stack-gap': `${gap}px`, alignItems: align, justifyContent: justify, flexWrap: wrap ? 'wrap' : undefined, ...style } as CSSProperties} {...props} />;\n}\n\nexport function Grid({ columns = 'auto', minItemWidth = 240, gap = 16, className = '', style, ...props }: PropsWithChildren<GridProps>) {\n const gridStyle = {\n '--hf-grid-columns': columns === 'auto' ? `repeat(auto-fit, minmax(min(100%, ${minItemWidth}px), 1fr))` : `repeat(${columns}, minmax(0, 1fr))`,\n '--hf-grid-gap': `${gap}px`,\n ...style,\n } as CSSProperties;\n return <div className={`hf-grid ${className}`.trim()} style={gridStyle} {...props} />;\n}\n\nexport interface MasonryProps extends HTMLAttributes<HTMLDivElement> {\n columns?: number;\n minColumnWidth?: number;\n gap?: number;\n}\n\nexport function Masonry({ columns, minColumnWidth = 260, gap = 16, className = '', style, children, ...props }: PropsWithChildren<MasonryProps>) {\n const masonryStyle = {\n '--hf-masonry-columns': columns ?? 'auto',\n '--hf-masonry-width': `${minColumnWidth}px`,\n '--hf-masonry-gap': `${gap}px`,\n ...style,\n } as CSSProperties;\n return <div className={`hf-masonry ${className}`.trim()} style={masonryStyle} {...props}>{children}</div>;\n}\n\nexport interface PageLayoutProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'single' | 'sidebar-left' | 'sidebar-right' | 'split' | 'dashboard' | 'full-screen';\n sidebar?: ReactNode;\n header?: ReactNode;\n sidebarWidth?: number;\n}\n\nexport function PageLayout({ variant = 'single', sidebar, header, sidebarWidth = 280, className = '', style, children, ...props }: PropsWithChildren<PageLayoutProps>) {\n const layoutStyle = { '--hf-layout-sidebar': `${sidebarWidth}px`, ...style } as CSSProperties;\n return <div className={`hf-page-layout hf-page-layout--${variant} ${className}`.trim()} style={layoutStyle} {...props}>{header && <header className=\"hf-page-layout__header\">{header}</header>}{sidebar && <aside className=\"hf-page-layout__sidebar\">{sidebar}</aside>}<main className=\"hf-page-layout__main\">{children}</main></div>;\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n width?: number | string;\n height?: number | string;\n radius?: number | string;\n circle?: boolean;\n animated?: boolean;\n}\n\nexport function Skeleton({ width = '100%', height = 16, radius, circle, animated = true, className = '', style, ...props }: SkeletonProps) {\n const value = (input: number | string) => typeof input === 'number' ? `${input}px` : input;\n return <span aria-hidden=\"true\" className={`hf-skeleton ${animated ? 'is-animated' : ''} ${circle ? 'is-circle' : ''} ${className}`.trim()} style={{ width: value(width), height: value(height), borderRadius: radius ? value(radius) : undefined, ...style } as CSSProperties} {...props} />;\n}\n","import type { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode } from 'react';\n\nexport function Spinner({ label = '正在加载', size = 20, className = '' }: { label?: string; size?: number; className?: string }) {\n return <span className={`hf-loading-spinner ${className}`.trim()} role=\"status\" aria-label={label} style={{ '--hf-loading-size': `${size}px` } as CSSProperties} />;\n}\n\nexport function LoadingDots({ label = '正在加载' }: { label?: string }) {\n return <span className=\"hf-loading-dots\" role=\"status\" aria-label={label}><i /><i /><i /></span>;\n}\n\nexport function ProgressBar({ value, label, indeterminate = false, className = '' }: { value?: number; label?: ReactNode; indeterminate?: boolean; className?: string }) {\n const percent = Math.min(100, Math.max(0, value ?? 0));\n return <div className={`hf-progress ${indeterminate ? 'is-indeterminate' : ''} ${className}`.trim()}>{label && <div className=\"hf-progress__label\"><span>{label}</span>{!indeterminate && <strong>{percent}%</strong>}</div>}<div className=\"hf-progress__track\" role=\"progressbar\" aria-valuemin={0} aria-valuemax={100} aria-valuenow={indeterminate ? undefined : percent}><i style={{ '--hf-progress': `${percent}%` } as CSSProperties} /></div></div>;\n}\n\nexport function ProgressRing({ value, size = 72, label }: { value: number; size?: number; label?: string }) {\n const percent = Math.min(100, Math.max(0, value));\n return <span className=\"hf-progress-ring\" role=\"progressbar\" aria-label={label} aria-valuemin={0} aria-valuemax={100} aria-valuenow={percent} style={{ '--hf-ring-value': `${percent * 3.6}deg`, '--hf-ring-size': `${size}px` } as CSSProperties}><strong>{percent}%</strong></span>;\n}\n\nexport interface LoadingOverlayProps extends HTMLAttributes<HTMLDivElement> { active?: boolean; label?: string }\nexport function LoadingOverlay({ active = true, label = '正在准备内容', className = '', children, ...props }: PropsWithChildren<LoadingOverlayProps>) {\n return <div className={`hf-loading-overlay ${className}`.trim()} aria-busy={active} {...props}>{children}{active && <div className=\"hf-loading-overlay__veil\" role=\"status\"><Spinner label={label} size={28} /><span>{label}</span></div>}</div>;\n}\n","import { useId, useState, type ReactNode } from 'react';\nimport type { SelectOption } from './Select';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface MultiSelectProps { label?: string; options: readonly SelectOption[]; value: readonly string[]; onChange: (value: string[]) => void; placeholder?: string; max?: number; hint?: ReactNode; disabled?: boolean }\nexport function MultiSelect({ label, options, value, onChange, placeholder = '请选择', max, hint, disabled }: MultiSelectProps) {\n const [open, setOpen] = useState(false); const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false }); const listId = useId();\n const toggle = (next: string) => { const selected = value.includes(next); if (!selected && max && value.length >= max) return; onChange(selected ? value.filter((item) => item !== next) : [...value, next]); };\n return <div className=\"hf-field hf-multiselect\" ref={rootRef}>{label && <span className=\"hf-field__label\">{label}</span>}<div className=\"hf-multiselect__trigger\" role=\"combobox\" tabIndex={disabled ? -1 : 0} aria-disabled={disabled} aria-expanded={open} aria-controls={listId} onClick={() => !disabled && setOpen(!open)} onKeyDown={(event) => { if (!disabled && (event.key === 'Enter' || event.key === ' ')) { event.preventDefault(); setOpen(!open); } }}><span>{value.length ? value.map((item) => { const option = options.find((candidate) => candidate.value === item); return <i key={item}>{option?.label}<button type=\"button\" aria-label={`移除 ${String(option?.label)}`} onClick={(event) => { event.stopPropagation(); toggle(item); }}><Icon name=\"close\" size={13} /></button></i>; }) : <em>{placeholder}</em>}</span><Icon name=\"chevron-down\" size={16} className=\"hf-multiselect__chevron\" /></div>{open && <div id={listId} className=\"hf-multiselect__menu\" role=\"listbox\" aria-multiselectable=\"true\">{options.map((option) => <button type=\"button\" role=\"option\" aria-selected={value.includes(option.value)} key={option.value} disabled={option.disabled} onClick={() => toggle(option.value)}><span>{option.label}</span><i>{value.includes(option.value) ? '✓' : ''}</i></button>)}</div>}{hint && <span className=\"hf-field__hint\">{hint}</span>}</div>;\n}\n","import { useId, type ReactNode } from 'react';\n\nexport interface ChoiceOption<T extends string = string> {\n label: ReactNode;\n value: T;\n description?: ReactNode;\n disabled?: boolean;\n}\n\ninterface ChoiceGroupProps<T extends string> {\n label?: string;\n options: readonly ChoiceOption<T>[];\n value?: T | T[];\n defaultValue?: T | T[];\n onChange?: (value: T | T[]) => void;\n type?: 'radio' | 'checkbox';\n direction?: 'row' | 'column';\n disabled?: boolean;\n name?: string;\n}\n\nexport function ChoiceGroup<T extends string>({ label, options, value, defaultValue, onChange, type = 'radio', direction = 'column', disabled, name }: ChoiceGroupProps<T>) {\n const id = useId();\n const groupName = name ?? id;\n const values = Array.isArray(value) ? value : value ? [value] : undefined;\n const defaults = Array.isArray(defaultValue) ? defaultValue : defaultValue ? [defaultValue] : [];\n return <fieldset className={`hf-choice-group hf-choice-group--${direction}`} disabled={disabled}>\n {label && <legend>{label}</legend>}\n {options.map((option) => {\n const checked = values?.includes(option.value);\n return <label className=\"hf-choice\" key={option.value}>\n <input type={type} name={type === 'radio' ? groupName : `${groupName}-${option.value}`} value={option.value} checked={checked} defaultChecked={values ? undefined : defaults.includes(option.value)} disabled={option.disabled} onChange={(event) => {\n if (type === 'radio') onChange?.(option.value);\n else {\n const next = new Set(values ?? defaults);\n event.currentTarget.checked ? next.add(option.value) : next.delete(option.value);\n onChange?.([...next]);\n }\n }} />\n <span className=\"hf-choice__control\" aria-hidden=\"true\" />\n <span className=\"hf-choice__copy\"><strong>{option.label}</strong>{option.description && <small>{option.description}</small>}</span>\n </label>;\n })}\n </fieldset>;\n}\n\nexport function RadioGroup<T extends string>(props: Omit<ChoiceGroupProps<T>, 'type' | 'value' | 'defaultValue' | 'onChange'> & { value?: T; defaultValue?: T; onChange?: (value: T) => void }) {\n return <ChoiceGroup {...props} type=\"radio\" onChange={(next) => props.onChange?.(next as T)} />;\n}\n\nexport function CheckboxGroup<T extends string>(props: Omit<ChoiceGroupProps<T>, 'type' | 'value' | 'defaultValue' | 'onChange'> & { value?: T[]; defaultValue?: T[]; onChange?: (value: T[]) => void }) {\n return <ChoiceGroup {...props} type=\"checkbox\" onChange={(next) => props.onChange?.(next as T[])} />;\n}\n","import { useState, type FormEvent } from 'react';\nimport { Input, type InputProps } from '../components/Input';\n\nexport interface ValidationRule {\n validate: (value: string) => boolean;\n message: string;\n}\n\nexport interface ValidatedInputProps extends Omit<InputProps, 'error' | 'onChange' | 'onBlur'> {\n value: string;\n rules: readonly ValidationRule[];\n validateOn?: 'blur' | 'change';\n onChange: (value: string) => void;\n onValidityChange?: (valid: boolean) => void;\n}\n\nexport function validateValue(value: string, rules: readonly ValidationRule[]) {\n return rules.find((rule) => !rule.validate(value))?.message;\n}\n\nexport function ValidatedInput({ value, rules, validateOn = 'blur', onChange, onValidityChange, ...props }: ValidatedInputProps) {\n const [touched, setTouched] = useState(false);\n const error = touched ? validateValue(value, rules) : undefined;\n const update = (next: string) => {\n onChange(next);\n if (validateOn === 'change') setTouched(true);\n onValidityChange?.(!validateValue(next, rules));\n };\n return <Input {...props} value={value} error={error} onChange={(event) => update(event.target.value)} onBlur={() => setTouched(true)} />;\n}\n\nexport function validateForm(event: FormEvent<HTMLFormElement>) {\n if (!event.currentTarget.checkValidity()) {\n event.preventDefault();\n event.currentTarget.reportValidity();\n return false;\n }\n return true;\n}\n","import { forwardRef, useId, type TextareaHTMLAttributes, type ReactNode } from 'react';\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> { label?: ReactNode; hint?: ReactNode; error?: ReactNode; resize?: 'none' | 'vertical' | 'both'; }\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea({ label, hint, error, resize = 'vertical', id, className = '', ...props }, ref) {\n const generated = useId(); const fieldId = id ?? generated; const message = error ?? hint; const messageId = message ? `${fieldId}-message` : undefined;\n return <label className=\"hf-field\" htmlFor={fieldId}>{label && <span className=\"hf-field__label\">{label}</span>}<textarea ref={ref} id={fieldId} className={`hf-textarea hf-textarea--${resize}${error ? ' hf-textarea--error' : ''} ${className}`} aria-invalid={error ? true : undefined} aria-describedby={messageId} {...props} />{message && <span id={messageId} className={`hf-field__hint${error ? ' hf-field__hint--error' : ''}`}>{message}</span>}</label>;\n});\n","import { forwardRef, useEffect, useRef, type InputHTMLAttributes, type ReactNode } from 'react';\ntype BaseProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & { label: ReactNode; description?: ReactNode };\nexport const Checkbox = forwardRef<HTMLInputElement, BaseProps & { indeterminate?: boolean }>(function Checkbox({ label, description, indeterminate, className = '', ...props }, forwardedRef) {\n const local = useRef<HTMLInputElement>(null); useEffect(() => { if (local.current) local.current.indeterminate = Boolean(indeterminate); }, [indeterminate]);\n const setRef = (node: HTMLInputElement | null) => { local.current = node; if (typeof forwardedRef === 'function') forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; };\n return <label className={`hf-choice-control ${className}`}><input ref={setRef} type=\"checkbox\" {...props} /><span className=\"hf-choice-control__mark\"><IconCheck /></span><span><strong>{label}</strong>{description && <small>{description}</small>}</span></label>;\n});\nexport const Radio = forwardRef<HTMLInputElement, BaseProps>(function Radio({ label, description, className = '', ...props }, ref) { return <label className={`hf-choice-control hf-choice-control--radio ${className}`}><input ref={ref} type=\"radio\" {...props} /><span className=\"hf-choice-control__mark\"><i /></span><span><strong>{label}</strong>{description && <small>{description}</small>}</span></label>; });\nfunction IconCheck() { return <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"m3.5 8 3 3 6-6\" /></svg>; }\n","import {\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nconst iso = (date: Date) =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n\nexport interface CalendarProps {\n value?: string;\n onChange?: (value: string) => void;\n min?: string;\n max?: string;\n className?: string;\n}\n\nexport function Calendar({ value, onChange, min, max, className = '' }: CalendarProps) {\n const initial = value ? new Date(`${value}T00:00:00`) : new Date();\n const [view, setView] = useState(new Date(initial.getFullYear(), initial.getMonth(), 1));\n const first = view.getDay();\n const days = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();\n const cells = Array.from(\n { length: Math.ceil((first + days) / 7) * 7 },\n (_, index) => index - first + 1,\n );\n\n return (\n <div className={`hf-calendar ${className}`}>\n <header>\n <button\n type=\"button\"\n aria-label=\"上个月\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1))}\n >\n <Icon name=\"chevron-down\" className=\"hf-calendar__prev\" />\n </button>\n <strong>{view.getFullYear()} 年 {view.getMonth() + 1} 月</strong>\n <button\n type=\"button\"\n aria-label=\"下个月\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1))}\n >\n <Icon name=\"chevron-down\" className=\"hf-calendar__next\" />\n </button>\n </header>\n <div className=\"hf-calendar__week\">\n {'日一二三四五六'.split('').map((day) => <span key={day}>{day}</span>)}\n </div>\n <div className=\"hf-calendar__days\">\n {cells.map((day, index) => {\n if (day < 1 || day > days) return <span key={index} />;\n const date = iso(new Date(view.getFullYear(), view.getMonth(), day));\n const disabled = Boolean((min && date < min) || (max && date > max));\n const stateClass = date === value ? 'is-selected' : date === iso(new Date()) ? 'is-today' : '';\n return (\n <button\n type=\"button\"\n key={date}\n disabled={disabled}\n className={stateClass}\n aria-pressed={date === value}\n onClick={() => onChange?.(date)}\n >\n {day}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface DatePickerProps {\n label?: ReactNode;\n value?: string;\n onChange: (value: string) => void;\n placeholder?: string;\n min?: string;\n max?: string;\n error?: ReactNode;\n}\n\nexport function DatePicker({\n label,\n value,\n onChange,\n placeholder = '选择日期',\n min,\n max,\n error,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), {\n autoFocus: false,\n });\n return (\n <div ref={rootRef} className=\"hf-field hf-date-picker\">\n {label && <span className=\"hf-field__label\">{label}</span>}\n <button\n type=\"button\"\n className={`hf-picker-trigger${error ? ' is-error' : ''}`}\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n >\n <span className={value ? '' : 'is-placeholder'}>{value || placeholder}</span>\n <Icon name=\"chevron-down\" size={16} />\n </button>\n {open && (\n <div className=\"hf-date-picker__panel\">\n <Calendar\n value={value}\n min={min}\n max={max}\n onChange={(next) => {\n onChange(next);\n setOpen(false);\n }}\n />\n </div>\n )}\n {error && <span className=\"hf-field__hint hf-field__hint--error\">{error}</span>}\n </div>\n );\n}\n\nexport interface TimePickerProps {\n label?: ReactNode;\n value?: string;\n onChange: (value: string) => void;\n step?: number;\n}\n\nexport function TimePicker({ label, value, onChange, step = 30 }: TimePickerProps) {\n const [open, setOpen] = useState(false);\n const rootRef = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), {\n autoFocus: false,\n });\n const times = Array.from({ length: Math.ceil(1440 / step) }, (_, index) => {\n const minutes = index * step;\n return `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`;\n });\n return (\n <div ref={rootRef} className=\"hf-field hf-time-picker\">\n {label && <span className=\"hf-field__label\">{label}</span>}\n <button\n type=\"button\"\n className=\"hf-picker-trigger\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n >\n <span className={value ? '' : 'is-placeholder'}>{value || '选择时间'}</span>\n <Icon name=\"chevron-down\" size={16} />\n </button>\n {open && (\n <div className=\"hf-time-picker__panel\" role=\"listbox\">\n {times.map((time) => (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={time === value}\n key={time}\n onClick={() => {\n onChange(time);\n setOpen(false);\n }}\n >\n {time}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> {\n label?: ReactNode;\n value: number;\n onChange: (value: number) => void;\n showValue?: boolean;\n}\n\nexport function Slider({\n label,\n value,\n min = 0,\n max = 100,\n step = 1,\n onChange,\n showValue = true,\n ...props\n}: SliderProps) {\n const percent = (value - Number(min)) / (Number(max) - Number(min)) * 100;\n return (\n <label className=\"hf-slider\">\n <span>{label}{showValue && <strong>{value}</strong>}</span>\n <input\n type=\"range\"\n value={value}\n min={min}\n max={max}\n step={step}\n style={{ '--hf-slider-value': `${percent}%` } as CSSProperties}\n onChange={(event) => onChange(Number(event.target.value))}\n {...props}\n />\n </label>\n );\n}\n","import {\n createContext,\n useContext,\n type FormHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\n\nconst FormContext = createContext<{ disabled?: boolean }>({});\n\nexport interface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n layout?: 'vertical' | 'horizontal';\n disabled?: boolean;\n}\n\nexport function Form({\n layout = 'vertical',\n disabled,\n className = '',\n children,\n ...props\n}: FormProps) {\n return (\n <FormContext.Provider value={{ disabled }}>\n <form\n className={`hf-form hf-form--${layout} ${className}`.trim()}\n aria-disabled={disabled || undefined}\n {...props}\n >\n <fieldset className=\"hf-form__fieldset\" disabled={disabled}>\n {children}\n </fieldset>\n </form>\n </FormContext.Provider>\n );\n}\n\nexport interface FormItemProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n required?: boolean;\n hint?: ReactNode;\n error?: ReactNode;\n children: ReactNode;\n}\n\nexport function FormItem({\n label,\n required,\n hint,\n error,\n children,\n className = '',\n ...props\n}: FormItemProps) {\n const { disabled } = useContext(FormContext);\n return (\n <div\n className={`hf-form-item${error ? ' is-error' : ''} ${className}`.trim()}\n aria-disabled={disabled || undefined}\n {...props}\n >\n {label && (\n <div className=\"hf-form-item__label\">\n {label}\n {required && <span aria-hidden=\"true\">*</span>}\n </div>\n )}\n <div>\n {children}\n {(error || hint) && <small className={error ? 'is-error' : ''}>{error || hint}</small>}\n </div>\n </div>\n );\n}\n","import {\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from 'react';\nimport { Icon } from '../foundations/Icon';\n\nexport type UploadRejectionReason =\n | 'file-too-large'\n | 'file-type-not-accepted'\n | 'too-many-files';\n\nexport interface UploadRejection {\n file: File;\n reason: UploadRejectionReason;\n message: string;\n}\n\ninterface UploadValidationOptions {\n accept?: string;\n maxFiles?: number;\n maxSize?: number;\n}\n\ninterface UploadValidationResult {\n accepted: File[];\n rejected: UploadRejection[];\n}\n\nexport interface UploadProps extends UploadValidationOptions {\n label?: ReactNode;\n multiple?: boolean;\n onFiles: (files: File[]) => void;\n onReject?: (rejections: UploadRejection[]) => void;\n hint?: ReactNode;\n disabled?: boolean;\n}\n\nfunction formatFileSize(bytes: number) {\n if (bytes >= 1024 * 1024) {\n const megabytes = bytes / (1024 * 1024);\n return `${Number.isInteger(megabytes) ? megabytes : megabytes.toFixed(1)} MB`;\n }\n if (bytes >= 1024) return `${Math.ceil(bytes / 1024)} KB`;\n return `${bytes} B`;\n}\n\nfunction acceptsFile(file: File, accept?: string) {\n if (!accept?.trim()) return true;\n const fileName = file.name.toLowerCase();\n const mimeType = file.type.toLowerCase();\n\n return accept\n .split(',')\n .map((value) => value.trim().toLowerCase())\n .filter(Boolean)\n .some((rule) => {\n if (rule.startsWith('.')) return fileName.endsWith(rule);\n if (rule.endsWith('/*')) return mimeType.startsWith(rule.slice(0, -1));\n return mimeType === rule;\n });\n}\n\nfunction validateUploadFiles(\n files: readonly File[],\n options: UploadValidationOptions = {},\n): UploadValidationResult {\n const accepted: File[] = [];\n const rejected: UploadRejection[] = [];\n const limit = options.maxFiles ?? Number.POSITIVE_INFINITY;\n\n files.forEach((file) => {\n if (!acceptsFile(file, options.accept)) {\n rejected.push({ file, reason: 'file-type-not-accepted', message: '不支持该文件类型' });\n return;\n }\n if (options.maxSize !== undefined && file.size > options.maxSize) {\n rejected.push({\n file,\n reason: 'file-too-large',\n message: `文件不能超过 ${formatFileSize(options.maxSize)}`,\n });\n return;\n }\n if (accepted.length >= limit) {\n rejected.push({\n file,\n reason: 'too-many-files',\n message: `最多只能选择 ${limit} 个文件`,\n });\n return;\n }\n accepted.push(file);\n });\n\n return { accepted, rejected };\n}\n\nexport function Upload({\n label = '上传文件',\n accept,\n multiple,\n maxFiles,\n maxSize,\n onFiles,\n onReject,\n hint,\n disabled,\n}: UploadProps) {\n const id = useId();\n const ref = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n const [rejections, setRejections] = useState<UploadRejection[]>([]);\n\n const takeFiles = (list: FileList | null) => {\n const result = validateUploadFiles(Array.from(list ?? []), {\n accept,\n maxFiles,\n maxSize,\n });\n setRejections(result.rejected);\n onFiles(result.accepted);\n if (result.rejected.length) onReject?.(result.rejected);\n };\n\n return (\n <div className=\"hf-upload\">\n <input\n ref={ref}\n id={id}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event: ChangeEvent<HTMLInputElement>) => takeFiles(event.target.files)}\n />\n <button\n type=\"button\"\n disabled={disabled}\n className={dragging ? 'is-dragging' : ''}\n onClick={() => ref.current?.click()}\n onDragOver={(event) => {\n event.preventDefault();\n if (!disabled) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={(event) => {\n event.preventDefault();\n setDragging(false);\n if (!disabled) takeFiles(event.dataTransfer.files);\n }}\n >\n <Icon name=\"inbox\" size={24} />\n <strong>{label}</strong>\n <span>拖放到这里,或点击选择</span>\n </button>\n {rejections.length > 0 && (\n <div className=\"hf-upload__errors\" role=\"alert\">\n {rejections.map(({ file, reason, message }, index) => (\n <span key={`${file.name}-${reason}-${index}`}>{file.name}:{message}</span>\n ))}\n </div>\n )}\n {hint && <small>{hint}</small>}\n </div>\n );\n}\n","import { useId, useMemo, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\nimport { Icon } from '../foundations/Icon';\n\nexport interface ComboboxOption { label: ReactNode; value: string; keywords?: string; disabled?: boolean }\nexport interface ComboboxProps { label?: ReactNode; options: readonly ComboboxOption[]; value?: string; onChange: (value: string) => void; placeholder?: string; hint?: ReactNode; error?: ReactNode; disabled?: boolean; emptyText?: ReactNode }\n\nexport function Combobox({ label, options, value = '', onChange, placeholder = '搜索或选择', hint, error, disabled, emptyText = '没有匹配项' }: ComboboxProps) {\n const id = useId(); const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLDivElement>(open, () => setOpen(false), { autoFocus: false }); const [query, setQuery] = useState(''); const [active, setActive] = useState(0);\n const selected = options.find((item) => item.value === value);\n const filtered = useMemo(() => options.filter((item) => `${typeof item.label === 'string' ? item.label : item.value} ${item.keywords ?? ''}`.toLowerCase().includes(query.toLowerCase())), [options, query]);\n const choose = (next: string) => { onChange(next); setQuery(''); setOpen(false); };\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => { if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); setOpen(true); setActive((current) => Math.max(0, Math.min(filtered.length - 1, current + (event.key === 'ArrowDown' ? 1 : -1)))); } else if (event.key === 'Enter' && open) { event.preventDefault(); const option = filtered[active]; if (option && !option.disabled) choose(option.value); } else if (event.key === 'Escape') setOpen(false); };\n return <div className=\"hf-field hf-combobox\" ref={root}>{label && <label className=\"hf-field__label\" htmlFor={id}>{label}</label>}<div className={`hf-combobox__control${open ? ' is-open' : ''}${error ? ' is-error' : ''}`}><input id={id} role=\"combobox\" aria-expanded={open} aria-controls={`${id}-listbox`} aria-autocomplete=\"list\" aria-invalid={Boolean(error)} disabled={disabled} placeholder={selected && !open ? String(selected.label) : placeholder} value={open ? query : selected ? String(selected.label) : ''} onFocus={() => setOpen(true)} onChange={(event) => { setQuery(event.target.value); setActive(0); setOpen(true); }} onKeyDown={onKeyDown} /><button type=\"button\" aria-label={open ? '关闭选项' : '打开选项'} disabled={disabled} onClick={() => setOpen((current) => !current)}><Icon name=\"chevron-down\" size={16} /></button></div>{open && <div id={`${id}-listbox`} className=\"hf-combobox__menu\" role=\"listbox\">{filtered.length ? filtered.map((option, index) => <button type=\"button\" role=\"option\" aria-selected={option.value === value} disabled={option.disabled} className={index === active ? 'is-active' : ''} key={option.value} onPointerMove={() => setActive(index)} onClick={() => choose(option.value)}><span>{option.label}</span>{option.value === value && <span aria-hidden=\"true\">✓</span>}</button>) : <div className=\"hf-combobox__empty\">{emptyText}</div>}</div>}{(error || hint) && <span className={`hf-field__hint${error ? ' hf-field__hint--error' : ''}`}>{error ?? hint}</span>}</div>;\n}\n","import { useId, type ReactNode } from 'react';\n\nexport interface NumberInputProps { label?: ReactNode; value: number; onChange: (value: number) => void; min?: number; max?: number; step?: number; prefix?: ReactNode; suffix?: ReactNode; hint?: ReactNode; error?: ReactNode; disabled?: boolean }\nexport function NumberInput({ label, value, onChange, min, max, step = 1, prefix, suffix, hint, error, disabled }: NumberInputProps) {\n const id = useId(); const clamp = (next: number) => Math.min(max ?? Infinity, Math.max(min ?? -Infinity, next));\n return <div className=\"hf-field hf-number-input\">{label && <label className=\"hf-field__label\" htmlFor={id}>{label}</label>}<div className={`hf-number-input__control${error ? ' is-error' : ''}`}>{prefix && <span>{prefix}</span>}<input id={id} type=\"number\" value={value} min={min} max={max} step={step} disabled={disabled} aria-invalid={Boolean(error)} onChange={(event) => { const next = event.currentTarget.valueAsNumber; if (!Number.isNaN(next)) onChange(clamp(next)); }} /><div><button type=\"button\" disabled={disabled || (max !== undefined && value >= max)} aria-label=\"增加\" onClick={() => onChange(clamp(value + step))}>+</button><button type=\"button\" disabled={disabled || (min !== undefined && value <= min)} aria-label=\"减少\" onClick={() => onChange(clamp(value - step))}>−</button></div>{suffix && <span>{suffix}</span>}</div>{(error || hint) && <span className={`hf-field__hint${error ? ' hf-field__hint--error' : ''}`}>{error ?? hint}</span>}</div>;\n}\n","import { useState, type InputHTMLAttributes, type ReactNode } from 'react';\nimport { Icon } from '../foundations/Icon';\nimport { Select } from './Select';\nexport interface CascaderOption { value: string; label: string; children?: readonly CascaderOption[]; disabled?: boolean }\nexport function Cascader({ options, value = [], onChange, label }: { options: readonly CascaderOption[]; value?: readonly string[]; onChange: (value: string[]) => void; label?: ReactNode }) {\n const levels: (readonly CascaderOption[])[] = [options]; let current = options; for (const key of value) { const next = current.find((item) => item.value === key)?.children; if (!next) break; levels.push(next); current = next; }\n return <div className=\"hf-field hf-cascader\">{label && <span className=\"hf-field__label\">{label}</span>}<div>{levels.map((items, level) => <Select aria-label={`第 ${level + 1} 级`} className=\"hf-cascader__level\" value={value[level] ?? ''} placeholder=\"请选择\" options={items.map((item) => ({ label: item.label, value: item.value, disabled: item.disabled }))} key={level} onChange={(event) => onChange([...value.slice(0, level), event.target.value])} />)}</div></div>;\n}\nexport interface TreeSelectOption { key: string; label: string; children?: readonly TreeSelectOption[]; disabled?: boolean }\nexport function TreeSelect({ options, value, onChange, label, placeholder = '选择节点' }: { options: readonly TreeSelectOption[]; value?: string; onChange: (value: string) => void; label?: ReactNode; placeholder?: string }) {\n const [open, setOpen] = useState(false); const flatten = (nodes: readonly TreeSelectOption[], depth = 0): { node: TreeSelectOption; depth: number }[] => nodes.flatMap((node) => [{ node, depth }, ...flatten(node.children ?? [], depth + 1)]); const all = flatten(options);\n return <div className=\"hf-field hf-tree-select\">{label && <span className=\"hf-field__label\">{label}</span>}<button type=\"button\" className=\"hf-picker-trigger\" aria-expanded={open} onClick={() => setOpen(!open)}><span>{all.find((item) => item.node.key === value)?.node.label ?? placeholder}</span><Icon className=\"hf-picker-trigger__chevron\" name=\"chevron-down\" size={16} /></button>{open && <div role=\"listbox\">{all.map(({ node, depth }) => <button type=\"button\" role=\"option\" aria-selected={node.key === value} disabled={node.disabled} style={{ paddingLeft: 12 + depth * 18 }} key={node.key} onClick={() => { onChange(node.key); setOpen(false); }}>{node.label}</button>)}</div>}</div>;\n}\nexport interface TransferItem { key: string; label: ReactNode; disabled?: boolean }\nexport function Transfer({ items, value, onChange, titles = ['可选项', '已选择'] }: { items: readonly TransferItem[]; value: readonly string[]; onChange: (value: string[]) => void; titles?: readonly [string, string] }) {\n const [marked, setMarked] = useState<string[]>([]); const pane = (selected: boolean) => <section><strong>{titles[selected ? 1 : 0]}</strong>{items.filter((item) => value.includes(item.key) === selected).map((item) => <label key={item.key}><input type=\"checkbox\" disabled={item.disabled} checked={marked.includes(item.key)} onChange={() => setMarked((keys) => keys.includes(item.key) ? keys.filter((key) => key !== item.key) : [...keys, item.key])} />{item.label}</label>)}</section>;\n return <div className=\"hf-transfer\">{pane(false)}<div><button type=\"button\" aria-label=\"移至已选择\" onClick={() => { onChange([...new Set([...value, ...marked])]); setMarked([]); }}>→</button><button type=\"button\" aria-label=\"移回可选项\" onClick={() => { onChange(value.filter((key) => !marked.includes(key))); setMarked([]); }}>←</button></div>{pane(true)}</div>;\n}\nexport function DateRangePicker({ label, value, onChange, min, max }: { label?: ReactNode; value: readonly [string, string]; onChange: (value: [string, string]) => void; min?: string; max?: string }) { return <div className=\"hf-field hf-date-range\">{label && <span className=\"hf-field__label\">{label}</span>}<div><input aria-label=\"开始日期\" type=\"date\" value={value[0]} min={min} max={value[1] || max} onChange={(event) => onChange([event.target.value, value[1]])} /><span>至</span><input aria-label=\"结束日期\" type=\"date\" value={value[1]} min={value[0] || min} max={max} onChange={(event) => onChange([value[0], event.target.value])} /></div></div>; }\nexport function SearchInput({ onSearch, loading, clearable = true, ...props }: Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & { onSearch: (value: string) => void; loading?: boolean; clearable?: boolean }) { const [value, setValue] = useState(String(props.defaultValue ?? props.value ?? '')); return <form className=\"hf-search-input\" role=\"search\" onSubmit={(event) => { event.preventDefault(); onSearch(value); }}><span aria-hidden=\"true\">⌕</span><input {...props} value={value} onChange={(event) => { setValue(event.target.value); props.onChange?.(event); }} />{clearable && value && <button type=\"button\" aria-label=\"清除搜索\" onClick={() => setValue('')}><Icon name=\"close\" size={14} /></button>}<button type=\"submit\" disabled={loading}>{loading ? '搜索中' : '搜索'}</button></form>; }\n","import { useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../components/Button';\nimport { Icon } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface DrawerProps { open: boolean; title: string; children: ReactNode; onClose: () => void; footer?: ReactNode; side?: 'left' | 'right' | 'bottom'; size?: 'sm' | 'md' | 'lg' }\n\nexport function Drawer({ open, title, children, onClose, footer, side = 'right', size = 'md' }: DrawerProps) {\n const titleId = useId();\n const drawerRef = useDismissibleLayer<HTMLDivElement>(open, onClose, true);\n if (!open) return null;\n return createPortal(<div className=\"hf-drawer-backdrop\" onMouseDown={(event) => event.target === event.currentTarget && onClose()}>\n <div ref={drawerRef} className={`hf-drawer hf-drawer--${side} hf-drawer--${size}`} role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId} tabIndex={-1}>\n <header><h2 id={titleId}>{title}</h2><Button variant=\"quiet\" size=\"sm\" iconOnly leadingIcon={<Icon name=\"close\" size={16} />} onClick={onClose} aria-label=\"关闭抽屉\" /></header>\n <div className=\"hf-drawer__body\">{children}</div>{footer && <footer>{footer}</footer>}\n </div>\n </div>, document.body);\n}\n","import { cloneElement, isValidElement, useId, useState, type ReactElement, type ReactNode } from 'react';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface PopoverProps { trigger: ReactElement; children: ReactNode; open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; placement?: 'top' | 'bottom' | 'left' | 'right'; label?: string }\n\nexport function Popover({ trigger, children, open, defaultOpen = false, onOpenChange, placement = 'bottom', label = '更多内容' }: PopoverProps) {\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const controlled = open !== undefined;\n const visible = controlled ? open : innerOpen;\n const contentId = useId();\n const update = (next: boolean) => { if (!controlled) setInnerOpen(next); onOpenChange?.(next); };\n const rootRef = useDismissibleLayer<HTMLSpanElement>(visible, () => update(false));\n const triggerProps = { 'aria-expanded': visible, 'aria-controls': visible ? contentId : undefined, 'aria-haspopup': 'dialog' as const, onClick: () => update(!visible) };\n return <span className=\"hf-popover\" ref={rootRef}>{isValidElement(trigger) && cloneElement(trigger, triggerProps)}{visible && <span id={contentId} role=\"dialog\" aria-label={label} className={`hf-popover__content hf-popover__content--${placement}`}>{children}</span>}</span>;\n}\n","import { cloneElement, useId, useState, type ReactElement, type ReactNode } from 'react';\nimport { Icon, type IconName } from '../foundations/Icon';\ntype StatusTone = 'info' | 'success' | 'warning' | 'danger';\nexport function Tooltip({ content, children, placement = 'top' }: { content: ReactNode; children: ReactElement; placement?: 'top' | 'right' | 'bottom' | 'left' }) { const [open, setOpen] = useState(false); const id = useId(); const trigger = cloneElement(children, { 'aria-describedby': open ? id : undefined } as object); return <span className=\"hf-tooltip\" onMouseEnter={() => setOpen(true)} onMouseLeave={() => setOpen(false)} onFocus={() => setOpen(true)} onBlur={() => setOpen(false)}>{trigger}{open && <span id={id} role=\"tooltip\" className={`hf-tooltip__bubble hf-tooltip__bubble--${placement}`}>{content}</span>}</span>; }\nexport function Alert({ tone = 'info', title, children, onClose, action }: { tone?: StatusTone; title: ReactNode; children?: ReactNode; onClose?: () => void; action?: ReactNode }) { const icon: Record<StatusTone, IconName> = { info: 'info', success: 'check', warning: 'warning', danger: 'error' }; return <div className={`hf-alert hf-alert--${tone}`} role={tone === 'danger' ? 'alert' : 'status'}><Icon name={icon[tone]} /><div><strong>{title}</strong>{children && <div>{children}</div>}{action && <div className=\"hf-alert__action\">{action}</div>}</div>{onClose && <button type=\"button\" onClick={onClose} aria-label=\"关闭提示\"><Icon name=\"close\" size={16} /></button>}</div>; }\n","import { cloneElement, isValidElement, useEffect, useId, useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\nimport { Icon, type IconName } from '../foundations/Icon';\nimport { useDismissibleLayer } from '../overlays/useOverlay';\n\nexport interface PopconfirmProps { trigger: ReactElement; title: ReactNode; description?: ReactNode; confirmText?: string; cancelText?: string; tone?: 'primary' | 'danger'; onConfirm: () => void }\nexport function Popconfirm({ trigger, title, description, confirmText = '确认', cancelText = '取消', tone = 'primary', onConfirm }: PopconfirmProps) { const [open, setOpen] = useState(false); const root = useDismissibleLayer<HTMLSpanElement>(open, () => setOpen(false), { autoFocus: false }); return <span className=\"hf-popconfirm\" ref={root}>{isValidElement(trigger) && cloneElement(trigger, { onClick: () => setOpen(true), 'aria-expanded': open } as object)}{open && <div role=\"alertdialog\" aria-modal=\"false\" className=\"hf-popconfirm__panel\"><strong>{title}</strong>{description && <p>{description}</p>}<div><Button size=\"sm\" variant=\"quiet\" onClick={() => setOpen(false)}>{cancelText}</Button><Button size=\"sm\" variant={tone === 'danger' ? 'danger' : 'primary'} onClick={() => { onConfirm(); setOpen(false); }}>{confirmText}</Button></div></div>}</span>; }\n\nexport interface NotificationProps { title: ReactNode; children?: ReactNode; tone?: 'info' | 'success' | 'warning' | 'danger'; time?: ReactNode; unread?: boolean; action?: ReactNode; onClose?: () => void }\nexport function Notification({ title, children, tone = 'info', time, unread, action, onClose }: NotificationProps) { const icons: Record<NonNullable<NotificationProps['tone']>, IconName> = { info: 'info', success: 'check', warning: 'warning', danger: 'error' }; return <article className={`hf-notification hf-notification--${tone}${unread ? ' is-unread' : ''}`}><span className=\"hf-notification__icon\"><Icon name={icons[tone]} size={18} /></span><div><header><strong>{title}</strong>{time && <time>{time}</time>}</header>{children && <p>{children}</p>}{action && <div className=\"hf-notification__action\">{action}</div>}</div>{onClose && <button type=\"button\" aria-label=\"关闭通知\" onClick={onClose}><Icon name=\"close\" size={15} /></button>}</article>; }\n\nexport interface ResultProps { status?: 'success' | 'error' | 'warning' | 'info' | '404' | '403'; title: ReactNode; description?: ReactNode; actions?: ReactNode; extra?: ReactNode }\nexport function Result({ status = 'info', title, description, actions, extra }: ResultProps) { const icon = status === 'success' ? '✓' : status === 'error' ? '×' : status === 'warning' ? '!' : status === 'info' ? 'i' : status; return <section className={`hf-result hf-result--${status}`}><span className=\"hf-result__icon\" aria-hidden=\"true\">{icon}</span><h2>{title}</h2>{description && <p>{description}</p>}{actions && <div className=\"hf-result__actions\">{actions}</div>}{extra && <div className=\"hf-result__extra\">{extra}</div>}</section>; }\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nexport interface StatisticCardProps extends HTMLAttributes<HTMLElement> { label: ReactNode; value: ReactNode; trend?: ReactNode; icon?: ReactNode; tone?: 'blue' | 'green' | 'violet' | 'amber' }\nexport function StatisticCard({ label, value, trend, icon, tone = 'blue', className = '', ...props }: StatisticCardProps) {\n return <article className={`hf-stat hf-stat--${tone} ${className}`.trim()} {...props}><div className=\"hf-stat__top\"><span>{label}</span>{icon && <i>{icon}</i>}</div><strong>{value}</strong>{trend && <small>{trend}</small>}<span className=\"hf-stat__glow\" aria-hidden=\"true\" /></article>;\n}\n/** COMPAT: StatisticCard remains available for existing consumers; Stat is the concise public name. */\nexport const Stat = StatisticCard;\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> { value: number; max?: number; label?: ReactNode; showValue?: boolean; size?: 'sm' | 'md' | 'lg'; tone?: 'primary' | 'success' | 'warning' }\nexport function Progress({ value, max = 100, label, showValue = true, size = 'md', tone = 'primary', className = '', ...props }: ProgressProps) {\n const percent = Math.min(100, Math.max(0, max ? value / max * 100 : 0));\n return <div className={`hf-progress hf-progress--${size} hf-progress--${tone} ${className}`.trim()} {...props}>{(label || showValue) && <div className=\"hf-progress__meta\"><span>{label}</span>{showValue && <strong>{Math.round(percent)}%</strong>}</div>}<div className=\"hf-progress__track\" role=\"progressbar\" aria-valuemin={0} aria-valuemax={max} aria-valuenow={value}><span style={{ '--hf-progress': `${percent}%` } as CSSProperties} /></div></div>;\n}\n\nexport interface CircularProgressProps extends HTMLAttributes<HTMLDivElement> { value: number; max?: number; label?: ReactNode; size?: number; thickness?: number }\nexport function CircularProgress({ value, max = 100, label, size = 92, thickness = 8, className = '', ...props }: CircularProgressProps) {\n const percent = Math.min(100, Math.max(0, max ? value / max * 100 : 0));\n return <div className={`hf-circular-progress ${className}`.trim()} style={{ '--hf-circle': `${percent * 3.6}deg`, '--hf-circle-size': `${size}px`, '--hf-circle-thickness': `${thickness}px` } as CSSProperties} role=\"progressbar\" aria-valuemin={0} aria-valuemax={max} aria-valuenow={value} {...props}><span><strong>{Math.round(percent)}%</strong>{label && <small>{label}</small>}</span></div>;\n}\n\nexport interface StepProgressProps extends HTMLAttributes<HTMLOListElement> { steps: readonly ReactNode[]; current: number }\nexport function StepProgress({ steps, current, className = '', ...props }: StepProgressProps) {\n return <ol className={`hf-step-progress ${className}`.trim()} {...props}>{steps.map((step, index) => <li key={index} className={index < current ? 'is-complete' : index === current ? 'is-current' : ''}><span>{index < current ? '✓' : index + 1}</span><small>{step}</small></li>)}</ol>;\n}\n\nexport interface ActivityIndicatorProps extends HTMLAttributes<HTMLSpanElement> { variant?: 'spinner' | 'dots' | 'radar' | 'wave'; label?: string; size?: 'sm' | 'md' | 'lg' }\nexport function ActivityIndicator({ variant = 'spinner', label = '正在加载', size = 'md', className = '', ...props }: ActivityIndicatorProps) {\n return <span className={`hf-activity hf-activity--${variant} hf-activity--${size} ${className}`.trim()} role=\"status\" aria-label={label} {...props}>{variant === 'dots' && <><i /><i /><i /></>}{variant === 'wave' && Array.from({ length: 5 }, (_, index) => <i key={index} />)}{variant === 'radar' && <i />}</span>;\n}\n\nexport interface SparklineProps extends HTMLAttributes<SVGSVGElement> { data: readonly number[]; width?: number; height?: number; label?: string; filled?: boolean }\nexport function Sparkline({ data, width = 160, height = 48, label = '趋势图', filled = true, ...props }: SparklineProps) {\n const min = Math.min(...data); const max = Math.max(...data); const range = max - min || 1;\n const points = data.map((value, index) => `${data.length === 1 ? width / 2 : index / (data.length - 1) * width},${height - ((value - min) / range * (height - 8) + 4)}`).join(' ');\n const area = `0,${height} ${points} ${width},${height}`;\n return <svg className=\"hf-sparkline\" viewBox={`0 0 ${width} ${height}`} role=\"img\" aria-label={label} {...props}>{filled && <polygon points={area} className=\"hf-sparkline__area\" />}<polyline points={points} className=\"hf-sparkline__line\" /></svg>;\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { Icon } from '../foundations/Icon';\n\nexport interface TableColumn<T> { key: string; header: ReactNode; render?: (item: T, index: number) => ReactNode; align?: 'left' | 'center' | 'right'; width?: number | string; }\nexport interface TableProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> { columns: readonly TableColumn<T>[]; data: readonly T[]; rowKey: keyof T | ((item: T, index: number) => string | number); caption?: string; empty?: ReactNode; striped?: boolean; onRowClick?: (item: T, index: number) => void; }\nexport function Table<T extends object>({ columns, data, rowKey, caption, empty = '暂无数据', striped, onRowClick, className = '', ...props }: TableProps<T>) {\n const keyOf = (item: T, index: number) => typeof rowKey === 'function' ? rowKey(item, index) : String(item[rowKey]);\n return <div className={`hf-table-wrap ${className}`} {...props}><table className={`hf-table${striped ? ' hf-table--striped' : ''}`}>{caption && <caption>{caption}</caption>}<thead><tr>{columns.map((column) => <th key={column.key} style={{ textAlign: column.align, width: column.width }}>{column.header}</th>)}</tr></thead><tbody>{data.map((item, index) => <tr key={keyOf(item, index)} className={onRowClick ? 'is-clickable' : ''} onClick={() => onRowClick?.(item, index)} tabIndex={onRowClick ? 0 : undefined} onKeyDown={(event) => { if (onRowClick && (event.key === 'Enter' || event.key === ' ')) { event.preventDefault(); onRowClick(item, index); } }}>{columns.map((column) => <td key={column.key} style={{ textAlign: column.align }}>{column.render ? column.render(item, index) : String(item[column.key as keyof T] ?? '')}</td>)}</tr>)}{!data.length && <tr><td className=\"hf-table__empty\" colSpan={columns.length}>{empty}</td></tr>}</tbody></table></div>;\n}\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> { page: number; total: number; pageSize?: number; siblingCount?: number; onChange: (page: number) => void; }\nexport function Pagination({ page, total, pageSize = 10, siblingCount = 1, onChange, className = '', ...props }: PaginationProps) {\n const count = Math.max(1, Math.ceil(total / pageSize)); const current = Math.min(count, Math.max(1, page));\n const visible = Array.from({ length: count }, (_, i) => i + 1).filter((value) => value === 1 || value === count || Math.abs(value - current) <= siblingCount); const parts: (number | 'ellipsis')[] = [];\n visible.forEach((value, index) => { if (index && value - visible[index - 1]! > 1) parts.push('ellipsis'); parts.push(value); });\n return <nav className={`hf-pagination ${className}`} aria-label=\"分页\" {...props}><button disabled={current === 1} onClick={() => onChange(current - 1)} aria-label=\"上一页\"><Icon name=\"chevron-down\" size={16} className=\"hf-pagination__prev\" /></button>{parts.map((part, index) => part === 'ellipsis' ? <span key={`e-${index}`} aria-hidden=\"true\">…</span> : <button key={part} className={part === current ? 'is-active' : ''} aria-current={part === current ? 'page' : undefined} onClick={() => onChange(part)}>{part}</button>)}<button disabled={current === count} onClick={() => onChange(current + 1)} aria-label=\"下一页\"><Icon name=\"chevron-down\" size={16} className=\"hf-pagination__next\" /></button></nav>;\n}\n\nexport interface ListItem { key: string | number; title: ReactNode; description?: ReactNode; leading?: ReactNode; trailing?: ReactNode; }\nexport function List({ items, divided = true, className = '', ...props }: HTMLAttributes<HTMLUListElement> & { items: readonly ListItem[]; divided?: boolean }) { return <ul className={`hf-list${divided ? ' hf-list--divided' : ''} ${className}`} {...props}>{items.map((item) => <li key={item.key}>{item.leading && <span className=\"hf-list__leading\">{item.leading}</span>}<div><strong>{item.title}</strong>{item.description && <small>{item.description}</small>}</div>{item.trailing && <span className=\"hf-list__trailing\">{item.trailing}</span>}</li>)}</ul>; }\n\nexport interface DescriptionItem { key: string | number; label: ReactNode; value: ReactNode; span?: 1 | 2 | 3; }\nexport function Descriptions({ items, columns = 2, bordered, className = '', ...props }: HTMLAttributes<HTMLDListElement> & { items: readonly DescriptionItem[]; columns?: 1 | 2 | 3; bordered?: boolean }) { return <dl className={`hf-descriptions hf-descriptions--${columns}${bordered ? ' hf-descriptions--bordered' : ''} ${className}`} {...props}>{items.map((item) => <div key={item.key} style={{ gridColumn: `span ${Math.min(item.span ?? 1, columns)}` }}><dt>{item.label}</dt><dd>{item.value}</dd></div>)}</dl>; }\n","import type { ReactNode } from 'react';\nexport interface TimelineItem { key: string; title: ReactNode; description?: ReactNode; time?: ReactNode; status?: 'complete' | 'current' | 'upcoming' }\nexport function Timeline({ items, label = '时间轴' }: { items: readonly TimelineItem[]; label?: string }) { return <ol className=\"hf-timeline\" aria-label={label}>{items.map((item) => <li key={item.key} className={`hf-timeline--${item.status ?? 'upcoming'}`}><i aria-hidden=\"true\" /><div><strong>{item.title}</strong>{item.description && <p>{item.description}</p>}</div>{item.time && <time>{item.time}</time>}</li>)}</ol>; }\nexport interface InsightBoardProps { summary: ReactNode; trend: ReactNode; detail: ReactNode; heading?: ReactNode; filters?: ReactNode }\nexport function InsightBoard({ summary, trend, detail, heading, filters }: InsightBoardProps) { return <section className=\"hf-insight-board\">{(heading || filters) && <header><div>{heading}</div>{filters}</header>}<div className=\"hf-insight-board__summary\" aria-label=\"核心结果\">{summary}</div><div className=\"hf-insight-board__trend\" aria-label=\"变化趋势\">{trend}</div><div className=\"hf-insight-board__detail\" aria-label=\"明细与原因\">{detail}</div></section>; }\n","import type { ReactNode } from 'react';\nimport { Icon, type IconName } from '../foundations/Icon';\nexport function EmptyState({ icon = 'inbox', title, description, action, size = 'md' }: { icon?: IconName; title: ReactNode; description?: ReactNode; action?: ReactNode; size?: 'sm' | 'md' }) { return <div className={`hf-empty hf-empty--${size}`}><span className=\"hf-empty__icon\"><Icon name={icon} size={size === 'sm' ? 22 : 28} /></span><strong>{title}</strong>{description && <p>{description}</p>}{action && <div>{action}</div>}</div>; }\n","import { useMemo, useState, type ReactNode } from 'react';\n\nexport interface DataGridColumn<T> { key: string; header: ReactNode; render?: (item: T) => ReactNode; value?: (item: T) => string | number; sortable?: boolean; width?: string | number }\nexport interface DataGridProps<T> { columns: readonly DataGridColumn<T>[]; data: readonly T[]; rowKey: keyof T | ((item: T) => string); selectedKeys?: readonly string[]; onSelectionChange?: (keys: string[]) => void; empty?: ReactNode; caption?: string }\nexport function DataGrid<T extends object>({ columns, data, rowKey, selectedKeys = [], onSelectionChange, empty = '暂无数据', caption }: DataGridProps<T>) {\n const [sort, setSort] = useState<{ key: string; direction: 'asc' | 'desc' }>(); const keyOf = (item: T) => typeof rowKey === 'function' ? rowKey(item) : String(item[rowKey]);\n const rows = useMemo(() => { if (!sort) return [...data]; const column = columns.find((item) => item.key === sort.key); if (!column) return [...data]; return [...data].sort((a, b) => { const av = column.value?.(a) ?? String(a[column.key as keyof T] ?? ''); const bv = column.value?.(b) ?? String(b[column.key as keyof T] ?? ''); const compared = typeof av === 'number' && typeof bv === 'number' ? av - bv : String(av).localeCompare(String(bv), 'zh-CN'); return sort.direction === 'asc' ? compared : -compared; }); }, [columns, data, sort]);\n const all = data.length > 0 && data.every((item) => selectedKeys.includes(keyOf(item))); const changeAll = () => onSelectionChange?.(all ? [] : data.map(keyOf));\n return <div className=\"hf-data-grid\" onKeyDown={(event) => { if (!['ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(event.key)) return; const controls = [...event.currentTarget.querySelectorAll<HTMLElement>('button,input')]; const current = controls.indexOf(event.target as HTMLElement); if (current < 0) return; event.preventDefault(); const direction = event.key === 'ArrowLeft' || event.key === 'ArrowUp' ? -1 : 1; controls[(current + direction + controls.length) % controls.length]?.focus(); }}><table>\n {caption && <caption>{caption}</caption>}\n <thead><tr>\n {onSelectionChange && <th className=\"hf-data-grid__check\"><input type=\"checkbox\" aria-label=\"选择全部\" checked={all} onChange={changeAll} /></th>}\n {columns.map((column) => <th key={column.key} style={{ width: column.width }}>{column.sortable ? <button type=\"button\" onClick={() => setSort((current) => ({ key: column.key, direction: current?.key === column.key && current.direction === 'asc' ? 'desc' : 'asc' }))}>{column.header}<span aria-hidden=\"true\">{sort?.key === column.key ? (sort.direction === 'asc' ? '↑' : '↓') : '↕'}</span></button> : column.header}</th>)}\n </tr></thead>\n <tbody>{rows.map((item) => { const key = keyOf(item); return <tr key={key} className={selectedKeys.includes(key) ? 'is-selected' : ''}>{onSelectionChange && <td><input type=\"checkbox\" aria-label={`选择行 ${key}`} checked={selectedKeys.includes(key)} onChange={() => onSelectionChange(selectedKeys.includes(key) ? selectedKeys.filter((item) => item !== key) : [...selectedKeys, key])} /></td>}{columns.map((column) => <td key={column.key}>{column.render ? column.render(item) : String(item[column.key as keyof T] ?? '')}</td>)}</tr>; })}{!rows.length && <tr><td className=\"hf-data-grid__empty\" colSpan={columns.length + (onSelectionChange ? 1 : 0)}>{empty}</td></tr>}</tbody>\n </table></div>;\n}\n","import { useState, type ReactNode } from 'react';\nexport interface TreeNode { key: string; label: ReactNode; children?: readonly TreeNode[]; disabled?: boolean; icon?: ReactNode }\nexport interface TreeProps { nodes: readonly TreeNode[]; selectedKey?: string; onSelect?: (key: string) => void; defaultExpandedKeys?: readonly string[]; label?: string }\nexport function Tree({ nodes, selectedKey, onSelect, defaultExpandedKeys = [], label = '树形列表' }: TreeProps) { const [expanded, setExpanded] = useState<string[]>([...defaultExpandedKeys]); const render = (items: readonly TreeNode[], level: number): ReactNode => <ul role={level ? 'group' : 'tree'} aria-label={level ? undefined : label}>{items.map((node) => { const open = expanded.includes(node.key); const branch = Boolean(node.children?.length); return <li role=\"treeitem\" aria-level={level + 1} aria-expanded={branch ? open : undefined} aria-selected={node.key === selectedKey} key={node.key}><div className={node.key === selectedKey ? 'is-selected' : ''} style={{ paddingLeft: level * 18 + 8 }}>{branch ? <button type=\"button\" aria-label={open ? '收起' : '展开'} onClick={() => setExpanded((keys) => open ? keys.filter((key) => key !== node.key) : [...keys, node.key])}>{open ? '⌄' : '›'}</button> : <span />}{node.icon}<button type=\"button\" disabled={node.disabled} onClick={() => onSelect?.(node.key)}>{node.label}</button></div>{branch && open && render(node.children!, level + 1)}</li>; })}</ul>; return <div className=\"hf-tree\" onKeyDown={(event) => { const labels = [...event.currentTarget.querySelectorAll<HTMLButtonElement>('li[role=treeitem]>div>button:last-child:not(:disabled)')]; const current = labels.indexOf(event.target as HTMLButtonElement); if (current < 0) return; if (['ArrowDown','ArrowUp','Home','End'].includes(event.key)) { event.preventDefault(); const next = event.key === 'Home' ? 0 : event.key === 'End' ? labels.length - 1 : (current + (event.key === 'ArrowDown' ? 1 : -1) + labels.length) % labels.length; labels[next]?.focus(); } }}>{render(nodes, 0)}</div>; }\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface AuthLayoutProps {\n children: ReactNode;\n brand?: ReactNode;\n aside?: ReactNode;\n footer?: ReactNode;\n variant?: 'split' | 'card' | 'immersive' | 'step';\n backgroundImage?: string;\n currentStep?: number;\n steps?: number;\n}\n\nexport function AuthLayout({ children, brand, aside, footer, variant = 'card', backgroundImage, currentStep = 1, steps = 1 }: AuthLayoutProps) {\n const style = backgroundImage ? { '--hf-auth-image': `url(\"${backgroundImage}\")` } as CSSProperties : undefined;\n return <section className={`hf-auth hf-auth--${variant}`} style={style}>\n {brand && <header className=\"hf-auth__brand\">{brand}</header>}\n {aside && <aside className=\"hf-auth__aside\">{aside}</aside>}\n <main className=\"hf-auth__main\">\n {variant === 'step' && <div className=\"hf-auth__steps\" aria-label={`第 ${currentStep} 步,共 ${steps} 步`}>{Array.from({ length: steps }, (_, index) => <span key={index} className={index < currentStep ? 'is-active' : ''} />)}</div>}\n <div className=\"hf-auth__card\">{children}</div>\n {footer && <footer>{footer}</footer>}\n </main>\n </section>;\n}\n","import type { ReactNode } from 'react';\n\nexport interface HeroProps {\n eyebrow?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n primaryAction?: ReactNode;\n secondaryAction?: ReactNode;\n visual?: ReactNode;\n proof?: ReactNode;\n align?: 'left' | 'center';\n kind?: 'product' | 'personal' | 'event' | 'commerce';\n}\n\nexport function Hero({ eyebrow, title, description, primaryAction, secondaryAction, visual, proof, align = 'left', kind = 'product' }: HeroProps) {\n return <section className={`hf-hero hf-hero--${align} hf-hero--${kind}`}>\n <div className=\"hf-hero__content\">{eyebrow && <div className=\"hf-hero__eyebrow\">{eyebrow}</div>}<h1>{title}</h1>{description && <p>{description}</p>}{(primaryAction || secondaryAction) && <div className=\"hf-hero__actions\">{primaryAction}{secondaryAction}</div>}{proof && <div className=\"hf-hero__proof\">{proof}</div>}</div>\n {visual && <div className=\"hf-hero__visual\">{visual}</div>}\n </section>;\n}\n","import { useState, type PointerEvent, type ReactNode } from 'react';\nexport interface ResizablePanelProps { primary: ReactNode; secondary: ReactNode; defaultSize?: number; minSize?: number; maxSize?: number; direction?: 'horizontal' | 'vertical'; onResize?: (size: number) => void }\nexport function ResizablePanel({ primary, secondary, defaultSize = 50, minSize = 20, maxSize = 80, direction = 'horizontal', onResize }: ResizablePanelProps) { const [size, setSize] = useState(defaultSize); const start = (event: PointerEvent<HTMLDivElement>) => { const root = event.currentTarget.parentElement!; event.currentTarget.setPointerCapture(event.pointerId); const move = (next: globalThis.PointerEvent) => { const rect = root.getBoundingClientRect(); const raw = direction === 'horizontal' ? (next.clientX - rect.left) / rect.width * 100 : (next.clientY - rect.top) / rect.height * 100; const value = Math.min(maxSize, Math.max(minSize, raw)); setSize(value); onResize?.(value); }; const end = () => { document.removeEventListener('pointermove', move); document.removeEventListener('pointerup', end); }; document.addEventListener('pointermove', move); document.addEventListener('pointerup', end); }; return <div className={`hf-resizable hf-resizable--${direction}`}><div style={{ flexBasis: `${size}%` }}>{primary}</div><div className=\"hf-resizable__handle\" role=\"separator\" aria-orientation={direction} aria-valuemin={minSize} aria-valuemax={maxSize} aria-valuenow={Math.round(size)} tabIndex={0} onPointerDown={start} onKeyDown={(event) => { if (!['ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(event.key)) return; event.preventDefault(); const grow = event.key === 'ArrowRight' || event.key === 'ArrowDown'; const value = Math.min(maxSize, Math.max(minSize, size + (grow ? 2 : -2))); setSize(value); onResize?.(value); }} /><div>{secondary}</div></div>; }\n","import type { ReactNode } from 'react';\nimport { Notification, type NotificationProps } from './Essentials';\nexport interface NotificationItem extends Omit<NotificationProps, 'onClose'> { key: string; content?: ReactNode }\nexport interface NotificationCenterProps { items: readonly NotificationItem[]; onRead?: (key: string) => void; onDismiss?: (key: string) => void; onReadAll?: () => void; empty?: ReactNode; title?: ReactNode }\nexport function NotificationCenter({ items, onRead, onDismiss, onReadAll, empty = '暂无通知', title = '通知中心' }: NotificationCenterProps) { const unread = items.filter((item) => item.unread).length; return <section className=\"hf-notification-center\"><header><div><strong>{title}</strong>{unread > 0 && <span>{unread}</span>}</div>{unread > 0 && onReadAll && <button type=\"button\" onClick={onReadAll}>全部已读</button>}</header><div>{items.length ? items.map(({ key, content, ...item }) => <div key={key} onClick={() => item.unread && onRead?.(key)}><Notification {...item} onClose={onDismiss ? () => onDismiss(key) : undefined}>{content}</Notification></div>) : <p className=\"hf-notification-center__empty\">{empty}</p>}</div></section>; }\n","import { useState, type ReactNode } from 'react';\nexport interface VirtualListProps<T> { items: readonly T[]; itemHeight: number; height: number; renderItem: (item: T, index: number) => ReactNode; itemKey: (item: T, index: number) => string | number; overscan?: number; label?: string }\nexport function VirtualList<T>({ items, itemHeight, height, renderItem, itemKey, overscan = 3, label = '虚拟列表' }: VirtualListProps<T>) { const [scrollTop, setScrollTop] = useState(0); const start = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan); const end = Math.min(items.length, Math.ceil((scrollTop + height) / itemHeight) + overscan); return <div className=\"hf-virtual-list\" role=\"list\" aria-label={label} style={{ height }} onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}><div style={{ height: items.length * itemHeight, position: 'relative' }}>{items.slice(start, end).map((item, offset) => { const index = start + offset; return <div role=\"listitem\" key={itemKey(item, index)} style={{ height: itemHeight, left: 0, position: 'absolute', right: 0, top: index * itemHeight }}>{renderItem(item, index)}</div>; })}</div></div>; }\n","import { useState, type ReactNode } from 'react';\n\nexport interface JsonViewerProps { data: unknown; name?: string; defaultExpanded?: boolean; maxDepth?: number }\nfunction JsonNode({ name, value, depth, defaultExpanded, maxDepth }: { name?: string; value: unknown; depth: number; defaultExpanded: boolean; maxDepth: number }) { const complex = value !== null && typeof value === 'object'; const [open, setOpen] = useState(defaultExpanded && depth < maxDepth); if (!complex) return <div className=\"hf-json-viewer__row\"><span>{name !== undefined && `${name}: `}</span><code className={`is-${value === null ? 'null' : typeof value}`}>{value === null ? 'null' : JSON.stringify(value)}</code></div>; const entries = Object.entries(value as Record<string, unknown>); return <div className=\"hf-json-viewer__node\"><button type=\"button\" aria-expanded={open} onClick={() => setOpen(!open)}><span>{open ? '⌄' : '›'}</span><strong>{name ?? (Array.isArray(value) ? 'Array' : 'Object')}</strong><small>{Array.isArray(value) ? `[${entries.length}]` : `{${entries.length}}`}</small></button>{open && <div>{entries.map(([key, item]) => <JsonNode key={key} name={key} value={item} depth={depth + 1} defaultExpanded={defaultExpanded} maxDepth={maxDepth} />)}</div>}</div>; }\nexport function JsonViewer({ data, name, defaultExpanded = true, maxDepth = 2 }: JsonViewerProps) { return <div className=\"hf-json-viewer\" role=\"tree\" aria-label={name ?? 'JSON 查看器'}><JsonNode name={name} value={data} depth={0} defaultExpanded={defaultExpanded} maxDepth={maxDepth} /></div>; }\n\nexport interface DiffViewerProps { before: string; after: string; beforeLabel?: string; afterLabel?: string; mode?: 'split' | 'unified' }\ntype DiffLine = { kind: 'same' | 'add' | 'remove'; left?: string; right?: string; leftNo?: number; rightNo?: number };\nfunction compareLines(before: string, after: string): DiffLine[] { const a = before.split('\\n'), b = after.split('\\n'), matrix = Array.from({ length: a.length + 1 }, () => Array<number>(b.length + 1).fill(0)); for (let i = a.length - 1; i >= 0; i--) for (let j = b.length - 1; j >= 0; j--) matrix[i]![j] = a[i] === b[j] ? matrix[i + 1]![j + 1]! + 1 : Math.max(matrix[i + 1]![j]!, matrix[i]![j + 1]!); const rows: DiffLine[] = []; let i = 0, j = 0, leftNo = 1, rightNo = 1; while (i < a.length || j < b.length) { if (i < a.length && j < b.length && a[i] === b[j]) { rows.push({ kind: 'same', left: a[i++], right: b[j++], leftNo: leftNo++, rightNo: rightNo++ }); } else if (j < b.length && (i === a.length || matrix[i]![j + 1]! >= matrix[i + 1]![j]!)) { rows.push({ kind: 'add', right: b[j++], rightNo: rightNo++ }); } else { rows.push({ kind: 'remove', left: a[i++], leftNo: leftNo++ }); } } return rows; }\nfunction DiffCell({ number, marker, children }: { number?: number; marker: string; children?: ReactNode }) { return <div className=\"hf-diff-viewer__cell\"><span>{number ?? ''}</span><i>{marker}</i><code>{children ?? ''}</code></div>; }\nexport function DiffViewer({ before, after, beforeLabel = '修改前', afterLabel = '修改后', mode = 'split' }: DiffViewerProps) { const rows = compareLines(before, after); return <div className={`hf-diff-viewer hf-diff-viewer--${mode}`}><header><strong>{beforeLabel}</strong>{mode === 'split' && <strong>{afterLabel}</strong>}</header><div>{rows.map((row, index) => mode === 'split' ? <div className={`is-${row.kind}`} key={index}><DiffCell number={row.leftNo} marker={row.kind === 'remove' ? '−' : ' '}>{row.left}</DiffCell><DiffCell number={row.rightNo} marker={row.kind === 'add' ? '+' : ' '}>{row.right}</DiffCell></div> : <div className={`is-${row.kind}`} key={index}><DiffCell number={row.leftNo ?? row.rightNo} marker={row.kind === 'add' ? '+' : row.kind === 'remove' ? '−' : ' '}>{row.kind === 'add' ? row.right : row.left}</DiffCell></div>)}</div></div>; }\n","export interface QueryField { key: string; label: string; type?: 'text' | 'number' | 'date'; operators?: readonly QueryOperator[] }\nexport interface QueryOperator { value: string; label: string }\nexport interface QueryRule { id: string; field: string; operator: string; value: string }\nexport interface QueryBuilderProps { fields: readonly QueryField[]; rules: readonly QueryRule[]; onChange: (rules: QueryRule[]) => void; conjunction?: 'and' | 'or'; onConjunctionChange?: (value: 'and' | 'or') => void; disabled?: boolean }\nconst defaultOperators: readonly QueryOperator[] = [{ value: 'equals', label: '等于' }, { value: 'notEquals', label: '不等于' }, { value: 'contains', label: '包含' }];\nexport function QueryBuilder({ fields, rules, onChange, conjunction = 'and', onConjunctionChange, disabled }: QueryBuilderProps) { const update = (id: string, patch: Partial<QueryRule>) => onChange(rules.map((rule) => rule.id === id ? { ...rule, ...patch } : rule)); const add = () => { const field = fields[0]; if (!field) return; const operator = (field.operators ?? defaultOperators)[0]?.value ?? 'equals'; onChange([...rules, { id: `rule-${Date.now()}`, field: field.key, operator, value: '' }]); }; return <div className=\"hf-query-builder\"><header><strong>满足</strong><Select className=\"hf-query-builder__select\" aria-label=\"条件关系\" value={conjunction} disabled={disabled} options={[{ value: 'and', label: '全部条件' }, { value: 'or', label: '任一条件' }]} onChange={(event) => onConjunctionChange?.(event.target.value as 'and' | 'or')} /></header><div>{rules.map((rule, index) => { const field = fields.find((item) => item.key === rule.field) ?? fields[0]; const operators = field?.operators ?? defaultOperators; return <div className=\"hf-query-builder__rule\" key={rule.id}><span>{index + 1}</span><Select className=\"hf-query-builder__select\" aria-label={`条件 ${index + 1} 字段`} value={rule.field} disabled={disabled} options={fields.map((item) => ({ value: item.key, label: item.label }))} onChange={(event) => { const next = fields.find((item) => item.key === event.target.value)!; update(rule.id, { field: next.key, operator: (next.operators ?? defaultOperators)[0]?.value ?? 'equals', value: '' }); }} /><Select className=\"hf-query-builder__select\" aria-label={`条件 ${index + 1} 运算符`} value={rule.operator} disabled={disabled} options={operators} onChange={(event) => update(rule.id, { operator: event.target.value })} /><input aria-label={`条件 ${index + 1} 值`} type={field?.type ?? 'text'} value={rule.value} disabled={disabled} onChange={(event) => update(rule.id, { value: event.target.value })} /><button type=\"button\" aria-label={`删除条件 ${index + 1}`} disabled={disabled} onClick={() => onChange(rules.filter((item) => item.id !== rule.id))}><Icon name=\"close\" size={15} /></button></div>; })}</div><button type=\"button\" className=\"hf-query-builder__add\" disabled={disabled || !fields.length} onClick={add}>+ 添加条件</button></div>; }\nimport { Select } from './Select';\nimport { Icon } from '../foundations/Icon';\n","import { useMemo, type ReactNode } from 'react';\nimport { KanbanBoardView } from './KanbanBoardView';\n\nexport interface FlowNode { id: string; label: ReactNode; x: number; y: number; status?: 'default' | 'active' | 'success' | 'warning'; description?: ReactNode }\nexport interface FlowEdge { id?: string; from: string; to: string; label?: string }\nexport interface FlowCanvasProps { nodes: readonly FlowNode[]; edges: readonly FlowEdge[]; width?: number; height?: number; selectedId?: string; onSelect?: (id: string) => void; empty?: ReactNode }\nexport function FlowCanvas({ nodes, edges, width = 900, height = 420, selectedId, onSelect, empty = '暂无流程节点' }: FlowCanvasProps) { const map = new Map(nodes.map((node) => [node.id, node])); if (!nodes.length) return <div className=\"hf-flow-canvas hf-flow-canvas__empty\">{empty}</div>; return <div className=\"hf-flow-canvas\" role=\"group\" aria-label=\"流程画布\"><div style={{ width, height }}><svg viewBox={`0 0 ${width} ${height}`} aria-hidden=\"true\">{edges.map((edge, index) => { const from = map.get(edge.from), to = map.get(edge.to); if (!from || !to) return null; const x1 = from.x + 82, y1 = from.y + 28, x2 = to.x, y2 = to.y + 28, bend = Math.max(30, Math.abs(x2 - x1) / 2); return <g key={edge.id ?? index}><path d={`M${x1} ${y1} C${x1 + bend} ${y1},${x2 - bend} ${y2},${x2} ${y2}`} /><circle cx={x2} cy={y2} r=\"3\" />{edge.label && <text x={(x1 + x2) / 2} y={(y1 + y2) / 2 - 8}>{edge.label}</text>}</g>; })}</svg>{nodes.map((node) => <button type=\"button\" key={node.id} className={`hf-flow-canvas__node is-${node.status ?? 'default'}${selectedId === node.id ? ' is-selected' : ''}`} style={{ left: node.x, top: node.y }} aria-pressed={selectedId === node.id} onClick={() => onSelect?.(node.id)}><strong>{node.label}</strong>{node.description && <small>{node.description}</small>}</button>)}</div></div>; }\n\nexport interface KanbanCard { id: string; title: ReactNode; description?: ReactNode; meta?: ReactNode; tags?: readonly string[] }\nexport interface KanbanColumn { id: string; title: ReactNode; cards: readonly KanbanCard[]; limit?: number; accent?: string }\nexport interface KanbanBoardProps { columns: readonly KanbanColumn[]; onMove?: (cardId: string, fromColumnId: string, toColumnId: string) => void; onCardClick?: (cardId: string, columnId: string) => void; empty?: ReactNode }\nexport function KanbanBoard({ columns, onMove, onCardClick, empty = '暂无看板列' }: KanbanBoardProps) { return <KanbanBoardView columns={columns} onMove={onMove} onCardClick={onCardClick} empty={empty} />; }\n\nexport interface GanttTask { id: string; label: ReactNode; start: string | Date; end: string | Date; progress?: number; group?: string; color?: string }\nexport interface GanttChartProps { tasks: readonly GanttTask[]; start?: string | Date; end?: string | Date; onTaskClick?: (id: string) => void; empty?: ReactNode }\nconst day = 86400000; const toTime = (value: string | Date) => new Date(value).setHours(0, 0, 0, 0);\nexport function GanttChart({ tasks, start, end, onTaskClick, empty = '暂无排期任务' }: GanttChartProps) { const range = useMemo(() => { const starts = tasks.map((task) => toTime(task.start)), ends = tasks.map((task) => toTime(task.end)); const from = start ? toTime(start) : Math.min(...starts), to = end ? toTime(end) : Math.max(...ends); return { from, days: Math.max(1, Math.round((to - from) / day) + 1) }; }, [tasks, start, end]); if (!tasks.length) return <div className=\"hf-gantt-chart__empty\">{empty}</div>; return <div className=\"hf-gantt-chart\"><header><strong>任务</strong><div>{Array.from({ length: Math.min(range.days, 31) }, (_, index) => <span key={index}>{new Date(range.from + index * day).getDate()}</span>)}</div></header>{tasks.map((task) => { const offset = Math.max(0, (toTime(task.start) - range.from) / day), length = Math.max(1, (toTime(task.end) - toTime(task.start)) / day + 1); return <div className=\"hf-gantt-chart__row\" key={task.id}><span><strong>{task.label}</strong>{task.group && <small>{task.group}</small>}</span><div><button type=\"button\" style={{ left: `${offset / range.days * 100}%`, width: `${length / range.days * 100}%`, '--hf-gantt-color': task.color } as React.CSSProperties} onClick={() => onTaskClick?.(task.id)}><i style={{ width: `${Math.max(0, Math.min(100, task.progress ?? 0))}%` }} /><span>{task.progress ?? 0}%</span></button></div></div>; })}</div>; }\n\nexport interface ChartLegendItem { label: ReactNode; color: string; value?: ReactNode }\nexport interface ChartContainerProps { title?: ReactNode; description?: ReactNode; actions?: ReactNode; legend?: readonly ChartLegendItem[]; children: ReactNode; height?: number; loading?: boolean; empty?: boolean; emptyContent?: ReactNode }\nexport function ChartContainer({ title, description, actions, legend, children, height = 320, loading, empty, emptyContent = '暂无图表数据' }: ChartContainerProps) { return <section className=\"hf-chart-container\"><header><div>{title && <strong>{title}</strong>}{description && <p>{description}</p>}</div>{actions}</header>{legend?.length ? <div className=\"hf-chart-container__legend\">{legend.map((item, index) => <span key={index}><i style={{ background: item.color }} />{item.label}{item.value && <strong>{item.value}</strong>}</span>)}</div> : null}<div className=\"hf-chart-container__body\" style={{ height }}>{loading ? <div className=\"hf-chart-container__state\"><span className=\"hf-spinner\" />正在加载图表</div> : empty ? <div className=\"hf-chart-container__state\">{emptyContent}</div> : children}</div></section>; }\n\nexport interface PivotValue<T> { key: string; label: ReactNode; value: (item: T) => number; aggregate?: 'sum' | 'average' | 'count'; format?: (value: number) => ReactNode }\nexport interface PivotTableProps<T> { data: readonly T[]; row: (item: T) => string; column: (item: T) => string; values: readonly PivotValue<T>[]; rowLabel?: ReactNode; showTotals?: boolean; empty?: ReactNode }\nexport function PivotTable<T>({ data, row, column, values, rowLabel = '项目', showTotals = true, empty = '暂无透视数据' }: PivotTableProps<T>) { const rows = [...new Set(data.map(row))], columns = [...new Set(data.map(column))]; const calculate = (items: readonly T[], metric: PivotValue<T>) => { if (metric.aggregate === 'count') return items.length; const sum = items.reduce((total, item) => total + metric.value(item), 0); return metric.aggregate === 'average' ? (items.length ? sum / items.length : 0) : sum; }; if (!data.length || !values.length) return <div className=\"hf-pivot-table__empty\">{empty}</div>; return <div className=\"hf-pivot-table\"><table><thead><tr><th rowSpan={2}>{rowLabel}</th>{columns.map((item) => <th colSpan={values.length} key={item}>{item}</th>)}{showTotals && <th colSpan={values.length}>合计</th>}</tr><tr>{[...columns, ...(showTotals ? ['__total'] : [])].flatMap((col) => values.map((metric) => <th key={`${col}-${metric.key}`}>{metric.label}</th>))}</tr></thead><tbody>{rows.map((rowName) => <tr key={rowName}><th>{rowName}</th>{[...columns, ...(showTotals ? ['__total'] : [])].flatMap((columnName) => values.map((metric) => { const items = data.filter((item) => row(item) === rowName && (columnName === '__total' || column(item) === columnName)); const result = calculate(items, metric); return <td key={`${columnName}-${metric.key}`}>{metric.format?.(result) ?? result}</td>; }))}</tr>)}</tbody></table></div>; }\n","import { useRef, useState, type PointerEvent } from 'react';\nimport type { KanbanBoardProps } from './WorkflowViews';\n\ntype Session = { id: string; from: string; snapshot: string; pointer?: number; x: number; y: number; moved: boolean };\n\nexport function useKanbanMove({ columns, onMove }: KanbanBoardProps) {\n const root = useRef<HTMLDivElement>(null);\n const session = useRef<Session | null>(null);\n const [target, setTarget] = useState<string | null>(null);\n const [announcement, setAnnouncement] = useState('');\n const snapshot = JSON.stringify(columns.map((column) => [column.id, column.cards.map((card) => card.id)]));\n function cancel() {\n if (session.current) setAnnouncement('已取消移动,未提交更改');\n session.current = null;\n setTarget(null);\n }\n function request(id: string, from: string, to: string) {\n const source = columns.find((column) => column.id === from);\n const destination = columns.find((column) => column.id === to);\n if (!onMove || from === to || !source?.cards.some((card) => card.id === id) || !destination) return;\n onMove(id, from, to);\n setAnnouncement('已请求移动卡片,请以更新后的列内容为准');\n root.current?.focus();\n }\n function atPoint(event: PointerEvent) {\n const node = document.elementFromPoint(event.clientX, event.clientY)?.closest<HTMLElement>('[data-hf-kanban-column]');\n return node?.closest('[data-hf-kanban-root]') === root.current ? node?.dataset.hfKanbanColumn ?? null : null;\n }\n function begin(id: string, from: string) {\n session.current = { id, from, snapshot, x: 0, y: 0, moved: false };\n }\n function start(event: PointerEvent<HTMLButtonElement>, id: string, from: string) {\n if (!onMove || event.button !== 0 || !event.isPrimary) return;\n event.currentTarget.focus();\n event.currentTarget.setPointerCapture(event.pointerId);\n session.current = { id, from, snapshot, pointer: event.pointerId, x: event.clientX, y: event.clientY, moved: false };\n }\n function move(event: PointerEvent<HTMLButtonElement>) {\n const current = session.current;\n if (!current || current.pointer !== event.pointerId) return;\n if (!onMove || current.snapshot !== snapshot) { cancel(); return; }\n if (!current.moved && Math.hypot(event.clientX - current.x, event.clientY - current.y) < 5) return;\n current.moved = true;\n const column = atPoint(event);\n setTarget(column !== current.from ? column : null);\n }\n function drop(to: string | null) {\n const current = session.current;\n if (!current || !to || current.snapshot !== snapshot || !onMove) { cancel(); return; }\n session.current = null;\n setTarget(null);\n request(current.id, current.from, to);\n }\n function finish(event: PointerEvent<HTMLButtonElement>) {\n const current = session.current;\n if (!current || current.pointer !== event.pointerId) return;\n if (current.moved) drop(atPoint(event)); else cancel();\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);\n }\n function previewNative(to: string) {\n if (session.current && session.current.pointer === undefined && session.current.from !== to) setTarget(to);\n }\n return { root, target, announcement, cancel, request, start, move, finish, begin, drop, previewNative };\n}\n","import type { CSSProperties } from 'react';\nimport type { KanbanBoardProps } from './WorkflowViews';\nimport { useKanbanMove } from './useKanbanMove';\n\n/** 私有视图:公开类型和入口仍保留在WorkflowViews,避免破坏原有导入路径。 */\nexport function KanbanBoardView({ columns, onMove, onCardClick, empty }: KanbanBoardProps) {\n const drag = useKanbanMove({ columns, onMove });\n if (!columns.length) return <div className=\"hf-kanban-board__empty\">{empty}</div>;\n return <div className=\"hf-kanban-enhanced\">\n {onMove && <p className=\"hf-kanban-enhanced__hint\">拖动手柄跨列移动,也可选择目标列。Escape 取消拖动。</p>}\n <div ref={drag.root} className=\"hf-kanban-board\" role=\"group\" aria-label=\"看板\" tabIndex={-1}\n data-hf-kanban-root onKeyDown={(event) => { if (event.key === 'Escape') drag.cancel(); }}>\n {columns.map((column) => <section key={column.id} data-hf-kanban-column={column.id}\n data-drop-target={drag.target === column.id} style={{ '--hf-kanban-accent': column.accent } as CSSProperties}\n onDragOver={(event) => { event.preventDefault(); drag.previewNative(column.id); }}\n onDrop={(event) => { event.preventDefault(); drag.drop(column.id); }}>\n <header><strong>{column.title}</strong><span>{column.cards.length}{column.limit ? ` / ${column.limit}` : ''}</span></header>\n <div>{column.cards.map((card, index) => {\n const label = typeof card.title === 'string' ? card.title : `卡片${index + 1}`;\n return <div className=\"hf-kanban-enhanced__item\" key={card.id} data-card-id={card.id}>\n <button type=\"button\" draggable={Boolean(onMove)} className=\"hf-kanban-card\"\n onDragStart={(event) => {\n if (!onMove) { event.preventDefault(); return; }\n drag.begin(card.id, column.id);\n event.dataTransfer.setData('application/x-hf-card', card.id);\n event.dataTransfer.setData('application/x-hf-column', column.id);\n }} onDragEnd={drag.cancel} onClick={() => onCardClick?.(card.id, column.id)}>\n <strong>{card.title}</strong>{card.description && <p>{card.description}</p>}\n {card.tags?.length ? <span>{card.tags.map((tag) => <i key={tag}>{tag}</i>)}</span> : null}\n {card.meta && <small>{card.meta}</small>}\n </button>\n {onMove && <div className=\"hf-kanban-enhanced__controls\">\n <button type=\"button\" className=\"hf-kanban-enhanced__handle\" aria-label={`拖动${label}`}\n onPointerDown={(event) => drag.start(event, card.id, column.id)} onPointerMove={drag.move}\n onPointerUp={drag.finish} onPointerCancel={drag.cancel} onLostPointerCapture={drag.cancel}>↔</button>\n <select aria-label={`移动${label}到`} value=\"\" onChange={(event) => {\n drag.cancel();\n drag.request(card.id, column.id, event.target.value);\n }}>\n <option value=\"\" disabled>移动到…</option>\n {columns.filter((candidate) => candidate.id !== column.id).map((candidate, destinationIndex) =>\n <option key={candidate.id} value={candidate.id}>{typeof candidate.title === 'string' ? candidate.title : `目标列${destinationIndex + 1}`}</option>)}\n </select>\n </div>}\n </div>;\n })}{!column.cards.length && <p className=\"hf-kanban-enhanced__empty\">暂无卡片{onMove ? ',可拖入此列' : ''}</p>}</div>\n </section>)}\n </div>\n <span className=\"hf-sr-only\" role=\"status\">{drag.announcement}</span>\n </div>;\n}\n","export interface FilterOption { value: string; label: string }\nexport interface FilterField { key: string; label: string; options?: readonly FilterOption[]; type?: 'text' | 'number' | 'date' }\nexport interface FilterValue { id: string; field: string; value: string }\nexport interface FilterBuilderProps { fields: readonly FilterField[]; value: readonly FilterValue[]; onChange: (value: FilterValue[]) => void; disabled?: boolean; addLabel?: string }\nexport function FilterBuilder({ fields, value, onChange, disabled, addLabel = '添加筛选' }: FilterBuilderProps) { const add = () => { const field = fields.find((item) => !value.some((filter) => filter.field === item.key)) ?? fields[0]; if (field) onChange([...value, { id: `filter-${Date.now()}`, field: field.key, value: '' }]); }; const update = (id: string, patch: Partial<FilterValue>) => onChange(value.map((item) => item.id === id ? { ...item, ...patch } : item)); return <div className=\"hf-filter-builder\" role=\"group\" aria-label=\"筛选条件\"><div>{value.map((filter, index) => { const field = fields.find((item) => item.key === filter.field) ?? fields[0]; return <div className=\"hf-filter-builder__item\" key={filter.id}><Select className=\"hf-filter-builder__select\" aria-label={`筛选 ${index + 1} 字段`} value={filter.field} disabled={disabled} options={fields.map((item) => ({ value: item.key, label: item.label }))} onChange={(event) => update(filter.id, { field: event.target.value, value: '' })} />{field?.options ? <Select className=\"hf-filter-builder__select\" aria-label={`筛选 ${index + 1} 值`} value={filter.value} placeholder=\"请选择\" disabled={disabled} options={field.options} onChange={(event) => update(filter.id, { value: event.target.value })} /> : <input aria-label={`筛选 ${index + 1} 值`} type={field?.type ?? 'text'} value={filter.value} disabled={disabled} onChange={(event) => update(filter.id, { value: event.target.value })} />}<button type=\"button\" aria-label={`删除筛选 ${index + 1}`} disabled={disabled} onClick={() => onChange(value.filter((item) => item.id !== filter.id))}><Icon name=\"close\" size={15} /></button></div>; })}</div><button type=\"button\" className=\"hf-filter-builder__add\" disabled={disabled || !fields.length} onClick={add}>+ {addLabel}</button>{value.length > 0 && <button type=\"button\" className=\"hf-filter-builder__clear\" disabled={disabled} onClick={() => onChange([])}>清空</button>}</div>; }\nimport { Select } from './Select';\nimport { Icon } from '../foundations/Icon';\n","import { useMemo, useState } from 'react';\nimport { Button } from '../components/Button';\nimport { ChartCrosshair, type CrosshairPoint } from './ChartCrosshair';\nimport { RangeBrush } from './RangeBrush';\n\nexport interface ZoomableChartProps {\n points: readonly CrosshairPoint[];\n label?: string;\n window?: readonly [number, number];\n defaultWindow?: readonly [number, number];\n onWindowChange?: (window: [number, number]) => void;\n formatValue?: (value: number) => string;\n disabled?: boolean;\n className?: string;\n}\n\nfunction normalizeWindow(value: readonly [number, number], length: number): [number, number] {\n const last = Math.max(0, length - 1);\n const clamp = (number: number, fallback: number) => Number.isFinite(number) ? Math.max(0, Math.min(last, Math.round(number))) : fallback;\n let start = clamp(value[0], 0);\n let end = clamp(value[1], last);\n if (start > end) [start, end] = [end, start];\n if (start === end && length > 1) { if (end < last) end++; else start--; }\n return [start, end];\n}\n\nexport function ZoomableChart({ points, label = '趋势缩放', window: controlled, defaultWindow,\n onWindowChange, formatValue, disabled = false, className = '' }: ZoomableChartProps) {\n const [internal, setInternal] = useState<readonly [number, number] | undefined>(defaultWindow);\n const [start, end] = normalizeWindow(controlled ?? internal ?? [0, points.length - 1], points.length);\n const visible = useMemo(() => points.slice(start, end + 1), [points, start, end]);\n const count = end - start + 1;\n function update(next: readonly [number, number]) {\n if (disabled) return;\n const normalized = normalizeWindow(next, points.length);\n if (normalized[0] === start && normalized[1] === end) return;\n if (controlled === undefined) setInternal(normalized);\n onWindowChange?.(normalized);\n }\n function resize(factor: number) {\n const size = Math.max(2, Math.min(points.length, Math.round(count * factor)));\n const left = Math.max(0, Math.min(points.length - size, Math.round((start + end - size + 1) / 2)));\n update([left, left + size - 1]);\n }\n function pan(direction: number) {\n const left = Math.max(0, Math.min(points.length - count, start + direction * Math.max(1, Math.floor(count / 2))));\n update([left, left + count - 1]);\n }\n return <div className={`hf-zoomable-chart ${className}`}>\n <div className=\"hf-zoomable-chart__controls\" role=\"group\" aria-label={`${label}视窗操作`}>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={disabled || count <= 2} onClick={() => resize(.5)}>放大</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={disabled || count >= points.length} onClick={() => resize(2)}>缩小</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={disabled || start === 0} onClick={() => pan(-1)}>向前平移</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={disabled || end >= points.length - 1} onClick={() => pan(1)}>向后平移</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={disabled || count >= points.length}\n onClick={() => update([0, points.length - 1])}>还原全部</Button>\n </div>\n <ChartCrosshair points={visible} label={label} formatValue={formatValue} disabled={disabled} />\n {points.length > 1 && <RangeBrush label=\"可见数据范围\" min={0} max={points.length - 1} value={[start, end]}\n disabled={disabled} onValueChange={update} formatValue={(index) => points[index]?.label ?? String(index)} />}\n <p className=\"hf-zoomable-chart__summary\" role=\"status\">{points.length ? `显示第${start + 1}—${end + 1}点,共${points.length}点` : '没有可缩放的数据'}</p>\n </div>;\n}\n","import { useId } from 'react';\nimport { Button } from '../components/Button';\nimport { useHoldConfirmation } from './useHoldConfirmation';\nimport { ConfirmationAlternative } from './ConfirmationAlternative';\n\nexport interface HoldToConfirmProps {\n actionKey: string;\n label: string;\n onConfirm: () => void;\n duration?: number;\n disabled?: boolean;\n loading?: boolean;\n error?: string;\n className?: string;\n}\n\nexport function HoldToConfirm({ actionKey, label, onConfirm, duration = 1500,\n disabled = false, loading = false, error, className = '' }: HoldToConfirmProps) {\n const milliseconds = Number.isFinite(duration) ? Math.max(500, Math.min(10000, duration)) : 1500;\n const blocked = disabled || loading;\n const hold = useHoldConfirmation({ actionKey, duration: milliseconds, blocked, onConfirm });\n const hintId = useId();\n\n return <div className={`hf-hold-confirm ${className}`}>\n <p id={hintId} className=\"hf-confirm-hint\">按住{milliseconds / 1000}秒发出确认请求,提前松开可取消。</p>\n <Button type=\"button\" fullWidth disabled={blocked} aria-describedby={hintId}\n className=\"hf-hold-confirm__button\" onClick={(event) => event.preventDefault()}\n onPointerDown={(event) => {\n if (event.button !== 0 || !event.isPrimary) return;\n event.currentTarget.focus();\n event.currentTarget.setPointerCapture(event.pointerId);\n hold.start(`pointer:${event.pointerId}`);\n }} onPointerMove={(event) => {\n const box = event.currentTarget.getBoundingClientRect();\n if (event.clientX < box.left || event.clientX > box.right || event.clientY < box.top || event.clientY > box.bottom) hold.cancel();\n }} onPointerUp={(event) => hold.release(`pointer:${event.pointerId}`)}\n onPointerCancel={hold.cancel} onLostPointerCapture={hold.cancel} onBlur={hold.cancel}\n onContextMenu={(event) => event.preventDefault()}\n onKeyDown={(event) => {\n if (event.key !== ' ' && event.key !== 'Enter') return;\n event.preventDefault();\n if (!event.repeat) hold.start(`key:${event.key}`);\n }} onKeyUp={(event) => {\n if (event.key !== ' ' && event.key !== 'Enter') return;\n event.preventDefault();\n hold.release(`key:${event.key}`);\n }}>{loading ? '正在处理请求' : label}</Button>\n <div className=\"hf-hold-confirm__track\" aria-hidden=\"true\">\n <span style={{ width: `${hold.progress * 100}%` }} />\n </div>\n <ConfirmationAlternative key={JSON.stringify([actionKey, milliseconds, blocked])} label={label}\n blocked={blocked} onOpen={hold.cancel} onConfirm={onConfirm} />\n <p className=\"hf-confirm-hint\" role=\"status\">{hold.message}</p>\n {error && <p className=\"hf-confirm-error hf-tone--danger\" role=\"alert\">{error}</p>}\n </div>;\n}\n","import { useEffect, useRef, useState } from 'react';\n\ninterface HoldOptions {\n actionKey: string;\n duration: number;\n blocked: boolean;\n onConfirm: () => void;\n}\n\ninterface HoldSession {\n source: string;\n started: number;\n actionKey: string;\n duration: number;\n requested: boolean;\n}\n\n/** 仅管理一次按住意图;业务结果与数据修改始终由调用方负责。 */\nexport function useHoldConfirmation(options: HoldOptions) {\n const latest = useRef(options);\n latest.current = options;\n const session = useRef<HoldSession | null>(null);\n const frame = useRef<number | undefined>(undefined);\n const [progress, setProgress] = useState(0);\n const [message, setMessage] = useState('');\n\n function stopFrame() {\n if (frame.current !== undefined) cancelAnimationFrame(frame.current);\n frame.current = undefined;\n }\n\n function cancel() {\n stopFrame();\n if (session.current && !session.current.requested) setMessage('已取消,未发出确认请求');\n session.current = null;\n setProgress(0);\n }\n\n function tick(now: number) {\n const current = session.current;\n const config = latest.current;\n if (!current || current.requested) return;\n if (config.blocked || document.hidden || current.actionKey !== config.actionKey || current.duration !== config.duration) {\n cancel();\n return;\n }\n const next = Math.min(1, (now - current.started) / current.duration);\n setProgress(next);\n if (next < 1) {\n frame.current = requestAnimationFrame(tick);\n return;\n }\n frame.current = undefined;\n current.requested = true;\n setMessage('已发出确认请求,请等待操作结果');\n config.onConfirm();\n }\n\n function start(source: string) {\n if (latest.current.blocked || session.current || document.hidden) return;\n session.current = { source, started: performance.now(), actionKey: latest.current.actionKey,\n duration: latest.current.duration, requested: false };\n setMessage('保持按住,松开可取消');\n setProgress(0);\n frame.current = requestAnimationFrame(tick);\n }\n\n function release(source: string) {\n if (session.current?.source === source) cancel();\n }\n\n useEffect(() => {\n cancel();\n }, [options.actionKey, options.duration, options.blocked]);\n\n useEffect(() => {\n const hide = () => { if (document.hidden) cancel(); };\n const escape = (event: KeyboardEvent) => { if (event.key === 'Escape') cancel(); };\n document.addEventListener('visibilitychange', hide);\n document.addEventListener('keydown', escape);\n window.addEventListener('blur', cancel);\n return () => {\n stopFrame();\n session.current = null;\n document.removeEventListener('visibilitychange', hide);\n document.removeEventListener('keydown', escape);\n window.removeEventListener('blur', cancel);\n };\n }, []);\n\n return { progress, message, start, release, cancel };\n}\n","import { useEffect, useId, useRef, useState } from 'react';\nimport { Button } from '../components/Button';\n\ninterface AlternativeProps {\n label: string;\n blocked: boolean;\n onOpen: () => void;\n onConfirm: () => void;\n}\n\n/** 无时间限制的显式二次确认,供不能持续按住的用户使用。 */\nexport function ConfirmationAlternative({ label, blocked, onOpen, onConfirm }: AlternativeProps) {\n const [open, setOpen] = useState(false);\n const [requested, setRequested] = useState(false);\n const requestedRef = useRef(false);\n const trigger = useRef<HTMLButtonElement>(null);\n const confirm = useRef<HTMLButtonElement>(null);\n const id = useId();\n\n function close() {\n setOpen(false);\n trigger.current?.focus();\n }\n\n function toggle() {\n if (open) { close(); return; }\n onOpen();\n requestedRef.current = false;\n setRequested(false);\n setOpen(true);\n }\n\n function request() {\n if (blocked || requestedRef.current) return;\n requestedRef.current = true;\n setRequested(true);\n onConfirm();\n }\n\n useEffect(() => {\n if (open) confirm.current?.focus();\n }, [open]);\n\n return <div>\n <Button type=\"button\" ref={trigger} variant=\"quiet\" size=\"sm\" disabled={blocked}\n aria-expanded={open} aria-controls={open ? id : undefined} onClick={toggle}>分步确认(无需长按)</Button>\n {open && <div id={id} className=\"hf-hold-confirm__alternative\" role=\"group\" aria-label=\"分步确认\"\n onKeyDown={(event) => { if (event.key === 'Escape') close(); }}>\n <p>确认执行“{label}”?</p>\n <div className=\"hf-confirm-actions\">\n <Button type=\"button\" variant=\"outline\" onClick={close}>取消</Button>\n <Button type=\"button\" ref={confirm} disabled={blocked || requested} onClick={request}>确认执行</Button>\n </div>\n {requested && <p className=\"hf-confirm-hint\" role=\"status\">已发出确认请求,请等待操作结果</p>}\n </div>}\n </div>;\n}\n","import { useId, useRef, useState } from 'react';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\n\nexport interface TypedConfirmProps {\n actionKey: string;\n confirmationText: string;\n label: string;\n description?: string;\n confirmLabel?: string;\n onConfirm: () => void;\n disabled?: boolean;\n loading?: boolean;\n error?: string;\n className?: string;\n}\n\n/** key隔离不同操作对象,避免前一个对象的确认文字复用到新对象。 */\nexport function TypedConfirm(props: TypedConfirmProps) {\n return <TypedConfirmFields key={JSON.stringify([props.actionKey, props.confirmationText])} {...props} />;\n}\n\nfunction TypedConfirmFields({ confirmationText, label, description, confirmLabel = '确认执行',\n onConfirm, disabled = false, loading = false, error, className = '' }: TypedConfirmProps) {\n const [value, setValue] = useState('');\n const [composing, setComposing] = useState(false);\n const [requested, setRequested] = useState(false);\n const composingRef = useRef(false);\n const valueRef = useRef('');\n const titleId = useId();\n const validTarget = confirmationText.trim().length > 0 && !/[\\r\\n]/.test(confirmationText);\n const blocked = disabled || loading;\n const matches = validTarget && value === confirmationText && !composing;\n\n function confirm() {\n if (blocked || composingRef.current || !validTarget || valueRef.current !== confirmationText) return;\n valueRef.current = '';\n setValue('');\n setRequested(true);\n onConfirm();\n }\n\n return <section className={`hf-typed-confirm ${className}`} aria-labelledby={titleId}>\n <h3 id={titleId}>{label}</h3>\n {description && <p>{description}</p>}\n {validTarget ? <p>输入 <code>{confirmationText}</code> 以确认,需完全一致。</p>\n : <p role=\"alert\" className=\"hf-confirm-error hf-tone--danger\">确认文字不能为空或包含换行,请配置有效的单行内容。</p>}\n <Input label=\"确认文字\" value={value} disabled={blocked || !validTarget} autoComplete=\"off\" spellCheck={false}\n hint=\"区分大小写,保留前后空格。\" onChange={(event) => {\n valueRef.current = event.target.value;\n setValue(event.target.value);\n setRequested(false);\n }} onCompositionStart={() => { composingRef.current = true; setComposing(true); }}\n onCompositionEnd={() => { composingRef.current = false; setComposing(false); }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n if (!event.nativeEvent.isComposing && !event.repeat) confirm();\n }\n }} />\n <Button type=\"button\" disabled={blocked || !matches} onClick={confirm}>{loading ? '正在处理请求' : confirmLabel}</Button>\n <p className=\"hf-confirm-hint\" role=\"status\">{requested ? '已发出确认请求,请等待操作结果' : matches ? '文字已匹配,可以确认' : ''}</p>\n {error && <p className=\"hf-confirm-error hf-tone--danger\" role=\"alert\">{error}</p>}\n </section>;\n}\n","import { useEffect, useId, useRef, useState, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\nimport { useSwipeReveal } from './useSwipeReveal';\n\nexport interface SwipeAction {\n id: string;\n label: string;\n onAction: () => void;\n disabled?: boolean;\n tone?: 'primary' | 'danger';\n}\n\nexport interface SwipeActionsProps {\n actionKey: string;\n label: string;\n children: ReactNode;\n actions: readonly SwipeAction[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function SwipeActions(props: SwipeActionsProps) {\n const identity = JSON.stringify([props.actionKey, props.disabled, props.actions.map(({ id, label, disabled, tone }) => [id, label, disabled, tone])]);\n return <SwipeActionsRow key={identity} {...props} />;\n}\n\nfunction SwipeActionsRow({ label, children, actions, open: controlled, defaultOpen = false,\n onOpenChange, disabled = false, className = '' }: SwipeActionsProps) {\n const [internal, setInternal] = useState(defaultOpen);\n const trigger = useRef<HTMLButtonElement>(null);\n const tools = useRef<HTMLDivElement>(null);\n const id = useId();\n const valid = actions.length > 0 && actions.every((item) => item.id.trim() && item.label.trim())\n && new Set(actions.map((item) => item.id)).size === actions.length;\n const blocked = disabled || !valid;\n const open = !blocked && (controlled ?? internal);\n\n function request(next: boolean) {\n if (blocked || next === open) return;\n if (controlled === undefined) setInternal(next);\n onOpenChange?.(next);\n }\n\n const swipe = useSwipeReveal({ open, disabled: blocked, width: 144, onChange: request });\n\n useEffect(() => {\n if (!open) return;\n const frame = requestAnimationFrame(() => {\n if (document.activeElement === trigger.current) tools.current?.querySelector<HTMLButtonElement>('button:not(:disabled)')?.focus();\n });\n return () => cancelAnimationFrame(frame);\n }, [open]);\n\n function close() {\n swipe.cancel();\n request(false);\n trigger.current?.focus();\n }\n\n function act(action: SwipeAction) {\n if (!open || blocked || action.disabled) return;\n close();\n action.onAction();\n }\n\n return <div className={`hf-swipe-actions ${className}`} onKeyDown={(event) => {\n if (event.key === 'Escape') close();\n }}>\n <div className=\"hf-swipe-actions__viewport\" role=\"group\" aria-label={label} tabIndex={-1}\n onPointerDown={swipe.start} onPointerMove={swipe.move} onPointerUp={swipe.finish}\n onPointerCancel={swipe.cancel} onLostPointerCapture={swipe.cancel}\n onBlur={(event) => { if (!event.currentTarget.contains(event.relatedTarget as Node | null)) swipe.cancel(); }}>\n {open && <div id={id} ref={tools} className=\"hf-swipe-actions__tools\">\n {actions.map((action, index) => <Button key={index} type=\"button\" size=\"sm\"\n disabled={blocked || action.disabled} variant={action.tone === 'danger' ? 'danger' : 'outline'}\n onClick={() => act(action)}>{action.label}</Button>)}\n </div>}\n <div className=\"hf-swipe-actions__content\" inert={open} aria-hidden={open}\n style={{ transform: `translateX(${swipe.offset}px)` }}>{children}</div>\n </div>\n <Button type=\"button\" ref={trigger} variant=\"quiet\" size=\"sm\" disabled={blocked}\n aria-expanded={open} aria-controls={open ? id : undefined} onClick={() => { swipe.cancel(); request(!open); }}>\n {open ? '收起操作' : '显示操作'}:{label}\n </Button>\n {!valid && <p className=\"hf-row-hint\">{actions.length ? '操作标识和名称必须非空,且标识不能重复。' : '暂无可用操作'}</p>}\n </div>;\n}\n","import { useEffect, useRef, useState, type PointerEvent } from 'react';\n\ninterface SwipeOptions {\n open: boolean;\n disabled: boolean;\n width: number;\n onChange: (open: boolean) => void;\n}\n\ninterface SwipeSession {\n pointer: number;\n x: number;\n y: number;\n delta: number;\n open: boolean;\n}\n\n/** 手势只请求开关,不执行行操作。父组件的对象key负责会话隔离。 */\nexport function useSwipeReveal({ open, disabled, width, onChange }: SwipeOptions) {\n const session = useRef<SwipeSession | null>(null);\n const [offset, setOffset] = useState<number | null>(null);\n const cleanup = useRef<(() => void) | null>(null);\n\n function cancel() {\n cleanup.current?.();\n cleanup.current = null;\n session.current = null;\n setOffset(null);\n }\n\n function start(event: PointerEvent<HTMLDivElement>) {\n if (disabled || event.button !== 0 || !event.isPrimary || session.current) return;\n if ((event.target as Element).closest('button,input,select,textarea,a,[contenteditable=\"true\"]')) return;\n event.currentTarget.focus();\n event.currentTarget.setPointerCapture(event.pointerId);\n session.current = { pointer: event.pointerId, x: event.clientX, y: event.clientY, delta: 0, open };\n const hide = () => { if (document.hidden) cancel(); };\n window.addEventListener('blur', cancel);\n document.addEventListener('visibilitychange', hide);\n cleanup.current = () => {\n window.removeEventListener('blur', cancel);\n document.removeEventListener('visibilitychange', hide);\n };\n }\n\n function move(event: PointerEvent<HTMLDivElement>) {\n const current = session.current;\n if (!current || current.pointer !== event.pointerId) return;\n if (disabled || current.open !== open) { cancel(); return; }\n const dx = event.clientX - current.x;\n const dy = event.clientY - current.y;\n if (Math.abs(dy) > Math.max(10, Math.abs(dx))) { cancel(); return; }\n current.delta = dx;\n setOffset(Math.max(-width, Math.min(0, (open ? -width : 0) + dx)));\n }\n\n function finish(event: PointerEvent<HTMLDivElement>) {\n const current = session.current;\n if (!current || current.pointer !== event.pointerId) return;\n cancel();\n if (!disabled && current.open === open && Math.abs(current.delta) >= 40) onChange(current.delta < 0);\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);\n }\n\n useEffect(() => () => { cleanup.current?.(); session.current = null; }, []);\n\n return { offset: offset ?? (open ? -width : 0), start, move, finish, cancel };\n}\n","import { useId, useRef, useState } from 'react';\nimport { Button } from '../components/Button';\nimport { Checkbox } from '../forms/Choice';\n\nexport interface ConfirmationItem {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface ChecklistConfirmProps {\n actionKey: string;\n title: string;\n items: readonly ConfirmationItem[];\n onConfirm: () => void;\n confirmLabel?: string;\n disabled?: boolean;\n loading?: boolean;\n error?: string;\n className?: string;\n}\n\nexport function ChecklistConfirm(props: ChecklistConfirmProps) {\n const identity = JSON.stringify([props.actionKey, props.items.map(({ id, label, description }) => [id, label, description])]);\n return <ChecklistConfirmFields key={identity} {...props} />;\n}\n\nfunction ChecklistConfirmFields({ title, items, onConfirm, confirmLabel = '确认执行',\n disabled = false, loading = false, error, className = '' }: ChecklistConfirmProps) {\n const [checked, setChecked] = useState<ReadonlySet<string>>(new Set());\n const [requested, setRequested] = useState(false);\n const lock = useRef(false);\n const first = useRef<HTMLInputElement>(null);\n const titleId = useId();\n const valid = items.length > 0 && items.every((item) => item.id.trim() && item.label.trim())\n && new Set(items.map((item) => item.id)).size === items.length;\n const blocked = disabled || loading || !valid;\n const allChecked = valid && items.every((item) => checked.has(item.id));\n\n function toggle(id: string, value: boolean) {\n if (blocked) return;\n lock.current = false;\n setRequested(false);\n setChecked((current) => {\n const next = new Set(current);\n if (value) next.add(id); else next.delete(id);\n return next;\n });\n }\n\n function confirm() {\n if (blocked || !allChecked || lock.current) return;\n lock.current = true;\n setChecked(new Set());\n setRequested(true);\n first.current?.focus();\n onConfirm();\n }\n\n return <section className={`hf-checklist-confirm ${className}`} aria-labelledby={titleId}>\n <h3 id={titleId}>{title}</h3>\n {!valid && <p role=\"alert\" className=\"hf-tone--danger hf-row-error\">\n {items.length ? '确认项标识和名称必须非空,且标识不能重复。' : '暂无确认项,不能提交。'}\n </p>}\n <div className=\"hf-checklist-confirm__items\">\n {items.map((item, index) => <Checkbox key={index} ref={index === 0 ? first : undefined}\n label={item.label} description={item.description} checked={checked.has(item.id)} disabled={blocked}\n onChange={(event) => toggle(item.id, event.target.checked)} />)}\n </div>\n <p className=\"hf-row-hint\" role=\"status\">{requested ? '已发出确认请求,请等待操作结果' : `已确认 ${checked.size} / ${items.length} 项`}</p>\n <Button type=\"button\" disabled={blocked || !allChecked} onClick={confirm}>{loading ? '正在处理请求' : confirmLabel}</Button>\n {error && <p role=\"alert\" className=\"hf-tone--danger hf-row-error\">{error}</p>}\n </section>;\n}\n","import { useId } from 'react';\nimport { Button } from '../components/Button';\nimport { useUndoDeadline } from './useUndoDeadline';\nimport { useUndoRequest } from './useUndoRequest';\n\nexport interface UndoNoticeProps {\n operationKey: string;\n message: string;\n onUndo: (signal: AbortSignal) => Promise<void>;\n expiresAt?: number;\n undoLabel?: string;\n successMessage?: string;\n errorMessage?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function UndoNotice(props: UndoNoticeProps) {\n return <UndoNoticeSession key={props.operationKey} {...props} />;\n}\n\nfunction UndoNoticeSession({ operationKey, message, onUndo, expiresAt, undoLabel = '撤销',\n successMessage = '已撤销操作', errorMessage = '撤销失败,请稍后重试。',\n disabled = false, className = '' }: UndoNoticeProps) {\n const { phase, undo } = useUndoRequest(onUndo);\n const deadline = useUndoDeadline(expiresAt, phase === 'ready' || phase === 'failed');\n const messageId = useId();\n const statusId = useId();\n const valid = deadline.valid && !!operationKey.trim() && !!message.trim() && !!undoLabel.trim();\n const pending = phase === 'pending';\n const undone = phase === 'undone';\n const blocked = !valid || disabled || pending || undone || deadline.expired;\n const status = !valid ? '撤销配置无效,请检查操作标识、文案和截止时间。'\n : pending ? '正在撤销,请等待结果。'\n : undone ? successMessage.trim() || '已撤销操作'\n : deadline.expired ? '撤销期限已过。需要恢复时,请联系管理员或使用历史记录。'\n : disabled ? '当前暂不可撤销。' : '可撤销此操作。';\n\n function requestUndo() {\n if (blocked || (expiresAt !== undefined && Date.now() >= expiresAt)) return;\n void undo();\n }\n\n return <section className={`hf-undo-notice ${className}`.trim()} aria-labelledby={messageId}>\n <div className=\"hf-undo-notice__content\">\n <p id={messageId} className=\"hf-undo-notice__message\">{message}</p>\n <p id={statusId} role=\"status\" aria-atomic=\"true\" className=\"hf-undo-notice__status\">{status}</p>\n {phase === 'failed' && <p role=\"alert\" className=\"hf-undo-notice__error hf-tone--danger\">\n {errorMessage.trim() || '撤销失败,请稍后重试。'}\n </p>}\n {valid && !pending && !undone && !deadline.expired && deadline.remaining !== undefined\n && <p className=\"hf-undo-notice__deadline\" aria-live=\"off\">剩余 {deadline.remaining} 秒</p>}\n </div>\n <Button type=\"button\" variant=\"outline\" aria-describedby={statusId} aria-disabled={blocked}\n aria-busy={pending || undefined} onClick={requestUndo}>\n {pending ? '正在撤销' : undone ? '已撤销' : undoLabel.trim() || '撤销'}\n </Button>\n </section>;\n}\n","import { useEffect, useState } from 'react';\n\n/** 期限来自业务,不因焦点、后台或重渲染延长。 */\nexport function useUndoDeadline(expiresAt: number | undefined, active: boolean) {\n const [now, setNow] = useState(() => Date.now());\n const valid = expiresAt === undefined || Number.isFinite(expiresAt);\n const expired = expiresAt !== undefined && valid && expiresAt <= Math.max(now, Date.now());\n\n useEffect(() => {\n if (!active || !valid || expiresAt === undefined || expired) return;\n const update = () => setNow(Date.now());\n const timer = window.setTimeout(update, Math.min(1000, Math.max(1, expiresAt - Date.now())));\n document.addEventListener('visibilitychange', update);\n return () => {\n window.clearTimeout(timer);\n document.removeEventListener('visibilitychange', update);\n };\n }, [expiresAt, active, valid, expired, now]);\n\n const remaining = expiresAt === undefined || !valid ? undefined : Math.max(0, Math.ceil((expiresAt - Math.max(now, Date.now())) / 1000));\n return { valid, expired, remaining };\n}\n","import { useEffect, useRef, useState } from 'react';\n\ntype UndoPhase = 'ready' | 'pending' | 'undone' | 'failed';\n\n/** 每个已执行操作只维护一个恢复请求;业务负责幂等和网络超时。 */\nexport function useUndoRequest(onUndo: (signal: AbortSignal) => Promise<void>) {\n const [phase, setPhase] = useState<UndoPhase>('ready');\n const currentPhase = useRef<UndoPhase>('ready');\n const request = useRef<AbortController | null>(null);\n\n useEffect(() => () => request.current?.abort(), []);\n\n async function undo() {\n if (currentPhase.current === 'pending' || currentPhase.current === 'undone') return;\n const controller = new AbortController();\n request.current = controller;\n currentPhase.current = 'pending';\n setPhase('pending');\n try {\n await onUndo(controller.signal);\n if (controller.signal.aborted) return;\n currentPhase.current = 'undone';\n setPhase('undone');\n } catch {\n // 不把服务端原始错误(可能含敏感数据)暴露到提示区。\n // 原始错误及请求标识应由调用方在请求层记录;这里明确呈现失败。\n if (controller.signal.aborted) return;\n currentPhase.current = 'failed';\n setPhase('failed');\n } finally {\n if (request.current === controller) request.current = null;\n }\n }\n\n return { phase, undo };\n}\n","import { useEffect, useState } from 'react';\n\n/** One frame at most per event burst; no polling or business reading-state storage. */\nexport function useReadingPosition(target: HTMLElement | null | undefined) {\n const [snapshot, setSnapshot] = useState({ target, value: 0 });\n\n useEffect(() => {\n if (target === null) return;\n const view = target?.ownerDocument.defaultView ?? window;\n const root = target ?? view.document.documentElement;\n const events = target ?? view;\n let frame = 0;\n let disposed = false;\n\n const measure = () => {\n frame = 0;\n if (disposed) return;\n const viewport = target ? root.clientHeight : view.innerHeight;\n const height = target ? root.scrollHeight : Math.max(root.scrollHeight, view.document.body?.scrollHeight ?? 0);\n const offset = target ? root.scrollTop : view.scrollY;\n const range = Math.max(0, height - viewport);\n const value = range === 0 ? 100 : Math.round(Math.min(1, Math.max(0, offset / range)) * 100);\n setSnapshot(previous => previous.target === target && previous.value === value ? previous : { target, value });\n };\n const schedule = () => {\n if (!disposed && !frame) frame = view.requestAnimationFrame(measure);\n };\n const resize = new ResizeObserver(schedule);\n const observeContent = () => {\n resize.disconnect();\n resize.observe(root);\n for (const child of root.children) resize.observe(child);\n if (!target && view.document.body) {\n resize.observe(view.document.body);\n for (const child of view.document.body.children) resize.observe(child);\n }\n schedule();\n };\n const mutations = new MutationObserver(observeContent);\n mutations.observe(root, { childList: true, subtree: true, characterData: true, attributes: true });\n events.addEventListener('scroll', schedule, { passive: true });\n view.addEventListener('resize', schedule);\n root.addEventListener('load', schedule, true);\n observeContent();\n return () => {\n disposed = true;\n view.cancelAnimationFrame(frame);\n resize.disconnect();\n mutations.disconnect();\n events.removeEventListener('scroll', schedule);\n view.removeEventListener('resize', schedule);\n root.removeEventListener('load', schedule, true);\n };\n }, [target]);\n\n return target === null || snapshot.target !== target ? 0 : snapshot.value;\n}\n","import { useReadingPosition } from './useReadingPosition';\n\nexport interface ReadingProgressProps {\n /** Omit for the whole document; pass an element for its scroll position, null while unavailable. */\n target?: HTMLElement | null;\n label?: string;\n showValue?: boolean;\n className?: string;\n}\n\n/** Scroll position, not proof that a person has read the content. */\nexport function ReadingProgress({ target, label = '阅读进度', showValue = true, className = '' }: ReadingProgressProps) {\n const value = useReadingPosition(target);\n const name = label.trim() || '阅读进度';\n return <div className={`hf-reading-progress ${className}`.trim()}>\n {showValue && <div className=\"hf-reading-progress__caption\" aria-hidden=\"true\">\n <span>{name}</span><span>{value}%</span>\n </div>}\n <div className=\"hf-reading-progress__track\" role=\"progressbar\" aria-label={name}\n aria-valuemin={0} aria-valuemax={100} aria-valuenow={value}>\n <span className=\"hf-reading-progress__fill\" style={{ width: `${value}%` }} />\n </div>\n </div>;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { Button } from '../components/Button';\n\nexport interface LoadMoreProps {\n onLoad: (signal: AbortSignal) => Promise<void>;\n hasMore: boolean;\n disabled?: boolean;\n /** Change when replacing the query; aborts the previous session. */\n resetKey?: string | number;\n label?: string;\n errorMessage?: string;\n className?: string;\n}\n\nexport function LoadMore(props: LoadMoreProps) {\n return <LoadMoreControl key={props.resetKey} {...props} />;\n}\n\n// Shared request boundary for manual and intersection-triggered loading.\nexport function LoadMoreControl({ onLoad, hasMore, disabled = false, label = '加载更多',\n errorMessage = '加载失败,请重试。', className = '', trigger = 0 }: LoadMoreProps & { trigger?: number }) {\n const [phase, setPhase] = useState<'idle' | 'pending' | 'error' | 'success'>('idle');\n const request = useRef<AbortController | null>(null);\n const alive = useRef(true);\n const latest = useRef({ onLoad, hasMore, disabled });\n latest.current = { onLoad, hasMore, disabled };\n useEffect(() => {\n alive.current = true;\n return () => { alive.current = false; request.current?.abort(); };\n }, []);\n async function load() {\n if (request.current || !latest.current.hasMore || latest.current.disabled) return;\n const controller = new AbortController();\n request.current = controller;\n setPhase('pending');\n try {\n await latest.current.onLoad(controller.signal);\n if (alive.current && !controller.signal.aborted) setPhase('success');\n } catch {\n if (alive.current && !controller.signal.aborted) setPhase('error');\n } finally {\n if (request.current === controller) request.current = null;\n }\n }\n const seen = useRef(0);\n useEffect(() => {\n if (trigger === seen.current) return;\n seen.current = trigger;\n // Failures require explicit retry, never an observer retry loop.\n if (phase !== 'error') void load();\n }, [trigger]); // Request reads current props through latest.\n const blocked = disabled || !hasMore || phase === 'pending';\n return <div className={`hf-content-loading ${className}`.trim()} aria-busy={phase === 'pending'}>\n <p role=\"status\" aria-atomic=\"true\">{phase === 'pending' ? '正在加载…' : !hasMore ? '没有更多内容了' : phase === 'success' ? '内容已加载' : ''}</p>\n {phase === 'error' && hasMore && <p role=\"alert\" className=\"hf-tone--danger\">{errorMessage.trim() || '加载失败,请重试。'}</p>}\n <Button type=\"button\" variant=\"outline\" aria-disabled={blocked} onClick={() => { if (!blocked) void load(); }}>\n {phase === 'pending' ? '正在加载' : phase === 'error' && hasMore ? '重试加载' : !hasMore ? '已全部加载' : label.trim() || '加载更多'}\n </Button>\n </div>;\n}\n","import { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { LoadMoreControl, type LoadMoreProps } from './LoadMore';\n\nexport interface InfiniteScrollProps extends LoadMoreProps {\n children: ReactNode;\n /** undefined = viewport; null = root not mounted yet. */\n root?: HTMLElement | null;\n rootMargin?: string;\n}\n\nexport function InfiniteScroll(props: InfiniteScrollProps) {\n return <InfiniteScrollSession key={props.resetKey} {...props} />;\n}\n\nfunction InfiniteScrollSession({ children, root, rootMargin = '0px', ...props }: InfiniteScrollProps) {\n const sentinel = useRef<HTMLDivElement>(null);\n const [trigger, setTrigger] = useState(0);\n useEffect(() => {\n if (!sentinel.current || root === null || props.disabled || !props.hasMore || typeof IntersectionObserver === 'undefined') return;\n let inside = false;\n let observer: IntersectionObserver;\n try {\n observer = new IntersectionObserver(entries => {\n const visible = entries.some(entry => entry.isIntersecting);\n if (visible && !inside) setTrigger(value => value + 1);\n inside = visible;\n }, { root, rootMargin });\n } catch { return; } // Invalid margins retain the manual loading control.\n observer.observe(sentinel.current);\n return () => observer.disconnect();\n }, [root, rootMargin, props.disabled, props.hasMore]);\n return <div className=\"hf-infinite-scroll\">\n {children}\n <div ref={sentinel} className=\"hf-infinite-scroll__sentinel\" aria-hidden=\"true\" />\n <LoadMoreControl {...props} trigger={trigger} />\n </div>;\n}\n","import { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Button } from '../components/Button';\n\nexport interface LazyLoadProps {\n children: ReactNode;\n placeholder?: ReactNode;\n minHeight?: number;\n root?: HTMLElement | null;\n rootMargin?: string;\n disabled?: boolean;\n label?: string;\n className?: string;\n}\n\nexport function LazyLoad({ children, placeholder, minHeight = 160, root, rootMargin = '0px',\n disabled = false, label = '显示内容', className = '' }: LazyLoadProps) {\n const target = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const restoreFocus = useRef(false);\n useEffect(() => {\n if (mounted && restoreFocus.current) {\n target.current?.focus({ preventScroll: true });\n restoreFocus.current = false;\n }\n }, [mounted]);\n useEffect(() => {\n if (mounted) return;\n if (disabled) { setMounted(true); return; }\n if (root === null || !target.current) return;\n if (typeof IntersectionObserver === 'undefined') { setMounted(true); return; }\n let observer: IntersectionObserver;\n try {\n observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) { setMounted(true); observer.disconnect(); }\n }, { root, rootMargin });\n } catch { setMounted(true); return; }\n observer.observe(target.current);\n return () => observer.disconnect();\n }, [mounted, disabled, root, rootMargin]);\n return <div ref={target} tabIndex={-1} className={`hf-lazy-load ${className}`.trim()}\n style={{ minHeight: Number.isFinite(minHeight) ? Math.max(0, minHeight) : 160 }}>\n {mounted || disabled ? children : <>{placeholder}<Button type=\"button\" variant=\"outline\" onClick={() => { restoreFocus.current = true; setMounted(true); }}>{label.trim() || '显示内容'}</Button></>}\n </div>;\n}\n","import { useId, type ReactNode } from 'react';\nimport { useOptimisticRequest } from './useOptimisticRequest';\n\nexport interface OptimisticUpdateState<T> {\n value: T;\n phase: 'idle' | 'pending' | 'success' | 'error';\n disabled: boolean;\n update: (next: T) => void;\n retry: () => void;\n}\n\nexport interface OptimisticUpdateProps<T> {\n operationKey: string | number;\n initialValue: T;\n onUpdate: (next: T, signal: AbortSignal) => Promise<T>;\n children: (state: OptimisticUpdateState<T>) => ReactNode;\n disabled?: boolean;\n label?: string;\n errorMessage?: string;\n className?: string;\n}\n\nexport function OptimisticUpdate<T>(props: OptimisticUpdateProps<T>) {\n return <OptimisticSession key={props.operationKey} {...props} />;\n}\n\nfunction OptimisticSession<T>({ initialValue, onUpdate, children, disabled = false,\n label = '更新', errorMessage = '保存失败,已恢复最近确认的状态,请重试。',\n className = '' }: OptimisticUpdateProps<T>) {\n const state = useOptimisticRequest(initialValue, onUpdate, disabled);\n const statusId = useId();\n const name = label.trim() || '更新';\n return <div className={`hf-optimistic-update ${className}`.trim()} role=\"group\" aria-label={name} aria-describedby={statusId}>\n {children(state)}\n <p id={statusId} role=\"status\" aria-atomic=\"true\" className=\"hf-optimistic-update__status\">\n {state.phase === 'pending' ? `${name}:正在保存…` : state.phase === 'success' ? `${name}:已保存` : ''}\n </p>\n {state.phase === 'error' && <p role=\"alert\" className=\"hf-optimistic-update__error hf-tone--danger\">\n {errorMessage.trim() || '保存失败,已恢复最近确认的状态,请重试。'}\n </p>}\n </div>;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { OptimisticUpdateState } from './OptimisticUpdate';\n\n/** Serial absolute-value writes; pending intents coalesce, confirmed values never regress. */\nexport function useOptimisticRequest<T>(initialValue: T,\n onUpdate: (next: T, signal: AbortSignal) => Promise<T>, disabled: boolean): OptimisticUpdateState<T> {\n const [view, setView] = useState<{ value: T; phase: OptimisticUpdateState<T>['phase'] }>(\n { value: initialValue, phase: 'idle' });\n const currentView = useRef(view);\n const confirmed = useRef(initialValue);\n const desired = useRef<{ id: number; value: T } | null>(null);\n const failed = useRef<{ value: T } | null>(null);\n const active = useRef<AbortController | null>(null);\n const sequence = useRef(0);\n const alive = useRef(true);\n const latest = useRef({ onUpdate, disabled });\n latest.current = { onUpdate, disabled };\n\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n active.current?.abort();\n active.current = null;\n desired.current = null;\n };\n }, []);\n\n function publish(value: T, phase: OptimisticUpdateState<T>['phase']) {\n currentView.current = { value, phase };\n setView(currentView.current);\n }\n\n async function drain() {\n if (!alive.current || active.current || !desired.current) return;\n const intent = desired.current;\n const controller = new AbortController();\n active.current = controller;\n let succeeded = false;\n let result = confirmed.current;\n try {\n result = await latest.current.onUpdate(intent.value, controller.signal);\n succeeded = true;\n } catch {\n // Network details belong to the caller; render only the configured error message.\n }\n if (!alive.current || controller.signal.aborted || active.current !== controller) return;\n active.current = null;\n if (succeeded) confirmed.current = result;\n if (desired.current?.id !== intent.id) {\n // An intermediate response can update the rollback baseline, never the newer visible intent.\n void drain();\n return;\n }\n desired.current = null;\n failed.current = succeeded ? null : { value: intent.value };\n publish(confirmed.current, succeeded ? 'success' : 'error');\n }\n\n function update(next: T) {\n if (!alive.current || latest.current.disabled) return;\n desired.current = { id: ++sequence.current, value: next };\n failed.current = null;\n publish(next, 'pending');\n void drain();\n }\n\n function retry() {\n if (currentView.current.phase === 'error' && failed.current) update(failed.current.value);\n }\n\n return { ...view, disabled, update, retry };\n}\n"],"mappings":"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","names":["useRef","Button","jsx","jsxs","useRef","useId","useState","jsx","jsxs","useState","useId","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useId","useEffect","jsx","jsxs","useId","jsx","jsxs","useEffect","useId","useRef","useState","jsx","jsxs","useState","useId","useRef","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useId","useEffect","useId","useRef","useState","jsx","jsxs","useId","useRef","useState","useEffect","useId","useRef","useState","item","jsx","jsxs","useId","useEffect","useState","jsx","Fragment","jsx","jsxs","useState","useEffect","useId","Fragment","jsx","jsxs","useId","jsx","useState","jsx","jsxs","useState","forwardRef","useId","jsx","jsxs","Input","forwardRef","jsx","jsxs","Switch","useId","jsx","jsxs","jsx","jsxs","useId","createPortal","jsx","jsxs","useId","createPortal","useEffect","createPortal","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","forwardRef","jsx","IconButton","useState","jsx","jsxs","useState","useEffect","useMemo","useRef","useState","jsx","jsxs","useState","jsx","jsxs","useState","Fragment","useMemo","useState","jsx","jsxs","Fragment","useMemo","Tag","useState","useState","jsx","jsxs","useState","useMemo","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useMemo","forwardRef","useEffect","useId","useRef","useState","jsx","jsxs","forwardRef","Select","useId","useState","useRef","useEffect","jsx","jsxs","day","jsx","Tag","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","useId","useState","jsx","jsxs","useState","useId","useEffect","useState","jsx","useEffect","useState","jsx","jsxs","useId","jsx","jsxs","jsx","jsxs","useEffect","useMemo","useState","createPortal","jsx","jsxs","useState","useMemo","useEffect","createPortal","jsx","jsxs","jsx","jsx","jsxs","useId","useState","jsx","jsxs","useState","useId","useId","jsx","jsxs","useState","jsx","useState","forwardRef","useId","jsx","jsxs","Textarea","forwardRef","useEffect","useRef","jsx","jsxs","Checkbox","Radio","useState","jsx","jsxs","useState","day","jsx","jsxs","useId","useRef","useState","jsx","jsxs","useId","useRef","useState","useId","useMemo","useState","jsx","jsxs","useId","useState","useMemo","useId","jsx","jsxs","useState","jsx","jsxs","useState","useId","createPortal","jsx","jsxs","useId","createPortal","cloneElement","useId","useState","jsx","jsxs","useState","useId","cloneElement","cloneElement","useId","useState","jsx","jsxs","useState","useId","cloneElement","cloneElement","isValidElement","useState","jsx","jsxs","useState","isValidElement","cloneElement","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","useMemo","useState","jsx","jsxs","item","useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","useState","jsx","useState","jsx","jsxs","i","j","jsx","jsxs","useMemo","useRef","useState","jsx","jsxs","jsx","jsxs","useMemo","jsx","jsxs","useMemo","useState","jsx","jsxs","useState","useMemo","useId","useEffect","useRef","useState","useEffect","useId","useRef","useState","jsx","jsxs","useState","useRef","useId","useEffect","jsx","jsxs","useId","useId","useRef","useState","jsx","jsxs","useState","useRef","useId","useEffect","useId","useRef","useState","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useId","useEffect","useId","useRef","useState","jsx","jsxs","useState","useRef","useId","useId","useEffect","useState","useEffect","useRef","useState","jsx","jsxs","useId","useEffect","useState","jsx","jsxs","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","useEffect","useRef","useState","jsx","jsxs","useRef","useState","useEffect","useEffect","useRef","useState","Fragment","jsx","jsxs","useRef","useState","useEffect","useId","useEffect","useRef","useState","jsx","jsxs","useId"]}
|