@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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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 './styles.css';\nimport './foundation.css';\nimport './collections.css';\nimport './advanced-forms.css';\n\nexport * from './theme/tokens';\nexport * from './theme/ThemeProvider';\nexport * from './components/Button';\nexport * from './components/SplitButton';\nexport * from './components/Input';\nexport * from './components/Switch';\nexport * from './components/SegmentedControl';\nexport * from './components/Card';\nexport * from './components/Modal';\nexport * from './components/Toast';\nexport * from './components/Content';\nexport * from './components/Accordion';\nexport * from './components/Dropdown';\nexport * from './components/IconButton';\nexport * from './components/AdvancedUtility';\nexport * from './components/Editors';\nexport * from './components/AIInteraction';\nexport * from './components/AIAdvanced';\nexport * from './components/Collaboration';\nexport * from './components/Assets';\nexport * from './components/Scheduling';\nexport * from './foundations/Icon';\nexport * from './foundations/Typography';\nexport * from './navigation/types';\nexport * from './navigation/FloatingNav';\nexport * from './navigation/Sidebar';\nexport * from './navigation/Breadcrumb';\nexport * from './navigation/Menu';\nexport * from './navigation/MobileNavigation';\nexport * from './navigation/Scrollspy';\nexport * from './navigation/ShrinkNav';\nexport * from './navigation/Tabs';\nexport * from './navigation/Steps';\nexport * from './navigation/CommandPalette';\nimport './navigation/navigation.css';\nexport * from './layout/Layout';\nexport * from './layout/Skeleton';\nexport * from './feedback/Loading';\nexport * from './forms/Select';\nexport * from './forms/MultiSelect';\nexport * from './forms/ChoiceGroup';\nexport * from './forms/ValidatedInput';\nexport * from './forms/Textarea';\nexport * from './forms/Choice';\nexport * from './forms/Advanced';\nexport * from './forms/Form';\nexport * from './forms/Upload';\nexport * from './forms/Combobox';\nexport * from './forms/NumberInput';\nexport * from './forms/NextBatch';\nexport * from './feedback/Drawer';\nexport * from './feedback/Popover';\nexport * from './feedback/Status';\nexport * from './feedback/Essentials';\nexport * from './data-display/DataDisplay';\nexport * from './data-display/Collections';\nexport * from './data-display/Insight';\nexport * from './data-display/EmptyState';\nexport * from './data-display/DataGrid';\nexport * from './data-display/Tree';\nexport * from './layout/AuthLayout';\nexport * from './layout/Hero';\nexport * from './layout/ResizablePanel';\nexport * from './feedback/NotificationCenter';\nexport * from './data-display/VirtualList';\nexport * from './data-display/DeveloperView';\nexport * from './forms/QueryBuilder';\nexport * from './data-display/WorkflowViews';\nexport * from './forms/FilterBuilder';\nimport './batch-two.css';\nimport './experience.css';\nimport './discovery.css';\nimport './layout-feedback.css';\nimport './essentials.css';\nimport './scheduling.css';\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 { 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":["import_jsx_runtime","Button","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Input","import_react","import_jsx_runtime","Switch","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","IconButton","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Tag","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","day","import_jsx_runtime","Tag","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","Select","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Textarea","import_react","import_jsx_runtime","Checkbox","Radio","import_react","import_jsx_runtime","day","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","item","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","i","j","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../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 './styles.css';\nimport './foundation.css';\nimport './collections.css';\nimport './advanced-forms.css';\nimport './interaction-patterns.css';\nimport './exploration-patterns.css';\nimport './reading-patterns.css';\nimport './manipulation-patterns.css';\n\nexport * from './feedback/HotspotGuide';\nexport * from './data-display/ChartCrosshair';\nexport * from './data-display/DrilldownChart';\n\nexport * from './data-display/LegendFilter';\nexport * from './data-display/RangeBrush';\nexport * from './data-display/ExpandablePanel';\nexport * from './feedback/ProductTour';\n\nexport * from './data-display/ReadMore';\nexport * from './data-display/SortableList';\nexport * from './feedback/AnnouncementBar';\nexport * from './feedback/OnboardingChecklist';\n\nexport * from './theme/tokens';\nexport * from './theme/ThemeProvider';\nexport * from './components/Button';\nexport * from './components/SplitButton';\nexport * from './components/Input';\nexport * from './components/Switch';\nexport * from './components/SegmentedControl';\nexport * from './components/Card';\nexport * from './components/Modal';\nexport * from './components/Toast';\nexport * from './components/Content';\nexport * from './components/Accordion';\nexport * from './components/Dropdown';\nexport * from './components/IconButton';\nexport * from './components/AdvancedUtility';\nexport * from './components/Editors';\nexport * from './components/AIInteraction';\nexport * from './components/AIAdvanced';\nexport * from './components/Collaboration';\nexport * from './components/Assets';\nexport * from './components/Scheduling';\nexport * from './foundations/Icon';\nexport * from './foundations/Typography';\nexport * from './navigation/types';\nexport * from './navigation/FloatingNav';\nexport * from './navigation/Sidebar';\nexport * from './navigation/Breadcrumb';\nexport * from './navigation/Menu';\nexport * from './navigation/MobileNavigation';\nexport * from './navigation/Scrollspy';\nexport * from './navigation/ShrinkNav';\nexport * from './navigation/Tabs';\nexport * from './navigation/Steps';\nexport * from './navigation/CommandPalette';\nimport './navigation/navigation.css';\nexport * from './layout/Layout';\nexport * from './layout/Skeleton';\nexport * from './feedback/Loading';\nexport * from './forms/Select';\nexport * from './forms/MultiSelect';\nexport * from './forms/ChoiceGroup';\nexport * from './forms/ValidatedInput';\nexport * from './forms/Textarea';\nexport * from './forms/Choice';\nexport * from './forms/Advanced';\nexport * from './forms/Form';\nexport * from './forms/Upload';\nexport * from './forms/Combobox';\nexport * from './forms/NumberInput';\nexport * from './forms/NextBatch';\nexport * from './feedback/Drawer';\nexport * from './feedback/Popover';\nexport * from './feedback/Status';\nexport * from './feedback/Essentials';\nexport * from './data-display/DataDisplay';\nexport * from './data-display/Collections';\nexport * from './data-display/Insight';\nexport * from './data-display/EmptyState';\nexport * from './data-display/DataGrid';\nexport * from './data-display/Tree';\nexport * from './layout/AuthLayout';\nexport * from './layout/Hero';\nexport * from './layout/ResizablePanel';\nexport * from './feedback/NotificationCenter';\nexport * from './data-display/VirtualList';\nexport * from './data-display/DeveloperView';\nexport * from './forms/QueryBuilder';\nexport * from './data-display/WorkflowViews';\nexport * from './forms/FilterBuilder';\nimport './batch-two.css';\nimport './experience.css';\nimport './discovery.css';\nimport './layout-feedback.css';\nimport './essentials.css';\nimport './scheduling.css';\nexport * from './data-display/ZoomableChart';\nimport './confirmation-patterns.css';\nexport * from './feedback/HoldToConfirm';\nexport * from './feedback/TypedConfirm';\nimport './row-action-patterns.css';\nexport * from './data-display/SwipeActions';\nexport * from './feedback/ChecklistConfirm';\nimport './undo-patterns.css';\nexport * from './feedback/UndoNotice';\nimport './reading-progress.css';\nexport * from './navigation/ReadingProgress';\nimport './content-loading.css';\nexport { LoadMore, type LoadMoreProps } from './data-display/LoadMore';\nexport * from './data-display/InfiniteScroll';\nexport * from './data-display/LazyLoad';\nimport './optimistic-update.css';\nexport * from './feedback/OptimisticUpdate';\n","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":["import_react","Button","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","item","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Input","import_react","import_jsx_runtime","Switch","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","IconButton","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Tag","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Select","import_jsx_runtime","day","import_jsx_runtime","Tag","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Textarea","import_react","import_jsx_runtime","Checkbox","Radio","import_react","import_jsx_runtime","day","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","item","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","i","j","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime"]}