@officesdk/design 0.2.10 → 0.2.12

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/UIConfigProvider/configManager.ts","../../src/Icon/IconProvider.tsx","../../src/Icon/Icon.tsx","../../src/Icon/index.ts","../../src/Toast/Toast.tsx","../../src/Toast/toastManager.tsx","../../src/utils/context.ts","../../src/utils/styled.ts","../../src/Button/Button.tsx","../../src/Slider/valueMap.ts","../../src/Slider/Slider.tsx","../../src/Slider/index.ts","../../src/Toast/ToastContainer.tsx","../../src/UIConfigProvider/UIConfigProvider.tsx","../../src/UIConfigProvider/createUIConfig.ts","../../src/UIConfigProvider/index.ts","../../src/utils/numberLocale.ts","../../src/NumberInput/NumberInput.styled.ts","../../src/NumberInput/NumberInput.tsx","../../src/NumberInput/index.ts","../../src/Button/SpinButton.tsx","../../src/Button/index.ts","../../src/index.ts","../../src/Switch/Switch.tsx","../../src/Radio/Radio.tsx","../../src/Checkbox/Checkbox.tsx","../../src/Input/Input.tsx","../../src/Input/SearchInput.tsx","../../src/Input/UnderlinedInput.tsx","../../src/Toast/index.ts","../../src/Tabs/Tabs.tsx","../../src/Tooltip/globalStyle.ts","../../src/utils/styleManager.ts","../../src/Tooltip/Tooltip.tsx","../../src/ToolbarButton/ToolbarButton.tsx","../../src/dropdown/DropdownButton.tsx","../../src/dropdown/Menu.tsx","../../src/dropdown/globalStyle.ts","../../src/dropdown/Dropdown.tsx","../../src/Modal/Modal.tsx","../../src/Modal/globalStyle.ts","../../src/Loading/Loading.tsx"],"names":["initUIConfig","getUIConfig","getGlobalIconRegistry","getGlobalToastConfig","ReactDOM","IconProvider","useIconRegistry","createContext","useContext","Icon","styled","React","init_Icon","Toast","init_Button","theme","useState","useEffect","getGlobalTheme","SuccessIcon","InfoIcon","ErrorIcon","WarningIcon","Button","CloseIcon","toast","getGlobalRenderFunction","lightTheme","toastManager","baseStyled","baseCreateGlobalStyle","IconWrapper","sizeConfig","styles","borderColor","borderColorHover","borderColorActive","borderColorDisabled","start","end","visualStart","visualSize","visualEnd","Slider","useMemo","useRef","useCallback","init_Slider","ToastWrapper","ToastContainer","useToast","UIConfigProvider","useUIConfig","createUIConfig","mergeUIConfig","init_UIConfigProvider","NumberInput","init_NumberInput","SpinButton","HiddenInput","CheckIcon","InputWrapper","StyledInput","forwardRef","SearchIcon","createGlobalStyle","RcTooltip","DropdownButton","ArrowRightIcon","IconContainer","ContentBlock","LabelText","RcDivider","RcItemGroup","RcSubMenu","RcMenuItem","SearchIconComponent","VirtualList","RcMenu","RcDropdown","RcDialog"],"mappings":"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","file":"index.js","sourcesContent":["import type React from 'react';\nimport type { UIConfig } from './types';\nimport { registerGlobalContext } from '../utils/context';\nimport ReactDOM from 'react-dom';\n\nlet globalConfig: UIConfig | null = null;\nlet globalIconRegistry: Record<string, React.ComponentType<React.SVGProps<SVGSVGElement>>> | null =\n null;\nlet globalToastConfig: { maxCount?: number; defaultDuration?: number } | null = null;\n\n/**\n * Create default render function\n * This will be registered via registerGlobalContext and can be retrieved via getGlobalRenderFunction\n */\nexport const createDefaultRenderFunction = (): ((\n element: React.ReactElement,\n container: HTMLElement\n) => void) => {\n return (element: React.ReactElement, container: HTMLElement) => {\n // Try React 18 createRoot first\n if ('createRoot' in ReactDOM) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { createRoot } = ReactDOM as any;\n const root = createRoot(container);\n root.render(element);\n } else {\n // Fallback to React 17 and below\n // eslint-disable-next-line react/no-deprecated\n ReactDOM.render(element, container);\n }\n };\n};\n\n/**\n * Initialize UI configuration globally (non-React)\n *\n * This function allows you to configure the UI library without using React Provider components.\n * It's useful for:\n * - Non-React environments\n * - Avoiding Provider nesting (e.g., in Modal components)\n * - Setting up configuration before React app starts\n *\n * After calling this function, all components will automatically use the global configuration.\n * Global styles (Tooltip, Menu, Dropdown) will be injected on-demand when components are first used.\n *\n * @param config - UI configuration object\n * @param config.theme - Theme configuration (required)\n * @param config.icons - Icon registry mapping icon names to React components\n * @param config.toast - Toast configuration (maxCount, defaultDuration, etc.)\n * @param config.locale - Locale code (e.g., 'zh-CN', 'en-US')\n * @param config.i18n - Internationalization configuration\n * @param config.zIndex - Z-index layer management\n * @param config.animation - Animation configuration\n * @param config.a11y - Accessibility configuration\n *\n * @example\n * import { initUIConfig } from '@officesdk/design';\n * import { lightTheme } from '@officesdk/design/theme';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * // Initialize before React app starts\n * initUIConfig({\n * theme: lightTheme,\n * icons: iconRegistry,\n * toast: {\n * maxCount: 5,\n * defaultDuration: 3000,\n * },\n * });\n *\n * // Now you can use components without UIConfigProvider\n * function App() {\n * return <Button>Click me</Button>;\n * }\n *\n * @example\n * // Useful for Modal scenarios - no need to nest Provider\n * function Modal({ children }) {\n * return (\n * <Portal>\n * {children}\n * </Portal>\n * );\n * }\n *\n * @example\n * // Can be called multiple times to update config\n * initUIConfig({ theme: lightTheme });\n * // Later update icons\n * initUIConfig({ theme: lightTheme, icons: newIconRegistry });\n */\nexport const initUIConfig = (config: UIConfig) => {\n globalConfig = config;\n\n // Create and register render function\n const renderFunction = createDefaultRenderFunction();\n\n // Register theme and render function via existing mechanism\n registerGlobalContext({\n theme: config.theme,\n render: renderFunction,\n });\n\n globalIconRegistry = config.icons || null;\n globalToastConfig = {\n maxCount: config.toast?.maxCount ?? 5,\n defaultDuration: config.toast?.defaultDuration ?? 3000,\n };\n};\n\n/**\n * Get global UI configuration\n */\nexport const getUIConfig = (): UIConfig | null => {\n return globalConfig;\n};\n\n/**\n * Get global icon registry\n */\nexport const getGlobalIconRegistry = () => {\n return globalIconRegistry;\n};\n\n/**\n * Get global toast config\n */\nexport const getGlobalToastConfig = () => {\n return globalToastConfig;\n};\n","import React, { createContext, useContext } from 'react';\n\nexport type IconComponent = React.ComponentType<React.SVGProps<SVGSVGElement>>;\nexport type IconRegistry = Record<string, IconComponent>;\n\nconst IconContext = createContext<IconRegistry | null>(null);\n\nexport interface IconProviderProps {\n /**\n * Icon registry mapping icon names to React components\n * Import from @officesdk/design/icons\n */\n icons: IconRegistry;\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * IconProvider Component\n *\n * Provides icon registry to child components via Context\n *\n * @example\n * import { IconProvider } from '@officesdk/design';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * <IconProvider icons={iconRegistry}>\n * <App />\n * </IconProvider>\n */\nexport const IconProvider: React.FC<IconProviderProps> = ({\n icons,\n children,\n}) => {\n return (\n <IconContext.Provider value={icons}>\n {children}\n </IconContext.Provider>\n );\n};\n\n/**\n * Hook to access icon registry from context\n */\nexport const useIconRegistry = () => {\n return useContext(IconContext);\n};\n\nIconProvider.displayName = 'IconProvider';\n\n\n","import React from 'react';\nimport { styled } from '../utils/styled';\nimport { useIconRegistry } from './IconProvider';\nimport { getGlobalIconRegistry } from '../UIConfigProvider/configManager';\n\nexport interface IconSize {\n width: string;\n height: string;\n}\n\nexport interface IconProps {\n /**\n * Icon name from registry (requires IconProvider)\n */\n name?: string;\n /**\n * Image URL for icon (e.g., PNG, JPG, or external SVG)\n */\n src?: string;\n /**\n * Custom icon element (takes precedence over name and src)\n */\n children?: React.ReactNode;\n /**\n * Size of the icon (px or custom width/height).\n * When not provided, the SVG keeps its original width/height attributes.\n */\n size?: number | string | IconSize;\n /**\n * Color of the icon (only works with SVG icons, not image src).\n * When not provided, the SVG keeps its original colors.\n */\n color?: string;\n /**\n * Alt text for image icons\n */\n alt?: string;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Click handler\n */\n onClick?: (e: React.MouseEvent) => void;\n}\n\nconst getSizeValue = (size: number | string | IconSize, dimension: 'width' | 'height'): string => {\n if (typeof size === 'number') {\n return `${size}px`;\n }\n if (typeof size === 'string') {\n return size;\n }\n return size[dimension];\n};\n\nconst IconContainer = styled.span<{\n $size?: number | string | IconSize;\n $color?: string;\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n ${({ $size }) => $size !== undefined && `width: ${getSizeValue($size, 'width')};`}\n ${({ $size }) => $size !== undefined && `height: ${getSizeValue($size, 'height')};`}\n ${({ $color }) => $color !== undefined && `color: ${$color};`}\n ${({ $color }) => $color !== undefined && `--icon-fill: ${$color};`}\n flex-shrink: 0;\n line-height: 1;\n\n svg {\n ${({ $size }) => $size !== undefined && `width: 100%; height: 100%;`}\n display: block;\n }\n`;\n\n/**\n * Icon Component\n *\n * Renders icons from multiple sources with priority: children > src > name\n *\n * @example\n * // Using with IconProvider and registry\n * <Icon name=\"close\" size={16} />\n *\n * @example\n * // Using with image URL\n * <Icon src=\"/icons/custom-icon.svg\" size={24} />\n *\n * @example\n * // Using with custom icon element\n * <Icon><CustomSvg /></Icon>\n *\n * @example\n * // Using with imported icon component\n * import { CloseIcon } from '@officesdk/design/icons';\n * <Icon><CloseIcon /></Icon>\n */\nexport const Icon: React.FC<IconProps> = ({\n name,\n src,\n children,\n size,\n color,\n alt = 'icon',\n className,\n style,\n onClick,\n}) => {\n const contextRegistry = useIconRegistry();\n const globalRegistry = getGlobalIconRegistry();\n // Use context registry first, fallback to global registry\n const registry = contextRegistry || globalRegistry;\n\n // Priority: custom children > src > registry icon by name\n let iconElement: React.ReactNode = children;\n\n // If no children, try src\n if (!iconElement && src) {\n iconElement = (\n <img\n src={src}\n alt={alt}\n style={{ width: '100%', height: '100%', display: 'block' }}\n />\n );\n }\n\n // If no children and no src, try registry\n if (!iconElement && name) {\n const IconComponent = registry?.[name];\n if (IconComponent) {\n iconElement = <IconComponent />;\n } else if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Icon \"${name}\" not found in registry. Make sure IconProvider is set up or call initUIConfig() with icons.`\n );\n }\n }\n\n if (!iconElement) {\n if (process.env.NODE_ENV !== 'production' && !children && !name && !src) {\n console.warn('Icon: one of \"name\", \"src\", or \"children\" must be provided');\n }\n return null;\n }\n\n return (\n <IconContainer\n $size={size}\n $color={color}\n className={className}\n style={style}\n onClick={onClick}\n >\n {iconElement}\n </IconContainer>\n );\n};\n\nIcon.displayName = 'Icon';\n\n","export { Icon } from './Icon';\nexport type { IconProps, IconSize } from './Icon';\n\nexport { IconProvider, useIconRegistry } from './IconProvider';\nexport type { IconProviderProps, IconRegistry, IconComponent } from './IconProvider';\n\n\n\n","import React, { useEffect, useState } from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { Button } from '../Button';\nimport { getGlobalTheme } from '../utils/context';\nimport { CloseIcon, ErrorIcon, InfoIcon, SuccessIcon, WarningIcon } from '@officesdk/design/icons';\nimport loadingGif from '../assets/loading.gif';\n\nexport type ToastVariant = 'success' | 'info' | 'error' | 'warn' | 'loading' | 'critical';\n\nexport interface ToastProps\n extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'className' | 'style' | 'children' | 'onClick'\n > {\n /**\n * Toast variant type\n */\n variant?: ToastVariant;\n /**\n * Toast message content (main text)\n */\n message: React.ReactNode;\n /**\n * Optional description text (shows below message in multiline mode)\n */\n description?: string;\n /**\n * Main action button text (blue color)\n */\n mainButtonText?: string;\n /**\n * Main action button click handler\n */\n onMainButtonClick?: () => void;\n /**\n * Secondary action button text (gray color)\n */\n secondaryButtonText?: string;\n /**\n * Secondary action button click handler\n */\n onSecondaryButtonClick?: () => void;\n /**\n * Whether to show close button\n */\n closable?: boolean;\n /**\n * Close button click handler\n */\n onClose?: () => void;\n /**\n * Auto close duration in milliseconds (0 to disable)\n */\n duration?: number;\n /**\n * Custom icon (overrides default variant icon)\n */\n icon?: React.ReactNode;\n /**\n * Whether to show icon\n */\n showIcon?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst ToastContainer = styled.div<{\n $variant: ToastVariant;\n}>`\n display: inline-flex;\n align-items: center;\n gap: 8px;\n border: 1px solid;\n box-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.08);\n\n ${({ theme }) => {\n const baseConfig = theme.components.toast;\n return `\n padding: ${baseConfig.padding};\n border-radius: ${baseConfig.borderRadius};\n font-size: ${baseConfig.fontSize};\n font-weight: ${baseConfig.fontWeight};\n `;\n }}\n\n ${({ $variant, theme }) => {\n const variantConfig = theme.components.toast[$variant];\n return `\n background: ${variantConfig.background};\n border-color: ${variantConfig.borderColor};\n `;\n }}\n`;\n\nconst IconWrapper = styled.div<{\n $variant: ToastVariant;\n $hasDescription: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $hasDescription }) => {\n const size = $hasDescription ? '28px' : '18px';\n return `\n width: ${size};\n height: ${size};\n `;\n }}\n`;\n\nconst ContentWrapper = styled.div<{ $hasDescription: boolean }>`\n display: flex;\n flex-direction: ${({ $hasDescription }) => ($hasDescription ? 'column' : 'row')};\n align-items: ${({ $hasDescription }) => ($hasDescription ? 'flex-start' : 'center')};\n gap: ${({ $hasDescription }) => ($hasDescription ? '2px' : '0')};\n flex: 1;\n`;\n\nconst Message = styled.span<{ $variant: ToastVariant }>`\n font-size: 13px;\n line-height: 20px;\n color: ${({ $variant, theme }) => theme.components.toast[$variant].message.color};\n`;\n\nconst Description = styled.span`\n font-size: 12px;\n line-height: 20px;\n color: ${({ theme }) => theme.colors.palettes.transparency['60']};\n`;\n\nconst ActionGroup = styled.div`\n display: flex;\n gap: 2px;\n align-items: center;\n`;\n\n// Loading icon component using gif for animation\nconst LoadingGifIcon = (props: { width: string; height: string }) => (\n <img src={loadingGif} alt=\"Loading\" width={props.width} height={props.height} />\n);\n\n/**\n * Toast Component\n *\n * A notification message component with different variants\n *\n * @example\n * // Single line toast\n * <Toast variant=\"success\" message=\"信息反馈\" />\n *\n * @example\n * // Toast with buttons\n * <Toast\n * variant=\"info\"\n * message=\"信息反馈\"\n * mainButtonText=\"按钮名称\"\n * onMainButtonClick={() => console.log('Main clicked')}\n * secondaryButtonText=\"按钮名称\"\n * onSecondaryButtonClick={() => console.log('Secondary clicked')}\n * closable\n * />\n *\n * @example\n * // Multi-line toast with description\n * <Toast\n * variant=\"success\"\n * message=\"信息反馈\"\n * description=\"信息具体说明\"\n * mainButtonText=\"按钮名称\"\n * closable\n * />\n */\nexport const Toast: React.FC<ToastProps> = ({\n variant = 'info',\n message,\n description,\n mainButtonText,\n onMainButtonClick,\n secondaryButtonText,\n onSecondaryButtonClick,\n closable = false,\n onClose,\n duration = 0,\n icon,\n showIcon = true,\n className,\n style,\n ...restProps\n}) => {\n const [visible, setVisible] = useState(true);\n\n // Auto close after duration\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(() => {\n setVisible(false);\n onClose?.();\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [duration, onClose]);\n\n const handleClose = () => {\n setVisible(false);\n onClose?.();\n };\n\n if (!visible) {\n return null;\n }\n\n // Icon priority: props.icon > theme icon > default icon\n const getIconElement = () => {\n // 1. If icon prop is provided, use it\n if (icon) {\n return icon;\n }\n\n // 2. Try to get icon from theme\n const theme = getGlobalTheme();\n const variantIcon = theme?.components?.toast?.[variant]?.icon;\n if (variantIcon.url) {\n return <Icon src={variantIcon.url} size={variantIcon.size} />;\n }\n\n // 3. Use default icon (loading uses gif for animation)\n if (variant === 'loading') {\n return <LoadingGifIcon width={variantIcon.size.width} height={variantIcon.size.height} />;\n }\n\n // Map variant to icon component\n const iconComponents = {\n success: () => (\n <Icon size={variantIcon.size}>\n <SuccessIcon />\n </Icon>\n ),\n info: () => (\n <Icon size={variantIcon.size}>\n <InfoIcon />\n </Icon>\n ),\n error: () => (\n <Icon size={variantIcon.size}>\n <ErrorIcon />\n </Icon>\n ),\n warn: () => (\n <Icon size={variantIcon.size}>\n <WarningIcon />\n </Icon>\n ),\n critical: () => (\n <Icon size={variantIcon.size}>\n <ErrorIcon />\n </Icon>\n ),\n };\n\n const IconRenderer = iconComponents[variant] || iconComponents.info;\n return <IconRenderer />;\n };\n\n const theme = getGlobalTheme();\n const toastConfig = theme?.components?.toast;\n\n const iconElement = getIconElement();\n const hasDescription = !!description;\n const hasActions = !!(mainButtonText || secondaryButtonText || closable);\n\n return (\n <ToastContainer\n $variant={variant}\n className={className}\n style={style}\n role=\"alert\"\n aria-live=\"polite\"\n {...restProps}\n >\n {showIcon && (\n <IconWrapper $variant={variant} $hasDescription={hasDescription}>\n {iconElement}\n </IconWrapper>\n )}\n\n <ContentWrapper $hasDescription={hasDescription}>\n <Message $variant={variant}>{message}</Message>\n {description && <Description>{description}</Description>}\n </ContentWrapper>\n\n {hasActions && (\n <ActionGroup>\n {mainButtonText && onMainButtonClick && (\n <Button variant=\"text\" colorType=\"guidance\" size=\"small\" onClick={onMainButtonClick}>\n {mainButtonText}\n </Button>\n )}\n\n {secondaryButtonText && onSecondaryButtonClick && (\n <Button\n variant=\"text\"\n colorType=\"default\"\n size=\"small\"\n onClick={onSecondaryButtonClick}\n >\n {secondaryButtonText}\n </Button>\n )}\n\n {closable && (\n <Button\n variant=\"icon\"\n colorType=\"default\"\n size=\"small\"\n onClick={handleClose}\n aria-label=\"Close\"\n icon={\n toastConfig.closeButton.icon.url ? (\n toastConfig.closeButton.icon.url\n ) : (\n <Icon size={12}>\n <CloseIcon />\n </Icon>\n )\n }\n iconBordered={false}\n />\n )}\n </ActionGroup>\n )}\n </ToastContainer>\n );\n};\n\nToast.displayName = 'Toast';\n","import React from 'react';\nimport { ToastProps } from './Toast';\nimport { Toast } from './Toast';\nimport { styled } from '../utils/styled';\n\ntype ToastPlacement =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\ninterface ToastItem extends Omit<ToastProps, 'onClose'> {\n id: string;\n placement?: ToastPlacement;\n}\n\ninterface ToastContainerConfig {\n placement?: ToastPlacement;\n maxCount?: number;\n defaultDuration?: number;\n}\n\ntype RenderFunction = (element: React.ReactElement, container: HTMLElement) => void;\n\ninterface ToastWrapperProps {\n $placement:\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n}\n\nconst ToastWrapper = styled.div<ToastWrapperProps>`\n position: fixed;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n\n > * {\n pointer-events: auto;\n }\n\n ${({ $placement, theme }) => {\n const offset = theme.components?.toast?.offset || { vertical: '24px', horizontal: '24px' };\n const vertical = offset.vertical || '24px';\n const horizontal = offset.horizontal || '24px';\n\n const styles: Record<string, string> = {\n 'top-right': `\n top: ${vertical};\n right: ${horizontal};\n `,\n 'top-left': `\n top: ${vertical};\n left: ${horizontal};\n `,\n 'top-center': `\n top: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n 'bottom-right': `\n bottom: ${vertical};\n right: ${horizontal};\n `,\n 'bottom-left': `\n bottom: ${vertical};\n left: ${horizontal};\n `,\n 'bottom-center': `\n bottom: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n };\n\n return styles[$placement] || styles['top-right'];\n }}\n`;\n\nclass ToastManager {\n private toasts: ToastItem[] = [];\n private container: HTMLDivElement | null = null;\n private renderFunc: RenderFunction | null = null;\n private config: ToastContainerConfig = {\n placement: 'top-right',\n maxCount: 5,\n defaultDuration: 3000,\n };\n\n constructor() {\n // Try to get render function from global context\n this.tryGetRenderFunction();\n }\n\n /**\n * Try to get render function from global context\n */\n private tryGetRenderFunction() {\n if (typeof window !== 'undefined') {\n import('../utils/context')\n .then(({ getGlobalRenderFunction }) => {\n const renderFunc = getGlobalRenderFunction();\n if (renderFunc) {\n this.renderFunc = renderFunc;\n }\n })\n .catch(() => {\n // Context not available yet\n });\n }\n }\n\n /**\n * Set render function (from registerGlobalContext)\n */\n setRenderFunction(renderFunc: RenderFunction) {\n this.renderFunc = renderFunc;\n }\n\n /**\n * Initialize the toast container\n */\n private initialize() {\n if (this.container) return;\n\n if (!this.renderFunc) {\n console.warn('Toast render function not set. Please call registerGlobalContext first.');\n return;\n }\n\n // Create container element\n this.container = document.createElement('div');\n this.container.id = 'officesdk-toast-container';\n document.body.appendChild(this.container);\n\n this.render();\n }\n\n /**\n * Render toasts to DOM\n */\n private render() {\n if (!this.container || !this.renderFunc) return;\n\n const element = (\n <>\n {this.toasts.map((toast) => {\n return <ToastWrapper key={toast.id} $placement={toast.placement || 'top-center'}>\n <Toast {...toast} onClose={() => this.hide(toast.id)} />\n </ToastWrapper>\n })}\n </>\n );\n\n this.renderFunc(element, this.container);\n }\n\n /**\n * Configure toast container\n */\n configure(config: ToastContainerConfig) {\n this.config = { ...this.config, ...config };\n this.render();\n }\n\n /**\n * Show a toast\n */\n show(props: Omit<ToastProps, 'onClose'>): string {\n this.initialize();\n\n const id = `toast-${Date.now()}-${Math.random()}`;\n const newToast: ToastItem = {\n ...props,\n id,\n duration: props.duration ?? this.config.defaultDuration,\n };\n\n this.toasts = [...this.toasts, newToast].slice(-(this.config.maxCount || 5));\n this.render();\n\n return id;\n }\n\n /**\n * Hide a toast by id\n */\n hide(id: string) {\n this.toasts = this.toasts.filter((toast) => toast.id !== id);\n this.render();\n }\n\n /**\n * Hide all toasts\n */\n hideAll() {\n this.toasts = [];\n this.render();\n }\n\n /**\n * Show success toast\n */\n success(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'success', message });\n }\n\n /**\n * Show info toast\n */\n info(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'info', message });\n }\n\n /**\n * Show error toast\n */\n error(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'error', message });\n }\n\n /**\n * Show warning toast\n */\n warn(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'warn', message });\n }\n\n /**\n * Show loading toast\n */\n loading(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'loading', message });\n }\n\n /**\n * Destroy the toast container\n */\n destroy() {\n if (this.container) {\n // Clear container content\n if (this.renderFunc) {\n // Render empty to unmount components\n this.renderFunc(<></>, this.container);\n }\n // Remove from DOM\n if (this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n }\n this.toasts = [];\n }\n\n /**\n * Get current toasts\n */\n getToasts(): ToastItem[] {\n return this.toasts;\n }\n\n /**\n * Clear all toasts (for testing)\n */\n clear() {\n this.toasts = [];\n this.render();\n }\n}\n\n// Global singleton instance\nconst toastManager = new ToastManager();\n\n/**\n * Global toast object that can be used anywhere\n * No need to render ToastContainer component manually\n *\n * @example\n * import { toast } from '@officesdk/design';\n *\n * // Configure (optional)\n * toast.configure({\n * placement: 'top-right',\n * maxCount: 5,\n * defaultDuration: 3000,\n * });\n *\n * // Show toasts\n * toast.success('Operation successful!');\n * toast.error('Something went wrong');\n * toast.info('Info message', { duration: 5000 });\n * toast.warn('Warning message');\n *\n * const id = toast.show({ variant: 'info', message: 'Custom toast' });\n * toast.hide(id);\n * toast.hideAll();\n */\nexport const toast = {\n configure: (config: ToastContainerConfig) => toastManager.configure(config),\n show: (props: Omit<ToastProps, 'onClose'>) => toastManager.show(props),\n hide: (id: string) => toastManager.hide(id),\n hideAll: () => toastManager.hideAll(),\n success: (message: React.ReactNode, options?: Partial<ToastProps>) =>\n toastManager.success(message, options),\n info: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.info(message, options),\n error: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.error(message, options),\n warn: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.warn(message, options),\n loading: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.loading(message, options),\n destroy: () => toastManager.destroy(),\n};\n\n// Export manager for internal use\nexport { toastManager };\nexport type { ToastItem, ToastContainerConfig };\n","import type { Theme } from \"@officesdk/design/theme\";\nimport type React from \"react\";\nimport { lightTheme } from \"@officesdk/design/theme\";\nimport { createDefaultRenderFunction } from \"../UIConfigProvider/configManager\";\nimport { DeepPartial } from \"./type\";\n\nfunction deepMerge<T extends object>(target: T, ...sources: Partial<T>[]): T {\n if (!sources.length) return target;\n const source = sources.shift();\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n deepMerge(target[key] as object, source[key] as object);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n return deepMerge(target, ...sources);\n}\n\nfunction isObject(item: any): item is object {\n return item && typeof item === \"object\" && !Array.isArray(item);\n}\n\n\n\nconst globalTheme: Theme = lightTheme;\nexport const registerGlobalTheme = (theme: DeepPartial<Theme>) => {\n // Theme is a complex object type, cast to Record for deepMerge\n // Use double cast via unknown to satisfy TypeScript's type system\n deepMerge(\n globalTheme as unknown as Record<string, unknown>,\n theme as unknown as Record<string, unknown>\n );\n};\n\nexport const getGlobalTheme = (): Theme => {\n return globalTheme;\n};\n\n// Store render function globally to avoid circular dependency\nlet globalRenderFunction: ((element: React.ReactElement, container: HTMLElement) => void) | null = createDefaultRenderFunction();\n\nexport const getGlobalRenderFunction = () => globalRenderFunction;\n\n/**\n * Register global context\n *\n * Registers theme and render function to the global context.\n * Can be called multiple times (e.g., in tests) to update the theme.\n *\n * @param context - The context to register\n * @param context.theme - Theme configuration\n * @param context.render - Optional render function for toast (React 18+ uses createRoot, older versions use ReactDOM.render)\n */\nexport const registerGlobalContext = (context: {\n theme: DeepPartial<Theme>;\n render?: (element: React.ReactElement, container: HTMLElement) => void;\n}) => {\n if (context.theme) {\n registerGlobalTheme(context.theme);\n }\n\n if (context.render) {\n globalRenderFunction = context.render;\n // Immediately set render function if toastManager is already loaded\n // This avoids race conditions\n if (typeof window !== 'undefined') {\n // Use a small timeout to ensure toastManager is loaded\n setTimeout(() => {\n import('../Toast/toastManager').then(({ toastManager }) => {\n toastManager.setRenderFunction(context.render!);\n }).catch(() => {\n // toastManager not loaded yet, will be set when it loads\n });\n }, 0);\n }\n }\n};\n","import baseStyled, {\n ThemedStyledInterface,\n createGlobalStyle as baseCreateGlobalStyle\n} from 'styled-components';\nimport { getGlobalTheme } from './context';\nimport type { Theme } from '@officesdk/design/theme';\n\n// Helper function to wrap styled component and inject theme via defaultProps\nconst wrapWithTheme = (component: any) => {\n if (component && typeof component === 'object' ) {\n component.defaultProps = {\n ...component.defaultProps,\n get theme() {\n return getGlobalTheme()\n },\n };\n }\n return component;\n};\n\n// Create the main styled function\nconst styledFunction = (tag: any) => {\n return wrapWithTheme((baseStyled as any)(tag));\n};\n\n// Start with a copy of baseStyled to get all its properties\nconst styledWithBase = Object.assign(styledFunction, baseStyled);\n\n// Override each HTML tag method to inject theme via defaultProps\nObject.keys(baseStyled).forEach((key) => {\n const originalMethod = (baseStyled as any)[key];\n\n if (typeof originalMethod === 'function') {\n (styledWithBase as any)[key] = (...args: any[]) => {\n const component = originalMethod(...args);\n return wrapWithTheme(component);\n };\n }\n});\n\n// Export with proper typing\nexport const styled = styledWithBase as ThemedStyledInterface<Theme>;\n\n// Export createGlobalStyle with theme support\nexport const createGlobalStyle = (...args: Parameters<typeof baseCreateGlobalStyle>) => {\n const GlobalStyleComponent = baseCreateGlobalStyle(...args);\n return wrapWithTheme(GlobalStyleComponent);\n};\n","import React from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Button variant type\n * - 'icon': Square icon button without padding, size based on iconSize\n */\n variant?: 'solid' | 'outlined' | 'text' | 'icon';\n /**\n * Button color type\n * - 'status' is only available for 'text' variant\n */\n colorType?: 'default' | 'guidance' | 'alert' | 'status';\n /**\n * Button size\n */\n size?: 'small' | 'medium' | 'large' | 'extraLarge';\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n /**\n * Whether the button is in loading state\n */\n loading?: boolean;\n /**\n * Whether the button should take full width of its container\n */\n fullWidth?: boolean;\n /**\n * Icon to display with the button text\n * - If string: treated as icon src URL, rendered using Icon component\n * - If ReactNode: rendered directly\n */\n icon?: string | React.ReactNode;\n /**\n * Icon placement relative to text (only for text buttons)\n */\n iconPlacement?: 'before' | 'after';\n /**\n * Whether the icon button should have a border (only for variant='icon')\n */\n iconBordered?: boolean;\n}\n\nconst IconWrapper = styled.span<{ $size: ButtonProps['size']; $iconPlacement: 'before' | 'after' }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, $iconPlacement, theme }) => {\n const buttonConfig = theme.components.button[$size || 'medium'];\n const sizeConfig = buttonConfig?.withIcon || buttonConfig;\n const marginSide = $iconPlacement === 'before' ? 'margin-right' : 'margin-left';\n\n return `\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n ${marginSide}: ${sizeConfig.iconGap};\n\n svg, img {\n width: 100%;\n height: 100%;\n display: block;\n }\n `;\n }}\n`;\n\nconst TextWrapper = styled.span<{ $size: ButtonProps['size'] }>`\n ${({ $size, theme }) => {\n const buttonConfig = theme.components.button[$size || 'medium'];\n const sizeConfig = buttonConfig?.withIcon || buttonConfig;\n return `\n padding: ${sizeConfig.textPadding || '0'};\n `;\n }}\n`;\n\nconst IconOnlyWrapper = styled.span<{ $size: ButtonProps['size'] }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const buttonConfig = theme.components.button[$size || 'medium'];\n const sizeConfig = buttonConfig?.onlyIcon || buttonConfig;\n return `\n width: ${sizeConfig.iconSize?.width || '14px'};\n height: ${sizeConfig.iconSize?.height || '14px'};\n\n svg, img {\n width: 100%;\n height: 100%;\n display: block;\n }\n `;\n }}\n`;\n\nconst StyledButton = styled.button<{\n $variant: ButtonProps['variant'];\n $colorType: ButtonProps['colorType'];\n $size: ButtonProps['size'];\n $fullWidth: boolean;\n $iconBordered: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none;\n width: ${({ $fullWidth }) => ($fullWidth ? '100%' : 'auto')};\n\n /* Size variants */\n ${({ $size, $variant, theme }) => {\n const sizeName = $size || 'medium';\n const buttonConfig = theme.components.button[sizeName];\n\n // Icon variant: use onlyIcon config (square button with padding)\n if ($variant === 'icon') {\n const sizeConfig = buttonConfig?.onlyIcon || buttonConfig;\n return `\n padding: ${sizeConfig.padding || '7px'};\n border-radius: ${sizeConfig.borderRadius || theme.borderRadius.small};\n `;\n }\n\n // Other variants: use withIcon config\n const sizeConfig = buttonConfig?.withIcon || buttonConfig;\n return `\n padding: ${sizeConfig.padding};\n font-size: ${sizeConfig.fontSize};\n line-height: ${sizeConfig.lineHeight};\n border-radius: ${sizeConfig.borderRadius};\n min-height: ${sizeConfig.height};\n `;\n }}\n\n /* Variant and color type styles */\n ${({ $variant, $colorType, $iconBordered, theme }) => {\n // Helper function to combine inset border and external shadow\n const combineShadows = (insetBorder: string, externalShadow: string) => {\n if (!insetBorder) {\n // No inset border, return external shadow only (or 'none')\n return externalShadow || 'none';\n }\n if (externalShadow === 'none') {\n return insetBorder;\n }\n return `${insetBorder}, ${externalShadow}`;\n };\n\n // Handle icon variant buttons\n if ($variant === 'icon') {\n const baseVariant = $iconBordered ? 'outlined' : 'text';\n const styles = theme.components.button[baseVariant]['default'];\n // Icon variant: use transparent border when not bordered, otherwise use border color\n const borderColor = $iconBordered ? styles.borderColor : 'transparent';\n const borderColorHover = $iconBordered ? styles.borderColorHover : 'transparent';\n const borderColorActive = $iconBordered ? styles.borderColorActive : 'transparent';\n const borderColorDisabled = $iconBordered ? styles.borderColorDisabled : 'transparent';\n\n return `\n background: ${styles.background};\n color: ${styles.color};\n border: none;\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColor}`, styles.boxShadow)};\n\n &:hover:not(:disabled) {\n background: ${styles.backgroundHover};\n color: ${styles.colorHover};\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColorHover}`, styles.boxShadowHover)};\n }\n\n &:active:not(:disabled) {\n background: ${styles.backgroundActive};\n color: ${styles.colorActive};\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColorActive}`, styles.boxShadowActive)};\n }\n\n &:disabled {\n background: ${styles.backgroundDisabled};\n color: ${styles.colorDisabled};\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColorDisabled}`, styles.boxShadowDisabled)};\n cursor: not-allowed;\n }\n `;\n }\n\n const variant = $variant || 'solid';\n const colorType = $colorType || 'default';\n\n // Validate colorType for variant\n if (colorType === 'status' && variant !== 'text') {\n console.warn(\n `colorType 'status' is only available for 'text' variant. Falling back to 'default'.`\n );\n }\n\n const effectiveColorType = colorType === 'status' && variant !== 'text' ? 'default' : colorType;\n const styles =\n theme.components.button[variant][\n effectiveColorType as keyof (typeof theme.components.button)[typeof variant]\n ];\n\n // Get border width and color based on variant\n // Solid and text variants: no border (width 0)\n // Outlined variant: 1px border\n const needsBorder = variant === 'outlined';\n const borderWidth = needsBorder ? '1px' : '0px';\n\n const getBorderColor = (state: 'normal' | 'hover' | 'active' | 'disabled' = 'normal') => {\n if (!needsBorder) {\n // Solid and text variants don't need border color\n return 'transparent';\n }\n // Outlined variant: use border color from theme\n const stateKey =\n state === 'normal'\n ? 'borderColor'\n : `borderColor${state.charAt(0).toUpperCase() + state.slice(1)}`;\n return styles[stateKey as keyof typeof styles] as string;\n };\n\n const borderColor = getBorderColor('normal');\n const borderColorHover = getBorderColor('hover');\n const borderColorActive = getBorderColor('active');\n const borderColorDisabled = getBorderColor('disabled');\n\n // Helper to create inset border shadow (only for outlined variant)\n const getInsetBorder = (color: string) => {\n if (borderWidth === '0px') {\n return '';\n }\n return `inset 0 0 0 ${borderWidth} ${color}`;\n };\n\n return `\n background: ${styles.background};\n color: ${styles.color};\n border: none;\n box-shadow: ${combineShadows(getInsetBorder(borderColor), styles.boxShadow)};\n font-weight: ${styles.fontWeight};\n\n &:hover:not(:disabled) {\n background: ${styles.backgroundHover};\n color: ${styles.colorHover};\n box-shadow: ${combineShadows(getInsetBorder(borderColorHover), styles.boxShadowHover)};\n }\n\n &:active:not(:disabled) {\n background: ${styles.backgroundActive};\n color: ${styles.colorActive};\n box-shadow: ${combineShadows(getInsetBorder(borderColorActive), styles.boxShadowActive)};\n }\n\n &:disabled {\n background: ${styles.backgroundDisabled};\n color: ${styles.colorDisabled};\n box-shadow: ${combineShadows(getInsetBorder(borderColorDisabled), styles.boxShadowDisabled)};\n cursor: not-allowed;\n }\n `;\n }}\n`;\n\n/**\n * Button Component\n *\n * @example\n * // Basic button\n * <Button>button</Button>\n *\n * @example\n * // Button with icon (string URL)\n * <Button icon=\"https://example.com/icon.svg\" iconPlacement=\"before\">button</Button>\n *\n * @example\n * // Button with icon (ReactNode)\n * <Button icon={<CustomIcon />} iconPlacement=\"after\">button</Button>\n *\n * @example\n * // Icon variant button (square, no padding)\n * <Button variant=\"icon\" icon={<CustomIcon />} iconBordered />\n *\n * @example\n * // Icon variant button without border\n * <Button variant=\"icon\" icon={<CustomIcon />} />\n */\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'solid',\n colorType = 'default',\n size = 'medium',\n disabled = false,\n loading = false,\n fullWidth = false,\n icon,\n iconPlacement = 'before',\n iconBordered = false,\n children,\n ...rest\n}) => {\n return (\n <StyledButton\n $variant={variant}\n $colorType={colorType}\n $size={size}\n $fullWidth={fullWidth}\n $iconBordered={iconBordered}\n disabled={disabled || loading}\n {...rest}\n >\n {loading ? (\n <TextWrapper $size={size}>Loading...</TextWrapper>\n ) : variant === 'icon' ? (\n // Icon variant: render icon with onlyIcon wrapper (uses onlyIcon config)\n <IconOnlyWrapper $size={size}>\n {typeof icon === 'string' ? <Icon src={icon} /> : icon || children}\n </IconOnlyWrapper>\n ) : (\n <>\n {icon && iconPlacement === 'before' && (\n <IconWrapper $size={size} $iconPlacement=\"before\">\n {typeof icon === 'string' ? <Icon src={icon} /> : icon}\n </IconWrapper>\n )}\n <TextWrapper $size={size}>{children}</TextWrapper>\n {icon && iconPlacement === 'after' && (\n <IconWrapper $size={size} $iconPlacement=\"after\">\n {typeof icon === 'string' ? <Icon src={icon} /> : icon}\n </IconWrapper>\n )}\n </>\n )}\n </StyledButton>\n );\n};\n\nButton.displayName = 'Button';\n","/**\n * Value map utilities for piecewise linear mapping (non-linear slider)\n */\n\n/**\n * Round to fixed decimal places to avoid floating point errors\n */\nconst toFixed = (num: number, precision: number = 10): number => {\n return Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision);\n};\n\nexport interface ValueMapPiece {\n /** Size of the piece (value range) */\n size: number;\n /** Step increment, defaults to 1 */\n step?: number;\n /** Visual size (relative), defaults to size/step */\n visualSize?: number;\n}\n\nexport interface ValueMapPieceExtended extends Required<ValueMapPiece> {\n start: number;\n end: number;\n visualStart: number;\n visualEnd: number;\n stepStart: number;\n stepEnd: number;\n}\n\nexport interface ValueMap {\n type: 'piecewise';\n /** Starting value */\n start: number;\n /** Array of pieces defining the mapping */\n pieces: ValueMapPiece[];\n}\n\nexport interface ValueMapExtended {\n type: 'piecewise';\n size: number;\n start: number;\n end: number;\n visualSize: number;\n visualStart: number;\n visualEnd: number;\n stepStart: number;\n stepEnd: number;\n pieces: ValueMapPieceExtended[];\n}\n\n/**\n * Create a simple single-piece linear value map\n */\nexport const createSinglePiecewiseMap = (\n min: number,\n max: number,\n step: number\n): ValueMap => {\n return {\n type: 'piecewise',\n start: min,\n pieces: [\n {\n size: max - min,\n step: step,\n visualSize: 100,\n },\n ],\n };\n};\n\n/**\n * Extend a ValueMap with computed properties for each piece\n */\nexport const extendValueMap = (valueMap: ValueMap): ValueMapExtended => {\n const piecesExt: ValueMapPieceExtended[] = [];\n\n valueMap.pieces.forEach((p) => {\n const start = piecesExt.length\n ? piecesExt[piecesExt.length - 1].end\n : valueMap.start;\n const end = start + p.size;\n const visualStart = piecesExt.length\n ? piecesExt[piecesExt.length - 1].visualEnd\n : 0;\n\n const step = p.step || 1;\n const visualSize = p.visualSize || p.size / step;\n const visualEnd = visualStart + visualSize;\n const stepStart = piecesExt.length\n ? piecesExt[piecesExt.length - 1].stepEnd\n : 0;\n const stepEnd = stepStart + Math.ceil(p.size / step);\n\n piecesExt.push({\n size: p.size,\n step,\n visualSize,\n start,\n end,\n visualStart,\n visualEnd,\n stepStart,\n stepEnd,\n });\n });\n\n const firstPiece = piecesExt[0];\n const lastPiece = piecesExt[piecesExt.length - 1];\n\n const start = firstPiece.start;\n const end = lastPiece.end;\n const size = end - start;\n\n const visualStart = firstPiece.visualStart;\n const visualEnd = lastPiece.visualEnd;\n const visualSize = visualEnd - visualStart;\n\n return {\n type: 'piecewise',\n size,\n start,\n end,\n visualSize,\n visualStart,\n visualEnd,\n pieces: piecesExt,\n stepStart: firstPiece.stepStart,\n stepEnd: lastPiece.stepEnd,\n };\n};\n\n/**\n * Snap value to the nearest step in the value map\n */\nexport const snapToStep = (\n value: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end } = valueMap;\n\n if (value <= start) return start;\n if (value >= end) return end;\n\n const p = pieces.find((piece) => value >= piece.start && value <= piece.end);\n if (!p) return value;\n\n const pieceStep = p.step;\n const steps = (value - p.start) / pieceStep;\n const decimal = steps % 1;\n\n let snapped: number;\n if (decimal < 0.5) {\n snapped = Math.max(start, toFixed(p.start + Math.floor(steps) * pieceStep));\n } else {\n snapped = Math.min(end, toFixed(p.start + Math.ceil(steps) * pieceStep));\n }\n\n return toFixed(snapped);\n};\n\n/**\n * Convert a value to visual percentage (0-1) based on the value map\n */\nexport const valueToVisualPercentage = (\n value: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end, visualSize } = valueMap;\n\n if (value <= start) return 0;\n if (value >= end) return 1;\n\n const p = pieces.find((piece) => value >= piece.start && value <= piece.end);\n if (!p) return 0;\n\n const visualPosition =\n p.visualStart + ((value - p.start) / p.size) * p.visualSize;\n return visualPosition / visualSize;\n};\n\n/**\n * Convert visual percentage (0-1) to value based on the value map\n */\nexport const visualPercentToValue = (\n visualPercent: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end, visualSize } = valueMap;\n\n if (visualPercent <= 0) return start;\n if (visualPercent >= 1) return end;\n\n const visualPosition = visualSize * visualPercent;\n const p = pieces.find(\n (piece) =>\n visualPosition >= piece.visualStart && visualPosition <= piece.visualEnd\n );\n if (!p) return start;\n\n return p.start + ((visualPosition - p.visualStart) / p.visualSize) * p.size;\n};\n\n/**\n * Change value by a number of steps\n */\nexport const changeByStep = (\n value: number,\n steps: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end } = valueMap;\n\n const p = pieces.find((piece) => value >= piece.start && value <= piece.end);\n if (!p) {\n if (value < start) return start;\n if (value > end) return end;\n return value;\n }\n\n const curStepNo = (value - p.start) / p.step + p.stepStart;\n const curStepRounded = Math.round(curStepNo);\n\n let stepsInValueMap: number;\n if (Math.abs(curStepRounded - curStepNo) < 0.00001) {\n stepsInValueMap = Math.round(curStepNo) + steps;\n } else if (steps < 0) {\n stepsInValueMap = Math.ceil(curStepNo) + steps;\n } else {\n stepsInValueMap = Math.floor(curStepNo) + steps;\n }\n\n if (stepsInValueMap <= valueMap.stepStart) {\n return valueMap.start;\n }\n if (stepsInValueMap >= valueMap.stepEnd) {\n return valueMap.end;\n }\n\n const newPiece = pieces.find(\n (piece) =>\n stepsInValueMap >= piece.stepStart && stepsInValueMap <= piece.stepEnd\n );\n if (!newPiece) return value;\n\n const newValue =\n newPiece.start + (stepsInValueMap - newPiece.stepStart) * newPiece.step;\n return toFixed(newValue);\n};\n","import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { styled } from '../utils/styled';\nimport type { ValueMap, ValueMapExtended } from './valueMap';\nimport {\n extendValueMap,\n createSinglePiecewiseMap,\n valueToVisualPercentage,\n visualPercentToValue,\n snapToStep,\n changeByStep,\n} from './valueMap';\n\nexport interface SliderProps {\n /**\n * Current value (0-100)\n */\n value?: number;\n /**\n * Default value\n */\n defaultValue?: number;\n /**\n * Minimum value\n */\n min?: number;\n /**\n * Maximum value\n */\n max?: number;\n /**\n * Step increment\n */\n step?: number;\n /**\n * Whether the slider is disabled\n */\n disabled?: boolean;\n /**\n * Slider direction\n */\n direction?: 'horizontal' | 'vertical';\n /**\n * Value map for piecewise linear mapping (non-linear slider)\n * When provided, min/max/step props are ignored\n */\n valueMap?: ValueMap;\n /**\n * Callback when value changes\n */\n onChange?: (value: number) => void;\n /**\n * Callback when dragging starts\n */\n onDragStart?: () => void;\n /**\n * Callback when dragging ends\n */\n onDragEnd?: () => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst SliderContainer = styled.div<{\n $disabled: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n ${({ $direction }) =>\n $direction === 'vertical'\n ? `\n width: 18px;\n height: 100%;\n flex: 1;\n flex-direction: column;\n `\n : `\n width: 100%;\n height: 18px;\n flex-direction: row;\n `}\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n user-select: none;\n`;\n\nconst SliderTrack = styled.div<{\n $disabled: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: absolute;\n background: ${({ theme }) => theme.colors.palettes.transparency['20']};\n border-radius: 1000px;\n ${({ $direction, theme }) =>\n $direction === 'vertical'\n ? `\n top: 0;\n bottom: 0;\n width: ${theme.components.slider.track.height};\n left: 50%;\n transform: translateX(-50%);\n `\n : `\n left: 0;\n right: 0;\n height: ${theme.components.slider.track.height};\n top: 50%;\n transform: translateY(-50%);\n `}\n`;\n\nconst SliderFill = styled.div<{\n $percentage: number;\n $disabled: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: absolute;\n border-radius: ${({ theme }) => theme.components.slider.track.borderRadius};\n background: ${({ $disabled, theme }) =>\n $disabled\n ? theme.components.slider.track.filledBackgroundDisabled\n : theme.components.slider.track.filledBackground};\n ${({ $direction, $percentage, theme }) =>\n $direction === 'vertical'\n ? `\n bottom: 0;\n width: ${theme.components.slider.track.height};\n left: 50%;\n transform: translateX(-50%);\n height: ${$percentage}%;\n `\n : `\n left: 0;\n height: ${theme.components.slider.track.height};\n top: 50%;\n transform: translateY(-50%);\n width: ${$percentage}%;\n `}\n`;\n\nconst SliderThumb = styled.div<{\n $percentage: number;\n $disabled: boolean;\n $isDragging: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: absolute;\n width: ${({ theme }) => theme.components.slider.large.thumbSize};\n height: ${({ theme }) => theme.components.slider.large.thumbSize};\n border-radius: 50%;\n background: ${({ $disabled, theme }) =>\n $disabled ? theme.components.slider.thumb.backgroundDisabled : theme.components.slider.thumb.background};\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'grab')};\n box-shadow: ${({ theme }) => theme.components.slider.thumb.boxShadow};\n ${({ $direction, $percentage, $isDragging }) =>\n $direction === 'vertical'\n ? `\n bottom: ${$percentage}%;\n left: 50%;\n transform: translate(-50%, 50%);\n transition: ${$isDragging ? 'none' : 'bottom 0.1s ease'};\n `\n : `\n left: ${$percentage}%;\n top: 50%;\n transform: translate(-50%, -50%);\n transition: ${$isDragging ? 'none' : 'left 0.1s ease'};\n `}\n\n ${({ $disabled, theme }) =>\n !$disabled &&\n `\n &:hover {\n box-shadow: ${theme.components.slider.thumb.boxShadowHover};\n }\n\n &:active {\n cursor: grabbing;\n box-shadow: ${theme.components.slider.thumb.boxShadowActive};\n }\n `}\n`;\n\n/**\n * Slider Component\n *\n * A slider for selecting a value from a range\n *\n * @example\n * <Slider value={35} onChange={(val) => console.log(val)} />\n */\nexport const Slider: React.FC<SliderProps> = ({\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n direction = 'horizontal',\n valueMap: valueMapProp,\n onChange,\n onDragStart,\n onDragEnd,\n className,\n style,\n}) => {\n // Create extended value map\n const extendedValueMap: ValueMapExtended = useMemo(() => {\n if (valueMapProp) {\n return extendValueMap(valueMapProp);\n }\n return extendValueMap(createSinglePiecewiseMap(min, max, step));\n }, [valueMapProp, min, max, step]);\n\n // Get effective min/max from value map\n const effectiveMin = extendedValueMap.start;\n const effectiveMax = extendedValueMap.end;\n\n const [internalValue, setInternalValue] = useState<number>(\n controlledValue ?? defaultValue\n );\n const [isDragging, setIsDragging] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Calculate percentage using value map\n const percentage = valueToVisualPercentage(value, extendedValueMap) * 100;\n\n // Update value based on position\n const updateValue = useCallback(\n (clientX: number, clientY: number) => {\n if (!containerRef.current || disabled) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n let visualPercent: number;\n\n if (direction === 'vertical') {\n // Vertical: from bottom (0%) to top (100%)\n const offsetY = rect.bottom - clientY;\n visualPercent = Math.max(0, Math.min(1, offsetY / rect.height));\n } else {\n // Horizontal: from left (0%) to right (100%)\n const offsetX = clientX - rect.left;\n visualPercent = Math.max(0, Math.min(1, offsetX / rect.width));\n }\n\n // Convert visual percent to value and snap to step\n const rawValue = visualPercentToValue(visualPercent, extendedValueMap);\n const snappedValue = snapToStep(rawValue, extendedValueMap);\n\n if (controlledValue === undefined) {\n setInternalValue(snappedValue);\n }\n\n onChange?.(snappedValue);\n },\n [disabled, controlledValue, onChange, direction, extendedValueMap]\n );\n\n // Handle track click (jump to position without dragging)\n const handleTrackClick = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n\n e.preventDefault();\n updateValue(e.clientX, e.clientY);\n },\n [disabled, updateValue]\n );\n\n // Handle thumb drag start\n const handleThumbMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n onDragStart?.();\n },\n [disabled, onDragStart]\n );\n\n // Handle mouse move\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n updateValue(e.clientX, e.clientY);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n onDragEnd?.();\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, updateValue, onDragEnd]);\n\n // Handle keyboard events\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n let newValue = value;\n\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n e.preventDefault();\n newValue = changeByStep(value, -1, extendedValueMap);\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n e.preventDefault();\n newValue = changeByStep(value, 1, extendedValueMap);\n break;\n case 'Home':\n e.preventDefault();\n newValue = effectiveMin;\n break;\n case 'End':\n e.preventDefault();\n newValue = effectiveMax;\n break;\n default:\n return;\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n\n onChange?.(newValue);\n },\n [disabled, value, effectiveMin, effectiveMax, controlledValue, onChange, extendedValueMap]\n );\n\n return (\n <SliderContainer\n ref={containerRef}\n $disabled={disabled}\n $direction={direction}\n className={className}\n style={style}\n onMouseDown={handleTrackClick}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin={effectiveMin}\n aria-valuemax={effectiveMax}\n aria-valuenow={value}\n aria-disabled={disabled}\n aria-orientation={direction}\n >\n <SliderTrack $disabled={disabled} $direction={direction} />\n <SliderFill $percentage={percentage} $disabled={disabled} $direction={direction} />\n <SliderThumb\n $percentage={percentage}\n $disabled={disabled}\n $isDragging={isDragging}\n $direction={direction}\n onMouseDown={handleThumbMouseDown}\n />\n </SliderContainer>\n );\n};\n\nSlider.displayName = 'Slider';\n\n","export { Slider } from './Slider';\nexport type { SliderProps } from './Slider';\nexport type { ValueMap, ValueMapPiece, ValueMapExtended, ValueMapPieceExtended } from './valueMap';\nexport {\n createSinglePiecewiseMap,\n extendValueMap,\n valueToVisualPercentage,\n visualPercentToValue,\n snapToStep,\n changeByStep,\n} from './valueMap';\n\n","import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\nimport { Toast, ToastProps } from './Toast';\n\ninterface ToastItem extends Omit<ToastProps, 'onClose'> {\n id: string;\n}\n\n\n\ninterface ToastContextValue {\n showToast: (props: Omit<ToastProps, 'onClose'>) => string;\n hideToast: (id: string) => void;\n success: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n info: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n error: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n warn: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n loading: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\ninterface ToastWrapperProps {\n $placement: 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center';\n}\n\nconst ToastWrapper = styled.div<ToastWrapperProps>`\n position: fixed;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n\n > * {\n pointer-events: auto;\n }\n\n ${({ $placement, theme }) => {\n const offset = theme.components?.toast?.offset || { vertical: '24px', horizontal: '24px' };\n const vertical = offset.vertical || '24px';\n const horizontal = offset.horizontal || '24px';\n\n const styles: Record<string, string> = {\n 'top-right': `\n top: ${vertical};\n right: ${horizontal};\n `,\n 'top-left': `\n top: ${vertical};\n left: ${horizontal};\n `,\n 'top-center': `\n top: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n 'bottom-right': `\n bottom: ${vertical};\n right: ${horizontal};\n `,\n 'bottom-left': `\n bottom: ${vertical};\n left: ${horizontal};\n `,\n 'bottom-center': `\n bottom: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n };\n\n return styles[$placement] || styles['top-right'];\n }}\n`;\n\nexport interface ToastContainerProps {\n placement?: 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center';\n /**\n * Maximum number of toasts to show at once\n */\n maxCount?: number;\n /**\n * Default duration for auto-close (ms)\n */\n defaultDuration?: number;\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * ToastContainer Component\n *\n * Provides toast context and manages toast display\n *\n * @example\n * <ToastContainer>\n * <App />\n * </ToastContainer>\n */\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n placement = 'top-right',\n maxCount = 5,\n defaultDuration = 3000,\n children,\n}) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const showToast = useCallback((props: Omit<ToastProps, 'onClose'>) => {\n const id = `toast-${Date.now()}-${Math.random()}`;\n const newToast: ToastItem = {\n ...props,\n id,\n duration: props.duration ?? defaultDuration,\n };\n\n setToasts((prev) => {\n const updated = [...prev, newToast];\n // Limit to maxCount\n return updated.slice(-maxCount);\n });\n\n return id;\n }, [maxCount, defaultDuration]);\n\n const hideToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const success = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'success', message });\n }, [showToast]);\n\n const info = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'info', message });\n }, [showToast]);\n\n const error = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'error', message });\n }, [showToast]);\n\n const warn = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'warn', message });\n }, [showToast]);\n\n const loading = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'loading', message });\n }, [showToast]);\n\n const contextValue: ToastContextValue = {\n showToast,\n hideToast,\n success,\n info,\n error,\n warn,\n loading,\n };\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <ToastWrapper $placement={placement}>\n {toasts.map((toast) => (\n <Toast\n key={toast.id}\n {...toast}\n onClose={() => hideToast(toast.id)}\n />\n ))}\n </ToastWrapper>\n </ToastContext.Provider>\n );\n};\n\n/**\n * Hook to access toast methods\n *\n * @example\n * const toast = useToast();\n * toast.success('Operation successful!');\n * toast.error('Something went wrong');\n */\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within ToastContainer');\n }\n return context;\n};\n\nToastContainer.displayName = 'ToastContainer';\n\n","import React, { createContext, useContext, useEffect } from 'react';\nimport { IconProvider } from '../Icon/IconProvider';\nimport { ToastContainer } from '../Toast/ToastContainer';\nimport type { UIConfig } from './types';\nimport { initUIConfig, getUIConfig } from './configManager';\nimport { registerGlobalContext } from '../utils/context';\n\nconst UIConfigContext = createContext<UIConfig | null>(null);\n\nexport interface UIConfigProviderProps {\n /**\n * UI configuration\n */\n config: UIConfig;\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * UIConfigProvider Component (Optional, for React convenience)\n *\n * Unified provider for all UI components and global configurations.\n * Includes IconProvider, ToastContainer, and other settings.\n *\n * Note: Global styles (Tooltip, Menu, Dropdown) are now injected on-demand\n * when components are first used, so they are no longer included here.\n *\n * For non-React environments or when you want to avoid Provider nesting,\n * use initUIConfig() instead.\n *\n * @example\n * import { UIConfigProvider } from '@officesdk/design';\n * import { lightTheme } from '@officesdk/design/theme';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * <UIConfigProvider config={{\n * theme: lightTheme,\n * icons: iconRegistry,\n * toast: {\n * defaultDuration: 3000,\n * maxCount: 5,\n * },\n * }}>\n * <App />\n * </UIConfigProvider>\n */\nexport const UIConfigProvider: React.FC<UIConfigProviderProps> = ({ config, children }) => {\n // Initialize global config on mount\n useEffect(() => {\n\n // Register render function first\n registerGlobalContext({\n theme: config.theme,\n render: config.renderFunction,\n });\n\n // Then initialize full config\n initUIConfig(config);\n }, [config]);\n\n const { icons = {} } = config;\n const toastConfig = {\n maxCount: config.toast?.maxCount ?? 5,\n defaultDuration: config.toast?.defaultDuration ?? 3000,\n };\n\n return (\n <UIConfigContext.Provider value={config}>\n <IconProvider icons={icons}>\n <ToastContainer\n maxCount={toastConfig.maxCount}\n defaultDuration={toastConfig.defaultDuration}\n >\n {children}\n </ToastContainer>\n </IconProvider>\n </UIConfigContext.Provider>\n );\n};\n\n/**\n * Hook to access UI configuration\n *\n * Falls back to global config if context is not available.\n * This allows components to work even without UIConfigProvider when initUIConfig() is used.\n *\n * @example\n * const config = useUIConfig();\n * console.log(config?.theme);\n * console.log(config?.locale);\n */\nexport const useUIConfig = () => {\n const context = useContext(UIConfigContext);\n // Fallback to global config if context is not available\n return context || getUIConfig();\n};\n\nUIConfigProvider.displayName = 'UIConfigProvider';\n","import type { UIConfig } from './types';\n\n/**\n * Create UI configuration with default values\n *\n * @example\n * import { createUIConfig } from '@officesdk/design';\n * import { lightTheme } from '@officesdk/design/theme';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * const config = createUIConfig({\n * theme: lightTheme,\n * icons: iconRegistry,\n * toast: {\n * defaultDuration: 3000,\n * },\n * });\n */\nexport const createUIConfig = (config: UIConfig): UIConfig => {\n return {\n // Theme is required\n theme: config.theme,\n\n // Icons with default\n icons: config.icons ?? {},\n\n // Toast with defaults\n toast: {\n maxCount: config.toast?.maxCount ?? 5,\n defaultDuration: config.toast?.defaultDuration ?? 3000,\n position: config.toast?.position ?? 'top-right',\n offset: {\n x: config.toast?.offset?.x ?? 24,\n y: config.toast?.offset?.y ?? 24,\n },\n },\n\n // Locale with default\n locale: config.locale ?? 'en-US',\n\n // I18n with defaults\n i18n: {\n toast: {\n closeLabel: config.i18n?.toast?.closeLabel ?? 'Close',\n },\n button: {\n loadingText: config.i18n?.button?.loadingText ?? 'Loading...',\n },\n common: {\n confirm: config.i18n?.common?.confirm ?? 'Confirm',\n cancel: config.i18n?.common?.cancel ?? 'Cancel',\n ok: config.i18n?.common?.ok ?? 'OK',\n },\n },\n\n // Z-index with defaults\n zIndex: {\n toast: config.zIndex?.toast ?? 9999,\n modal: config.zIndex?.modal ?? 10000,\n dropdown: config.zIndex?.dropdown ?? 1000,\n tooltip: config.zIndex?.tooltip ?? 1001,\n },\n\n // Animation with defaults\n animation: {\n duration: config.animation?.duration ?? 200,\n easing: config.animation?.easing ?? 'cubic-bezier(0.4, 0, 0.2, 1)',\n disabled: config.animation?.disabled ?? false,\n },\n\n // A11y with defaults\n a11y: {\n announceMessages: config.a11y?.announceMessages ?? true,\n focusVisible: config.a11y?.focusVisible ?? true,\n reduceMotion: config.a11y?.reduceMotion ?? false,\n },\n };\n};\n\n/**\n * Merge multiple configs (useful for extending base configs)\n */\nexport const mergeUIConfig = (baseConfig: UIConfig, ...configs: Partial<UIConfig>[]): UIConfig => {\n const merged = configs.reduce((acc, config) => ({\n ...acc,\n ...config,\n toast: { ...acc.toast, ...config.toast },\n i18n: { ...acc.i18n, ...config.i18n },\n zIndex: { ...acc.zIndex, ...config.zIndex },\n animation: { ...acc.animation, ...config.animation },\n a11y: { ...acc.a11y, ...config.a11y },\n }), baseConfig);\n\n return merged as UIConfig;\n};\n\n","export { UIConfigProvider, useUIConfig } from './UIConfigProvider';\nexport type { UIConfigProviderProps } from './UIConfigProvider';\n\nexport { createUIConfig, mergeUIConfig } from './createUIConfig';\n\nexport {\n initUIConfig,\n getUIConfig,\n getGlobalIconRegistry,\n getGlobalToastConfig,\n} from './configManager';\n\nexport type {\n UIConfig,\n ToastConfig,\n ToastPosition,\n ZIndexConfig,\n AnimationConfig,\n A11yConfig,\n I18nConfig,\n} from './types';\n\n","/**\n * Number locale configuration\n */\nexport interface NumberLocaleConfig {\n /**\n * Decimal separator (e.g., '.' for en-US, ',' for de-DE)\n */\n decimalSeparator: string;\n /**\n * Thousands separator (e.g., ',' for en-US, '.' for de-DE, ' ' for fr-FR)\n */\n thousandsSeparator: string;\n}\n\n/**\n * Cache for locale configs to avoid repeated Intl.NumberFormat calls\n */\nconst localeConfigCache = new Map<string, NumberLocaleConfig>();\n\n/**\n * Get number locale configuration from a locale string\n * Uses Intl.NumberFormat to automatically detect the correct separators\n *\n * @param locale - Locale string (e.g., 'en-US', 'de-DE', 'fr-FR')\n * @returns NumberLocaleConfig with decimal and thousands separators\n *\n * @example\n * getNumberLocaleConfig('en-US') // { decimalSeparator: '.', thousandsSeparator: ',' }\n * getNumberLocaleConfig('de-DE') // { decimalSeparator: ',', thousandsSeparator: '.' }\n * getNumberLocaleConfig('fr-FR') // { decimalSeparator: ',', thousandsSeparator: ' ' }\n */\nexport const getNumberLocaleConfig = (locale: string): NumberLocaleConfig => {\n // Check cache first\n const cached = localeConfigCache.get(locale);\n if (cached) {\n return cached;\n }\n\n try {\n const formatter = new Intl.NumberFormat(locale);\n const parts = formatter.formatToParts(1234.5);\n\n const decimal = parts.find((p) => p.type === 'decimal')?.value ?? '.';\n const group = parts.find((p) => p.type === 'group')?.value ?? ',';\n\n const config: NumberLocaleConfig = {\n decimalSeparator: decimal,\n thousandsSeparator: group,\n };\n\n // Cache the result\n localeConfigCache.set(locale, config);\n\n return config;\n } catch {\n // Fallback to en-US format if locale is invalid\n const fallback: NumberLocaleConfig = {\n decimalSeparator: '.',\n thousandsSeparator: ',',\n };\n return fallback;\n }\n};\n\n/**\n * Format a number according to locale with optional precision\n *\n * @param value - The number to format\n * @param locale - Locale string (e.g., 'en-US', 'de-DE')\n * @param precision - Optional number of decimal places\n * @returns Formatted number string with locale-appropriate separators\n *\n * @example\n * formatNumber(1234.56, 'en-US') // '1,234.56'\n * formatNumber(1234.56, 'de-DE') // '1.234,56'\n * formatNumber(1234.56, 'fr-FR') // '1 234,56'\n * formatNumber(1234.5, 'en-US', 2) // '1,234.50'\n */\nexport const formatNumber = (value: number, locale: string, precision?: number): string => {\n try {\n const options: Intl.NumberFormatOptions = {};\n\n if (precision !== undefined) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n }\n\n return new Intl.NumberFormat(locale, options).format(value);\n } catch {\n // Fallback to basic formatting if locale is invalid\n if (precision !== undefined) {\n return value.toFixed(precision);\n }\n return String(value);\n }\n};\n\n/**\n * Format a number for editing (without thousands separator, using locale decimal separator)\n * This is used when the input is focused to make editing easier\n *\n * @param value - The number to format\n * @param locale - Locale string (e.g., 'en-US', 'de-DE')\n * @param precision - Optional number of decimal places\n * @returns Formatted number string without thousands separator\n *\n * @example\n * formatNumberForEdit(1234.56, 'en-US') // '1234.56'\n * formatNumberForEdit(1234.56, 'de-DE') // '1234,56'\n */\nexport const formatNumberForEdit = (value: number, locale: string, precision?: number): string => {\n const config = getNumberLocaleConfig(locale);\n\n let str: string;\n if (precision !== undefined) {\n str = value.toFixed(precision);\n } else {\n str = String(value);\n }\n\n // Replace standard decimal separator with locale-specific one\n if (config.decimalSeparator !== '.') {\n str = str.replace('.', config.decimalSeparator);\n }\n\n return str;\n};\n\n/**\n * Parse a localized number string to a number\n *\n * @param value - The localized number string to parse\n * @param locale - Locale string (e.g., 'en-US', 'de-DE')\n * @returns Parsed number or null if parsing fails\n *\n * @example\n * parseLocalizedNumber('1,234.56', 'en-US') // 1234.56\n * parseLocalizedNumber('1.234,56', 'de-DE') // 1234.56\n * parseLocalizedNumber('1 234,56', 'fr-FR') // 1234.56\n */\nexport const parseLocalizedNumber = (value: string, locale: string): number | null => {\n if (!value || value.trim() === '') {\n return null;\n }\n\n const config = getNumberLocaleConfig(locale);\n let normalized = value.trim();\n\n // Handle the case where thousands and decimal separators might conflict\n // We need to be careful about the order of replacements\n\n if (config.thousandsSeparator === '.' && config.decimalSeparator === ',') {\n // German-style: 1.234,56\n // First remove thousands separators (dots)\n normalized = normalized.replace(/\\./g, '');\n // Then replace decimal separator (comma) with dot\n normalized = normalized.replace(',', '.');\n } else if (config.decimalSeparator === ',') {\n // French-style or similar: 1 234,56 (handles space, non-breaking space, narrow no-break space)\n // Remove all types of spaces used as thousands separators\n normalized = normalized.replace(/[\\s\\u00A0\\u202F]/g, '');\n // Replace comma decimal separator with dot\n normalized = normalized.replace(',', '.');\n } else if (config.thousandsSeparator === ',' && config.decimalSeparator === '.') {\n // English-style: 1,234.56\n normalized = normalized.replace(/,/g, '');\n } else {\n // Generic fallback: remove thousands separator, replace decimal separator\n if (config.thousandsSeparator) {\n const escapedThousands = config.thousandsSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n normalized = normalized.replace(new RegExp(escapedThousands, 'g'), '');\n }\n if (config.decimalSeparator !== '.') {\n normalized = normalized.replace(config.decimalSeparator, '.');\n }\n }\n\n const parsed = parseFloat(normalized);\n return isNaN(parsed) ? null : parsed;\n};\n\n/**\n * Clear the locale config cache (useful for testing)\n */\nexport const clearLocaleConfigCache = (): void => {\n localeConfigCache.clear();\n};\n","import { styled } from \"../utils/styled\";\nimport { LineType } from \"./NumberInput\";\n\nexport const NumberInputContainer = styled.div<{\n $size: 'small' | 'large';\n $disabled: boolean;\n $alert: boolean;\n $isFocused: boolean;\n $lineType: LineType;\n}>`\n display: inline-flex;\n align-items: center;\n background: white;\n border-radius: ${({ theme, $size }) => theme.components.inputNumber[$size].borderRadius};\n flex-shrink: 0;\n\n ${({ $size }) =>\n $size === 'small'\n ? `\n height: 24px;\n width: 72px;\n `\n : `\n height: 32px;\n width: 80px;\n `}\n\n ${({ $disabled, $alert, $isFocused, $lineType, theme }) => {\n if ($lineType === 'borderless') {\n // borderless type: no border, no boxShadow\n return `\n border: none;\n background: transparent;\n ${$disabled ? 'cursor: not-allowed;' : ''}\n `;\n }\n\n if ($lineType === 'underlined') {\n // underlined type: bottom border only\n const borderColor = $disabled\n ? theme.colors.palettes.transparency['10']\n : $alert\n ? theme.colors.palettes.red['6']\n : $isFocused\n ? theme.colors.palettes.transparency['30']\n : 'transparent';\n\n return `\n border: none;\n border-bottom: 1px solid ${borderColor};\n border-radius: 0;\n ${$disabled ? 'cursor: not-allowed;' : ''}\n ${!$disabled && !$isFocused && !$alert\n ? `\n &:hover {\n border-bottom-color: ${theme.colors.palettes.transparency['20']};\n }\n `\n : ''\n }\n `;\n }\n\n // outlined type (default): full border\n if ($disabled) {\n return `\n border: 1px solid ${theme.colors.palettes.transparency['10']};\n cursor: not-allowed;\n `;\n }\n if ($alert) {\n return `\n border: 1px solid ${theme.colors.palettes.red['6']};\n `;\n }\n if ($isFocused) {\n return `\n border: 1px solid ${theme.colors.palettes.transparency['30']};\n box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.04);\n `;\n }\n return `\n border: 1px solid ${theme.colors.palettes.transparency['10']};\n\n &:hover {\n border-color: ${theme.colors.palettes.transparency['20']};\n box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.04);\n }\n `;\n }}\n`;\n\nexport const InputWrapper = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n padding: 0 8px;\n min-width: 0;\n`;\n\nexport const StyledInput = styled.input<{ $size: 'small' | 'large'; $disabled: boolean }>`\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n font-family: 'PingFang SC', sans-serif;\n font-weight: 400;\n line-height: 20px;\n padding: 0;\n margin: 0;\n\n ${({ $size }) =>\n $size === 'small'\n ? `\n font-size: 12px;\n `\n : `\n font-size: 13px;\n `}\n\n ${({ $disabled, theme }) =>\n $disabled\n ? `\n color: ${theme.colors.palettes.transparency['30']};\n cursor: not-allowed;\n `\n : `\n color: ${theme.colors.palettes.gray['120']};\n `}\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.palettes.transparency['30']};\n }\n\n /* Remove number input arrows */\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n &[type='number'] {\n appearance: textfield;\n -moz-appearance: textfield;\n }\n`;\n\nexport const ButtonGroup = styled.div<{ $alert: boolean; $disabled: boolean; $lineType: LineType }>`\n display: flex;\n flex-direction: column;\n height: 100%;\n flex-shrink: 0;\n position: relative;\n\n ${({ $disabled, $alert, $lineType, theme }) => {\n // No left border for borderless and underlined types\n if ($lineType === 'borderless' || $lineType === 'underlined') {\n return '';\n }\n\n // outlined type: show left border\n const borderColor = $disabled\n ? theme.colors.palettes.transparency['10']\n : $alert\n ? theme.colors.palettes.red['6']\n : theme.colors.palettes.transparency['10'];\n\n return `border-left: 1px solid ${borderColor};`;\n }}\n\n /* Centered divider line between buttons */\n &::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n height: 1px;\n pointer-events: none;\n background-color: ${({ $disabled, $alert, $lineType, theme }) => {\n // No divider for borderless and underlined types\n if ($lineType === 'borderless' || $lineType === 'underlined') {\n return 'transparent';\n }\n\n if ($disabled) {\n return theme.colors.palettes.transparency['10'];\n }\n if ($alert) {\n return theme.colors.palettes.red['6'];\n }\n return theme.colors.palettes.transparency['10'];\n }};\n }\n`;\n\nexport const StepButton = styled.button<{ $disabled: boolean }>`\n flex: 1 1 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 1px 8px;\n outline: none;\n min-height: 0;\n overflow: hidden;\n\n ${({ $disabled, theme }) => {\n if ($disabled) {\n return `\n cursor: not-allowed;\n opacity: 0.4;\n `;\n }\n return `\n &:hover {\n background-color: ${theme.colors.palettes.transparency['5']};\n }\n\n &:active {\n background-color: ${theme.colors.palettes.transparency['10']};\n }\n `;\n }}\n\n svg {\n width: 14px;\n height: 14px;\n fill: ${({ $disabled, theme }) =>\n $disabled ? theme.colors.palettes.transparency['30'] : theme.colors.palettes.gray['120']};\n }\n`;\n","import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { useUIConfig } from '../UIConfigProvider';\nimport { formatNumber, formatNumberForEdit, parseLocalizedNumber } from '../utils/numberLocale';\nimport type { ValueMap, ValueMapExtended } from '../Slider/valueMap';\nimport { extendValueMap, changeByStep, snapToStep } from '../Slider/valueMap';\nimport { ButtonGroup, InputWrapper, NumberInputContainer, StepButton, StyledInput } from './NumberInput.styled';\n\nexport type LineType = 'outlined' | 'underlined' | 'borderless';\n\n/**\n * Get the number of decimal places in a number\n */\nconst getDecimalPlaces = (num: number): number => {\n const str = String(num);\n const decimalIndex = str.indexOf('.');\n if (decimalIndex === -1) return 0;\n return str.length - decimalIndex - 1;\n};\n\n/**\n * Precision-safe addition to avoid floating point errors\n * e.g., 0.1 + 0.2 = 0.30000000000000004 -> 0.3\n */\nconst precisionAdd = (a: number, b: number): number => {\n const precision = Math.max(getDecimalPlaces(a), getDecimalPlaces(b));\n const multiplier = Math.pow(10, precision);\n return Math.round(a * multiplier + b * multiplier) / multiplier;\n};\n\n/**\n * Precision-safe subtraction to avoid floating point errors\n * e.g., 0.11 - 0.1 = 0.009999999999999998 -> 0.01\n */\nconst precisionSubtract = (a: number, b: number): number => {\n const precision = Math.max(getDecimalPlaces(a), getDecimalPlaces(b));\n const multiplier = Math.pow(10, precision);\n return Math.round(a * multiplier - b * multiplier) / multiplier;\n};\n\nexport interface NumberInputProps {\n /**\n * Current value\n */\n value?: number;\n /**\n * Default value\n */\n defaultValue?: number;\n /**\n * Minimum value\n */\n min?: number;\n /**\n * Maximum value\n */\n max?: number;\n /**\n * Step increment/decrement\n */\n step?: number;\n /**\n * Size variant\n */\n size?: 'small' | 'large';\n /**\n * Whether the input is disabled\n */\n disabled?: boolean;\n /**\n * Whether to show alert state (red border)\n */\n alert?: boolean;\n /**\n * Number of decimal places\n */\n precision?: number;\n /**\n * Format the display value\n */\n formatter?: (value: number) => string;\n /**\n * Parse the input value\n */\n parser?: (displayValue: string) => number;\n /**\n * Unit text to display after the input\n */\n unit?: string;\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Whether to show step buttons (increment/decrement)\n * @default true\n */\n showStepButtons?: boolean;\n /**\n * Trigger mode for showing step buttons\n * - 'normal': always show (default)\n * - 'hover': show only on hover\n * @default 'normal'\n */\n showStepButtonsTrigger?: 'hover' | 'normal';\n /**\n * Input line type\n * - 'outlined': with full border (default)\n * - 'underlined': with bottom border only\n * - 'borderless': no border\n * @default 'outlined'\n */\n lineType?: LineType;\n /**\n * Whether to use thousands separator in display\n * @default false\n */\n useThousandsSeparator?: boolean;\n /**\n * Value map for piecewise linear mapping (non-linear stepping)\n * When provided, min/max/step props are ignored\n */\n valueMap?: ValueMap;\n /**\n * Callback when value changes\n * @param fixedValue - The clamped value within min/max range (can be undefined if empty)\n * @param rawValue - The original input value before clamping (can be undefined if empty)\n */\n onChange?: (fixedValue: number | undefined, rawValue: number | undefined) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Callback when input receives focus\n */\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * Callback when input loses focus\n */\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * Callback when input value changes during typing\n * Useful for real-time validation (e.g., check if value is multiple of 3)\n * @param inputValue - The raw input string\n * @param parsedValue - The parsed number value (undefined if invalid)\n */\n onInputChange?: (inputValue: string, parsedValue: number | undefined) => void;\n /**\n * Whether to select all text when the input receives focus\n * @default false\n */\n selectAllOnFocus?: boolean;\n /**\n * Whether to blur the input when Escape key is pressed\n * @default true\n */\n blurOnEscape?: boolean;\n}\n\n\nconst UpArrow = () => (\n <svg viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.5L10.5 8.5H3.5L7 4.5Z\" fill=\"currentColor\" />\n </svg>\n);\n\nconst DownArrow = () => (\n <svg viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 9.5L3.5 5.5H10.5L7 9.5Z\" fill=\"currentColor\" />\n </svg>\n);\n\n/**\n * NumberInput Component\n *\n * A numeric input with increment/decrement buttons\n *\n * @example\n * <NumberInput value={35} onChange={(val) => console.log(val)} />\n */\nexport const NumberInput: React.FC<NumberInputProps> = ({\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n size = 'large',\n disabled = false,\n alert = false,\n precision,\n formatter,\n parser,\n unit,\n placeholder,\n showStepButtons = true,\n showStepButtonsTrigger = 'normal',\n lineType = 'outlined',\n useThousandsSeparator = false,\n valueMap: valueMapProp,\n onChange,\n className,\n style,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n onInputChange,\n selectAllOnFocus = false,\n blurOnEscape = true,\n}) => {\n const config = useUIConfig();\n const locale = config?.locale ?? 'en-US';\n\n const [internalValue, setInternalValue] = useState<number | undefined>(controlledValue ?? defaultValue);\n const [displayValue, setDisplayValue] = useState<string>('');\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Create extended value map when valueMap is provided\n const extendedValueMap: ValueMapExtended | undefined = useMemo(() => {\n if (!valueMapProp) return undefined;\n return extendValueMap(valueMapProp);\n }, [valueMapProp]);\n\n // Derive effective min/max from value map or props\n const effectiveMin = extendedValueMap ? extendedValueMap.start : min;\n const effectiveMax = extendedValueMap ? extendedValueMap.end : max;\n\n // Format value for display (optionally with thousands separator and unit)\n const formatValue = useCallback(\n (val: number | undefined): string => {\n if (val === undefined) {\n return '';\n }\n let formatted: string;\n if (formatter) {\n formatted = formatter(val);\n } else if (useThousandsSeparator) {\n formatted = formatNumber(val, locale, precision);\n } else {\n formatted = formatNumberForEdit(val, locale, precision);\n }\n // Append unit directly to the number for display\n if (unit) {\n return formatted + unit;\n }\n return formatted;\n },\n [formatter, precision, locale, useThousandsSeparator, unit]\n );\n\n // Format value for editing (without thousands separator, for easier input)\n const formatValueForEdit = useCallback(\n (val: number | undefined): string => {\n if (val === undefined) {\n return '';\n }\n if (formatter) {\n return formatter(val);\n }\n return formatNumberForEdit(val, locale, precision);\n },\n [formatter, precision, locale]\n );\n\n // Parse display value to number (handles locale-specific separators)\n const parseValue = useCallback(\n (displayVal: string): number | null => {\n if (parser) {\n return parser(displayVal);\n }\n return parseLocalizedNumber(displayVal, locale);\n },\n [parser, locale]\n );\n\n // Update display value when value changes\n useEffect(() => {\n if (!isFocused) {\n setDisplayValue(formatValue(value));\n }\n }, [value, isFocused, formatValue]);\n\n // Apply precision to a value (rounds to specified decimal places)\n const applyPrecision = useCallback(\n (val: number | undefined): number | undefined => {\n if (val === undefined || precision === undefined) {\n return val;\n }\n // Use toFixed and parseFloat to round to precision\n // This ensures 0.006 with precision=2 becomes 0.01\n const multiplier = Math.pow(10, precision);\n return Math.round(val * multiplier) / multiplier;\n },\n [precision]\n );\n\n // Clamp value to min/max\n const clampValue = useCallback(\n (val: number | undefined): number | undefined => {\n if (val === undefined) {\n return undefined;\n }\n return Math.max(effectiveMin, Math.min(effectiveMax, val));\n },\n [effectiveMin, effectiveMax]\n );\n\n // Handle value change\n const handleValueChange = useCallback(\n (newValue: number | undefined) => {\n const clampedValue = clampValue(newValue);\n\n if (controlledValue === undefined) {\n setInternalValue(clampedValue);\n }\n\n onChange?.(clampedValue, newValue);\n },\n [clampValue, controlledValue, onChange]\n );\n\n // Increment value\n const increment = useCallback(() => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = extendedValueMap\n ? changeByStep(currentValue, 1, extendedValueMap)\n : precisionAdd(currentValue, step);\n handleValueChange(newValue);\n // If focused, sync displayValue immediately (use edit format without thousands separator)\n if (isFocused) {\n const clampedValue = clampValue(newValue);\n setDisplayValue(formatValueForEdit(clampedValue));\n }\n }, [disabled, value, step, handleValueChange, isFocused, clampValue, formatValueForEdit, extendedValueMap]);\n\n // Decrement value\n const decrement = useCallback(() => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = extendedValueMap\n ? changeByStep(currentValue, -1, extendedValueMap)\n : precisionSubtract(currentValue, step);\n handleValueChange(newValue);\n // If focused, sync displayValue immediately (use edit format without thousands separator)\n if (isFocused) {\n const clampedValue = clampValue(newValue);\n setDisplayValue(formatValueForEdit(clampedValue));\n }\n }, [disabled, value, step, handleValueChange, isFocused, clampValue, formatValueForEdit, extendedValueMap]);\n\n // Handle input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n setDisplayValue(inputValue);\n\n // Parse and call onInputChange callback\n const trimmed = inputValue.trim();\n const parsedValue = trimmed === '' ? undefined : (parseValue(trimmed) ?? undefined);\n onInputChange?.(inputValue, parsedValue);\n },\n [parseValue, onInputChange]\n );\n\n // Handle input blur\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n const trimmedValue = displayValue.trim();\n if (trimmedValue === '') {\n handleValueChange(undefined);\n setDisplayValue('');\n } else {\n const parsed = parseValue(trimmedValue);\n if (parsed !== null) {\n // Apply precision to ensure stored value matches displayed value\n const preciseValue = applyPrecision(parsed);\n // Snap to step when valueMap is provided\n const finalValue = extendedValueMap && preciseValue !== undefined\n ? snapToStep(preciseValue, extendedValueMap)\n : preciseValue;\n handleValueChange(finalValue);\n } else {\n setDisplayValue(formatValue(value));\n }\n }\n onBlurProp?.(e);\n },\n [displayValue, parseValue, handleValueChange, value, formatValue, applyPrecision, onBlurProp, extendedValueMap]\n );\n\n // Handle input focus\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n // Use edit format (without thousands separator) for easier editing\n setDisplayValue(formatValueForEdit(value));\n if (selectAllOnFocus) {\n // Use requestAnimationFrame to select after React updates the display value\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n onFocusProp?.(e);\n },\n [value, formatValueForEdit, onFocusProp, selectAllOnFocus]\n );\n\n // Handle keyboard events\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n increment();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n decrement();\n } else if (e.key === 'Enter') {\n inputRef.current?.blur();\n } else if (e.key === 'Escape' && blurOnEscape) {\n inputRef.current?.blur();\n }\n },\n [increment, decrement, blurOnEscape]\n );\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n return (\n <NumberInputContainer\n $size={size}\n $disabled={disabled}\n $alert={alert}\n $isFocused={isFocused}\n $lineType={lineType}\n className={className}\n style={style}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <InputWrapper>\n <StyledInput\n ref={inputRef}\n type=\"text\"\n value={displayValue}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n $size={size}\n $disabled={disabled}\n />\n </InputWrapper>\n\n {showStepButtons && (showStepButtonsTrigger !== 'hover' || isHovered || isFocused) && (\n <ButtonGroup $alert={alert} $disabled={disabled} $lineType={lineType}>\n <StepButton\n type=\"button\"\n $disabled={disabled}\n onClick={increment}\n disabled={disabled}\n tabIndex={-1}\n >\n <UpArrow />\n </StepButton>\n\n <StepButton\n type=\"button\"\n $disabled={disabled}\n onClick={decrement}\n disabled={disabled}\n tabIndex={-1}\n >\n <DownArrow />\n </StepButton>\n </ButtonGroup>\n )}\n </NumberInputContainer>\n );\n};\n\nNumberInput.displayName = 'NumberInput';\n","export { NumberInput } from './NumberInput';\nexport type { NumberInputProps } from './NumberInput';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\nimport { Slider } from '../Slider';\nimport { NumberInput, NumberInputProps } from '../NumberInput';\nimport type { ValueMap } from '../Slider/valueMap';\n\nexport interface SpinButtonProps {\n /**\n * Current value\n */\n value?: number;\n /**\n * Default value\n */\n defaultValue?: number;\n /**\n * Minimum value\n */\n min?: number;\n /**\n * Maximum value\n */\n max?: number;\n /**\n * Step increment/decrement\n */\n step?: number;\n /**\n * Size variant\n */\n size?: 'small' | 'large';\n /**\n * Whether the input is disabled\n */\n disabled?: boolean;\n /**\n * Whether to show alert state (red border)\n */\n alert?: boolean;\n /**\n * Whether to show the slider\n */\n showSlider?: boolean;\n /**\n * Number of decimal places\n */\n precision?: number;\n /**\n * Format the display value\n */\n formatter?: (value: number) => string;\n /**\n * Parse the input value\n */\n parser?: (displayValue: string) => number;\n /**\n * Value map for piecewise linear mapping (non-linear stepping)\n * When provided, min/max/step props are ignored in NumberInput and Slider\n */\n valueMap?: ValueMap;\n /**\n * Callback when value changes\n */\n onChange?: (value: number | null) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Additional props passed to the internal NumberInput component\n * Allows customizing unit, placeholder, lineType, showStepButtons, etc.\n */\n inputProps?: Partial<\n Omit<\n NumberInputProps,\n | 'value'\n | 'defaultValue'\n | 'min'\n | 'max'\n | 'step'\n | 'size'\n | 'disabled'\n | 'alert'\n | 'precision'\n | 'formatter'\n | 'parser'\n | 'valueMap'\n | 'onChange'\n | 'className'\n | 'style'\n >\n >;\n}\n\nconst SpinButtonWrapper = styled.div<{\n $showSlider: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n gap: ${({ $showSlider }) => ($showSlider ? '0' : '0')};\n width: ${({ $showSlider }) => ($showSlider ? '100%' : 'auto')};\n`;\n\nconst SliderWrapper = styled.div<{\n $size: 'small' | 'large';\n}>`\n flex: 1;\n display: flex;\n align-items: center;\n padding: ${({ $size }) => ($size === 'small' ? '7px 0' : '7px 0')};\n padding-right: ${({ $size }) => ($size === 'small' ? '8px' : '8px')};\n min-width: 0;\n`;\n\n\n/**\n * SpinButton Component - Spin Button\n *\n * A numeric input with increment/decrement buttons\n *\n * @example\n * <SpinButton value={35} onChange={(val) => console.log(val)} />\n */\nexport const SpinButton: React.FC<SpinButtonProps> = ({\n value: controlledValue,\n defaultValue = 0,\n min = -Infinity,\n max = Infinity,\n step = 1,\n size = 'large',\n disabled = false,\n alert = false,\n showSlider = false,\n precision,\n formatter,\n parser,\n valueMap,\n onChange,\n className,\n style,\n inputProps,\n}) => {\n const [internalValue, setInternalValue] = useState<number>(controlledValue ?? defaultValue);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Handle value change from NumberInput or Slider\n // NumberInput passes (fixedValue, rawValue), Slider passes single value\n const handleValueChange = useCallback(\n (fixedValue: number | undefined | null, rawValue?: number | undefined) => {\n // Handle both NumberInput signature (fixedValue, rawValue) and Slider signature (single value)\n // If rawValue is undefined, it means this is from Slider (single value)\n // If rawValue is defined, it means this is from NumberInput (two parameters)\n const newValue = rawValue === undefined\n ? (fixedValue ?? 0) // Slider: single value\n : (fixedValue ?? 0); // NumberInput: use fixedValue\n\n if (newValue === null) {\n onChange?.(null);\n return;\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n\n onChange?.(newValue);\n },\n [controlledValue, onChange]\n );\n\n return (\n <SpinButtonWrapper $showSlider={showSlider} className={className} style={style}>\n {showSlider && (\n <SliderWrapper $size={size}>\n <Slider\n value={value}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n valueMap={valueMap}\n onChange={handleValueChange}\n />\n </SliderWrapper>\n )}\n\n <NumberInput\n value={value}\n min={min}\n max={max}\n step={step}\n size={size}\n disabled={disabled}\n alert={alert}\n precision={precision}\n formatter={formatter}\n parser={parser}\n valueMap={valueMap}\n {...inputProps}\n onChange={handleValueChange}\n />\n </SpinButtonWrapper>\n );\n};\n\nSpinButton.displayName = 'SpinButton';\n","export { Button } from './Button';\nexport type { ButtonProps } from './Button';\n\nexport { SpinButton } from './SpinButton';\nexport type { SpinButtonProps } from './SpinButton';\n\n","export { Button, SpinButton } from './Button';\nexport type { ButtonProps, SpinButtonProps } from './Button';\n\nexport { Switch } from './Switch';\nexport type { SwitchProps } from './Switch';\n\nexport { Radio } from './Radio';\nexport type { RadioProps } from './Radio';\n\nexport { Checkbox } from './Checkbox';\nexport type { CheckboxProps } from './Checkbox';\n\nexport { Slider } from './Slider';\nexport type { SliderProps } from './Slider';\n\nexport { Input, SearchInput, UnderlinedInput } from './Input';\nexport type { InputProps, SearchInputProps, UnderlinedInputProps } from './Input';\n\nexport { NumberInput } from './NumberInput';\nexport type { NumberInputProps } from './NumberInput';\n\nexport { Icon, IconProvider, useIconRegistry } from './Icon';\nexport type { IconProps, IconProviderProps, IconRegistry, IconComponent } from './Icon';\n\nexport { Toast, ToastContainer, useToast, toast } from './Toast';\nexport type { ToastProps, ToastContainerProps, ToastContainerConfig } from './Toast';\n\nexport { Tabs } from './Tabs';\nexport type { TabsProps, TabItem } from './Tabs';\n\nexport { Tooltip } from './Tooltip';\nexport type { TooltipProps } from './Tooltip';\n\nexport { ToolbarButton } from './ToolbarButton';\nexport type { ToolbarButtonProps } from './ToolbarButton';\n\nexport { DropdownButton, Menu, Dropdown, MenuGlobalStyles, DropdownGlobalStyles } from './dropdown';\nexport type { DropdownButtonProps, MenuProps, MenuItem, MenuGroup, MenuDivider, MenuItemType, DropdownProps } from './dropdown';\n\nexport { Modal, ModalGlobalStyles } from './Modal';\nexport type { ModalProps } from './Modal';\n\nexport { Loading } from './Loading';\nexport type { LoadingProps } from './Loading';\n\nexport {\n UIConfigProvider,\n useUIConfig,\n createUIConfig,\n mergeUIConfig,\n initUIConfig,\n getUIConfig,\n getGlobalIconRegistry,\n getGlobalToastConfig,\n} from './UIConfigProvider';\n\nexport type {\n UIConfigProviderProps,\n UIConfig,\n ToastConfig,\n ToastPosition,\n ZIndexConfig,\n AnimationConfig,\n A11yConfig,\n I18nConfig,\n} from './UIConfigProvider';\n\nexport { styled } from './utils/styled';\nexport { getGlobalTheme } from './utils/context';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\n\nexport interface SwitchProps {\n /**\n * Whether the switch is checked\n */\n checked?: boolean;\n /**\n * Default checked state\n */\n defaultChecked?: boolean;\n /**\n * Size variant\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * Whether the switch is disabled\n */\n disabled?: boolean;\n /**\n * Callback when checked state changes\n */\n onChange?: (checked: boolean) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst SwitchContainer = styled.label<{\n $size: 'small' | 'medium' | 'large';\n $checked: boolean;\n $disabled: boolean;\n}>`\n position: relative;\n display: inline-block;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components.switch[$size];\n return `\n width: ${sizeConfig.container.width};\n height: ${sizeConfig.container.height};\n `;\n }}\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst Track = styled.div<{\n $size: 'small' | 'medium' | 'large';\n $checked: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n inset: 0;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n transition: ${({ theme }) => theme.components.switch.transition || 'all 0.2s ease'};\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components.switch[$size];\n return `\n border-radius: ${sizeConfig.track.borderRadius};\n width: ${sizeConfig.track.width};\n height: ${sizeConfig.track.height};\n `;\n }}\n\n ${({ $checked, $disabled, theme }) => {\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n if ($disabled) {\n return `\n background: ${stateConfig.track.backgroundDisabled};\n box-shadow: ${stateConfig.track.boxShadowDisabled};\n `;\n }\n\n return `\n background: ${stateConfig.track.background};\n box-shadow: ${stateConfig.track.boxShadow};\n `;\n }}\n\n ${({ $disabled, $checked, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n return `\n :hover {\n background: ${stateConfig.track.backgroundHover};\n box-shadow: ${stateConfig.track.boxShadowHover};\n }\n `;\n }}\n`;\n\nconst Thumb = styled.div<{\n $size: 'small' | 'medium' | 'large';\n $checked: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n top: 50%;\n border-style: solid;\n box-sizing: border-box;\n left: 0;\n transition: ${({ theme }) => theme.components.switch.transition || 'all 0.2s ease'};\n\n ${({ $size, $checked, theme }) => {\n const sizeConfig = theme.components.switch[$size];\n const thumbSize = sizeConfig.thumb.size;\n const thumbOffset = sizeConfig.thumb.offset;\n const thumbBorderRadius = sizeConfig.thumb.borderRadius;\n const thumbBorderWidth = sizeConfig.thumb.borderWidth;\n\n // Calculate thumb position based on track width\n const trackWidth = sizeConfig.container.width;\n const thumbSizeNum = parseFloat(thumbSize);\n const offsetNum = parseFloat(thumbOffset);\n const trackWidthNum = parseFloat(trackWidth);\n\n // Position from left (unchecked: offset, checked: trackWidth - thumbSize - offset)\n const leftPosition = $checked\n ? `${trackWidthNum - thumbSizeNum - offsetNum}px`\n : thumbOffset;\n\n return `\n width: ${thumbSize};\n height: ${thumbSize};\n border-radius: ${thumbBorderRadius};\n border-width: ${thumbBorderWidth};\n transform: translate(${leftPosition}, -50%);\n `;\n }}\n\n ${({ $checked, $disabled, theme }) => {\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n if ($disabled) {\n return `\n background: ${stateConfig.thumb.backgroundDisabled};\n border-color: ${stateConfig.thumb.borderColorDisabled};\n box-shadow: ${stateConfig.thumb.boxShadowDisabled};\n `;\n }\n\n return `\n background: ${stateConfig.thumb.background};\n border-color: ${stateConfig.thumb.borderColor};\n box-shadow: ${stateConfig.thumb.boxShadow};\n `;\n }}\n\n ${({ $disabled, $checked, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n return `\n :hover & {\n background: ${stateConfig.thumb.backgroundHover};\n border-color: ${stateConfig.thumb.borderColorHover};\n box-shadow: ${stateConfig.thumb.boxShadowHover};\n }\n `;\n }}\n`;\n\n/**\n * Switch Component\n *\n * A toggle switch for binary states\n *\n * @example\n * <Switch checked={true} onChange={(checked) => console.log(checked)} />\n */\nexport const Switch: React.FC<SwitchProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n size = 'large',\n disabled = false,\n onChange,\n className,\n style,\n}) => {\n const [internalChecked, setInternalChecked] = useState<boolean>(\n controlledChecked ?? defaultChecked\n );\n const [isFocused, setIsFocused] = useState(false);\n\n const checked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (controlledChecked === undefined) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(newChecked);\n },\n [disabled, controlledChecked, onChange]\n );\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n return (\n <SwitchContainer\n $size={size}\n $checked={checked}\n $disabled={disabled}\n className={className}\n style={style}\n >\n <HiddenInput\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n />\n <Track\n $size={size}\n $checked={checked}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n <Thumb\n $size={size}\n $checked={checked}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n </SwitchContainer>\n );\n};\n\nSwitch.displayName = 'Switch';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\n\nexport interface RadioProps {\n /**\n * Whether the radio is checked\n * @default false\n */\n checked?: boolean;\n /**\n * Default checked state\n * @default false\n */\n defaultChecked?: boolean;\n /**\n * Whether the radio is disabled\n */\n disabled?: boolean;\n /**\n * Value of the radio\n */\n value?: string | number;\n /**\n * Name attribute for grouping radios\n */\n name?: string;\n /**\n * ID attribute for the radio (used with htmlFor in labels)\n */\n id?: string;\n /**\n * Callback when checked state changes\n */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * prevent default click event, if true, change event will not be triggered\n * @default false\n */\n clickPreventDefault?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst RadioContainer = styled.label<{\n $disabled: boolean;\n}>`\n position: relative;\n display: inline-block;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n\n ${({ theme }) => {\n const sizeConfig = theme.components.radio.small;\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n `;\n }}\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst RadioOuter = styled.div<{\n $checked: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n inset: 0;\n border-radius: 50%;\n border: 1px solid;\n transition: all 0.2s ease;\n\n ${({ $checked, $disabled, theme }) => {\n if ($disabled) {\n const stateConfig = $checked\n ? theme.components.radio.checked\n : theme.components.radio.unchecked;\n return `\n background: ${stateConfig.backgroundDisabled};\n border-color: ${stateConfig.borderColorDisabled};\n `;\n }\n\n if ($checked) {\n const checkedConfig = theme.components.radio.checked;\n return `\n background: ${checkedConfig.background};\n border-color: ${checkedConfig.borderColor};\n `;\n }\n\n const uncheckedConfig = theme.components.radio.unchecked;\n return `\n background: ${uncheckedConfig.background};\n border-color: ${uncheckedConfig.borderColor};\n `;\n }}\n\n ${({ $disabled, $checked, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked\n ? theme.components.radio.checked\n : theme.components.radio.unchecked;\n\n return `\n :hover & {\n background: ${stateConfig.backgroundHover};\n border-color: ${stateConfig.borderColorHover};\n }\n\n :active & {\n border-color: ${stateConfig.borderColorActive};\n }\n `;\n }}\n`;\n\nconst RadioInner = styled.div<{\n $checked: boolean;\n $disabled: boolean;\n}>`\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n border-radius: 50%;\n background: white;\n opacity: ${({ $checked }) => ($checked ? 1 : 0)};\n transition: opacity 0.2s ease;\n\n ${({ theme }) => {\n const dotSize = theme.components.radio.small.dotSize;\n return `\n width: ${dotSize};\n height: ${dotSize};\n `;\n }}\n`;\n\n/**\n * Radio Component\n *\n * A radio button for selecting one option from a group\n *\n * @example\n * <Radio checked={true} onChange={(e) => console.log(e.target.checked)} />\n */\nexport const Radio: React.FC<RadioProps> = ({\n clickPreventDefault = false,\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n value,\n name,\n id,\n onChange,\n className,\n style,\n}) => {\n const [internalChecked, setInternalChecked] = useState<boolean>(\n controlledChecked ?? defaultChecked\n );\n const [isFocused, setIsFocused] = useState(false);\n\n const checked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (controlledChecked === undefined) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(e);\n },\n [disabled, controlledChecked, onChange]\n );\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleContainerClick = useCallback((e: React.MouseEvent) => {\n // Prevent event bubbling to avoid triggering parent element's click handlers\n if (clickPreventDefault) {\n e.preventDefault();\n }\n }, []);\n\n return (\n <RadioContainer\n $disabled={disabled}\n className={className}\n style={style}\n onClick={handleContainerClick}\n >\n <HiddenInput\n type=\"radio\"\n id={id}\n checked={checked}\n value={value}\n name={name}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n />\n <RadioOuter\n $checked={checked}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n <RadioInner\n $checked={checked}\n $disabled={disabled}\n />\n </RadioContainer>\n );\n};\n\nRadio.displayName = 'Radio';\n\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { styled } from '../utils/styled';\nimport { getGlobalTheme } from '../utils/context';\nimport { Icon } from '../Icon';\nimport { CheckIcon } from '@officesdk/design/icons';\n\nexport interface CheckboxProps {\n /**\n * Whether the checkbox is checked\n */\n checked?: boolean;\n /**\n * Default checked state\n */\n defaultChecked?: boolean;\n /**\n * Whether the checkbox is in indeterminate state\n */\n indeterminate?: boolean;\n /**\n * Whether the checkbox is disabled\n */\n disabled?: boolean;\n /**\n * Value of the checkbox\n */\n value?: string | number;\n /**\n * Name attribute for the checkbox\n */\n name?: string;\n /**\n * ID attribute for the checkbox (used with htmlFor in labels)\n */\n id?: string;\n /**\n * Callback when checked state changes\n */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * prevent default click event, if true, change event will not be triggered\n * @default false\n */\n clickPreventDefault?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst CheckboxContainer = styled.label<{\n $disabled: boolean;\n}>`\n position: relative;\n display: inline-block;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n\n ${({ theme }) => {\n const sizeConfig = theme.components.checkbox.small;\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n `;\n }}\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst CheckboxBox = styled.div<{\n $checked: boolean;\n $indeterminate: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n inset: 1px;\n border: 1px solid;\n transition: all 0.2s ease;\n\n ${({ theme }) => {\n const sizeConfig = theme.components.checkbox.small;\n return `\n border-radius: ${sizeConfig.borderRadius};\n `;\n }}\n\n ${({ $checked, $indeterminate, $disabled, theme }) => {\n if ($disabled) {\n const stateConfig = $checked || $indeterminate\n ? theme.components.checkbox.checked\n : theme.components.checkbox.unchecked;\n return `\n background: ${stateConfig.backgroundDisabled};\n border-color: ${stateConfig.borderColorDisabled};\n `;\n }\n\n if ($checked) {\n const checkedConfig = theme.components.checkbox.checked;\n return `\n background: ${checkedConfig.background};\n border-color: ${checkedConfig.borderColor};\n `;\n }\n\n if ($indeterminate) {\n const indeterminateConfig = theme.components.checkbox.indeterminate;\n return `\n background: ${indeterminateConfig.background};\n border-color: ${indeterminateConfig.borderColor};\n `;\n }\n\n const uncheckedConfig = theme.components.checkbox.unchecked;\n return `\n background: ${uncheckedConfig.background};\n border-color: ${uncheckedConfig.borderColor};\n `;\n }}\n\n ${({ $disabled, $checked, $indeterminate, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked || $indeterminate\n ? theme.components.checkbox.checked\n : theme.components.checkbox.unchecked;\n\n return `\n :hover & {\n background: ${stateConfig.backgroundHover};\n border-color: ${stateConfig.borderColorHover};\n }\n\n :active & {\n border-color: ${stateConfig.borderColorActive};\n }\n `;\n }}\n`;\n\nconst IconWrapper = styled.div<{\n $visible: boolean;\n}>`\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n opacity: ${({ $visible }) => ($visible ? 1 : 0)};\n transition: opacity 0.2s ease;\n pointer-events: none;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${({ theme }) => {\n const iconSize = theme.components.checkbox.small.iconSize;\n return `\n width: ${iconSize.width};\n height: ${iconSize.height};\n `;\n }}\n\n svg, img {\n display: block;\n }\n`;\n\nconst DefaultIndeterminateIcon = styled.div`\n width: 8px;\n height: 2px;\n background: white;\n`;\n\n/**\n * Checkbox Component\n *\n * A checkbox for selecting multiple options\n *\n * @example\n * <Checkbox checked={true} onChange={(e) => console.log(e.target.checked)} />\n *\n * @example\n * // Indeterminate state\n * <Checkbox indeterminate={true} />\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n indeterminate = false,\n disabled = false,\n value,\n name,\n id,\n onChange,\n clickPreventDefault = false,\n className,\n style,\n}) => {\n const theme = getGlobalTheme()\n const [internalChecked, setInternalChecked] = useState<boolean>(\n controlledChecked ?? defaultChecked\n );\n const [isFocused, setIsFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const checked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n // Set indeterminate property on the native input element\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (controlledChecked === undefined) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(e);\n },\n [disabled, controlledChecked, onChange]\n );\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleContainerClick = useCallback((e: React.MouseEvent) => {\n // Prevent event bubbling to avoid triggering parent element's click handlers\n if (clickPreventDefault) {\n e.preventDefault();\n }\n }, []);\n\n return (\n <CheckboxContainer\n $disabled={disabled}\n className={className}\n style={style}\n onClick={handleContainerClick}\n >\n <HiddenInput\n ref={inputRef}\n type=\"checkbox\"\n id={id}\n checked={checked}\n value={value}\n name={name}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n />\n <CheckboxBox\n $checked={checked}\n $indeterminate={indeterminate}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n {!indeterminate && (\n <IconWrapper $visible={checked}>\n {\n !theme.components.checkbox.icons.checked\n ? <Icon size={theme.components.checkbox.small.iconSize.width} color=\"#fff\"><CheckIcon /></Icon>\n : <Icon src={theme.components.checkbox.icons.checked} size={theme.components.checkbox.small.iconSize.width} />\n }\n </IconWrapper>\n )}\n {indeterminate && (\n <IconWrapper $visible={indeterminate}>\n {\n !theme.components.checkbox.icons.indeterminate\n ? <DefaultIndeterminateIcon />\n : <Icon src={theme.components.checkbox.icons.indeterminate} size={theme.components.checkbox.small.iconSize.width} />\n }\n </IconWrapper>\n )}\n </CheckboxContainer>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\n","import React, { forwardRef, useState } from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { CloseIcon } from '@officesdk/design/icons';\n\ntype InputSize = 'mini' | 'small' | 'medium' | 'large';\ntype LineType = 'outlined' | 'underlined' | 'borderless';\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n /**\n * Input line type\n */\n lineType?: LineType;\n /**\n * Input size\n */\n size?: InputSize;\n /**\n * Whether the input has an error state\n */\n error?: boolean;\n /**\n * Whether the input is in readonly mode\n */\n readOnly?: boolean;\n /**\n * Node to display before the input\n */\n prefixNode?: React.ReactNode;\n /**\n * Node to display after the input\n */\n suffixNode?: React.ReactNode;\n /**\n * Whether to show clear button when input has value\n */\n clearable?: boolean;\n /**\n * Clear button click handler\n */\n onClear?: () => void;\n /**\n * Custom clear icon\n */\n clearIcon?: React.ReactNode;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom inline styles\n */\n style?: React.CSSProperties;\n /**\n * Custom input className\n */\n inputClassName?: string;\n /**\n * Custom input styles\n */\n inputStyle?: React.CSSProperties;\n}\n\nconst InputContainer = styled.div<{\n $size: InputSize;\n $lineType: LineType;\n}>`\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n height: ${sizeConfig.height};\n `;\n }}\n`;\n\nconst InputWrapper = styled.div<{\n $size: InputSize;\n $lineType: LineType;\n $error: boolean;\n $disabled: boolean;\n $readOnly: boolean;\n $isFocused: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n flex: 1;\n transition: all 0.2s ease;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n height: ${sizeConfig.height};\n padding: ${sizeConfig.padding};\n gap: ${sizeConfig.gap || '4px'};\n ${\n $lineType === 'outlined'\n ? `\n border-radius: ${sizeConfig.borderRadius};\n `\n : ''\n }\n `;\n }}\n\n ${({ $error, $disabled, $readOnly, $isFocused, $lineType, theme, $size }) => {\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const stateConfig = typeConfig?.state;\n if (!stateConfig) return '';\n\n let borderColor = stateConfig.borderColor;\n let background = stateConfig.background;\n let boxShadow = 'none';\n\n if ($disabled) {\n borderColor = stateConfig.borderColorDisabled;\n background = stateConfig.backgroundDisabled;\n } else if ($readOnly) {\n borderColor = stateConfig.borderColorReadonly || stateConfig.borderColor;\n background = stateConfig.backgroundReadonly || stateConfig.background;\n } else if ($error) {\n borderColor = stateConfig.borderColorError;\n background = $lineType === 'outlined' ? stateConfig.backgroundActive : stateConfig.background;\n } else if ($isFocused) {\n borderColor = stateConfig.borderColorActive;\n background = stateConfig.backgroundActive;\n if ($lineType === 'outlined') {\n const size = $size || 'medium';\n const sizeConfig = typeConfig?.[size];\n boxShadow = sizeConfig?.boxShadowActive || 'none';\n }\n }\n\n if ($lineType === 'borderless') {\n // borderless type: no border, no boxShadow\n return `\n border: none;\n background: transparent;\n box-shadow: none;\n\n &:hover:not(:disabled) {\n background: transparent;\n }\n `;\n } else if ($lineType === 'outlined') {\n return `\n border: 1px solid ${borderColor};\n background: ${background};\n box-shadow: ${boxShadow};\n\n &:hover:not(:disabled) {\n ${\n !$disabled && !$readOnly && !$isFocused\n ? `\n border-color: ${stateConfig.borderColorHover};\n background: ${stateConfig.backgroundHover};\n `\n : ''\n }\n }\n `;\n } else {\n // underlined type\n return `\n background: ${background};\n border-bottom: 1px solid ${$error ? borderColor : $isFocused ? borderColor : 'transparent'};\n\n &:hover:not(:disabled) {\n ${\n !$disabled && !$isFocused && !$error\n ? `\n border-bottom-color: ${stateConfig.borderColorHover};\n `\n : ''\n }\n }\n `;\n }\n }}\n\n ${({ $disabled }) =>\n $disabled &&\n `\n cursor: not-allowed;\n opacity: ${$disabled ? '0.6' : '1'};\n `}\n`;\n\nconst ContentBlock = styled.div<{\n $size: InputSize;\n $lineType: LineType;\n}>`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n padding: ${sizeConfig.contentPadding || '0'};\n gap: ${sizeConfig.gap || '4px'};\n `;\n }}\n`;\n\nconst StyledInput = styled.input<{\n $size: InputSize;\n $lineType: LineType;\n $disabled: boolean;\n $readOnly: boolean;\n $isFocused: boolean;\n}>`\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n min-width: 0;\n padding: 0;\n margin: 0;\n font-family: inherit;\n\n ${({ $size, $lineType, $disabled, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n const stateConfig = typeConfig?.state;\n if (!sizeConfig || !stateConfig) return '';\n\n // textColorNormal is used for all states except disabled\n const textColor = $disabled ? stateConfig.textColorDisabled : stateConfig.textColorNormal;\n\n return `\n font-size: ${sizeConfig.fontSize};\n line-height: ${sizeConfig.lineHeight};\n color: ${textColor};\n `;\n }}\n\n &::placeholder {\n color: ${({ $isFocused, $lineType, theme }) => {\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const stateConfig = typeConfig?.state;\n return $isFocused\n ? stateConfig?.placeholderColorHover || 'rgba(65, 70, 75, 0.3)'\n : stateConfig?.placeholderColorNormal || 'rgba(65, 70, 75, 0.3)';\n }};\n }\n\n ${({ $disabled }) =>\n $disabled &&\n `\n cursor: not-allowed;\n `}\n\n ${({ $readOnly }) =>\n $readOnly &&\n `\n cursor: default;\n `}\n`;\n\nconst PrefixNode = styled.div<{ $size: InputSize; $lineType: LineType }>`\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n svg, img {\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n }\n `;\n }}\n`;\n\nconst SuffixNode = styled.div<{ $size: InputSize; $lineType: LineType }>`\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n svg, img {\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n }\n `;\n }}\n`;\n\nconst ClearButton = styled.button<{ $size: InputSize; $lineType: LineType }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0;\n margin: 0;\n outline: none;\n transition: opacity 0.2s ease;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n const clearIconSize = sizeConfig?.clearIcon?.size;\n if (!clearIconSize) return '';\n\n return `\n width: ${clearIconSize.width};\n height: ${clearIconSize.height};\n\n svg {\n width: ${clearIconSize.width};\n height: ${clearIconSize.height};\n }\n `;\n }}\n\n &:hover {\n opacity: 0.7;\n }\n\n &:active {\n opacity: 0.5;\n }\n`;\n\nconst AlertLine = styled.div`\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => theme.colors?.palettes?.red?.['6'] || '#E95555'};\n`;\n\n/**\n * Input Component\n *\n * @example\n * // Basic outlined input (default)\n * <Input placeholder=\"Enter text\" />\n *\n * @example\n * // Underlined input\n * <Input lineType=\"underlined\" placeholder=\"Enter text\" />\n *\n * @example\n * // Input with prefix and suffix\n * <Input prefixNode={<SearchIcon />} suffixNode={<Icon />} />\n *\n * @example\n * // Input with clearable\n * <Input clearable onClear={() => console.log('cleared')} />\n *\n * @example\n * // Input with error state\n * <Input error placeholder=\"Enter text\" />\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n lineType = 'outlined',\n size = 'medium',\n error = false,\n disabled = false,\n readOnly = false,\n prefixNode,\n suffixNode,\n clearable = false,\n onClear,\n clearIcon,\n className,\n style,\n inputClassName,\n inputStyle,\n onFocus,\n onBlur,\n value,\n onChange,\n defaultValue,\n ...rest\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(\n value !== undefined ? value : (defaultValue as string) || ''\n );\n\n // Controlled vs Uncontrolled\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n const hasValue = !!currentValue && String(currentValue).length > 0;\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!isControlled) {\n setInternalValue('');\n }\n\n // Trigger onChange event for controlled components\n if (onChange && ref && 'current' in ref && ref.current) {\n const syntheticEvent = {\n target: { ...ref.current, value: '' },\n currentTarget: ref.current,\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n\n onClear?.();\n };\n\n // Show clear button when clearable and has value\n const shouldShowClearButton = clearable && hasValue && !disabled && !readOnly;\n const clearButtonNode = shouldShowClearButton ? (\n <ClearButton\n type=\"button\"\n $size={size}\n $lineType={lineType}\n onClick={handleClear}\n aria-label=\"Clear\"\n tabIndex={-1}\n >\n {clearIcon || (\n <Icon size={16} color=\"rgba(65, 70, 75, 0.6)\">\n <CloseIcon />\n </Icon>\n )}\n </ClearButton>\n ) : null;\n\n return (\n <InputContainer $size={size} $lineType={lineType} className={className} style={style}>\n <InputWrapper\n $size={size}\n $lineType={lineType}\n $error={error}\n $disabled={!!disabled}\n $readOnly={!!readOnly}\n $isFocused={isFocused}\n >\n {prefixNode && (\n <PrefixNode $size={size} $lineType={lineType}>\n {prefixNode}\n </PrefixNode>\n )}\n <ContentBlock $size={size} $lineType={lineType}>\n <StyledInput\n ref={ref}\n $size={size}\n $lineType={lineType}\n $disabled={!!disabled}\n $readOnly={!!readOnly}\n $isFocused={isFocused}\n disabled={disabled}\n readOnly={readOnly}\n value={currentValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={inputClassName}\n style={inputStyle}\n {...rest}\n />\n {clearButtonNode}\n </ContentBlock>\n {suffixNode && (\n <SuffixNode $size={size} $lineType={lineType}>\n {suffixNode}\n </SuffixNode>\n )}\n </InputWrapper>\n {lineType === 'underlined' && error && <AlertLine />}\n </InputContainer>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import React, { forwardRef } from 'react';\nimport { styled } from '../utils/styled';\nimport { Input, InputProps } from './Input';\nimport { Icon } from '../Icon';\nimport { getGlobalTheme } from '../utils/context';\nimport { SearchIcon } from '@officesdk/design/icons';\n\nexport interface SearchInputProps extends Omit<InputProps, 'prefixNode' | 'suffixNode'> {\n /**\n * Line type (outlined or underlined)\n */\n lineType?: 'outlined' | 'underlined';\n /**\n * SearchInput size\n */\n size?: 'mini' | 'small' | 'medium' | 'large';\n /**\n * Whether to show the clear button when input has value\n */\n clearable?: boolean;\n /**\n * Callback when clear button is clicked\n */\n onClear?: () => void;\n /**\n * Custom search icon (URL string or React node)\n */\n searchIcon?: string | React.ReactNode;\n}\n\nconst SearchIconWrapper = styled.div`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n svg {\n width: 100%;\n height: 100%;\n color: ${({ theme }) => theme.colors?.palettes?.transparency?.['100'] || '#41464b'};\n }\n`;\n\n/**\n * SearchInput Component\n *\n * A wrapper around Input component with search icon and clear functionality\n *\n * @example\n * // Basic search input\n * <SearchInput placeholder=\"Search...\" />\n *\n * @example\n * // Underlined search input\n * <SearchInput lineType=\"underlined\" placeholder=\"Search...\" />\n *\n * @example\n * // Search input without clearable\n * <SearchInput clearable={false} placeholder=\"Search...\" />\n *\n * @example\n * // Different sizes\n * <SearchInput size=\"small\" placeholder=\"Search...\" />\n * <SearchInput size=\"medium\" placeholder=\"Search...\" />\n * <SearchInput size=\"large\" placeholder=\"Search...\" />\n */\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n { lineType = 'outlined', size = 'medium', clearable = true, onClear, searchIcon, ...rest },\n ref\n ) => {\n // Render search icon by priority:\n // 1. props.searchIcon (string or ReactNode)\n // 2. theme.components.inputSearch.searchIcon.url\n // 3. Default search icon from registry\n const getSearchIconElement = () => {\n // Priority 1: props.searchIcon\n if (searchIcon !== undefined) {\n if (typeof searchIcon === 'string') {\n return <Icon src={searchIcon} />;\n }\n return searchIcon;\n }\n\n // Priority 2: theme icon\n const theme = getGlobalTheme();\n const themeIconUrl = theme?.components?.inputSearch?.searchIcon?.url;\n if (themeIconUrl) {\n return <Icon src={themeIconUrl} />;\n }\n\n // Priority 3: default icon\n return <SearchIcon />;\n };\n\n const prefixNode = <SearchIconWrapper>{getSearchIconElement()}</SearchIconWrapper>;\n\n return (\n <Input\n ref={ref}\n lineType={lineType}\n size={size}\n prefixNode={prefixNode}\n clearable={clearable}\n onClear={onClear}\n {...rest}\n />\n );\n }\n);\n\nSearchInput.displayName = 'SearchInput';\n","// React is required for JSX transform (jsx: \"react\")\nimport React, { forwardRef } from 'react';\nimport { Input, InputProps } from './Input';\n\n/**\n * UnderlinedInput Component\n *\n * @deprecated Use <Input lineType=\"underlined\" /> instead\n *\n * This component is a simple alias for Input with lineType=\"underlined\"\n * and will be removed in a future version.\n *\n * @example\n * // Old way (deprecated)\n * <UnderlinedInput placeholder=\"Search...\" />\n *\n * // New way (recommended)\n * <Input lineType=\"underlined\" placeholder=\"Search...\" />\n */\nexport const UnderlinedInput = forwardRef<HTMLInputElement, Omit<InputProps, 'lineType'>>(\n (props, ref) => {\n // React is used implicitly by JSX transform\n void React;\n return <Input {...props} lineType=\"underlined\" ref={ref} />;\n }\n);\n\nUnderlinedInput.displayName = 'UnderlinedInput';\n\nexport type { InputProps as UnderlinedInputProps };\n","export { Toast } from './Toast';\nexport type { ToastProps } from './Toast';\n\nexport { ToastContainer, useToast } from './ToastContainer';\nexport type { ToastContainerProps } from './ToastContainer';\n\nexport { toast } from './toastManager';\nexport type { ToastContainerConfig } from './toastManager';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\n\nexport interface TabItem {\n /**\n * Unique key for the tab\n */\n key: string;\n /**\n * Tab label\n */\n label: string | React.ReactNode;\n /**\n * Whether the tab is disabled\n */\n disabled?: boolean;\n /**\n * Custom icon\n */\n icon?: React.ReactNode;\n}\n\nexport interface TabsProps {\n /**\n * Tab items\n */\n items: TabItem[];\n /**\n * Active tab key\n */\n activeKey?: string;\n /**\n * Default active tab key\n */\n defaultActiveKey?: string;\n /**\n * Tab variant\n */\n variant?: 'line' | 'card';\n /**\n * Tab size\n */\n size?: 'large';\n /**\n * Tab items alignment (only works for 'line' variant)\n */\n justify?: 'start' | 'center' | 'end';\n /**\n * Callback when tab changes\n */\n onChange?: (key: string) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Custom className for tab item\n */\n tabItemClassName?: string;\n /**\n * Custom style for tab item\n */\n tabItemStyle?: React.CSSProperties;\n}\n\nconst TabContainer = styled.div<{\n $variant: 'line' | 'card';\n}>`\n display: flex;\n flex-direction: column;\n\n ${({ $variant, theme }) => {\n\n const variantConfig = theme.components.tab[$variant];\n const sizeConfig = theme.components.tab.large;\n return `\n height: ${sizeConfig.height};\n border-radius: ${sizeConfig.borderRadius};\n background-color: ${variantConfig.backgroundColor};\n `;\n }}\n`;\n\nconst TabList = styled.div<{\n $variant: 'line' | 'card';\n $justify: 'start' | 'center' | 'end';\n}>`\n display: flex;\n align-items: center;\n position: relative;\n width: 100%;\n height: 100%;\n\n\n ${({ $variant, $justify, theme }) => {\n const variantConfig = theme.components.tab[$variant];\n const justifyContent =\n $variant === 'line'\n ? $justify === 'center'\n ? 'center'\n : $justify === 'end'\n ? 'flex-end'\n : 'flex-start'\n : 'flex-start';\n return `\n gap: ${variantConfig.layout.gap};\n justify-content: ${justifyContent};\n `;\n }}\n\n ${({ $variant }) => {\n if ($variant === 'line') {\n return `\n border-bottom: 2px solid rgba(65, 70, 75, 0.1);\n `;\n }\n return '';\n }}\n`;\n\nconst TabItem = styled.button<{\n $variant: 'line' | 'card';\n $active: boolean;\n $disabled: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n border: none;\n outline: none;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n transition: all 0.2s ease;\n position: relative;\n white-space: nowrap;\n\n ${({ theme }) => {\n const sizeConfig = theme.components.tab.large;\n return `\n height: 100%;\n font-size: ${sizeConfig.fontSize};\n line-height: ${sizeConfig.lineHeight};\n border-radius: ${sizeConfig.borderRadius};\n font-weight: ${sizeConfig.fontWeight};\n `;\n }}\n\n ${({ $variant, $active, $disabled, theme }) => {\n const variantConfig = theme.components.tab[$variant];\n const itemConfig = variantConfig.item;\n\n if ($disabled) {\n return `\n background: ${itemConfig.backgroundDisabled};\n color: ${itemConfig.colorDisabled};\n `;\n }\n\n if ($active) {\n return `\n background: ${itemConfig.backgroundActive};\n color: ${itemConfig.colorActive};\n font-weight: 500;\n `;\n }\n\n return `\n background: ${itemConfig.background};\n border-color: ${itemConfig.borderColor};\n color: ${itemConfig.color};\n `;\n }}\n\n ${({ $variant, $disabled, theme, $active }) => {\n if ($disabled) return '';\n\n const variantConfig = theme.components.tab[$variant];\n const itemConfig = variantConfig.item;\n\n const isHoverNormal = !$active && !$disabled;\n\n return `\n &:hover {\n background: ${ isHoverNormal ? itemConfig.backgroundHover : ''};\n border-color: ${ isHoverNormal ? itemConfig.borderColorHover : ''};\n color: ${ isHoverNormal ? itemConfig.colorHover : ''};\n }\n `;\n }}\n\n ${({ $variant, $active, $disabled, theme }) => {\n // Line variant: show underline when active\n if ($variant === 'line' && $active) {\n return `\n &::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: currentColor;\n }\n `;\n }\n\n // Card variant: use box-shadow inset for border\n if ($variant === 'card') {\n const variantConfig = theme.components.tab[$variant];\n const itemConfig = variantConfig.item;\n\n // Get border color based on state\n let borderColor: string;\n if ($disabled) {\n borderColor = itemConfig.borderColorDisabled;\n } else if ($active) {\n borderColor = itemConfig.borderColorActive;\n } else {\n borderColor = itemConfig.borderColor;\n }\n\n\n return `\n box-shadow: inset 0 0 0 1px ${borderColor};\n flex: 1;\n overflow: hidden;\n &:hover {\n }\n `;\n }\n\n return '';\n }}\n\n ${({ $variant }) => {\n if ($variant === 'line') {\n return `\n max-width: 160px;\n `;\n }\n return '';\n }}\n`;\n\nconst TabItemLabel = styled.span`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n`;\n\n/**\n * Tab Component\n *\n * A tab component with line and card variants\n *\n * @example\n * <Tab\n * items={[\n * { key: '1', label: 'Tab 1' },\n * { key: '2', label: 'Tab 2' },\n * ]}\n * defaultActiveKey=\"1\"\n * />\n */\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n activeKey: controlledActiveKey,\n defaultActiveKey,\n variant = 'line',\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n size: _size = 'large',\n justify = 'start',\n onChange,\n className,\n style,\n tabItemClassName,\n tabItemStyle,\n}) => {\n const [internalActiveKey, setInternalActiveKey] = useState<string>(\n controlledActiveKey ?? defaultActiveKey ?? items[0]?.key ?? ''\n );\n\n const activeKey = controlledActiveKey !== undefined ? controlledActiveKey : internalActiveKey;\n\n const handleTabClick = useCallback(\n (key: string, disabled?: boolean) => {\n if (disabled) return;\n\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(key);\n }\n\n onChange?.(key);\n },\n [controlledActiveKey, onChange]\n );\n\n return (\n <TabContainer $variant={variant} className={className} style={style}>\n <TabList $variant={variant} $justify={justify} role=\"tablist\">\n {items.map((item) => (\n <TabItem\n key={item.key}\n $variant={variant}\n $active={activeKey === item.key}\n $disabled={item.disabled || false}\n onClick={() => handleTabClick(item.key, item.disabled)}\n role=\"tab\"\n aria-selected={activeKey === item.key}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n type=\"button\"\n className={tabItemClassName}\n style={tabItemStyle}\n >\n {!!item.icon && item.icon}\n {typeof item.label === 'string' ? <TabItemLabel>{item.label}</TabItemLabel> : item.label}\n </TabItem>\n ))}\n </TabList>\n </TabContainer>\n );\n};\n\nTabs.displayName = 'Tab';\n","import { createGlobalStyle } from 'styled-components';\nimport { getGlobalTheme } from '../utils/context';\n\n// Helper functions to get arrow config values at runtime\nconst getArrowSize = () => parseInt(getGlobalTheme().components.tooltip.arrow.size.width);\nconst getArrowRadius = () => getGlobalTheme().components.tooltip.arrow.borderRadius;\n// The rotated square's visible height is arrowSize * 0.707 (half of diagonal)\nconst getArrowVisibleHeight = () => Math.round(getArrowSize() * 1.414) / 2;\nconst getPaddingDistance = () => `${getArrowVisibleHeight()}px`;\nconst getArrowOverlap = () => `${Math.ceil(getArrowVisibleHeight() - getArrowSize() / 2)}px!important`;\n\n// Tooltip global styles - includes base styles and all variant/size combinations\nexport const TooltipGlobalStyles = createGlobalStyle`\n /* Base tooltip container */\n .od-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n visibility: visible;\n font-size: 12px;\n line-height: 1.5;\n opacity: 1;\n }\n\n .od-tooltip-hidden {\n display: none;\n }\n\n /* Tooltip content wrapper */\n .od-tooltip-content {\n position: relative;\n }\n\n /* Tooltip inner content */\n .od-tooltip-inner {\n padding: 6px 8px;\n text-align: left;\n white-space: nowrap;\n min-height: unset;\n text-align: center;\n }\n\n /* Tooltip arrow base - rotated square for rounded corners */\n .od-tooltip-arrow {\n position: absolute;\n width: ${() => getArrowSize()}px;\n height: ${() => getArrowSize()}px;\n transform: rotate(45deg);\n }\n\n .od-tooltip-placement-top,\n .od-tooltip-placement-topLeft,\n .od-tooltip-placement-topRight {\n padding-bottom: ${() => getPaddingDistance()};\n }\n\n .od-tooltip-placement-right,\n .od-tooltip-placement-rightTop,\n .od-tooltip-placement-rightBottom {\n padding-left: ${() => getPaddingDistance()};\n }\n\n .od-tooltip-placement-bottom,\n .od-tooltip-placement-bottomLeft,\n .od-tooltip-placement-bottomRight {\n padding-top: ${() => getPaddingDistance()};\n }\n\n .od-tooltip-placement-left,\n .od-tooltip-placement-leftTop,\n .od-tooltip-placement-leftBottom {\n padding-right: ${() => getPaddingDistance()};\n }\n\n /* Placement specific adjustments - position arrows to overlap with content edge */\n .od-tooltip-placement-top .od-tooltip-arrow,\n .od-tooltip-placement-topLeft .od-tooltip-arrow,\n .od-tooltip-placement-topRight .od-tooltip-arrow {\n bottom: ${() => getArrowOverlap()};\n margin-left: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `0 0 ${getArrowRadius()} 0`};\n }\n\n .od-tooltip-placement-right .od-tooltip-arrow,\n .od-tooltip-placement-rightTop .od-tooltip-arrow,\n .od-tooltip-placement-rightBottom .od-tooltip-arrow {\n left: ${() => getArrowOverlap()};\n margin-top: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `0 0 0 ${getArrowRadius()}`};\n }\n\n .od-tooltip-placement-left .od-tooltip-arrow,\n .od-tooltip-placement-leftTop .od-tooltip-arrow,\n .od-tooltip-placement-leftBottom .od-tooltip-arrow {\n right: ${() => getArrowOverlap()};\n margin-top: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `0 ${getArrowRadius()} 0 0`};\n }\n\n .od-tooltip-placement-bottom .od-tooltip-arrow,\n .od-tooltip-placement-bottomLeft .od-tooltip-arrow,\n .od-tooltip-placement-bottomRight .od-tooltip-arrow {\n top: ${() => getArrowOverlap()};\n margin-left: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `${getArrowRadius()} 0 0 0`};\n }\n\n /* Alignment adjustments */\n .od-tooltip-placement-topLeft .od-tooltip-arrow,\n .od-tooltip-placement-bottomLeft .od-tooltip-arrow {\n left: 15%;\n }\n\n .od-tooltip-placement-topRight .od-tooltip-arrow,\n .od-tooltip-placement-bottomRight .od-tooltip-arrow {\n right: 15%;\n }\n\n .od-tooltip-placement-rightTop .od-tooltip-arrow,\n .od-tooltip-placement-leftTop .od-tooltip-arrow {\n top: 15%;\n }\n\n .od-tooltip-placement-rightBottom .od-tooltip-arrow,\n .od-tooltip-placement-leftBottom .od-tooltip-arrow {\n bottom: 15%;\n }\n\n .od-tooltip.od-tooltip-zoom-enter,\n .od-tooltip.od-tooltip-zoom-leave {\n display: block;\n }\n\n .od-tooltip-zoom-enter,\n .od-tooltip-zoom-appear {\n opacity: 0;\n animation-duration: 0.3s;\n animation-fill-mode: both;\n animation-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1.28);\n animation-play-state: paused;\n }\n\n .od-tooltip-zoom-leave {\n animation-duration: 0.3s;\n animation-fill-mode: both;\n animation-timing-function: cubic-bezier(0.6, -0.3, 0.74, 0.05);\n animation-play-state: paused;\n }\n\n .od-tooltip-zoom-enter.od-tooltip-zoom-enter-active,\n .od-tooltip-zoom-appear.od-tooltip-zoom-appear-active {\n animation-name: rcToolTipZoomIn;\n animation-play-state: running;\n }\n\n .od-tooltip-zoom-leave.od-tooltip-zoom-leave-active {\n animation-name: rcToolTipZoomOut;\n animation-play-state: running;\n }\n\n @keyframes rcToolTipZoomIn {\n 0% {\n opacity: 0;\n transform-origin: 50% 50%;\n transform: scale(0, 0);\n }\n 100% {\n opacity: 1;\n transform-origin: 50% 50%;\n transform: scale(1, 1);\n }\n }\n\n @keyframes rcToolTipZoomOut {\n 0% {\n opacity: 1;\n transform-origin: 50% 50%;\n transform: scale(1, 1);\n }\n 100% {\n opacity: 0;\n transform-origin: 50% 50%;\n transform: scale(0, 0);\n }\n }\n\n /* Black variant */\n .tooltip-variant-black .od-tooltip-inner {\n background: ${() => getGlobalTheme().components.tooltip.black.background};\n border: 1px solid ${() => getGlobalTheme().components.tooltip.black.borderColor};\n color: ${() => getGlobalTheme().components.tooltip.black.color};\n border-radius: ${() => getGlobalTheme().components.tooltip.black.borderRadius};\n padding: ${() => getGlobalTheme().components.tooltip.black.padding};\n box-shadow: ${() => getGlobalTheme().components.tooltip.black.boxShadow};\n font-size: ${() => getGlobalTheme().components.tooltip.black.fontSize};\n line-height: ${() => getGlobalTheme().components.tooltip.black.lineHeight};\n font-weight: ${() => getGlobalTheme().components.tooltip.black.fontWeight};\n max-width: ${() => getGlobalTheme().components.tooltip.black.maxWidth};\n white-space: normal;\n word-wrap: break-word;\n text-align: left;\n text-decoration: none;\n }\n\n .tooltip-variant-black .od-tooltip-arrow {\n background: ${() => getGlobalTheme().components.tooltip.black.background};\n }\n\n /* White variant - small size */\n .tooltip-variant-white.tooltip-size-small .od-tooltip-inner {\n background: ${() => getGlobalTheme().components.tooltip.white.small.background};\n border: 1px solid ${() => getGlobalTheme().components.tooltip.white.small.borderColor};\n color: ${() => getGlobalTheme().components.tooltip.white.small.color};\n border-radius: ${() => getGlobalTheme().components.tooltip.white.small.borderRadius};\n padding: ${() => getGlobalTheme().components.tooltip.white.small.padding};\n box-shadow: ${() => getGlobalTheme().components.tooltip.white.small.boxShadow};\n font-size: ${() => getGlobalTheme().components.tooltip.white.small.fontSize};\n line-height: ${() => getGlobalTheme().components.tooltip.white.small.lineHeight};\n font-weight: ${() => getGlobalTheme().components.tooltip.white.small.fontWeight};\n max-width: ${() => getGlobalTheme().components.tooltip.white.small.maxWidth};\n white-space: normal;\n word-wrap: break-word;\n text-align: left;\n text-decoration: none;\n }\n\n .tooltip-variant-white.tooltip-size-small .od-tooltip-arrow {\n background: ${() => getGlobalTheme().components.tooltip.white.small.background};\n }\n\n /* White variant - large size */\n .tooltip-variant-white.tooltip-size-large .od-tooltip-inner {\n background: ${() => getGlobalTheme().components.tooltip.white.large.background};\n border: 1px solid ${() => getGlobalTheme().components.tooltip.white.large.borderColor};\n color: ${() => getGlobalTheme().components.tooltip.white.large.color};\n border-radius: ${() => getGlobalTheme().components.tooltip.white.large.borderRadius};\n padding: ${() => getGlobalTheme().components.tooltip.white.large.padding};\n box-shadow: ${() => getGlobalTheme().components.tooltip.white.large.boxShadow};\n font-size: ${() => getGlobalTheme().components.tooltip.white.large.fontSize};\n line-height: ${() => getGlobalTheme().components.tooltip.white.large.lineHeight};\n font-weight: ${() => getGlobalTheme().components.tooltip.white.large.fontWeight};\n max-width: ${() => getGlobalTheme().components.tooltip.white.large.maxWidth};\n white-space: normal;\n word-wrap: break-word;\n text-align: left;\n text-decoration: none;\n }\n\n .tooltip-variant-white.tooltip-size-large .od-tooltip-arrow {\n background: ${() => getGlobalTheme().components.tooltip.white.large.background};\n }\n`;\n","import React from 'react';\nimport type { ReactElement } from 'react';\nimport type { GlobalStyleComponent } from 'styled-components';\nimport { getGlobalRenderFunction } from './context';\n\nconst injectedStyles = new Set<string>();\n\n/**\n * Style Manager\n *\n * Manages global style injection on demand.\n * Styles are injected only once when first component is used.\n */\nexport const styleManager = {\n /**\n * Inject global styles on demand\n * @param id Unique identifier for the style (e.g., 'od-tooltip-styles')\n * @param StyleComponent The styled component to inject\n */\n inject: (id: string, StyleComponent: React.ComponentType<any> | GlobalStyleComponent<any, any>) => {\n if (injectedStyles.has(id) || typeof document === 'undefined') {\n return;\n }\n\n // Check if already in DOM\n if (document.getElementById(id)) {\n injectedStyles.add(id);\n return;\n }\n\n // Get render function from global context\n const renderFunction = getGlobalRenderFunction();\n if (!renderFunction) {\n console.warn(\n `Style injection failed for \"${id}\": render function not available. ` +\n `Please call initUIConfig() or use UIConfigProvider first.`\n );\n return;\n }\n\n // Create container and inject styles\n const container = document.createElement('div');\n container.id = id;\n document.head.appendChild(container);\n\n // Use global render function for consistency\n // Cast StyleComponent to any to avoid type issues with GlobalStyleComponent\n renderFunction(\n React.createElement(StyleComponent as React.ComponentType<any>) as ReactElement,\n container\n );\n\n injectedStyles.add(id);\n },\n\n /**\n * Check if styles have been injected\n */\n isInjected: (id: string): boolean => {\n return (\n injectedStyles.has(id) ||\n (typeof document !== 'undefined' && !!document.getElementById(id))\n );\n },\n\n /**\n * Reset injected styles (mainly for testing)\n */\n reset: () => {\n injectedStyles.clear();\n },\n};\n","import React, { useEffect } from 'react';\nimport RcTooltip from 'rc-tooltip';\nimport type { TooltipProps as RcTooltipProps } from 'rc-tooltip/lib/Tooltip';\nimport 'rc-tooltip/assets/bootstrap.css';\nimport { TooltipGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\n\nexport interface TooltipProps extends Omit<Partial<RcTooltipProps>, 'prefixCls'> {\n /**\n * Tooltip content\n */\n content?: React.ReactNode;\n /**\n * Tooltip variant\n */\n variant?: 'black' | 'white';\n /**\n * Tooltip size (only for white variant)\n */\n size?: 'small' | 'large';\n /**\n * Children element that triggers the tooltip\n */\n children: React.ReactElement;\n /**\n * Function to get the container element for the tooltip\n */\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n}\n/**\n * Tooltip Component\n *\n * Note: Coverage for this component may appear lower than expected due to\n * styled-components CSS-in-JS template literals (lines 68-200+) which are\n * not properly tracked by V8 coverage. The actual component logic is fully tested.\n *\n * @example\n * // Basic black tooltip\n * <Tooltip content=\"Tooltip text\">\n * <button>Hover me</button>\n * </Tooltip>\n *\n * @example\n * // White tooltip with small size\n * <Tooltip content=\"Tooltip text\" variant=\"white\" size=\"small\">\n * <button>Hover me</button>\n * </Tooltip>\n *\n * @example\n * // White tooltip with large size\n * <Tooltip content=\"Complex content\" variant=\"white\" size=\"large\">\n * <button>Hover me</button>\n * </Tooltip>\n */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n variant = 'black',\n size = 'small',\n children,\n placement = 'top',\n trigger = ['hover'],\n overlay,\n overlayClassName,\n getPopupContainer,\n ...rest\n}) => {\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('od-tooltip-styles', TooltipGlobalStyles);\n }, []);\n\n const overlayContent = React.useMemo(() => <div>{content}</div>, [content]);\n\n // Generate className for variant/size combination\n const variantClass = `tooltip-variant-${variant}`;\n const sizeClass = variant === 'white' ? `tooltip-size-${size}` : '';\n const combinedClassName = [variantClass, sizeClass, overlayClassName].filter(Boolean).join(' ');\n\n const tooltipProps = {\n overlay: overlay ?? overlayContent,\n placement,\n trigger,\n destroyTooltipOnHide: false,\n overlayClassName: combinedClassName,\n ...(getPopupContainer && { getPopupContainer }),\n ...rest,\n };\n\n return (\n <RcTooltip {...tooltipProps} prefixCls=\"od-tooltip\">\n {children}\n </RcTooltip>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n","import React from 'react';\nimport { styled } from '../utils/styled';\n\nconst ArrowDownIcon = () => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.1858 9.79353C8.08649 9.90387 7.91346 9.90387 7.81415 9.79353L4.77549 6.41724C4.6307 6.25636 4.74487 6 4.96132 6L11.0386 6C11.2551 6 11.3693 6.25636 11.2245 6.41724L8.1858 9.79353Z\" fill=\"#41464B\" fillOpacity=\"0.6\"/>\n </svg>\n );\n};\n\nexport interface ToolbarButtonProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick' | 'onDoubleClick'> {\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n /**\n * Whether the button is in active state\n */\n isActive?: boolean;\n /**\n * Icon to display\n * - If string: image URL\n * - If ReactNode: custom icon component\n */\n icon?: string | React.ReactNode;\n /**\n * Label text or custom node\n */\n label?: string | React.ReactNode;\n /**\n * Whether to show dropdown arrow\n */\n hasDropdown?: boolean;\n /**\n * Whether the dropdown section is clickable separately\n */\n splitDropdown?: boolean;\n /**\n * Click handler for main button\n */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Double click handler for main button\n */\n onDoubleClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler for dropdown section\n */\n onDropdownClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst ToolbarButtonContainer = styled.div<{\n $disabled: boolean;\n $isActive: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n border: 1px solid;\n border-radius: 2px;\n transition: border-color 0.15s ease;\n box-sizing: border-box;\n overflow: hidden;\n\n ${({ $disabled, $isActive, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n border-color: ${config.border.borderColorDisabled};\n `;\n }\n if ($isActive) {\n return `\n border-color: ${config.border.borderColorActive};\n\n ${Divider} {\n background-color: ${config.border.borderColorActive};\n }\n `;\n }\n return `\n border-color: ${config.border.borderColor};\n\n &:hover {\n border-color: ${config.border.borderColorHover};\n box-shadow: ${config.boxShadow.boxShadowHover};\n ${Divider} {\n background-color: ${config.border.borderColorHover};\n }\n }\n\n button:active {\n box-shadow: ${config.boxShadow.boxShadowClick};\n ${Divider} {\n background-color: ${config.border.borderColorClick};\n }\n }\n `;\n }}\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n height: ${config.layout.height};\n padding: ${config.layout.padding};\n border-radius: ${config.layout.borderRadius};\n `;\n }}\n`;\n\nconst MainButton = styled.button<{\n $disabled: boolean;\n $isActive: boolean;\n $hasLabel: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n cursor: pointer;\n outline: none;\n height: 100%;\n transition: background-color 0.15s ease;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n padding: ${config.layout.content.padding};\n `;\n }}\n\n ${({ $disabled, $isActive, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n cursor: not-allowed;\n background: ${config.background.backgroundDisabled};\n `;\n }\n if ($isActive) {\n return `\n background: ${config.background.backgroundActive};\n `;\n }\n return `\n background: ${config.background.background};\n\n &:hover {\n background: ${config.background.backgroundHover};\n }\n\n &:active {\n background: ${config.background.backgroundClick};\n }\n `;\n }}\n`;\n\nconst IconWrapper = styled.span<{ $disabled: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n width: ${config.layout.content.iconSize.width};\n height: ${config.layout.content.iconSize.height};\n `;\n }}\n\n ${({ $disabled }) => {\n return $disabled ? `opacity: 0.3;` : ``;\n }}\n\n svg, img {\n width: 100%;\n height: 100%;\n display: block;\n }\n`;\n\nconst LabelText = styled.span<{ $disabled: boolean }>`\n font-family: 'PingFang SC', sans-serif;\n white-space: nowrap;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n font-size: ${config.typography.fontSize};\n font-weight: ${config.typography.fontWeight};\n line-height: 20px;\n padding: ${config.layout.content.padding};\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components.toolbarButton;\n return $disabled\n ? `\n color: ${config.color.colorDisabled};\n `\n : `\n color: ${config.color.color};\n `;\n }}\n`;\n\nconst DropdownButton = styled.button<{\n $disabled: boolean;\n $isActive: boolean;\n $split: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none;\n border: none;\n transition: background-color 0.15s ease;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n height: ${config.layout.height};\n padding: 5px 0;\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n cursor: not-allowed;\n background: ${config.background.backgroundDisabled};\n `;\n }\n return `\n background: ${config.background.background};\n\n &:hover {\n background: ${config.background.backgroundHover};\n }\n\n &:active {\n background: ${config.background.backgroundClick};\n }\n `;\n }}\n`;\n\nconst DropdownArrow = styled.span<{ $disabled: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n width: ${config.layout.dropdown.iconSize.width};\n height: ${config.layout.dropdown.iconSize.height};\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components.toolbarButton;\n return $disabled\n ? `\n color: ${config.color.colorDisabled};\n `\n : `\n color: ${config.color.color};\n `;\n }}\n\n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n`;\n\nconst Divider = styled.div<{\n $disabled: boolean;\n $isActive: boolean;\n}>`\n width: 1px;\n transition: background-color 0.15s ease;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n height: ${config.layout.height};\n `;\n }}\n\n ${({ $disabled, $isActive, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n background-color: ${config.border.borderColorDisabled};\n `;\n }\n if ($isActive) {\n return `\n background-color: ${config.border.borderColorActive};\n `;\n }\n return `\n background-color: ${config.border.borderColor};\n `;\n }}\n`;\n\n/**\n * ToolbarButton Component\n *\n * A toolbar button with optional icon, label, and dropdown functionality\n *\n * @example\n * // Icon component\n * <ToolbarButton icon={<Icon />} />\n *\n * @example\n * // Icon from URL\n * <ToolbarButton icon=\"https://example.com/icon.png\" />\n *\n * @example\n * // Button with label and dropdown\n * <ToolbarButton icon={<Icon />} label=\"Format\" hasDropdown />\n *\n * @example\n * // Button with custom label node\n * <ToolbarButton icon={<Icon />} label={<CustomLabel />} />\n *\n * @example\n * // Button with split dropdown\n * <ToolbarButton\n * icon={<Icon />}\n * label=\"Format\"\n * hasDropdown\n * splitDropdown\n * onClick={handleClick}\n * onDropdownClick={handleDropdownClick}\n * />\n */\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n disabled = false,\n isActive = false,\n icon,\n label,\n hasDropdown = false,\n splitDropdown = false,\n onClick,\n onDoubleClick,\n onDropdownClick,\n className,\n style,\n}) => {\n const handleMainClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onClick?.(e);\n };\n\n const handleMainDoubleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onDoubleClick?.(e);\n };\n\n const handleDropdownClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onDropdownClick?.(e);\n };\n\n // Render icon based on type\n const renderIcon = () => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n return (\n <IconWrapper $disabled={disabled}>\n <img src={icon} alt=\"icon\" />\n </IconWrapper>\n );\n }\n\n return <IconWrapper $disabled={disabled}>{icon}</IconWrapper>;\n };\n\n // Render label based on type\n const renderLabel = () => {\n if (!label) return null;\n\n if (typeof label === 'string') {\n return <LabelText $disabled={disabled}>{label}</LabelText>;\n }\n\n return label;\n };\n\n // Single click area (no split dropdown)\n if (!splitDropdown && hasDropdown) {\n return (\n <ToolbarButtonContainer\n className={className}\n style={style}\n $disabled={disabled}\n $isActive={isActive}\n >\n <MainButton\n $disabled={disabled}\n $isActive={isActive}\n $hasLabel={!!label}\n onClick={handleMainClick}\n onDoubleClick={handleMainDoubleClick}\n disabled={disabled}\n >\n {renderIcon()}\n {renderLabel()}\n <DropdownArrow $disabled={disabled}>\n <ArrowDownIcon />\n </DropdownArrow>\n </MainButton>\n </ToolbarButtonContainer>\n );\n }\n\n // Split dropdown (two click areas)\n if (splitDropdown && hasDropdown) {\n return (\n <ToolbarButtonContainer\n className={className}\n style={style}\n $disabled={disabled}\n $isActive={isActive}\n >\n <MainButton\n $disabled={disabled}\n $isActive={isActive}\n $hasLabel={!!label}\n onClick={handleMainClick}\n onDoubleClick={handleMainDoubleClick}\n disabled={disabled}\n >\n {renderIcon()}\n {renderLabel()}\n </MainButton>\n\n <Divider $disabled={disabled} $isActive={isActive} />\n\n <DropdownButton\n $disabled={disabled}\n $isActive={isActive}\n $split={true}\n onClick={handleDropdownClick}\n disabled={disabled}\n >\n <DropdownArrow $disabled={disabled}>\n <ArrowDownIcon />\n </DropdownArrow>\n </DropdownButton>\n </ToolbarButtonContainer>\n );\n }\n\n // Simple button (no dropdown)\n return (\n <ToolbarButtonContainer\n className={className}\n style={style}\n $disabled={disabled}\n $isActive={isActive}\n >\n <MainButton\n $disabled={disabled}\n $isActive={isActive}\n $hasLabel={!!label}\n onClick={handleMainClick}\n onDoubleClick={handleMainDoubleClick}\n disabled={disabled}\n >\n {renderIcon()}\n {renderLabel()}\n </MainButton>\n </ToolbarButtonContainer>\n );\n};\n\nToolbarButton.displayName = 'ToolbarButton';\n","import React, { forwardRef } from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { ArrowRightIcon } from '@officesdk/design/icons';\n\ntype DropdownButtonSize = 'large' | 'medium' | 'small';\ntype DropdownButtonVariant = 'framed' | 'frameless';\n\nexport interface DropdownButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n /**\n * Button variant\n * - framed: with border (40px large)\n * - frameless: without border (28px medium)\n */\n variant?: DropdownButtonVariant;\n /**\n * Button size\n */\n size?: DropdownButtonSize;\n /**\n * Display value/label\n */\n value?: string;\n /**\n * Placeholder when no value\n */\n placeholder?: string;\n /**\n * Optional icon (URL string or ReactNode)\n */\n icon?: string | React.ReactNode;\n /**\n * Custom indicator/arrow icon\n */\n indicatorIcon?: React.ReactNode;\n /**\n * Whether the dropdown is open (controls arrow rotation)\n */\n open?: boolean;\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n /**\n * Error state\n */\n error?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n\n /**\n * Custom text style\n */\n textStyle?: React.CSSProperties;\n\n /**\n * Custom content to render instead of value/placeholder\n * When provided, value and placeholder are ignored\n */\n children?: React.ReactNode;\n}\n\nconst DropdownButtonContainer = styled.button<{\n $variant: DropdownButtonVariant;\n $size: DropdownButtonSize;\n $disabled: boolean;\n $open: boolean;\n $error: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n border: none;\n outline: none;\n box-sizing: border-box;\n transition: all 0.2s ease;\n font-family: 'PingFang SC', sans-serif;\n width: 100%;\n\n ${({ $size, theme }) => {\n const config = theme.components?.dropdownButton;\n const sizeConfig = config?.size?.[$size];\n if (!sizeConfig) return '';\n\n return `\n height: ${sizeConfig.height};\n padding: ${sizeConfig.padding};\n gap: ${sizeConfig.gap};\n font-size: ${sizeConfig.fontSize};\n border-radius: ${sizeConfig.borderRadius};\n `;\n }}\n\n ${({ $variant, $disabled, $error, theme }) => {\n const config = theme.components?.dropdownButton;\n if (!config) return '';\n\n // Background\n let background = config.background.normal;\n if ($disabled) {\n background =\n $variant === 'frameless' ? config.frameLessBackground.disabled : config.background.disabled;\n } else if ($variant === 'frameless') {\n background = config.frameLessBackground.normal;\n }\n\n // Border for framed variant\n let border = 'none';\n\n if ($variant === 'framed') {\n const borderColor = $disabled\n ? config.borderColor.disabled\n : $error\n ? config.borderColor.error\n : config.borderColor.normal;\n border = `1px solid ${borderColor}`;\n }\n\n // Text color\n const color = $disabled ? config.color.disabled : config.color.normal;\n\n return `\n background: ${background};\n border: ${border};\n color: ${color};\n\n &:hover:not(:disabled) {\n background: ${\n $variant === 'frameless' ? config.frameLessBackground.hover : config.background.hover\n };\n color: ${config.color.hover};\n ${\n $variant === 'framed'\n ? `\n border-color: ${$error ? config.borderColor.error : config.borderColor.hover};\n `\n : ''\n }\n }\n\n &:active:not(:disabled) {\n background: ${\n $variant === 'frameless' ? config.frameLessBackground.active : config.background.active\n };\n color: ${config.color.active};\n ${\n $variant === 'framed'\n ? `\n border-color: ${$error ? config.borderColor.error : config.borderColor.active};\n `\n : ''\n }\n }\n `;\n }}\n\n ${({ $disabled }) =>\n $disabled &&\n `\n cursor: not-allowed;\n `}\n`;\n\nconst IconWrapper = styled.div<{ $size: DropdownButtonSize }>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const config = theme.components?.dropdownButton;\n const sizeConfig = config?.size?.[$size];\n if (!sizeConfig) return '';\n\n return `\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n\n svg, img {\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n }\n `;\n }}\n\n ${({ theme }) => {\n const config = theme.components?.dropdownButton;\n return `\n color: ${config?.color?.normal || '#41464b'};\n `;\n }}\n`;\n\nconst TextContent = styled.div<{ $disabled: boolean; $hasValue: boolean }>`\n flex: 1;\n min-width: 0; /* Important: allows flex item to shrink below content size */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n line-height: 20px;\n\n ${({ $hasValue, $disabled, theme }) => {\n const config = theme.components?.dropdownButton;\n const color = $disabled ? config?.color?.disabled : config?.color?.normal;\n\n return `\n color: ${color};\n ${!$hasValue ? `opacity: 0.3;` : ''}\n `;\n }}\n`;\n\nconst IndicatorWrapper = styled.div<{\n $size: DropdownButtonSize;\n $open: boolean;\n $disabled: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n\n ${({ $size, theme }) => {\n const config = theme.components?.dropdownButton;\n const sizeConfig = config?.size?.[$size];\n if (!sizeConfig) return '';\n\n return `\n width: ${sizeConfig.indicatorSize.width};\n height: ${sizeConfig.indicatorSize.height};\n `;\n }}\n\n ${({ $open, theme }) => {\n const config = theme.components?.dropdownButton?.indicator;\n const rotate = config?.rotate || '90deg';\n\n return `\n transform: rotate(${$open ? rotate : 0});\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components?.dropdownButton?.indicator?.opacity;\n const opacity = $disabled ? config?.disabled || '0.3' : config?.normal || '1';\n\n return `\n opacity: ${opacity};\n color: ${theme.components?.dropdownButton?.color?.normal || '#41464b'};\n `;\n }}\n`;\n\n/**\n * DropdownButton Component\n *\n * A button component for triggering dropdown menus\n *\n * @example\n * // Framed dropdown button (with border, 40px)\n * <DropdownButton variant=\"framed\" value=\"Option 1\" />\n *\n * @example\n * // Frameless dropdown button (no border, 28px)\n * <DropdownButton variant=\"frameless\" value=\"Option 1\" />\n *\n * @example\n * // With icon\n * <DropdownButton icon={<CustomIcon />} value=\"Option 1\" />\n *\n * @example\n * // Open state (arrow rotated)\n * <DropdownButton open value=\"Option 1\" />\n */\nexport const DropdownButton = forwardRef<HTMLButtonElement, DropdownButtonProps>(\n (\n {\n variant = 'framed',\n size,\n value,\n placeholder = 'Select...',\n icon,\n indicatorIcon,\n open = false,\n disabled = false,\n error = false,\n className,\n style,\n textStyle,\n onClick,\n children,\n ...rest\n },\n ref\n ) => {\n // Auto-determine size based on variant if not specified\n const effectiveSize = size || (variant === 'framed' ? 'large' : 'medium');\n const hasValue = !!value;\n\n // Render icon with priority: props.icon (string or ReactNode)\n const getIconElement = () => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n return <Icon src={icon} />;\n }\n return icon;\n };\n\n const iconElement = getIconElement();\n\n return (\n <DropdownButtonContainer\n ref={ref}\n type=\"button\"\n $variant={variant}\n $size={effectiveSize}\n $disabled={disabled}\n $open={open}\n $error={error}\n disabled={disabled}\n onClick={onClick}\n className={className}\n style={style}\n {...rest}\n >\n {iconElement && <IconWrapper $size={effectiveSize}>{iconElement}</IconWrapper>}\n\n {children ? (\n children\n ) : (\n <TextContent $disabled={disabled} $hasValue={hasValue} style={textStyle}>\n {value || placeholder}\n </TextContent>\n )}\n\n <IndicatorWrapper $size={effectiveSize} $open={open} $disabled={disabled}>\n {indicatorIcon || <ArrowRightIcon />}\n </IndicatorWrapper>\n </DropdownButtonContainer>\n );\n }\n);\n\nDropdownButton.displayName = 'DropdownButton';\n","import React, { useState, useMemo, useEffect } from 'react';\nimport RcMenu, { MenuItem as RcMenuItem, SubMenu as RcSubMenu, Divider as RcDivider, ItemGroup as RcItemGroup } from 'rc-menu';\nimport VirtualList from 'rc-virtual-list';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { Input } from '../Input';\nimport 'rc-menu/assets/index.css';\nimport { MenuGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\nimport { getGlobalTheme } from '../utils/context';\nimport { ArrowRightIcon, CheckIcon, SearchIcon as SearchIconComponent } from '@officesdk/design/icons';\n\nexport interface MenuItem {\n type?: 'item';\n key: string;\n label: string;\n description?: string; // Right-aligned text (shortcuts like \"Cmd+Ctrl+C\")\n icon?: string | React.ReactNode;\n disabled?: boolean;\n selected?: boolean;\n selectable?: boolean; // Whether this item can be selected (shows checkmark)\n children?: MenuItem[]; // SubMenu items\n onClick?: (key: string) => void;\n}\n\nexport interface MenuGroup {\n type: 'group';\n key: string;\n label: string;\n children: MenuItem[];\n}\n\nexport interface MenuDivider {\n type: 'divider';\n key: string;\n}\n\nexport type MenuItemType = MenuItem | MenuGroup | MenuDivider;\n\nexport interface MenuProps {\n /**\n * Menu items\n */\n items: MenuItemType[];\n /**\n * Currently selected key(s)\n */\n selectedKeys?: string[];\n /**\n * Open submenu keys (controlled)\n */\n openKeys?: string[];\n /**\n * Menu size\n */\n size?: 'medium' | 'large';\n /**\n * Whether to show search box\n */\n searchable?: boolean;\n /**\n * Search placeholder\n */\n searchPlaceholder?: string;\n /**\n * Max height for scrolling\n */\n maxHeight?: number;\n /**\n * Enable virtual scrolling\n */\n virtual?: boolean;\n /**\n * Whether to always reserve space for active icon (for description alignment)\n */\n reserveActiveIconSpace?: boolean;\n /**\n * Select handler\n */\n onSelect?: (key: string) => void;\n /**\n * Search handler\n */\n onSearch?: (value: string) => void;\n /**\n * Open keys change handler\n */\n onOpenChange?: (keys: string[]) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst MenuContainer = styled.div`\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 220px;\n\n ${({ theme }) => {\n const dropdownConfig = theme.components?.dropdown;\n const menuConfig = theme.components?.menu;\n\n return `\n padding: ${dropdownConfig?.padding || '4px 0'};\n background: ${dropdownConfig?.background || '#fff'};\n border: ${menuConfig?.border?.width || '1px'} solid ${menuConfig?.border?.color || 'rgba(65, 70, 75, 0.1)'};\n border-radius: ${menuConfig?.border?.radius || '4px'};\n box-shadow: ${dropdownConfig?.boxShadow || '0 2px 8px rgba(0, 0, 0, 0.15)'};\n `;\n }}\n\n /* Ensure virtual list container has proper width */\n .rc-virtual-list {\n width: 100%;\n }\n\n .rc-virtual-list-holder {\n width: 100%;\n }\n\n .rc-virtual-list-holder-inner {\n width: 100%;\n }\n`;\n\nconst SearchBoxContainer = styled.div`\n padding: 8px 12px;\n border-bottom: 1px solid ${({ theme }) => theme.colors?.palettes?.transparency?.['10']};\n`;\n\n// MenuItem content wrapper\nconst MenuItemContent = styled.div<{ $size: 'medium' | 'large' }>`\n display: flex;\n align-items: center;\n width: 100%;\n\n ${({ theme }) => {\n const config = theme.components?.menu?.menuItem;\n return `\n gap: ${config?.layout?.gap || '8px'};\n `;\n }}\n`;\n\n// Icon container\nconst IconContainer = styled.div<{ $size: 'medium' | 'large' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ theme }) => {\n const iconSize = theme.components?.menu?.menuItem?.icon?.size;\n return `\n width: ${iconSize?.width || '18px'};\n height: ${iconSize?.height || '18px'};\n\n svg, img {\n width: 100%;\n height: 100%;\n }\n `;\n }}\n`;\n\n// Content block (label + description, two-end alignment)\nconst ContentBlock = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n min-width: 0;\n`;\n\n// Label text\nconst LabelText = styled.div<{ $size: 'medium' | 'large'; $disabled: boolean }>`\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: 20px;\n\n ${({ $size, theme }) => {\n const config = theme.components?.menu?.menuItem;\n const sizeConfig = config?.size?.[$size];\n const colorConfig = config?.label?.color;\n\n const fontSize = sizeConfig?.label?.fontSize || '13px';\n const color = colorConfig?.normal || '#41464b'\n\n return `\n font-size: ${fontSize};\n color: ${color};\n `;\n }}\n`;\n\n// Description text (shortcuts, right-aligned)\nconst DescriptionText = styled.div<{ $size: 'medium' | 'large'; $disabled: boolean }>`\n flex: 0 0 auto;\n white-space: nowrap;\n line-height: 20px;\n text-align: right;\n\n ${({ $size, $disabled, theme }) => {\n const config = theme.components?.menu?.menuItem;\n const sizeConfig = config?.size?.[$size];\n const colorConfig = config?.description?.color;\n\n const fontSize = sizeConfig?.description?.fontSize || '10px';\n const color = $disabled\n ? (colorConfig?.disabled || 'rgba(65, 70, 75, 0.3)')\n : (colorConfig?.normal || 'rgba(65, 70, 75, 0.6)');\n\n return `\n font-size: ${fontSize};\n color: ${color};\n `;\n }}\n`;\n\n// Selected checkmark icon (with placeholder support)\nconst ActiveIconContainer = styled.div<{\n $size: 'medium' | 'large';\n $visible: boolean;\n $placeholder: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components?.menu?.menuItem?.size?.[$size];\n const iconSize = sizeConfig?.activeIcon?.size;\n\n return `\n width: ${iconSize?.width || '18px'};\n height: ${iconSize?.height || '18px'};\n `;\n }}\n\n ${({ $visible, $placeholder }) => {\n if (!$visible && !$placeholder) {\n return 'display: none;';\n }\n if ($placeholder && !$visible) {\n return 'visibility: hidden;'; // Reserve space but invisible\n }\n return '';\n }}\n`;\n\n// Next level arrow icon\nconst NextLevelIconContainer = styled.div<{ $size: 'medium' | 'large' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components?.menu?.menuItem?.size?.[$size];\n const iconSize = sizeConfig?.nextLevelIcon?.size;\n\n return `\n width: ${iconSize?.width || '18px'};\n height: ${iconSize?.height || '18px'};\n `;\n }}\n`;\n\n/**\n * Menu Component\n *\n * A menu component based on rc-menu with virtual scrolling support\n *\n * @example\n * // Basic menu\n * <Menu\n * items={[\n * { key: '1', label: 'Option 1' },\n * { key: '2', label: 'Option 2' },\n * ]}\n * onSelect={(key) => console.log(key)}\n * />\n *\n * @example\n * // Menu with groups and dividers\n * <Menu\n * items={[\n * { type: 'group', key: 'g1', label: 'Group A', children: [...] },\n * { type: 'divider', key: 'd1' },\n * { key: '1', label: 'Option 1' },\n * ]}\n * />\n *\n * @example\n * // Menu with search\n * <Menu\n * searchable\n * items={items}\n * onSearch={(value) => console.log(value)}\n * />\n */\nexport const Menu: React.FC<MenuProps> = ({\n items,\n selectedKeys = [],\n openKeys,\n size = 'large',\n searchable = false,\n searchPlaceholder = 'Enter search content',\n maxHeight = 300,\n virtual = false,\n reserveActiveIconSpace = true,\n onSelect,\n onSearch,\n onOpenChange,\n className,\n style,\n}) => {\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('od-menu-styles', MenuGlobalStyles);\n }, []);\n\n const [searchValue, setSearchValue] = useState('');\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n onSearch?.(value);\n };\n\n // Filter items based on search (supports recursive submenu search)\n const filteredItems = useMemo(() => {\n if (!searchValue) return items;\n\n const searchLower = searchValue.toLowerCase();\n\n const filterMenuItem = (item: MenuItem): MenuItem | null => {\n // If item itself matches, return it with all children\n if (item.label.toLowerCase().includes(searchLower) ||\n item.description?.toLowerCase().includes(searchLower)) {\n return item;\n }\n\n // If item has children, check if any child matches\n if (item.children && item.children.length > 0) {\n const filteredChildren = item.children\n .map(child => filterMenuItem(child))\n .filter(Boolean) as MenuItem[];\n\n if (filteredChildren.length > 0) {\n // Parent doesn't match but children do - return with filtered children\n return { ...item, children: filteredChildren };\n }\n }\n\n return null;\n };\n\n const filterItem = (item: MenuItemType): MenuItemType | null => {\n if (item.type === 'divider') return null;\n\n if (item.type === 'group') {\n // Filter group children\n const filteredChildren = item.children\n .map(child => filterMenuItem(child))\n .filter(Boolean) as MenuItem[];\n\n // Only show group if it has matching children\n if (filteredChildren.length > 0) {\n return { ...item, children: filteredChildren };\n }\n return null;\n }\n\n // Regular item with potential submenu\n return filterMenuItem(item);\n };\n\n return items\n .map(item => filterItem(item))\n .filter(Boolean) as MenuItemType[];\n }, [items, searchValue]);\n\n // Render menu item content\n const renderMenuItemContent = (item: MenuItem, reserveSpace: boolean) => {\n const isSelected = item.selected || selectedKeys.includes(item.key);\n const isSelectable = item.selectable !== false; // Default to true\n const shouldShowActiveIcon = isSelectable && isSelected;\n const shouldReserveSpace = reserveSpace || isSelectable;\n\n // Icon element\n const iconElement = item.icon ? (\n <IconContainer $size={size}>\n {typeof item.icon === 'string' ? <Icon src={item.icon} /> : item.icon}\n </IconContainer>\n ) : null;\n\n return (\n <MenuItemContent $size={size}>\n {iconElement}\n\n <ContentBlock>\n <LabelText $size={size} $disabled={!!item.disabled}>\n {item.label}\n </LabelText>\n\n {item.description && (\n <DescriptionText $size={size} $disabled={!!item.disabled}>\n {item.description}\n </DescriptionText>\n )}\n </ContentBlock>\n\n {/* Active icon - always reserve space if needed for alignment */}\n <ActiveIconContainer\n $size={size}\n $visible={shouldShowActiveIcon}\n $placeholder={shouldReserveSpace && !shouldShowActiveIcon}\n >\n {shouldShowActiveIcon && <CheckIcon />}\n </ActiveIconContainer>\n\n {item.children && item.children.length > 0 && (\n <NextLevelIconContainer $size={size}>\n <ArrowRightIcon />\n </NextLevelIconContainer>\n )}\n </MenuItemContent>\n );\n };\n\n // Render item based on type\n const renderItem = (item: MenuItemType): React.ReactNode => {\n // Divider\n if (item.type === 'divider') {\n return <RcDivider key={item.key} />;\n }\n\n // Group\n if (item.type === 'group') {\n return (\n <RcItemGroup key={item.key} title={item.label}>\n {item.children.map(child => renderMenuItem(child))}\n </RcItemGroup>\n );\n }\n\n // Regular item\n return renderMenuItem(item);\n };\n\n // Render menu item (supports submenu)\n const renderMenuItem = (item: MenuItem): React.ReactNode => {\n const theme = getGlobalTheme();\n\n // SubMenu\n if (item.children && item.children.length > 0) {\n return (\n <RcSubMenu\n key={item.key}\n title={renderMenuItemContent(item, reserveActiveIconSpace)}\n disabled={item.disabled}\n popupOffset={theme.components?.menu?.subMenu?.popupOffset || [15, 0]}\n >\n {item.children.map(child => renderMenuItem(child))}\n </RcSubMenu>\n );\n }\n\n // Regular item\n return (\n <RcMenuItem\n key={item.key}\n disabled={item.disabled}\n onClick={() => {\n item.onClick?.(item.key);\n onSelect?.(item.key);\n }}\n >\n {renderMenuItemContent(item, reserveActiveIconSpace)}\n </RcMenuItem>\n );\n };\n\n // Virtual list wrapper\n const itemHeight = size === 'medium' ? 28 : 36;\n\n // Force re-render when openKeys changes to close submenus\n const menuKey = openKeys?.join(',') || 'menu';\n\n return (\n <MenuContainer className={className} style={style}>\n {searchable && (\n <SearchBoxContainer>\n <Input\n lineType=\"underlined\"\n size=\"small\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n clearable\n onClear={() => handleSearch('')}\n prefixNode={<SearchIconComponent />}\n />\n </SearchBoxContainer>\n )}\n\n {virtual && filteredItems.length > 10 ? (\n <VirtualList\n data={filteredItems}\n height={maxHeight}\n itemHeight={itemHeight}\n itemKey=\"key\"\n fullHeight={false}\n style={{ width: '100%' }}\n >\n {(item: MenuItemType) => (\n <RcMenu\n key={menuKey}\n prefixCls=\"od-menu\"\n mode=\"vertical\"\n selectedKeys={selectedKeys}\n openKeys={openKeys}\n onOpenChange={onOpenChange}\n triggerSubMenuAction=\"hover\"\n expandIcon={null}\n style={{\n border: 'none',\n background: 'transparent',\n padding: 0,\n }}\n >\n {renderItem(item)}\n </RcMenu>\n )}\n </VirtualList>\n ) : (\n <RcMenu\n key={menuKey}\n prefixCls=\"od-menu\"\n mode=\"vertical\"\n selectedKeys={selectedKeys}\n openKeys={openKeys}\n onOpenChange={onOpenChange}\n triggerSubMenuAction=\"hover\"\n expandIcon={null}\n style={{\n border: 'none',\n background: 'transparent',\n }}\n >\n {filteredItems.map(renderItem)}\n </RcMenu>\n )}\n </MenuContainer>\n );\n};\n\nMenu.displayName = 'Menu';\n\n","import { createGlobalStyle } from 'styled-components';\nimport { getGlobalTheme } from '../utils/context';\n\nconst theme = getGlobalTheme();\n\nexport const DropdownGlobalStyles = createGlobalStyle`\n /* Dropdown container */\n .od-dropdown {\n position: absolute;\n z-index: 1050;\n }\n\n .od-dropdown-hidden {\n display: none;\n }\n\n /* Dropdown slide animations */\n .od-dropdown-slide-up-enter,\n .od-dropdown-slide-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n }\n\n .od-dropdown-slide-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n }\n\n .od-dropdown-slide-up-enter.od-dropdown-slide-up-enter-active,\n .od-dropdown-slide-up-appear.od-dropdown-slide-up-appear-active {\n animation-name: rcDropdownSlideUpIn;\n animation-play-state: running;\n }\n\n .od-dropdown-slide-up-leave.od-dropdown-slide-up-leave-active {\n animation-name: rcDropdownSlideUpOut;\n animation-play-state: running;\n }\n\n @keyframes rcDropdownSlideUpIn {\n 0% {\n opacity: 0;\n transform: scaleY(0.8);\n }\n 100% {\n opacity: 1;\n transform: scaleY(1);\n }\n }\n\n @keyframes rcDropdownSlideUpOut {\n 0% {\n opacity: 1;\n transform: scaleY(1);\n }\n 100% {\n opacity: 0;\n transform: scaleY(0.8);\n }\n }\n`;\n\nexport const MenuGlobalStyles = createGlobalStyle`\n /* Base menu container */\n .od-menu {\n margin: 0;\n padding: 0;\n list-style: none;\n outline: none;\n box-shadow: none;\n background: transparent;\n border: none;\n }\n\n .od-menu-hidden {\n display: none;\n }\n\n /* Menu item */\n .od-menu-item, .od-menu-submenu-title {\n position: relative;\n display: flex;\n align-items: center;\n margin: 0;\n cursor: pointer;\n transition: background-color 0.15s ease;\n user-select: none;\n list-style: none;\n\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n padding: ${config?.layout?.padding || '6px 12px'};\n background: ${config?.background?.normal || 'transparent'};\n border-radius: ${config?.border?.radius || '0'};\n `;\n }}\n }\n\n .od-menu-item:hover {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.hover || 'rgba(65, 70, 75, 0.05)'};\n `;\n }}\n }\n\n .od-menu-item-active,\n .od-menu-item-selected {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.active || 'rgba(65, 70, 75, 0.1)'};\n `;\n }}\n }\n\n .od-menu-item-disabled {\n cursor: not-allowed;\n opacity: 0.3;\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.disabled || 'transparent'};\n `;\n }}\n }\n\n .od-menu-item-disabled:hover {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.disabled || 'transparent'};\n `;\n }}\n }\n\n /* SubMenu */\n .od-menu-submenu {\n position: relative;\n list-style: none;\n }\n\n .od-menu-submenu-popup {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n\n ${() => {\n const dropdownConfig = theme.components?.dropdown;\n\n return `\n background: ${dropdownConfig?.background || '#fff'};\n border: ${dropdownConfig?.border || 'none'};\n border-radius: ${dropdownConfig?.borderRadius || '4px'};\n padding: ${dropdownConfig?.padding || '4px 0'};\n box-shadow: ${dropdownConfig?.boxShadow || 'none'};\n `;\n }}\n\n\n\n }\n\n .od-menu-submenu-popup.od-menu-submenu .od-menu {\n border: none;\n box-shadow: none;\n background: transparent;\n padding: 0;\n }\n\n .od-menu-submenu-title {\n position: relative;\n display: flex;\n align-items: center;\n margin: 0;\n cursor: pointer;\n transition: background-color 0.15s ease;\n user-select: none;\n\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n padding: ${config?.layout?.padding || '6px 12px'};\n background: ${config?.background?.normal || 'transparent'};\n `;\n }}\n }\n\n .od-menu-submenu-title:hover {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.hover || 'rgba(65, 70, 75, 0.05)'};\n `;\n }}\n }\n\n .od-menu-submenu-open > .od-menu-submenu-title {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.active || 'rgba(65, 70, 75, 0.1)'};\n `;\n }}\n }\n\n .od-menu-submenu-disabled .od-menu-submenu-title {\n cursor: not-allowed;\n opacity: 0.3;\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.disabled || 'transparent'};\n `;\n }}\n }\n\n /* Submenu popup */\n .od-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n }\n\n /* Submenu popup positioning - add 5px gap */\n .od-menu-submenu-placement-rightTop,\n .od-menu-submenu-placement-rightBottom {\n /* padding-left: 5px; */\n }\n\n .od-menu-submenu-placement-leftTop,\n .od-menu-submenu-placement-leftBottom {\n /* padding-right: 5px; */\n }\n\n .od-menu-submenu > .od-menu {\n ${() => {\n const dropdownConfig = theme.components?.dropdown;\n const menuConfig = theme.components?.menu;\n\n return `\n background: ${dropdownConfig?.background || '#fff'};\n border: ${menuConfig?.border?.width || '1px'} solid ${menuConfig?.border?.color || 'rgba(65, 70, 75, 0.1)'};\n border-radius: ${menuConfig?.border?.radius || '4px'};\n box-shadow: ${dropdownConfig?.boxShadow || '0 2px 8px rgba(0, 0, 0, 0.15)'};\n `;\n }}\n }\n\n /* Item Group */\n .od-menu-item-group-title {\n padding: 8px 12px 4px;\n user-select: none;\n list-style: none;\n\n ${() => {\n const config = theme.components?.menu?.groupTitle;\n return `\n font-size: ${config?.fontSize || '12px'};\n font-weight: ${config?.fontWeight || '500'};\n color: ${config?.color || 'rgba(65, 70, 75, 0.6)'};\n line-height: 20px;\n `;\n }}\n }\n\n .od-menu-item-group-list {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n /* Divider */\n .od-menu-item-divider {\n overflow: hidden;\n line-height: 0;\n list-style: none;\n\n ${() => {\n const config = theme.components?.menu?.divider;\n return `\n height: ${config?.height || '1px'};\n background: ${config?.background || 'rgba(65, 70, 75, 0.1)'};\n margin: ${config?.margin || '4px 0'};\n `;\n }}\n }\n\n /* Animation */\n .od-menu-submenu-inline {\n border: 0;\n box-shadow: none;\n }\n\n .od-menu-submenu-inline > .od-menu {\n padding: 0;\n border: 0;\n box-shadow: none;\n }\n\n /* Collapse animation */\n .od-menu-submenu-inline-collapsed {\n max-height: 0;\n overflow: hidden;\n transition: max-height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n }\n\n .od-menu-submenu-inline-collapsed-active {\n max-height: 1000px;\n }\n`;\n\n","import React, { useState, useEffect } from 'react';\nimport RcDropdown from 'rc-dropdown';\nimport type { DropdownProps as RcDropdownProps } from 'rc-dropdown';\nimport 'rc-dropdown/assets/index.css';\nimport { DropdownGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\n\nexport interface DropdownProps extends Omit<Partial<RcDropdownProps>, 'prefixCls' | 'placement'> {\n /**\n * Dropdown overlay content (usually a Menu component)\n */\n overlay?: React.ReactElement | (() => React.ReactElement);\n /**\n * Trigger action (click, hover, contextMenu)\n */\n trigger?: ('click' | 'hover' | 'contextMenu')[];\n /**\n * Placement of dropdown\n */\n placement?: 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';\n /**\n * Whether dropdown is visible (controlled)\n */\n visible?: boolean;\n /**\n * Default visibility (uncontrolled)\n */\n defaultVisible?: boolean;\n /**\n * Callback when visibility changes\n */\n onVisibleChange?: (visible: boolean) => void;\n /**\n * Children element that triggers the dropdown\n */\n children: React.ReactElement;\n /**\n * Dropdown container class name\n */\n overlayClassName?: string;\n /**\n * Function to get the container element for the dropdown\n */\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n}\n\n/**\n * Dropdown Component\n *\n * A dropdown container component based on rc-dropdown\n *\n * @example\n * // Basic dropdown with menu\n * <Dropdown\n * overlay={<Menu items={items} />}\n * trigger={['click']}\n * >\n * <DropdownButton value=\"Select\" />\n * </Dropdown>\n *\n * @example\n * // Controlled dropdown\n * <Dropdown\n * visible={open}\n * onVisibleChange={setOpen}\n * overlay={<Menu items={items} />}\n * >\n * <Button>Click me</Button>\n * </Dropdown>\n *\n * @example\n * // Custom trigger\n * <Dropdown\n * overlay={<Menu items={items} />}\n * trigger={['hover']}\n * placement=\"bottomLeft\"\n * >\n * <span>Hover me</span>\n * </Dropdown>\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n overlay,\n trigger = ['click'],\n placement = 'bottomLeft',\n visible: controlledVisible,\n defaultVisible = false,\n onVisibleChange,\n children,\n overlayClassName,\n getPopupContainer,\n ...rest\n}) => {\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('od-dropdown-styles', DropdownGlobalStyles);\n }, []);\n\n const [internalVisible, setInternalVisible] = useState(defaultVisible);\n\n const isControlled = controlledVisible !== undefined;\n const isVisible = isControlled ? controlledVisible : internalVisible;\n\n const handleVisibleChange = (visible: boolean) => {\n if (!isControlled) {\n setInternalVisible(visible);\n }\n onVisibleChange?.(visible);\n };\n\n return (\n <RcDropdown\n overlay={overlay || <div />}\n trigger={trigger}\n placement={placement}\n visible={isVisible}\n onVisibleChange={handleVisibleChange}\n prefixCls=\"od-dropdown\"\n overlayClassName={overlayClassName}\n getPopupContainer={getPopupContainer}\n {...rest}\n >\n {children}\n </RcDropdown>\n );\n};\n\nDropdown.displayName = 'Dropdown';\n","import React, { useCallback, useEffect } from 'react';\nimport RcDialog from 'rc-dialog';\nimport type { DialogProps } from 'rc-dialog';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { CloseIcon } from '@officesdk/design/icons';\nimport { ModalGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\nimport { getGlobalTheme } from '../utils/context';\n\nexport interface ModalProps extends DialogProps {\n /**\n * Whether the modal is visible\n */\n visible?: boolean;\n /**\n * Modal variant type\n * - 'message': Message dialog (max 400px, min 360px)\n * - 'functional': Functional dialog (default 640px, max 800px, min 400px)\n */\n variant?: 'message' | 'functional';\n /**\n * Mask layer type\n * - 'light': Light mask (rgba(65,70,75,0.5))\n * - 'dark': Dark mask (rgba(44,48,51,0.8))\n */\n maskType?: 'light' | 'dark';\n /**\n * Modal title\n */\n title?: React.ReactNode;\n /**\n * Modal width\n */\n width?: string | number;\n /**\n * Modal height\n */\n height?: string | number;\n /**\n * Whether to show mask\n */\n mask?: boolean;\n /**\n * Whether to close modal when clicking mask\n */\n maskClosable?: boolean;\n /**\n * Whether to show close button\n */\n closable?: boolean;\n /**\n * OK button text, set to null to hide\n */\n okText?: string | null;\n /**\n * Cancel button text, set to null to hide\n */\n cancelText?: string | null;\n /**\n * Whether OK button is disabled\n */\n disabledOkButton?: boolean;\n /**\n * Custom footer, set to null to hide footer\n */\n footer?: React.ReactNode;\n /**\n * Callback when OK button is clicked\n */\n onOk?: (e: React.MouseEvent) => void;\n /**\n * Callback when Cancel button is clicked or modal is closed\n */\n onCancel?: (e: React.MouseEvent | React.KeyboardEvent) => void;\n /**\n * Modal content\n */\n children?: React.ReactNode;\n /**\n * CSS class prefix\n */\n prefixCls?: string;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * z-index of the modal\n */\n zIndex?: number;\n /**\n * Whether to destroy modal on close\n */\n destroyOnClose?: boolean;\n /**\n * Whether to focus on modal when opened\n */\n focusTriggerAfterClose?: boolean;\n /**\n * Return the mount node for Modal\n */\n getContainer?: () => HTMLElement;\n}\n\n/**\n * Modal Component\n *\n * A dialog component for displaying content in a layer above the page.\n *\n * @example\n * // Basic usage\n * <Modal\n * visible={visible}\n * title=\"Modal Title\"\n * onOk={handleOk}\n * onCancel={handleCancel}\n * >\n * Modal content\n * </Modal>\n *\n * @example\n * // Custom footer\n * <Modal\n * visible={visible}\n * title=\"Custom Footer\"\n * footer={<Button onClick={handleClose}>Close</Button>}\n * onCancel={handleCancel}\n * >\n * Modal content\n * </Modal>\n *\n * @example\n * // No footer\n * <Modal\n * visible={visible}\n * title=\"No Footer\"\n * footer={null}\n * onCancel={handleCancel}\n * >\n * Modal content\n * </Modal>\n */\nexport const Modal: React.FC<ModalProps> = ({\n visible = false,\n variant = 'message',\n maskType = 'light',\n title,\n width,\n okText,\n cancelText,\n footer,\n onOk,\n onCancel,\n onClose,\n disabledOkButton = false,\n prefixCls = 'osd-modal',\n closable = true,\n closeIcon,\n mask = true,\n maskClosable = true,\n className,\n children,\n ...restProps\n}) => {\n const handleClose = useCallback(\n (e: React.SyntheticEvent) => {\n onClose?.(e);\n onCancel?.(e as React.MouseEvent | React.KeyboardEvent);\n },\n [onClose, onCancel]\n );\n\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('osd-modal-styles', ModalGlobalStyles);\n }, []);\n\n // Get modal config from theme\n const modalConfig = getGlobalTheme().components.modal;\n\n // Calculate width - use prop if provided, otherwise use theme default\n const modalWidth = width ?? modalConfig[variant].defaultWidth;\n\n // Build classNames for semantic elements\n const classNames = {\n ...(maskType === 'dark' && { mask: `${prefixCls}-mask-dark` }),\n content: `${prefixCls}-content-${variant}`,\n };\n\n // Build styles for custom width\n const styles: Record<string, React.CSSProperties> | undefined =\n width !== undefined ? { content: { width } } : undefined;\n\n // Build default footer when not provided\n const renderFooter = () => {\n if (footer !== undefined) return footer;\n\n return (\n <>\n {cancelText !== null && (\n <Button key=\"cancel\" variant=\"outlined\" colorType=\"default\" onClick={handleClose}>\n {cancelText ?? 'Cancel'}\n </Button>\n )}\n {okText !== null && (\n <Button\n key=\"confirm\"\n variant=\"solid\"\n colorType=\"guidance\"\n onClick={onOk}\n disabled={disabledOkButton}\n >\n {okText ?? 'OK'}\n </Button>\n )}\n </>\n );\n };\n\n return (\n <RcDialog\n {...restProps}\n visible={visible}\n title={title}\n width={width === undefined ? modalWidth : undefined}\n prefixCls={prefixCls}\n closable={closable}\n closeIcon={\n closeIcon ?? (\n <Icon size={19.2}>\n <CloseIcon />\n </Icon>\n )\n }\n mask={mask}\n maskClosable={maskClosable}\n classNames={classNames}\n styles={styles}\n className={className}\n onClose={handleClose}\n footer={renderFooter()}\n >\n {children}\n </RcDialog>\n );\n};\n\nModal.displayName = 'Modal';\n","import { createGlobalStyle } from '../utils/styled';\nexport const ModalGlobalStyles = createGlobalStyle`\n .osd-modal {\n position: relative;\n width: auto;\n max-height: 100%;\n }\n\n .osd-modal-mask {\n position: fixed;\n inset: 0;\n background-color: ${({ theme }) => theme.components.modal.message.maskLight};\n height: 100%;\n z-index: ${({ theme }) => theme.components.modal.message.maskZIndex};\n }\n\n .osd-modal-mask-dark {\n background-color: ${({ theme }) => theme.components.modal.message.maskDark};\n }\n\n .osd-modal-mask-hidden {\n display: none;\n }\n\n .osd-modal-wrap {\n position: fixed;\n overflow: auto;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: ${({ theme }) => theme.components.modal.message.maskZIndex};\n -webkit-overflow-scrolling: touch;\n outline: 0;\n }\n\n .osd-modal-section {\n position: relative;\n display: flex;\n flex-direction: column;\n padding: ${({ theme }) => theme.components.modal.message.padding};\n background: ${({ theme }) => theme.components.modal.message.background};\n border: ${({ theme }) => theme.components.modal.message.border};\n box-shadow: ${({ theme }) => theme.components.modal.message.shadow};\n border-radius: ${({ theme }) => theme.components.modal.message.borderRadius};\n box-sizing: border-box;\n }\n\n .osd-modal-section-message {\n max-width: ${({ theme }) => theme.components.modal.message.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.message.minWidth};\n max-height: ${({ theme }) => theme.components.modal.message.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.message.minHeight};\n }\n\n .osd-modal-section-functional {\n max-width: ${({ theme }) => theme.components.modal.functional.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.functional.minWidth};\n max-height: ${({ theme }) => theme.components.modal.functional.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.functional.minHeight};\n }\n\n .osd-modal-content-message {\n max-width: ${({ theme }) => theme.components.modal.message.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.message.minWidth};\n max-height: ${({ theme }) => theme.components.modal.message.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.message.minHeight};\n }\n\n .osd-modal-content-functional {\n max-width: ${({ theme }) => theme.components.modal.functional.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.functional.minWidth};\n max-height: ${({ theme }) => theme.components.modal.functional.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.functional.minHeight};\n }\n\n .osd-modal-close {\n position: absolute;\n right: 32px;\n top: 24px;\n z-index: 10;\n padding: 2.4px;\n line-height: 1;\n border: 0;\n outline: 0;\n background: transparent;\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .osd-modal-close:hover {\n background: ${({ theme }) => theme.components.modal.message.closeButtonHoverBackground};\n }\n\n .osd-modal-close:active {\n background: ${({ theme }) => theme.components.modal.message.closeButtonActiveBackground};\n }\n\n .osd-modal-header {\n margin-bottom: 16px;\n padding-right: 24px;\n }\n\n .osd-modal-title {\n font-size: ${({ theme }) => theme.components.modal.message.titleFontSize};\n font-weight: ${({ theme }) => theme.components.modal.message.titleFontWeight};\n line-height: ${({ theme }) => theme.components.modal.message.titleLineHeight};\n color: ${({ theme }) => theme.components.modal.message.titleColor};\n }\n\n .osd-modal-body {\n flex: 1;\n font-size: ${({ theme }) => theme.components.modal.message.bodyFontSize};\n line-height: ${({ theme }) => theme.components.modal.message.bodyLineHeight};\n color: ${({ theme }) => theme.components.modal.message.bodyColor};\n }\n\n .osd-modal-footer {\n margin-top: 16px;\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n\n .osd-modal.zoom-enter,\n .osd-modal.zoom-appear {\n animation-duration: 0.3s;\n transform: none;\n opacity: 0;\n }\n\n .osd-modal-open {\n overflow: hidden;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { styled } from '../utils/styled';\nimport loadingGif from '../assets/loading.gif';\nimport { getGlobalTheme } from '../utils/context';\n\nexport interface LoadingProps {\n /**\n * Size of the loading spinner\n * - 'small': 16x16 (for dropdown menus, search refresh)\n * - 'medium': 24x24 (for list/table refresh)\n * - 'large': 32x32 (for full page refresh)\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * Whether the spinner is visible\n */\n spinning?: boolean;\n /**\n * Delay in milliseconds before showing the spinner (prevents flash)\n */\n delay?: number;\n /**\n * Tip text displayed below the spinner\n */\n tip?: React.ReactNode;\n /**\n * Whether to use fullscreen overlay mode\n */\n fullscreen?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Child content to wrap with loading overlay\n */\n children?: React.ReactNode;\n /**\n * Custom loading indicator (React element or image URL)\n * When provided as a string, it will be used as the image src\n * When provided as a React element, it will be rendered directly\n */\n indicator?: React.ReactNode | string;\n}\n\n// Shared size styles for indicators\nconst getIndicatorSize = (size: LoadingProps['size'], theme: any) => {\n const sizeConfig = theme.components.loading[size || 'medium'];\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n `;\n};\n\nconst SpinnerImage = styled.img<{ $size: LoadingProps['size'] }>`\n display: inline-block;\n ${({ $size, theme }) => getIndicatorSize($size, theme)}\n object-fit: contain;\n`;\n\nconst CustomIndicatorWrapper = styled.span<{ $size: LoadingProps['size'] }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n ${({ $size, theme }) => getIndicatorSize($size, theme)}\n`;\n\nconst CSSSpinner = styled.div<{ $size: LoadingProps['size'] }>`\n display: inline-block;\n border-radius: 50%;\n box-sizing: border-box;\n\n ${({ $size, theme }) => {\n const loadingConfig = theme.components.loading;\n const sizeConfig = loadingConfig[$size || 'medium'];\n const { color, animation } = loadingConfig.indicator;\n const sizeValue = Number.parseFloat(sizeConfig.size);\n const borderWidth = Math.max(2, Math.round((Number.isNaN(sizeValue) ? 24 : sizeValue) / 12));\n\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n border: ${borderWidth}px solid rgba(0, 0, 0, 0.1);\n border-top-color: ${color};\n animation: loading-spin ${animation.duration} ${animation.timingFunction} infinite;\n\n @keyframes loading-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `;\n }}\n`;\n\nconst LoadingContainer = styled.div<{ $fullscreen: boolean; $hasTip: boolean }>`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: ${({ $hasTip, theme }) => ($hasTip ? theme.components.loading.indicator.gap : '0')};\n\n ${({ $fullscreen, theme }) =>\n $fullscreen &&\n `\n position: fixed;\n inset: 0;\n z-index: ${theme.components.loading.fullscreen.zIndex};\n background: ${theme.components.loading.fullscreen.background};\n `}\n`;\n\nconst Tip = styled.span`\n font-size: 14px;\n line-height: 1.5;\n color: ${({ theme }) => theme.components.loading.tipColor};\n`;\n\nconst Wrapper = styled.div`\n position: relative;\n`;\n\nconst WrapperContent = styled.div<{ $spinning: boolean }>`\n transition: opacity 0.3s;\n opacity: ${({ $spinning, theme }) =>\n $spinning ? theme.components.loading.wrapper.contentOpacity : 1};\n pointer-events: ${({ $spinning }) => ($spinning ? 'none' : 'auto')};\n`;\n\nconst WrapperOverlay = styled.div<{ $hasTip: boolean }>`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: 1;\n background: ${({ theme }) => theme.components.loading.wrapper.overlayBackground};\n gap: ${({ $hasTip, theme }) => ($hasTip ? theme.components.loading.indicator.gap : '0')};\n`;\n\n/**\n * Loading Component\n *\n * A loading component that displays an animated indicator.\n * Supports GIF/CSS defaults via theme configuration or custom indicators via props.\n *\n * @example\n * // Basic usage (uses theme default indicator type)\n * <Loading />\n *\n * @example\n * // Different sizes\n * <Loading size=\"small\" />\n * <Loading size=\"medium\" />\n * <Loading size=\"large\" />\n *\n * @example\n * // With tip\n * <Loading tip=\"Loading...\" />\n *\n * @example\n * // Custom indicator (image URL)\n * <Loading indicator=\"/path/to/custom-loading.gif\" />\n *\n * @example\n * // Custom indicator (React element)\n * <Loading indicator={<MyCustomSpinner />} />\n *\n * @example\n * // Wrap content\n * <Loading spinning={isLoading}>\n * <div>Content to load</div>\n * </Loading>\n *\n * @example\n * // Fullscreen loading\n * <Loading fullscreen spinning={isLoading} />\n */\nexport const Loading: React.FC<LoadingProps> = ({\n size = 'medium',\n spinning = true,\n delay = 0,\n tip,\n fullscreen = false,\n className,\n children,\n indicator,\n}) => {\n const [shouldShow, setShouldShow] = useState(delay === 0 && spinning);\n\n // Simplified effect: only set timer when delay > 0 and spinning\n useEffect(() => {\n if (!spinning) {\n setShouldShow(false);\n return;\n }\n\n if (delay <= 0) {\n setShouldShow(true);\n return;\n }\n\n const timer = setTimeout(() => setShouldShow(true), delay);\n return () => clearTimeout(timer);\n }, [spinning, delay]);\n\n // Render indicator - not memoized because theme can change dynamically via registerGlobalTheme\n const renderIndicator = () => {\n const a11yProps = { role: 'status' as const, 'aria-label': 'Loading' };\n\n // Custom indicator as string (image URL)\n if (typeof indicator === 'string') {\n return <SpinnerImage $size={size} src={indicator} alt=\"Loading\" {...a11yProps} />;\n }\n\n // Custom indicator as React element\n if (indicator) {\n return (\n <CustomIndicatorWrapper $size={size} {...a11yProps}>\n {indicator}\n </CustomIndicatorWrapper>\n );\n }\n\n // Default indicator from theme\n const { indicator: indicatorConfig } = getGlobalTheme().components.loading;\n\n if (indicatorConfig.defaultType === 'css') {\n return <CSSSpinner $size={size} {...a11yProps} />;\n }\n\n return (\n <SpinnerImage\n $size={size}\n src={indicatorConfig.defaultImage || loadingGif}\n alt=\"Loading\"\n {...a11yProps}\n />\n );\n };\n\n // Render spinner with optional tip\n const renderSpinner = () => (\n <>\n {renderIndicator()}\n {tip && <Tip>{tip}</Tip>}\n </>\n );\n\n const hasChildren = React.Children.count(children) > 0;\n\n // Wrapper mode (with children)\n if (hasChildren) {\n return (\n <Wrapper className={className}>\n <WrapperContent $spinning={shouldShow}>{children}</WrapperContent>\n {shouldShow && <WrapperOverlay $hasTip={!!tip}>{renderSpinner()}</WrapperOverlay>}\n </Wrapper>\n );\n }\n\n // Standalone or fullscreen mode (no children)\n if (!shouldShow) return null;\n\n return (\n <LoadingContainer $fullscreen={fullscreen} $hasTip={!!tip} className={className}>\n {renderSpinner()}\n </LoadingContainer>\n );\n};\n\nLoading.displayName = 'Loading';\n"]}
1
+ {"version":3,"sources":["../../src/UIConfigProvider/configManager.ts","../../src/Icon/IconProvider.tsx","../../src/Icon/Icon.tsx","../../src/Icon/index.ts","../../src/Toast/Toast.tsx","../../src/Toast/toastManager.tsx","../../src/utils/context.ts","../../src/utils/styled.ts","../../src/Button/Button.tsx","../../src/Slider/valueMap.ts","../../src/Slider/Slider.tsx","../../src/Slider/index.ts","../../src/Toast/ToastContainer.tsx","../../src/UIConfigProvider/UIConfigProvider.tsx","../../src/UIConfigProvider/createUIConfig.ts","../../src/UIConfigProvider/index.ts","../../src/utils/numberLocale.ts","../../src/NumberInput/NumberInput.styled.ts","../../src/NumberInput/NumberInput.tsx","../../src/NumberInput/index.ts","../../src/Button/SpinButton.tsx","../../src/Button/index.ts","../../src/index.ts","../../src/Switch/Switch.tsx","../../src/Radio/Radio.tsx","../../src/Checkbox/Checkbox.tsx","../../src/Input/Input.tsx","../../src/Input/SearchInput.tsx","../../src/Input/UnderlinedInput.tsx","../../src/Toast/index.ts","../../src/Tabs/Tabs.tsx","../../src/Tooltip/globalStyle.ts","../../src/utils/styleManager.ts","../../src/Tooltip/Tooltip.tsx","../../src/ToolbarButton/ToolbarButton.tsx","../../src/dropdown/DropdownButton.tsx","../../src/dropdown/Menu.tsx","../../src/dropdown/globalStyle.ts","../../src/dropdown/Dropdown.tsx","../../src/Modal/Modal.tsx","../../src/Modal/globalStyle.ts","../../src/Loading/Loading.tsx"],"names":["initUIConfig","getUIConfig","getGlobalIconRegistry","getGlobalToastConfig","ReactDOM","IconProvider","useIconRegistry","createContext","useContext","Icon","styled","React","init_Icon","Toast","init_Button","theme","useState","useEffect","getGlobalTheme","SuccessIcon","InfoIcon","ErrorIcon","WarningIcon","Button","CloseIcon","toast","getGlobalRenderFunction","lightTheme","toastManager","baseStyled","baseCreateGlobalStyle","IconWrapper","sizeConfig","styles","borderColor","borderColorHover","borderColorActive","borderColorDisabled","start","end","visualStart","visualSize","visualEnd","Slider","useMemo","useRef","useCallback","init_Slider","ToastWrapper","ToastContainer","useToast","UIConfigProvider","useUIConfig","createUIConfig","mergeUIConfig","init_UIConfigProvider","NumberInput","init_NumberInput","SpinButton","HiddenInput","CheckIcon","InputWrapper","StyledInput","forwardRef","SearchIcon","createGlobalStyle","RcTooltip","DropdownButton","ArrowRightIcon","IconContainer","ContentBlock","LabelText","RcDivider","RcItemGroup","RcSubMenu","RcMenuItem","SearchIconComponent","VirtualList","RcMenu","RcDropdown","RcDialog"],"mappings":"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","file":"index.js","sourcesContent":["import type React from 'react';\nimport type { UIConfig } from './types';\nimport { registerGlobalContext } from '../utils/context';\nimport ReactDOM from 'react-dom';\n\nlet globalConfig: UIConfig | null = null;\nlet globalIconRegistry: Record<string, React.ComponentType<React.SVGProps<SVGSVGElement>>> | null =\n null;\nlet globalToastConfig: { maxCount?: number; defaultDuration?: number } | null = null;\n\n/**\n * Create default render function\n * This will be registered via registerGlobalContext and can be retrieved via getGlobalRenderFunction\n */\nexport const createDefaultRenderFunction = (): ((\n element: React.ReactElement,\n container: HTMLElement\n) => void) => {\n return (element: React.ReactElement, container: HTMLElement) => {\n // Try React 18 createRoot first\n if ('createRoot' in ReactDOM) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { createRoot } = ReactDOM as any;\n const root = createRoot(container);\n root.render(element);\n } else {\n // Fallback to React 17 and below\n // eslint-disable-next-line react/no-deprecated\n ReactDOM.render(element, container);\n }\n };\n};\n\n/**\n * Initialize UI configuration globally (non-React)\n *\n * This function allows you to configure the UI library without using React Provider components.\n * It's useful for:\n * - Non-React environments\n * - Avoiding Provider nesting (e.g., in Modal components)\n * - Setting up configuration before React app starts\n *\n * After calling this function, all components will automatically use the global configuration.\n * Global styles (Tooltip, Menu, Dropdown) will be injected on-demand when components are first used.\n *\n * @param config - UI configuration object\n * @param config.theme - Theme configuration (required)\n * @param config.icons - Icon registry mapping icon names to React components\n * @param config.toast - Toast configuration (maxCount, defaultDuration, etc.)\n * @param config.locale - Locale code (e.g., 'zh-CN', 'en-US')\n * @param config.i18n - Internationalization configuration\n * @param config.zIndex - Z-index layer management\n * @param config.animation - Animation configuration\n * @param config.a11y - Accessibility configuration\n *\n * @example\n * import { initUIConfig } from '@officesdk/design';\n * import { lightTheme } from '@officesdk/design/theme';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * // Initialize before React app starts\n * initUIConfig({\n * theme: lightTheme,\n * icons: iconRegistry,\n * toast: {\n * maxCount: 5,\n * defaultDuration: 3000,\n * },\n * });\n *\n * // Now you can use components without UIConfigProvider\n * function App() {\n * return <Button>Click me</Button>;\n * }\n *\n * @example\n * // Useful for Modal scenarios - no need to nest Provider\n * function Modal({ children }) {\n * return (\n * <Portal>\n * {children}\n * </Portal>\n * );\n * }\n *\n * @example\n * // Can be called multiple times to update config\n * initUIConfig({ theme: lightTheme });\n * // Later update icons\n * initUIConfig({ theme: lightTheme, icons: newIconRegistry });\n */\nexport const initUIConfig = (config: UIConfig) => {\n globalConfig = config;\n\n // Create and register render function\n const renderFunction = createDefaultRenderFunction();\n\n // Register theme and render function via existing mechanism\n registerGlobalContext({\n theme: config.theme,\n render: renderFunction,\n });\n\n globalIconRegistry = config.icons || null;\n globalToastConfig = {\n maxCount: config.toast?.maxCount ?? 5,\n defaultDuration: config.toast?.defaultDuration ?? 3000,\n };\n};\n\n/**\n * Get global UI configuration\n */\nexport const getUIConfig = (): UIConfig | null => {\n return globalConfig;\n};\n\n/**\n * Get global icon registry\n */\nexport const getGlobalIconRegistry = () => {\n return globalIconRegistry;\n};\n\n/**\n * Get global toast config\n */\nexport const getGlobalToastConfig = () => {\n return globalToastConfig;\n};\n","import React, { createContext, useContext } from 'react';\n\nexport type IconComponent = React.ComponentType<React.SVGProps<SVGSVGElement>>;\nexport type IconRegistry = Record<string, IconComponent>;\n\nconst IconContext = createContext<IconRegistry | null>(null);\n\nexport interface IconProviderProps {\n /**\n * Icon registry mapping icon names to React components\n * Import from @officesdk/design/icons\n */\n icons: IconRegistry;\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * IconProvider Component\n *\n * Provides icon registry to child components via Context\n *\n * @example\n * import { IconProvider } from '@officesdk/design';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * <IconProvider icons={iconRegistry}>\n * <App />\n * </IconProvider>\n */\nexport const IconProvider: React.FC<IconProviderProps> = ({\n icons,\n children,\n}) => {\n return (\n <IconContext.Provider value={icons}>\n {children}\n </IconContext.Provider>\n );\n};\n\n/**\n * Hook to access icon registry from context\n */\nexport const useIconRegistry = () => {\n return useContext(IconContext);\n};\n\nIconProvider.displayName = 'IconProvider';\n\n\n","import React from 'react';\nimport { styled } from '../utils/styled';\nimport { useIconRegistry } from './IconProvider';\nimport { getGlobalIconRegistry } from '../UIConfigProvider/configManager';\n\nexport interface IconSize {\n width: string;\n height: string;\n}\n\nexport interface IconProps {\n /**\n * Icon name from registry (requires IconProvider)\n */\n name?: string;\n /**\n * Image URL for icon (e.g., PNG, JPG, or external SVG)\n */\n src?: string;\n /**\n * Custom icon element (takes precedence over name and src)\n */\n children?: React.ReactNode;\n /**\n * Size of the icon (px or custom width/height).\n * When not provided, the SVG keeps its original width/height attributes.\n */\n size?: number | string | IconSize;\n /**\n * Color of the icon (only works with SVG icons, not image src).\n * When not provided, the SVG keeps its original colors.\n */\n color?: string;\n /**\n * Alt text for image icons\n */\n alt?: string;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Click handler\n */\n onClick?: (e: React.MouseEvent) => void;\n}\n\nconst getSizeValue = (size: number | string | IconSize, dimension: 'width' | 'height'): string => {\n if (typeof size === 'number') {\n return `${size}px`;\n }\n if (typeof size === 'string') {\n return size;\n }\n return size[dimension];\n};\n\nconst IconContainer = styled.span<{\n $size?: number | string | IconSize;\n $color?: string;\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n ${({ $size }) => $size !== undefined && `width: ${getSizeValue($size, 'width')};`}\n ${({ $size }) => $size !== undefined && `height: ${getSizeValue($size, 'height')};`}\n ${({ $color }) => $color !== undefined && `color: ${$color};`}\n ${({ $color }) => $color !== undefined && `--icon-fill: ${$color};`}\n flex-shrink: 0;\n line-height: 1;\n\n svg {\n ${({ $size }) => $size !== undefined && `width: 100%; height: 100%;`}\n display: block;\n }\n`;\n\n/**\n * Icon Component\n *\n * Renders icons from multiple sources with priority: children > src > name\n *\n * @example\n * // Using with IconProvider and registry\n * <Icon name=\"close\" size={16} />\n *\n * @example\n * // Using with image URL\n * <Icon src=\"/icons/custom-icon.svg\" size={24} />\n *\n * @example\n * // Using with custom icon element\n * <Icon><CustomSvg /></Icon>\n *\n * @example\n * // Using with imported icon component\n * import { CloseIcon } from '@officesdk/design/icons';\n * <Icon><CloseIcon /></Icon>\n */\nexport const Icon: React.FC<IconProps> = ({\n name,\n src,\n children,\n size,\n color,\n alt = 'icon',\n className,\n style,\n onClick,\n}) => {\n const contextRegistry = useIconRegistry();\n const globalRegistry = getGlobalIconRegistry();\n // Use context registry first, fallback to global registry\n const registry = contextRegistry || globalRegistry;\n\n // Priority: custom children > src > registry icon by name\n let iconElement: React.ReactNode = children;\n\n // If no children, try src\n if (!iconElement && src) {\n iconElement = (\n <img\n src={src}\n alt={alt}\n style={{ width: '100%', height: '100%', display: 'block' }}\n />\n );\n }\n\n // If no children and no src, try registry\n if (!iconElement && name) {\n const IconComponent = registry?.[name];\n if (IconComponent) {\n iconElement = <IconComponent />;\n } else if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Icon \"${name}\" not found in registry. Make sure IconProvider is set up or call initUIConfig() with icons.`\n );\n }\n }\n\n if (!iconElement) {\n if (process.env.NODE_ENV !== 'production' && !children && !name && !src) {\n console.warn('Icon: one of \"name\", \"src\", or \"children\" must be provided');\n }\n return null;\n }\n\n return (\n <IconContainer\n $size={size}\n $color={color}\n className={className}\n style={style}\n onClick={onClick}\n >\n {iconElement}\n </IconContainer>\n );\n};\n\nIcon.displayName = 'Icon';\n\n","export { Icon } from './Icon';\nexport type { IconProps, IconSize } from './Icon';\n\nexport { IconProvider, useIconRegistry } from './IconProvider';\nexport type { IconProviderProps, IconRegistry, IconComponent } from './IconProvider';\n\n\n\n","import React, { useEffect, useState } from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { Button } from '../Button';\nimport { getGlobalTheme } from '../utils/context';\nimport { CloseIcon, ErrorIcon, InfoIcon, SuccessIcon, WarningIcon } from '@officesdk/design/icons';\nimport loadingGif from '../assets/loading.gif';\n\nexport type ToastVariant = 'success' | 'info' | 'error' | 'warn' | 'loading' | 'critical';\n\nexport interface ToastProps\n extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'className' | 'style' | 'children' | 'onClick'\n > {\n /**\n * Toast variant type\n */\n variant?: ToastVariant;\n /**\n * Toast message content (main text)\n */\n message: React.ReactNode;\n /**\n * Optional description text (shows below message in multiline mode)\n */\n description?: string;\n /**\n * Main action button text (blue color)\n */\n mainButtonText?: string;\n /**\n * Main action button click handler\n */\n onMainButtonClick?: () => void;\n /**\n * Secondary action button text (gray color)\n */\n secondaryButtonText?: string;\n /**\n * Secondary action button click handler\n */\n onSecondaryButtonClick?: () => void;\n /**\n * Whether to show close button\n */\n closable?: boolean;\n /**\n * Close button click handler\n */\n onClose?: () => void;\n /**\n * Auto close duration in milliseconds (0 to disable)\n */\n duration?: number;\n /**\n * Custom icon (overrides default variant icon)\n */\n icon?: React.ReactNode;\n /**\n * Whether to show icon\n */\n showIcon?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst ToastContainer = styled.div<{\n $variant: ToastVariant;\n}>`\n display: inline-flex;\n align-items: center;\n gap: 8px;\n border: 1px solid;\n box-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.08);\n\n ${({ theme }) => {\n const baseConfig = theme.components.toast;\n return `\n padding: ${baseConfig.padding};\n border-radius: ${baseConfig.borderRadius};\n font-size: ${baseConfig.fontSize};\n font-weight: ${baseConfig.fontWeight};\n `;\n }}\n\n ${({ $variant, theme }) => {\n const variantConfig = theme.components.toast[$variant];\n return `\n background: ${variantConfig.background};\n border-color: ${variantConfig.borderColor};\n `;\n }}\n`;\n\nconst IconWrapper = styled.div<{\n $variant: ToastVariant;\n $hasDescription: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $hasDescription }) => {\n const size = $hasDescription ? '28px' : '18px';\n return `\n width: ${size};\n height: ${size};\n `;\n }}\n`;\n\nconst ContentWrapper = styled.div<{ $hasDescription: boolean }>`\n display: flex;\n flex-direction: ${({ $hasDescription }) => ($hasDescription ? 'column' : 'row')};\n align-items: ${({ $hasDescription }) => ($hasDescription ? 'flex-start' : 'center')};\n gap: ${({ $hasDescription }) => ($hasDescription ? '2px' : '0')};\n flex: 1;\n`;\n\nconst Message = styled.span<{ $variant: ToastVariant }>`\n font-size: 13px;\n line-height: 20px;\n color: ${({ $variant, theme }) => theme.components.toast[$variant].message.color};\n`;\n\nconst Description = styled.span`\n font-size: 12px;\n line-height: 20px;\n color: ${({ theme }) => theme.colors.palettes.transparency['60']};\n`;\n\nconst ActionGroup = styled.div`\n display: flex;\n gap: 2px;\n align-items: center;\n`;\n\n// Loading icon component using gif for animation\nconst LoadingGifIcon = (props: { width: string; height: string }) => (\n <img src={loadingGif} alt=\"Loading\" width={props.width} height={props.height} />\n);\n\n/**\n * Toast Component\n *\n * A notification message component with different variants\n *\n * @example\n * // Single line toast\n * <Toast variant=\"success\" message=\"信息反馈\" />\n *\n * @example\n * // Toast with buttons\n * <Toast\n * variant=\"info\"\n * message=\"信息反馈\"\n * mainButtonText=\"按钮名称\"\n * onMainButtonClick={() => console.log('Main clicked')}\n * secondaryButtonText=\"按钮名称\"\n * onSecondaryButtonClick={() => console.log('Secondary clicked')}\n * closable\n * />\n *\n * @example\n * // Multi-line toast with description\n * <Toast\n * variant=\"success\"\n * message=\"信息反馈\"\n * description=\"信息具体说明\"\n * mainButtonText=\"按钮名称\"\n * closable\n * />\n */\nexport const Toast: React.FC<ToastProps> = ({\n variant = 'info',\n message,\n description,\n mainButtonText,\n onMainButtonClick,\n secondaryButtonText,\n onSecondaryButtonClick,\n closable = false,\n onClose,\n duration = 0,\n icon,\n showIcon = true,\n className,\n style,\n ...restProps\n}) => {\n const [visible, setVisible] = useState(true);\n\n // Auto close after duration\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(() => {\n setVisible(false);\n onClose?.();\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [duration, onClose]);\n\n const handleClose = () => {\n setVisible(false);\n onClose?.();\n };\n\n if (!visible) {\n return null;\n }\n\n // Icon priority: props.icon > theme icon > default icon\n const getIconElement = () => {\n // 1. If icon prop is provided, use it\n if (icon) {\n return icon;\n }\n\n // 2. Try to get icon from theme\n const theme = getGlobalTheme();\n const variantIcon = theme?.components?.toast?.[variant]?.icon;\n if (variantIcon.url) {\n return <Icon src={variantIcon.url} size={variantIcon.size} />;\n }\n\n // 3. Use default icon (loading uses gif for animation)\n if (variant === 'loading') {\n return <LoadingGifIcon width={variantIcon.size.width} height={variantIcon.size.height} />;\n }\n\n // Map variant to icon component\n const iconComponents = {\n success: () => (\n <Icon size={variantIcon.size}>\n <SuccessIcon />\n </Icon>\n ),\n info: () => (\n <Icon size={variantIcon.size}>\n <InfoIcon />\n </Icon>\n ),\n error: () => (\n <Icon size={variantIcon.size}>\n <ErrorIcon />\n </Icon>\n ),\n warn: () => (\n <Icon size={variantIcon.size}>\n <WarningIcon />\n </Icon>\n ),\n critical: () => (\n <Icon size={variantIcon.size}>\n <ErrorIcon />\n </Icon>\n ),\n };\n\n const IconRenderer = iconComponents[variant] || iconComponents.info;\n return <IconRenderer />;\n };\n\n const theme = getGlobalTheme();\n const toastConfig = theme?.components?.toast;\n\n const iconElement = getIconElement();\n const hasDescription = !!description;\n const hasActions = !!(mainButtonText || secondaryButtonText || closable);\n\n return (\n <ToastContainer\n $variant={variant}\n className={className}\n style={style}\n role=\"alert\"\n aria-live=\"polite\"\n {...restProps}\n >\n {showIcon && (\n <IconWrapper $variant={variant} $hasDescription={hasDescription}>\n {iconElement}\n </IconWrapper>\n )}\n\n <ContentWrapper $hasDescription={hasDescription}>\n <Message $variant={variant}>{message}</Message>\n {description && <Description>{description}</Description>}\n </ContentWrapper>\n\n {hasActions && (\n <ActionGroup>\n {mainButtonText && onMainButtonClick && (\n <Button variant=\"text\" colorType=\"guidance\" size=\"small\" onClick={onMainButtonClick}>\n {mainButtonText}\n </Button>\n )}\n\n {secondaryButtonText && onSecondaryButtonClick && (\n <Button\n variant=\"text\"\n colorType=\"default\"\n size=\"small\"\n onClick={onSecondaryButtonClick}\n >\n {secondaryButtonText}\n </Button>\n )}\n\n {closable && (\n <Button\n variant=\"icon\"\n colorType=\"default\"\n size=\"small\"\n onClick={handleClose}\n aria-label=\"Close\"\n icon={\n toastConfig.closeButton.icon.url ? (\n toastConfig.closeButton.icon.url\n ) : (\n <Icon size={12}>\n <CloseIcon />\n </Icon>\n )\n }\n iconBordered={false}\n />\n )}\n </ActionGroup>\n )}\n </ToastContainer>\n );\n};\n\nToast.displayName = 'Toast';\n","import React from 'react';\nimport { ToastProps } from './Toast';\nimport { Toast } from './Toast';\nimport { styled } from '../utils/styled';\n\ntype ToastPlacement =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\ninterface ToastItem extends Omit<ToastProps, 'onClose'> {\n id: string;\n placement?: ToastPlacement;\n}\n\ninterface ToastContainerConfig {\n placement?: ToastPlacement;\n maxCount?: number;\n defaultDuration?: number;\n}\n\ntype RenderFunction = (element: React.ReactElement, container: HTMLElement) => void;\n\ninterface ToastWrapperProps {\n $placement:\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n}\n\nconst ToastWrapper = styled.div<ToastWrapperProps>`\n position: fixed;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n\n > * {\n pointer-events: auto;\n }\n\n ${({ $placement, theme }) => {\n const offset = theme.components?.toast?.offset || { vertical: '24px', horizontal: '24px' };\n const vertical = offset.vertical || '24px';\n const horizontal = offset.horizontal || '24px';\n\n const styles: Record<string, string> = {\n 'top-right': `\n top: ${vertical};\n right: ${horizontal};\n `,\n 'top-left': `\n top: ${vertical};\n left: ${horizontal};\n `,\n 'top-center': `\n top: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n 'bottom-right': `\n bottom: ${vertical};\n right: ${horizontal};\n `,\n 'bottom-left': `\n bottom: ${vertical};\n left: ${horizontal};\n `,\n 'bottom-center': `\n bottom: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n };\n\n return styles[$placement] || styles['top-right'];\n }}\n`;\n\nclass ToastManager {\n private toasts: ToastItem[] = [];\n private container: HTMLDivElement | null = null;\n private renderFunc: RenderFunction | null = null;\n private config: ToastContainerConfig = {\n placement: 'top-right',\n maxCount: 5,\n defaultDuration: 3000,\n };\n\n constructor() {\n // Try to get render function from global context\n this.tryGetRenderFunction();\n }\n\n /**\n * Try to get render function from global context\n */\n private tryGetRenderFunction() {\n if (typeof window !== 'undefined') {\n import('../utils/context')\n .then(({ getGlobalRenderFunction }) => {\n const renderFunc = getGlobalRenderFunction();\n if (renderFunc) {\n this.renderFunc = renderFunc;\n }\n })\n .catch(() => {\n // Context not available yet\n });\n }\n }\n\n /**\n * Set render function (from registerGlobalContext)\n */\n setRenderFunction(renderFunc: RenderFunction) {\n this.renderFunc = renderFunc;\n }\n\n /**\n * Initialize the toast container\n */\n private initialize() {\n if (this.container) return;\n\n if (!this.renderFunc) {\n console.warn('Toast render function not set. Please call registerGlobalContext first.');\n return;\n }\n\n // Create container element\n this.container = document.createElement('div');\n this.container.id = 'officesdk-toast-container';\n document.body.appendChild(this.container);\n\n this.render();\n }\n\n /**\n * Render toasts to DOM\n */\n private render() {\n if (!this.container || !this.renderFunc) return;\n\n const element = (\n <>\n {this.toasts.map((toast) => {\n return <ToastWrapper key={toast.id} $placement={toast.placement || 'top-center'}>\n <Toast {...toast} onClose={() => this.hide(toast.id)} />\n </ToastWrapper>\n })}\n </>\n );\n\n this.renderFunc(element, this.container);\n }\n\n /**\n * Configure toast container\n */\n configure(config: ToastContainerConfig) {\n this.config = { ...this.config, ...config };\n this.render();\n }\n\n /**\n * Show a toast\n */\n show(props: Omit<ToastProps, 'onClose'>): string {\n this.initialize();\n\n const id = `toast-${Date.now()}-${Math.random()}`;\n const newToast: ToastItem = {\n ...props,\n id,\n duration: props.duration ?? this.config.defaultDuration,\n };\n\n this.toasts = [...this.toasts, newToast].slice(-(this.config.maxCount || 5));\n this.render();\n\n return id;\n }\n\n /**\n * Hide a toast by id\n */\n hide(id: string) {\n this.toasts = this.toasts.filter((toast) => toast.id !== id);\n this.render();\n }\n\n /**\n * Hide all toasts\n */\n hideAll() {\n this.toasts = [];\n this.render();\n }\n\n /**\n * Show success toast\n */\n success(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'success', message });\n }\n\n /**\n * Show info toast\n */\n info(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'info', message });\n }\n\n /**\n * Show error toast\n */\n error(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'error', message });\n }\n\n /**\n * Show warning toast\n */\n warn(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'warn', message });\n }\n\n /**\n * Show loading toast\n */\n loading(message: React.ReactNode, options?: Partial<ToastProps>): string {\n return this.show({ ...options, variant: 'loading', message });\n }\n\n /**\n * Destroy the toast container\n */\n destroy() {\n if (this.container) {\n // Clear container content\n if (this.renderFunc) {\n // Render empty to unmount components\n this.renderFunc(<></>, this.container);\n }\n // Remove from DOM\n if (this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n }\n this.toasts = [];\n }\n\n /**\n * Get current toasts\n */\n getToasts(): ToastItem[] {\n return this.toasts;\n }\n\n /**\n * Clear all toasts (for testing)\n */\n clear() {\n this.toasts = [];\n this.render();\n }\n}\n\n// Global singleton instance\nconst toastManager = new ToastManager();\n\n/**\n * Global toast object that can be used anywhere\n * No need to render ToastContainer component manually\n *\n * @example\n * import { toast } from '@officesdk/design';\n *\n * // Configure (optional)\n * toast.configure({\n * placement: 'top-right',\n * maxCount: 5,\n * defaultDuration: 3000,\n * });\n *\n * // Show toasts\n * toast.success('Operation successful!');\n * toast.error('Something went wrong');\n * toast.info('Info message', { duration: 5000 });\n * toast.warn('Warning message');\n *\n * const id = toast.show({ variant: 'info', message: 'Custom toast' });\n * toast.hide(id);\n * toast.hideAll();\n */\nexport const toast = {\n configure: (config: ToastContainerConfig) => toastManager.configure(config),\n show: (props: Omit<ToastProps, 'onClose'>) => toastManager.show(props),\n hide: (id: string) => toastManager.hide(id),\n hideAll: () => toastManager.hideAll(),\n success: (message: React.ReactNode, options?: Partial<ToastProps>) =>\n toastManager.success(message, options),\n info: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.info(message, options),\n error: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.error(message, options),\n warn: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.warn(message, options),\n loading: (message: React.ReactNode, options?: Partial<ToastProps>) => toastManager.loading(message, options),\n destroy: () => toastManager.destroy(),\n};\n\n// Export manager for internal use\nexport { toastManager };\nexport type { ToastItem, ToastContainerConfig };\n","import type { Theme } from \"@officesdk/design/theme\";\nimport type React from \"react\";\nimport { lightTheme } from \"@officesdk/design/theme\";\nimport { createDefaultRenderFunction } from \"../UIConfigProvider/configManager\";\nimport { DeepPartial } from \"./type\";\n\nfunction deepMerge<T extends object>(target: T, ...sources: Partial<T>[]): T {\n if (!sources.length) return target;\n const source = sources.shift();\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n deepMerge(target[key] as object, source[key] as object);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n return deepMerge(target, ...sources);\n}\n\nfunction isObject(item: any): item is object {\n return item && typeof item === \"object\" && !Array.isArray(item);\n}\n\n\n\nconst globalTheme: Theme = lightTheme;\nexport const registerGlobalTheme = (theme: DeepPartial<Theme>) => {\n // Theme is a complex object type, cast to Record for deepMerge\n // Use double cast via unknown to satisfy TypeScript's type system\n deepMerge(\n globalTheme as unknown as Record<string, unknown>,\n theme as unknown as Record<string, unknown>\n );\n};\n\nexport const getGlobalTheme = (): Theme => {\n return globalTheme;\n};\n\n// Store render function globally to avoid circular dependency\nlet globalRenderFunction: ((element: React.ReactElement, container: HTMLElement) => void) | null = createDefaultRenderFunction();\n\nexport const getGlobalRenderFunction = () => globalRenderFunction;\n\n/**\n * Register global context\n *\n * Registers theme and render function to the global context.\n * Can be called multiple times (e.g., in tests) to update the theme.\n *\n * @param context - The context to register\n * @param context.theme - Theme configuration\n * @param context.render - Optional render function for toast (React 18+ uses createRoot, older versions use ReactDOM.render)\n */\nexport const registerGlobalContext = (context: {\n theme: DeepPartial<Theme>;\n render?: (element: React.ReactElement, container: HTMLElement) => void;\n}) => {\n if (context.theme) {\n registerGlobalTheme(context.theme);\n }\n\n if (context.render) {\n globalRenderFunction = context.render;\n // Immediately set render function if toastManager is already loaded\n // This avoids race conditions\n if (typeof window !== 'undefined') {\n // Use a small timeout to ensure toastManager is loaded\n setTimeout(() => {\n import('../Toast/toastManager').then(({ toastManager }) => {\n toastManager.setRenderFunction(context.render!);\n }).catch(() => {\n // toastManager not loaded yet, will be set when it loads\n });\n }, 0);\n }\n }\n};\n","import baseStyled, {\n ThemedStyledInterface,\n createGlobalStyle as baseCreateGlobalStyle\n} from 'styled-components';\nimport { getGlobalTheme } from './context';\nimport type { Theme } from '@officesdk/design/theme';\n\n// Helper function to wrap styled component and inject theme via defaultProps\nconst wrapWithTheme = (component: any) => {\n if (component && typeof component === 'object' ) {\n component.defaultProps = {\n ...component.defaultProps,\n get theme() {\n return getGlobalTheme()\n },\n };\n }\n return component;\n};\n\n// Create the main styled function\nconst styledFunction = (tag: any) => {\n return wrapWithTheme((baseStyled as any)(tag));\n};\n\n// Start with a copy of baseStyled to get all its properties\nconst styledWithBase = Object.assign(styledFunction, baseStyled);\n\n// Override each HTML tag method to inject theme via defaultProps\nObject.keys(baseStyled).forEach((key) => {\n const originalMethod = (baseStyled as any)[key];\n\n if (typeof originalMethod === 'function') {\n (styledWithBase as any)[key] = (...args: any[]) => {\n const component = originalMethod(...args);\n return wrapWithTheme(component);\n };\n }\n});\n\n// Export with proper typing\nexport const styled = styledWithBase as ThemedStyledInterface<Theme>;\n\n// Export createGlobalStyle with theme support\nexport const createGlobalStyle = (...args: Parameters<typeof baseCreateGlobalStyle>) => {\n const GlobalStyleComponent = baseCreateGlobalStyle(...args);\n return wrapWithTheme(GlobalStyleComponent);\n};\n","import React from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Button variant type\n * - 'icon': Square icon button without padding, size based on iconSize\n */\n variant?: 'solid' | 'outlined' | 'text' | 'icon';\n /**\n * Button color type\n * - 'status' is only available for 'text' variant\n */\n colorType?: 'default' | 'guidance' | 'alert' | 'status';\n /**\n * Button size\n */\n size?: 'small' | 'medium' | 'large' | 'extraLarge';\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n /**\n * Whether the button is in loading state\n */\n loading?: boolean;\n /**\n * Whether the button should take full width of its container\n */\n fullWidth?: boolean;\n /**\n * Icon to display with the button text\n * - If string: treated as icon src URL, rendered using Icon component\n * - If ReactNode: rendered directly\n */\n icon?: string | React.ReactNode;\n /**\n * Icon placement relative to text (only for text buttons)\n */\n iconPlacement?: 'before' | 'after';\n /**\n * Whether the icon button should have a border (only for variant='icon')\n */\n iconBordered?: boolean;\n}\n\nconst IconWrapper = styled.span<{ $size: ButtonProps['size']; $iconPlacement: 'before' | 'after' }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, $iconPlacement, theme }) => {\n const buttonConfig = theme.components.button[$size || 'medium'];\n const sizeConfig = buttonConfig?.withIcon || buttonConfig;\n const marginSide = $iconPlacement === 'before' ? 'margin-right' : 'margin-left';\n\n return `\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n ${marginSide}: ${sizeConfig.iconGap};\n\n svg, img {\n width: 100%;\n height: 100%;\n display: block;\n }\n `;\n }}\n`;\n\nconst TextWrapper = styled.span<{ $size: ButtonProps['size'] }>`\n ${({ $size, theme }) => {\n const buttonConfig = theme.components.button[$size || 'medium'];\n const sizeConfig = buttonConfig?.withIcon || buttonConfig;\n return `\n padding: ${sizeConfig.textPadding || '0'};\n `;\n }}\n`;\n\nconst IconOnlyWrapper = styled.span<{ $size: ButtonProps['size'] }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const buttonConfig = theme.components.button[$size || 'medium'];\n const sizeConfig = buttonConfig?.onlyIcon || buttonConfig;\n return `\n width: ${sizeConfig.iconSize?.width || '14px'};\n height: ${sizeConfig.iconSize?.height || '14px'};\n\n svg, img {\n width: 100%;\n height: 100%;\n display: block;\n }\n `;\n }}\n`;\n\nconst StyledButton = styled.button<{\n $variant: ButtonProps['variant'];\n $colorType: ButtonProps['colorType'];\n $size: ButtonProps['size'];\n $fullWidth: boolean;\n $iconBordered: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none;\n width: ${({ $fullWidth }) => ($fullWidth ? '100%' : 'auto')};\n\n /* Size variants */\n ${({ $size, $variant, theme }) => {\n const sizeName = $size || 'medium';\n const buttonConfig = theme.components.button[sizeName];\n\n // Icon variant: use onlyIcon config (square button with padding)\n if ($variant === 'icon') {\n const sizeConfig = buttonConfig?.onlyIcon || buttonConfig;\n return `\n padding: ${sizeConfig.padding || '7px'};\n border-radius: ${sizeConfig.borderRadius || theme.borderRadius.small};\n `;\n }\n\n // Other variants: use withIcon config\n const sizeConfig = buttonConfig?.withIcon || buttonConfig;\n return `\n padding: ${sizeConfig.padding};\n font-size: ${sizeConfig.fontSize};\n line-height: ${sizeConfig.lineHeight};\n border-radius: ${sizeConfig.borderRadius};\n min-height: ${sizeConfig.height};\n `;\n }}\n\n /* Variant and color type styles */\n ${({ $variant, $colorType, $iconBordered, theme }) => {\n // Helper function to combine inset border and external shadow\n const combineShadows = (insetBorder: string, externalShadow: string) => {\n if (!insetBorder) {\n // No inset border, return external shadow only (or 'none')\n return externalShadow || 'none';\n }\n if (externalShadow === 'none') {\n return insetBorder;\n }\n return `${insetBorder}, ${externalShadow}`;\n };\n\n // Handle icon variant buttons\n if ($variant === 'icon') {\n const baseVariant = $iconBordered ? 'outlined' : 'text';\n const styles = theme.components.button[baseVariant]['default'];\n // Icon variant: use transparent border when not bordered, otherwise use border color\n const borderColor = $iconBordered ? styles.borderColor : 'transparent';\n const borderColorHover = $iconBordered ? styles.borderColorHover : 'transparent';\n const borderColorActive = $iconBordered ? styles.borderColorActive : 'transparent';\n const borderColorDisabled = $iconBordered ? styles.borderColorDisabled : 'transparent';\n\n return `\n background: ${styles.background};\n color: ${styles.color};\n border: none;\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColor}`, styles.boxShadow)};\n\n &:hover:not(:disabled) {\n background: ${styles.backgroundHover};\n color: ${styles.colorHover};\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColorHover}`, styles.boxShadowHover)};\n }\n\n &:active:not(:disabled) {\n background: ${styles.backgroundActive};\n color: ${styles.colorActive};\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColorActive}`, styles.boxShadowActive)};\n }\n\n &:disabled {\n background: ${styles.backgroundDisabled};\n color: ${styles.colorDisabled};\n box-shadow: ${combineShadows(`inset 0 0 0 1px ${borderColorDisabled}`, styles.boxShadowDisabled)};\n cursor: not-allowed;\n }\n `;\n }\n\n const variant = $variant || 'solid';\n const colorType = $colorType || 'default';\n\n // Validate colorType for variant\n if (colorType === 'status' && variant !== 'text') {\n console.warn(\n `colorType 'status' is only available for 'text' variant. Falling back to 'default'.`\n );\n }\n\n const effectiveColorType = colorType === 'status' && variant !== 'text' ? 'default' : colorType;\n const styles =\n theme.components.button[variant][\n effectiveColorType as keyof (typeof theme.components.button)[typeof variant]\n ];\n\n // Get border width and color based on variant\n // Solid and text variants: no border (width 0)\n // Outlined variant: 1px border\n const needsBorder = variant === 'outlined';\n const borderWidth = needsBorder ? '1px' : '0px';\n\n const getBorderColor = (state: 'normal' | 'hover' | 'active' | 'disabled' = 'normal') => {\n if (!needsBorder) {\n // Solid and text variants don't need border color\n return 'transparent';\n }\n // Outlined variant: use border color from theme\n const stateKey =\n state === 'normal'\n ? 'borderColor'\n : `borderColor${state.charAt(0).toUpperCase() + state.slice(1)}`;\n return styles[stateKey as keyof typeof styles] as string;\n };\n\n const borderColor = getBorderColor('normal');\n const borderColorHover = getBorderColor('hover');\n const borderColorActive = getBorderColor('active');\n const borderColorDisabled = getBorderColor('disabled');\n\n // Helper to create inset border shadow (only for outlined variant)\n const getInsetBorder = (color: string) => {\n if (borderWidth === '0px') {\n return '';\n }\n return `inset 0 0 0 ${borderWidth} ${color}`;\n };\n\n return `\n background: ${styles.background};\n color: ${styles.color};\n border: none;\n box-shadow: ${combineShadows(getInsetBorder(borderColor), styles.boxShadow)};\n font-weight: ${styles.fontWeight};\n\n &:hover:not(:disabled) {\n background: ${styles.backgroundHover};\n color: ${styles.colorHover};\n box-shadow: ${combineShadows(getInsetBorder(borderColorHover), styles.boxShadowHover)};\n }\n\n &:active:not(:disabled) {\n background: ${styles.backgroundActive};\n color: ${styles.colorActive};\n box-shadow: ${combineShadows(getInsetBorder(borderColorActive), styles.boxShadowActive)};\n }\n\n &:disabled {\n background: ${styles.backgroundDisabled};\n color: ${styles.colorDisabled};\n box-shadow: ${combineShadows(getInsetBorder(borderColorDisabled), styles.boxShadowDisabled)};\n cursor: not-allowed;\n }\n `;\n }}\n`;\n\n/**\n * Button Component\n *\n * @example\n * // Basic button\n * <Button>button</Button>\n *\n * @example\n * // Button with icon (string URL)\n * <Button icon=\"https://example.com/icon.svg\" iconPlacement=\"before\">button</Button>\n *\n * @example\n * // Button with icon (ReactNode)\n * <Button icon={<CustomIcon />} iconPlacement=\"after\">button</Button>\n *\n * @example\n * // Icon variant button (square, no padding)\n * <Button variant=\"icon\" icon={<CustomIcon />} iconBordered />\n *\n * @example\n * // Icon variant button without border\n * <Button variant=\"icon\" icon={<CustomIcon />} />\n */\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'solid',\n colorType = 'default',\n size = 'medium',\n disabled = false,\n loading = false,\n fullWidth = false,\n icon,\n iconPlacement = 'before',\n iconBordered = false,\n children,\n ...rest\n}) => {\n return (\n <StyledButton\n $variant={variant}\n $colorType={colorType}\n $size={size}\n $fullWidth={fullWidth}\n $iconBordered={iconBordered}\n disabled={disabled || loading}\n {...rest}\n >\n {loading ? (\n <TextWrapper $size={size}>Loading...</TextWrapper>\n ) : variant === 'icon' ? (\n // Icon variant: render icon with onlyIcon wrapper (uses onlyIcon config)\n <IconOnlyWrapper $size={size}>\n {typeof icon === 'string' ? <Icon src={icon} /> : icon || children}\n </IconOnlyWrapper>\n ) : (\n <>\n {icon && iconPlacement === 'before' && (\n <IconWrapper $size={size} $iconPlacement=\"before\">\n {typeof icon === 'string' ? <Icon src={icon} /> : icon}\n </IconWrapper>\n )}\n <TextWrapper $size={size}>{children}</TextWrapper>\n {icon && iconPlacement === 'after' && (\n <IconWrapper $size={size} $iconPlacement=\"after\">\n {typeof icon === 'string' ? <Icon src={icon} /> : icon}\n </IconWrapper>\n )}\n </>\n )}\n </StyledButton>\n );\n};\n\nButton.displayName = 'Button';\n","/**\n * Value map utilities for piecewise linear mapping (non-linear slider)\n */\n\n/**\n * Round to fixed decimal places to avoid floating point errors\n */\nconst toFixed = (num: number, precision: number = 10): number => {\n return Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision);\n};\n\nexport interface ValueMapPiece {\n /** Size of the piece (value range) */\n size: number;\n /** Step increment, defaults to 1 */\n step?: number;\n /** Visual size (relative), defaults to size/step */\n visualSize?: number;\n}\n\nexport interface ValueMapPieceExtended extends Required<ValueMapPiece> {\n start: number;\n end: number;\n visualStart: number;\n visualEnd: number;\n stepStart: number;\n stepEnd: number;\n}\n\nexport interface ValueMap {\n type: 'piecewise';\n /** Starting value */\n start: number;\n /** Array of pieces defining the mapping */\n pieces: ValueMapPiece[];\n}\n\nexport interface ValueMapExtended {\n type: 'piecewise';\n size: number;\n start: number;\n end: number;\n visualSize: number;\n visualStart: number;\n visualEnd: number;\n stepStart: number;\n stepEnd: number;\n pieces: ValueMapPieceExtended[];\n}\n\n/**\n * Create a simple single-piece linear value map\n */\nexport const createSinglePiecewiseMap = (\n min: number,\n max: number,\n step: number\n): ValueMap => {\n return {\n type: 'piecewise',\n start: min,\n pieces: [\n {\n size: max - min,\n step: step,\n visualSize: 100,\n },\n ],\n };\n};\n\n/**\n * Extend a ValueMap with computed properties for each piece\n */\nexport const extendValueMap = (valueMap: ValueMap): ValueMapExtended => {\n const piecesExt: ValueMapPieceExtended[] = [];\n\n valueMap.pieces.forEach((p) => {\n const start = piecesExt.length\n ? piecesExt[piecesExt.length - 1].end\n : valueMap.start;\n const end = start + p.size;\n const visualStart = piecesExt.length\n ? piecesExt[piecesExt.length - 1].visualEnd\n : 0;\n\n const step = p.step || 1;\n const visualSize = p.visualSize || p.size / step;\n const visualEnd = visualStart + visualSize;\n const stepStart = piecesExt.length\n ? piecesExt[piecesExt.length - 1].stepEnd\n : 0;\n const stepEnd = stepStart + Math.ceil(p.size / step);\n\n piecesExt.push({\n size: p.size,\n step,\n visualSize,\n start,\n end,\n visualStart,\n visualEnd,\n stepStart,\n stepEnd,\n });\n });\n\n const firstPiece = piecesExt[0];\n const lastPiece = piecesExt[piecesExt.length - 1];\n\n const start = firstPiece.start;\n const end = lastPiece.end;\n const size = end - start;\n\n const visualStart = firstPiece.visualStart;\n const visualEnd = lastPiece.visualEnd;\n const visualSize = visualEnd - visualStart;\n\n return {\n type: 'piecewise',\n size,\n start,\n end,\n visualSize,\n visualStart,\n visualEnd,\n pieces: piecesExt,\n stepStart: firstPiece.stepStart,\n stepEnd: lastPiece.stepEnd,\n };\n};\n\n/**\n * Snap value to the nearest step in the value map\n */\nexport const snapToStep = (\n value: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end } = valueMap;\n\n if (value <= start) return start;\n if (value >= end) return end;\n\n const p = pieces.find((piece) => value >= piece.start && value <= piece.end);\n if (!p) return value;\n\n const pieceStep = p.step;\n const steps = (value - p.start) / pieceStep;\n const decimal = steps % 1;\n\n let snapped: number;\n if (decimal < 0.5) {\n snapped = Math.max(start, toFixed(p.start + Math.floor(steps) * pieceStep));\n } else {\n snapped = Math.min(end, toFixed(p.start + Math.ceil(steps) * pieceStep));\n }\n\n return toFixed(snapped);\n};\n\n/**\n * Convert a value to visual percentage (0-1) based on the value map\n */\nexport const valueToVisualPercentage = (\n value: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end, visualSize } = valueMap;\n\n if (value <= start) return 0;\n if (value >= end) return 1;\n\n const p = pieces.find((piece) => value >= piece.start && value <= piece.end);\n if (!p) return 0;\n\n const visualPosition =\n p.visualStart + ((value - p.start) / p.size) * p.visualSize;\n return visualPosition / visualSize;\n};\n\n/**\n * Convert visual percentage (0-1) to value based on the value map\n */\nexport const visualPercentToValue = (\n visualPercent: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end, visualSize } = valueMap;\n\n if (visualPercent <= 0) return start;\n if (visualPercent >= 1) return end;\n\n const visualPosition = visualSize * visualPercent;\n const p = pieces.find(\n (piece) =>\n visualPosition >= piece.visualStart && visualPosition <= piece.visualEnd\n );\n if (!p) return start;\n\n return p.start + ((visualPosition - p.visualStart) / p.visualSize) * p.size;\n};\n\n/**\n * Change value by a number of steps\n */\nexport const changeByStep = (\n value: number,\n steps: number,\n valueMap: ValueMapExtended\n): number => {\n const { pieces, start, end } = valueMap;\n\n const p = pieces.find((piece) => value >= piece.start && value <= piece.end);\n if (!p) {\n if (value < start) return start;\n if (value > end) return end;\n return value;\n }\n\n const curStepNo = (value - p.start) / p.step + p.stepStart;\n const curStepRounded = Math.round(curStepNo);\n\n let stepsInValueMap: number;\n if (Math.abs(curStepRounded - curStepNo) < 0.00001) {\n stepsInValueMap = Math.round(curStepNo) + steps;\n } else if (steps < 0) {\n stepsInValueMap = Math.ceil(curStepNo) + steps;\n } else {\n stepsInValueMap = Math.floor(curStepNo) + steps;\n }\n\n if (stepsInValueMap <= valueMap.stepStart) {\n return valueMap.start;\n }\n if (stepsInValueMap >= valueMap.stepEnd) {\n return valueMap.end;\n }\n\n const newPiece = pieces.find(\n (piece) =>\n stepsInValueMap >= piece.stepStart && stepsInValueMap <= piece.stepEnd\n );\n if (!newPiece) return value;\n\n const newValue =\n newPiece.start + (stepsInValueMap - newPiece.stepStart) * newPiece.step;\n return toFixed(newValue);\n};\n","import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { styled } from '../utils/styled';\nimport type { ValueMap, ValueMapExtended } from './valueMap';\nimport {\n extendValueMap,\n createSinglePiecewiseMap,\n valueToVisualPercentage,\n visualPercentToValue,\n snapToStep,\n changeByStep,\n} from './valueMap';\n\nexport interface SliderProps {\n /**\n * Current value (0-100)\n */\n value?: number;\n /**\n * Default value\n */\n defaultValue?: number;\n /**\n * Minimum value\n */\n min?: number;\n /**\n * Maximum value\n */\n max?: number;\n /**\n * Step increment\n */\n step?: number;\n /**\n * Whether the slider is disabled\n */\n disabled?: boolean;\n /**\n * Slider direction\n */\n direction?: 'horizontal' | 'vertical';\n /**\n * Value map for piecewise linear mapping (non-linear slider)\n * When provided, min/max/step props are ignored\n */\n valueMap?: ValueMap;\n /**\n * Callback when value changes\n */\n onChange?: (value: number) => void;\n /**\n * Callback when dragging starts\n */\n onDragStart?: () => void;\n /**\n * Callback when dragging ends\n */\n onDragEnd?: () => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst SliderContainer = styled.div<{\n $disabled: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n ${({ $direction }) =>\n $direction === 'vertical'\n ? `\n width: 18px;\n height: 100%;\n flex: 1;\n flex-direction: column;\n `\n : `\n width: 100%;\n height: 18px;\n flex-direction: row;\n `}\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n user-select: none;\n`;\n\nconst SliderTrack = styled.div<{\n $disabled: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: absolute;\n background: ${({ theme }) => theme.colors.palettes.transparency['20']};\n border-radius: 1000px;\n ${({ $direction, theme }) =>\n $direction === 'vertical'\n ? `\n top: 0;\n bottom: 0;\n width: ${theme.components.slider.track.height};\n left: 50%;\n transform: translateX(-50%);\n `\n : `\n left: 0;\n right: 0;\n height: ${theme.components.slider.track.height};\n top: 50%;\n transform: translateY(-50%);\n `}\n`;\n\nconst SliderFill = styled.div<{\n $percentage: number;\n $disabled: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: absolute;\n border-radius: ${({ theme }) => theme.components.slider.track.borderRadius};\n background: ${({ $disabled, theme }) =>\n $disabled\n ? theme.components.slider.track.filledBackgroundDisabled\n : theme.components.slider.track.filledBackground};\n ${({ $direction, $percentage, theme }) =>\n $direction === 'vertical'\n ? `\n bottom: 0;\n width: ${theme.components.slider.track.height};\n left: 50%;\n transform: translateX(-50%);\n height: ${$percentage}%;\n `\n : `\n left: 0;\n height: ${theme.components.slider.track.height};\n top: 50%;\n transform: translateY(-50%);\n width: ${$percentage}%;\n `}\n`;\n\nconst SliderThumb = styled.div<{\n $percentage: number;\n $disabled: boolean;\n $isDragging: boolean;\n $direction: 'horizontal' | 'vertical';\n}>`\n position: absolute;\n width: ${({ theme }) => theme.components.slider.large.thumbSize};\n height: ${({ theme }) => theme.components.slider.large.thumbSize};\n border-radius: 50%;\n background: ${({ $disabled, theme }) =>\n $disabled ? theme.components.slider.thumb.backgroundDisabled : theme.components.slider.thumb.background};\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'grab')};\n box-shadow: ${({ theme }) => theme.components.slider.thumb.boxShadow};\n ${({ $direction, $percentage, $isDragging }) =>\n $direction === 'vertical'\n ? `\n bottom: ${$percentage}%;\n left: 50%;\n transform: translate(-50%, 50%);\n transition: ${$isDragging ? 'none' : 'bottom 0.1s ease'};\n `\n : `\n left: ${$percentage}%;\n top: 50%;\n transform: translate(-50%, -50%);\n transition: ${$isDragging ? 'none' : 'left 0.1s ease'};\n `}\n\n ${({ $disabled, theme }) =>\n !$disabled &&\n `\n &:hover {\n box-shadow: ${theme.components.slider.thumb.boxShadowHover};\n }\n\n &:active {\n cursor: grabbing;\n box-shadow: ${theme.components.slider.thumb.boxShadowActive};\n }\n `}\n`;\n\n/**\n * Slider Component\n *\n * A slider for selecting a value from a range\n *\n * @example\n * <Slider value={35} onChange={(val) => console.log(val)} />\n */\nexport const Slider: React.FC<SliderProps> = ({\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n direction = 'horizontal',\n valueMap: valueMapProp,\n onChange,\n onDragStart,\n onDragEnd,\n className,\n style,\n}) => {\n // Create extended value map\n const extendedValueMap: ValueMapExtended = useMemo(() => {\n if (valueMapProp) {\n return extendValueMap(valueMapProp);\n }\n return extendValueMap(createSinglePiecewiseMap(min, max, step));\n }, [valueMapProp, min, max, step]);\n\n // Get effective min/max from value map\n const effectiveMin = extendedValueMap.start;\n const effectiveMax = extendedValueMap.end;\n\n const [internalValue, setInternalValue] = useState<number>(\n controlledValue ?? defaultValue\n );\n const [isDragging, setIsDragging] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Calculate percentage using value map\n const percentage = valueToVisualPercentage(value, extendedValueMap) * 100;\n\n // Update value based on position\n const updateValue = useCallback(\n (clientX: number, clientY: number) => {\n if (!containerRef.current || disabled) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n let visualPercent: number;\n\n if (direction === 'vertical') {\n // Vertical: from bottom (0%) to top (100%)\n const offsetY = rect.bottom - clientY;\n visualPercent = Math.max(0, Math.min(1, offsetY / rect.height));\n } else {\n // Horizontal: from left (0%) to right (100%)\n const offsetX = clientX - rect.left;\n visualPercent = Math.max(0, Math.min(1, offsetX / rect.width));\n }\n\n // Convert visual percent to value and snap to step\n const rawValue = visualPercentToValue(visualPercent, extendedValueMap);\n const snappedValue = snapToStep(rawValue, extendedValueMap);\n\n if (controlledValue === undefined) {\n setInternalValue(snappedValue);\n }\n\n onChange?.(snappedValue);\n },\n [disabled, controlledValue, onChange, direction, extendedValueMap]\n );\n\n // Handle track click (jump to position without dragging)\n const handleTrackClick = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n\n e.preventDefault();\n updateValue(e.clientX, e.clientY);\n },\n [disabled, updateValue]\n );\n\n // Handle thumb drag start\n const handleThumbMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n onDragStart?.();\n },\n [disabled, onDragStart]\n );\n\n // Handle mouse move\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n updateValue(e.clientX, e.clientY);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n onDragEnd?.();\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, updateValue, onDragEnd]);\n\n // Handle keyboard events\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n let newValue = value;\n\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n e.preventDefault();\n newValue = changeByStep(value, -1, extendedValueMap);\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n e.preventDefault();\n newValue = changeByStep(value, 1, extendedValueMap);\n break;\n case 'Home':\n e.preventDefault();\n newValue = effectiveMin;\n break;\n case 'End':\n e.preventDefault();\n newValue = effectiveMax;\n break;\n default:\n return;\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n\n onChange?.(newValue);\n },\n [disabled, value, effectiveMin, effectiveMax, controlledValue, onChange, extendedValueMap]\n );\n\n return (\n <SliderContainer\n ref={containerRef}\n $disabled={disabled}\n $direction={direction}\n className={className}\n style={style}\n onMouseDown={handleTrackClick}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin={effectiveMin}\n aria-valuemax={effectiveMax}\n aria-valuenow={value}\n aria-disabled={disabled}\n aria-orientation={direction}\n >\n <SliderTrack $disabled={disabled} $direction={direction} />\n <SliderFill $percentage={percentage} $disabled={disabled} $direction={direction} />\n <SliderThumb\n $percentage={percentage}\n $disabled={disabled}\n $isDragging={isDragging}\n $direction={direction}\n onMouseDown={handleThumbMouseDown}\n />\n </SliderContainer>\n );\n};\n\nSlider.displayName = 'Slider';\n\n","export { Slider } from './Slider';\nexport type { SliderProps } from './Slider';\nexport type { ValueMap, ValueMapPiece, ValueMapExtended, ValueMapPieceExtended } from './valueMap';\nexport {\n createSinglePiecewiseMap,\n extendValueMap,\n valueToVisualPercentage,\n visualPercentToValue,\n snapToStep,\n changeByStep,\n} from './valueMap';\n\n","import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\nimport { Toast, ToastProps } from './Toast';\n\ninterface ToastItem extends Omit<ToastProps, 'onClose'> {\n id: string;\n}\n\n\n\ninterface ToastContextValue {\n showToast: (props: Omit<ToastProps, 'onClose'>) => string;\n hideToast: (id: string) => void;\n success: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n info: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n error: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n warn: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n loading: (message: React.ReactNode, options?: Partial<ToastProps>) => string;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\ninterface ToastWrapperProps {\n $placement: 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center';\n}\n\nconst ToastWrapper = styled.div<ToastWrapperProps>`\n position: fixed;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n\n > * {\n pointer-events: auto;\n }\n\n ${({ $placement, theme }) => {\n const offset = theme.components?.toast?.offset || { vertical: '24px', horizontal: '24px' };\n const vertical = offset.vertical || '24px';\n const horizontal = offset.horizontal || '24px';\n\n const styles: Record<string, string> = {\n 'top-right': `\n top: ${vertical};\n right: ${horizontal};\n `,\n 'top-left': `\n top: ${vertical};\n left: ${horizontal};\n `,\n 'top-center': `\n top: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n 'bottom-right': `\n bottom: ${vertical};\n right: ${horizontal};\n `,\n 'bottom-left': `\n bottom: ${vertical};\n left: ${horizontal};\n `,\n 'bottom-center': `\n bottom: ${vertical};\n left: 50%;\n transform: translateX(-50%);\n `,\n };\n\n return styles[$placement] || styles['top-right'];\n }}\n`;\n\nexport interface ToastContainerProps {\n placement?: 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center';\n /**\n * Maximum number of toasts to show at once\n */\n maxCount?: number;\n /**\n * Default duration for auto-close (ms)\n */\n defaultDuration?: number;\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * ToastContainer Component\n *\n * Provides toast context and manages toast display\n *\n * @example\n * <ToastContainer>\n * <App />\n * </ToastContainer>\n */\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n placement = 'top-right',\n maxCount = 5,\n defaultDuration = 3000,\n children,\n}) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const showToast = useCallback((props: Omit<ToastProps, 'onClose'>) => {\n const id = `toast-${Date.now()}-${Math.random()}`;\n const newToast: ToastItem = {\n ...props,\n id,\n duration: props.duration ?? defaultDuration,\n };\n\n setToasts((prev) => {\n const updated = [...prev, newToast];\n // Limit to maxCount\n return updated.slice(-maxCount);\n });\n\n return id;\n }, [maxCount, defaultDuration]);\n\n const hideToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const success = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'success', message });\n }, [showToast]);\n\n const info = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'info', message });\n }, [showToast]);\n\n const error = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'error', message });\n }, [showToast]);\n\n const warn = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'warn', message });\n }, [showToast]);\n\n const loading = useCallback((message: React.ReactNode, options?: Partial<ToastProps>) => {\n return showToast({ ...options, variant: 'loading', message });\n }, [showToast]);\n\n const contextValue: ToastContextValue = {\n showToast,\n hideToast,\n success,\n info,\n error,\n warn,\n loading,\n };\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <ToastWrapper $placement={placement}>\n {toasts.map((toast) => (\n <Toast\n key={toast.id}\n {...toast}\n onClose={() => hideToast(toast.id)}\n />\n ))}\n </ToastWrapper>\n </ToastContext.Provider>\n );\n};\n\n/**\n * Hook to access toast methods\n *\n * @example\n * const toast = useToast();\n * toast.success('Operation successful!');\n * toast.error('Something went wrong');\n */\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within ToastContainer');\n }\n return context;\n};\n\nToastContainer.displayName = 'ToastContainer';\n\n","import React, { createContext, useContext, useEffect } from 'react';\nimport { IconProvider } from '../Icon/IconProvider';\nimport { ToastContainer } from '../Toast/ToastContainer';\nimport type { UIConfig } from './types';\nimport { initUIConfig, getUIConfig } from './configManager';\nimport { registerGlobalContext } from '../utils/context';\n\nconst UIConfigContext = createContext<UIConfig | null>(null);\n\nexport interface UIConfigProviderProps {\n /**\n * UI configuration\n */\n config: UIConfig;\n /**\n * Children components\n */\n children: React.ReactNode;\n}\n\n/**\n * UIConfigProvider Component (Optional, for React convenience)\n *\n * Unified provider for all UI components and global configurations.\n * Includes IconProvider, ToastContainer, and other settings.\n *\n * Note: Global styles (Tooltip, Menu, Dropdown) are now injected on-demand\n * when components are first used, so they are no longer included here.\n *\n * For non-React environments or when you want to avoid Provider nesting,\n * use initUIConfig() instead.\n *\n * @example\n * import { UIConfigProvider } from '@officesdk/design';\n * import { lightTheme } from '@officesdk/design/theme';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * <UIConfigProvider config={{\n * theme: lightTheme,\n * icons: iconRegistry,\n * toast: {\n * defaultDuration: 3000,\n * maxCount: 5,\n * },\n * }}>\n * <App />\n * </UIConfigProvider>\n */\nexport const UIConfigProvider: React.FC<UIConfigProviderProps> = ({ config, children }) => {\n // Initialize global config on mount\n useEffect(() => {\n\n // Register render function first\n registerGlobalContext({\n theme: config.theme,\n render: config.renderFunction,\n });\n\n // Then initialize full config\n initUIConfig(config);\n }, [config]);\n\n const { icons = {} } = config;\n const toastConfig = {\n maxCount: config.toast?.maxCount ?? 5,\n defaultDuration: config.toast?.defaultDuration ?? 3000,\n };\n\n return (\n <UIConfigContext.Provider value={config}>\n <IconProvider icons={icons}>\n <ToastContainer\n maxCount={toastConfig.maxCount}\n defaultDuration={toastConfig.defaultDuration}\n >\n {children}\n </ToastContainer>\n </IconProvider>\n </UIConfigContext.Provider>\n );\n};\n\n/**\n * Hook to access UI configuration\n *\n * Falls back to global config if context is not available.\n * This allows components to work even without UIConfigProvider when initUIConfig() is used.\n *\n * @example\n * const config = useUIConfig();\n * console.log(config?.theme);\n * console.log(config?.locale);\n */\nexport const useUIConfig = () => {\n const context = useContext(UIConfigContext);\n // Fallback to global config if context is not available\n return context || getUIConfig();\n};\n\nUIConfigProvider.displayName = 'UIConfigProvider';\n","import type { UIConfig } from './types';\n\n/**\n * Create UI configuration with default values\n *\n * @example\n * import { createUIConfig } from '@officesdk/design';\n * import { lightTheme } from '@officesdk/design/theme';\n * import { iconRegistry } from '@officesdk/design/icons';\n *\n * const config = createUIConfig({\n * theme: lightTheme,\n * icons: iconRegistry,\n * toast: {\n * defaultDuration: 3000,\n * },\n * });\n */\nexport const createUIConfig = (config: UIConfig): UIConfig => {\n return {\n // Theme is required\n theme: config.theme,\n\n // Icons with default\n icons: config.icons ?? {},\n\n // Toast with defaults\n toast: {\n maxCount: config.toast?.maxCount ?? 5,\n defaultDuration: config.toast?.defaultDuration ?? 3000,\n position: config.toast?.position ?? 'top-right',\n offset: {\n x: config.toast?.offset?.x ?? 24,\n y: config.toast?.offset?.y ?? 24,\n },\n },\n\n // Locale with default\n locale: config.locale ?? 'en-US',\n\n // I18n with defaults\n i18n: {\n toast: {\n closeLabel: config.i18n?.toast?.closeLabel ?? 'Close',\n },\n button: {\n loadingText: config.i18n?.button?.loadingText ?? 'Loading...',\n },\n common: {\n confirm: config.i18n?.common?.confirm ?? 'Confirm',\n cancel: config.i18n?.common?.cancel ?? 'Cancel',\n ok: config.i18n?.common?.ok ?? 'OK',\n },\n },\n\n // Z-index with defaults\n zIndex: {\n toast: config.zIndex?.toast ?? 9999,\n modal: config.zIndex?.modal ?? 10000,\n dropdown: config.zIndex?.dropdown ?? 1000,\n tooltip: config.zIndex?.tooltip ?? 1001,\n },\n\n // Animation with defaults\n animation: {\n duration: config.animation?.duration ?? 200,\n easing: config.animation?.easing ?? 'cubic-bezier(0.4, 0, 0.2, 1)',\n disabled: config.animation?.disabled ?? false,\n },\n\n // A11y with defaults\n a11y: {\n announceMessages: config.a11y?.announceMessages ?? true,\n focusVisible: config.a11y?.focusVisible ?? true,\n reduceMotion: config.a11y?.reduceMotion ?? false,\n },\n };\n};\n\n/**\n * Merge multiple configs (useful for extending base configs)\n */\nexport const mergeUIConfig = (baseConfig: UIConfig, ...configs: Partial<UIConfig>[]): UIConfig => {\n const merged = configs.reduce((acc, config) => ({\n ...acc,\n ...config,\n toast: { ...acc.toast, ...config.toast },\n i18n: { ...acc.i18n, ...config.i18n },\n zIndex: { ...acc.zIndex, ...config.zIndex },\n animation: { ...acc.animation, ...config.animation },\n a11y: { ...acc.a11y, ...config.a11y },\n }), baseConfig);\n\n return merged as UIConfig;\n};\n\n","export { UIConfigProvider, useUIConfig } from './UIConfigProvider';\nexport type { UIConfigProviderProps } from './UIConfigProvider';\n\nexport { createUIConfig, mergeUIConfig } from './createUIConfig';\n\nexport {\n initUIConfig,\n getUIConfig,\n getGlobalIconRegistry,\n getGlobalToastConfig,\n} from './configManager';\n\nexport type {\n UIConfig,\n ToastConfig,\n ToastPosition,\n ZIndexConfig,\n AnimationConfig,\n A11yConfig,\n I18nConfig,\n} from './types';\n\n","/**\n * Number locale configuration\n */\nexport interface NumberLocaleConfig {\n /**\n * Decimal separator (e.g., '.' for en-US, ',' for de-DE)\n */\n decimalSeparator: string;\n /**\n * Thousands separator (e.g., ',' for en-US, '.' for de-DE, ' ' for fr-FR)\n */\n thousandsSeparator: string;\n}\n\n/**\n * Cache for locale configs to avoid repeated Intl.NumberFormat calls\n */\nconst localeConfigCache = new Map<string, NumberLocaleConfig>();\n\n/**\n * Get number locale configuration from a locale string\n * Uses Intl.NumberFormat to automatically detect the correct separators\n *\n * @param locale - Locale string (e.g., 'en-US', 'de-DE', 'fr-FR')\n * @returns NumberLocaleConfig with decimal and thousands separators\n *\n * @example\n * getNumberLocaleConfig('en-US') // { decimalSeparator: '.', thousandsSeparator: ',' }\n * getNumberLocaleConfig('de-DE') // { decimalSeparator: ',', thousandsSeparator: '.' }\n * getNumberLocaleConfig('fr-FR') // { decimalSeparator: ',', thousandsSeparator: ' ' }\n */\nexport const getNumberLocaleConfig = (locale: string): NumberLocaleConfig => {\n // Check cache first\n const cached = localeConfigCache.get(locale);\n if (cached) {\n return cached;\n }\n\n try {\n const formatter = new Intl.NumberFormat(locale);\n const parts = formatter.formatToParts(1234.5);\n\n const decimal = parts.find((p) => p.type === 'decimal')?.value ?? '.';\n const group = parts.find((p) => p.type === 'group')?.value ?? ',';\n\n const config: NumberLocaleConfig = {\n decimalSeparator: decimal,\n thousandsSeparator: group,\n };\n\n // Cache the result\n localeConfigCache.set(locale, config);\n\n return config;\n } catch {\n // Fallback to en-US format if locale is invalid\n const fallback: NumberLocaleConfig = {\n decimalSeparator: '.',\n thousandsSeparator: ',',\n };\n return fallback;\n }\n};\n\n/**\n * Format a number according to locale with optional precision\n *\n * @param value - The number to format\n * @param locale - Locale string (e.g., 'en-US', 'de-DE')\n * @param precision - Optional number of decimal places\n * @returns Formatted number string with locale-appropriate separators\n *\n * @example\n * formatNumber(1234.56, 'en-US') // '1,234.56'\n * formatNumber(1234.56, 'de-DE') // '1.234,56'\n * formatNumber(1234.56, 'fr-FR') // '1 234,56'\n * formatNumber(1234.5, 'en-US', 2) // '1,234.50'\n */\nexport const formatNumber = (value: number, locale: string, precision?: number): string => {\n try {\n const options: Intl.NumberFormatOptions = {};\n\n if (precision !== undefined) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n }\n\n return new Intl.NumberFormat(locale, options).format(value);\n } catch {\n // Fallback to basic formatting if locale is invalid\n if (precision !== undefined) {\n return value.toFixed(precision);\n }\n return String(value);\n }\n};\n\n/**\n * Format a number for editing (without thousands separator, using locale decimal separator)\n * This is used when the input is focused to make editing easier\n *\n * @param value - The number to format\n * @param locale - Locale string (e.g., 'en-US', 'de-DE')\n * @param precision - Optional number of decimal places\n * @returns Formatted number string without thousands separator\n *\n * @example\n * formatNumberForEdit(1234.56, 'en-US') // '1234.56'\n * formatNumberForEdit(1234.56, 'de-DE') // '1234,56'\n */\nexport const formatNumberForEdit = (value: number, locale: string, precision?: number): string => {\n const config = getNumberLocaleConfig(locale);\n\n let str: string;\n if (precision !== undefined) {\n str = value.toFixed(precision);\n } else {\n str = String(value);\n }\n\n // Replace standard decimal separator with locale-specific one\n if (config.decimalSeparator !== '.') {\n str = str.replace('.', config.decimalSeparator);\n }\n\n return str;\n};\n\n/**\n * Parse a localized number string to a number\n *\n * @param value - The localized number string to parse\n * @param locale - Locale string (e.g., 'en-US', 'de-DE')\n * @returns Parsed number or null if parsing fails\n *\n * @example\n * parseLocalizedNumber('1,234.56', 'en-US') // 1234.56\n * parseLocalizedNumber('1.234,56', 'de-DE') // 1234.56\n * parseLocalizedNumber('1 234,56', 'fr-FR') // 1234.56\n */\nexport const parseLocalizedNumber = (value: string, locale: string): number | null => {\n if (!value || value.trim() === '') {\n return null;\n }\n\n const config = getNumberLocaleConfig(locale);\n let normalized = value.trim();\n\n // Handle the case where thousands and decimal separators might conflict\n // We need to be careful about the order of replacements\n\n if (config.thousandsSeparator === '.' && config.decimalSeparator === ',') {\n // German-style: 1.234,56\n // First remove thousands separators (dots)\n normalized = normalized.replace(/\\./g, '');\n // Then replace decimal separator (comma) with dot\n normalized = normalized.replace(',', '.');\n } else if (config.decimalSeparator === ',') {\n // French-style or similar: 1 234,56 (handles space, non-breaking space, narrow no-break space)\n // Remove all types of spaces used as thousands separators\n normalized = normalized.replace(/[\\s\\u00A0\\u202F]/g, '');\n // Replace comma decimal separator with dot\n normalized = normalized.replace(',', '.');\n } else if (config.thousandsSeparator === ',' && config.decimalSeparator === '.') {\n // English-style: 1,234.56\n normalized = normalized.replace(/,/g, '');\n } else {\n // Generic fallback: remove thousands separator, replace decimal separator\n if (config.thousandsSeparator) {\n const escapedThousands = config.thousandsSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n normalized = normalized.replace(new RegExp(escapedThousands, 'g'), '');\n }\n if (config.decimalSeparator !== '.') {\n normalized = normalized.replace(config.decimalSeparator, '.');\n }\n }\n\n const parsed = parseFloat(normalized);\n return isNaN(parsed) ? null : parsed;\n};\n\n/**\n * Clear the locale config cache (useful for testing)\n */\nexport const clearLocaleConfigCache = (): void => {\n localeConfigCache.clear();\n};\n","import { styled } from \"../utils/styled\";\nimport { LineType } from \"./NumberInput\";\n\nexport const NumberInputContainer = styled.div<{\n $size: 'small' | 'large';\n $disabled: boolean;\n $alert: boolean;\n $isFocused: boolean;\n $lineType: LineType;\n}>`\n display: inline-flex;\n align-items: center;\n background: white;\n border-radius: ${({ theme, $size }) => theme.components.inputNumber[$size].borderRadius};\n flex-shrink: 0;\n\n ${({ $size }) =>\n $size === 'small'\n ? `\n height: 24px;\n width: 72px;\n `\n : `\n height: 32px;\n width: 80px;\n `}\n\n ${({ $disabled, $alert, $isFocused, $lineType, theme }) => {\n if ($lineType === 'borderless') {\n // borderless type: no border, no boxShadow\n return `\n border: none;\n background: transparent;\n ${$disabled ? 'cursor: not-allowed;' : ''}\n `;\n }\n\n if ($lineType === 'underlined') {\n // underlined type: bottom border only\n const borderColor = $disabled\n ? theme.colors.palettes.transparency['10']\n : $alert\n ? theme.colors.palettes.red['6']\n : $isFocused\n ? theme.colors.palettes.transparency['30']\n : 'transparent';\n\n return `\n border: none;\n border-bottom: 1px solid ${borderColor};\n border-radius: 0;\n ${$disabled ? 'cursor: not-allowed;' : ''}\n ${!$disabled && !$isFocused && !$alert\n ? `\n &:hover {\n border-bottom-color: ${theme.colors.palettes.transparency['20']};\n }\n `\n : ''\n }\n `;\n }\n\n // outlined type (default): full border\n if ($disabled) {\n return `\n border: 1px solid ${theme.colors.palettes.transparency['10']};\n cursor: not-allowed;\n `;\n }\n if ($alert) {\n return `\n border: 1px solid ${theme.colors.palettes.red['6']};\n `;\n }\n if ($isFocused) {\n return `\n border: 1px solid ${theme.colors.palettes.transparency['30']};\n box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.04);\n `;\n }\n return `\n border: 1px solid ${theme.colors.palettes.transparency['10']};\n\n &:hover {\n border-color: ${theme.colors.palettes.transparency['20']};\n box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.04);\n }\n `;\n }}\n`;\n\nexport const InputWrapper = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n padding: 0 8px;\n min-width: 0;\n`;\n\nexport const StyledInput = styled.input<{ $size: 'small' | 'large'; $disabled: boolean }>`\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n font-family: 'PingFang SC', sans-serif;\n font-weight: 400;\n line-height: 20px;\n padding: 0;\n margin: 0;\n\n ${({ $size }) =>\n $size === 'small'\n ? `\n font-size: 12px;\n `\n : `\n font-size: 13px;\n `}\n\n ${({ $disabled, theme }) =>\n $disabled\n ? `\n color: ${theme.colors.palettes.transparency['30']};\n cursor: not-allowed;\n `\n : `\n color: ${theme.colors.palettes.gray['120']};\n `}\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.palettes.transparency['30']};\n }\n\n /* Remove number input arrows */\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n &[type='number'] {\n appearance: textfield;\n -moz-appearance: textfield;\n }\n`;\n\nexport const ButtonGroup = styled.div<{ $alert: boolean; $disabled: boolean; $lineType: LineType }>`\n display: flex;\n flex-direction: column;\n height: 100%;\n flex-shrink: 0;\n position: relative;\n\n ${({ $disabled, $alert, $lineType, theme }) => {\n // No left border for borderless and underlined types\n if ($lineType === 'borderless' || $lineType === 'underlined') {\n return '';\n }\n\n // outlined type: show left border\n const borderColor = $disabled\n ? theme.colors.palettes.transparency['10']\n : $alert\n ? theme.colors.palettes.red['6']\n : theme.colors.palettes.transparency['10'];\n\n return `border-left: 1px solid ${borderColor};`;\n }}\n\n /* Centered divider line between buttons */\n &::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n height: 1px;\n pointer-events: none;\n background-color: ${({ $disabled, $alert, $lineType, theme }) => {\n // No divider for borderless and underlined types\n if ($lineType === 'borderless' || $lineType === 'underlined') {\n return 'transparent';\n }\n\n if ($disabled) {\n return theme.colors.palettes.transparency['10'];\n }\n if ($alert) {\n return theme.colors.palettes.red['6'];\n }\n return theme.colors.palettes.transparency['10'];\n }};\n }\n`;\n\nexport const StepButton = styled.button<{ $disabled: boolean }>`\n flex: 1 1 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 1px 8px;\n outline: none;\n min-height: 0;\n overflow: hidden;\n\n ${({ $disabled, theme }) => {\n if ($disabled) {\n return `\n cursor: not-allowed;\n opacity: 0.4;\n `;\n }\n return `\n &:hover {\n background-color: ${theme.colors.palettes.transparency['5']};\n }\n\n &:active {\n background-color: ${theme.colors.palettes.transparency['10']};\n }\n `;\n }}\n\n svg {\n width: 14px;\n height: 14px;\n fill: ${({ $disabled, theme }) =>\n $disabled ? theme.colors.palettes.transparency['30'] : theme.colors.palettes.gray['120']};\n }\n`;\n","import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { useUIConfig } from '../UIConfigProvider';\nimport { formatNumber, formatNumberForEdit, parseLocalizedNumber } from '../utils/numberLocale';\nimport type { ValueMap, ValueMapExtended } from '../Slider/valueMap';\nimport { extendValueMap, changeByStep, snapToStep } from '../Slider/valueMap';\nimport { ButtonGroup, InputWrapper, NumberInputContainer, StepButton, StyledInput } from './NumberInput.styled';\n\nexport type LineType = 'outlined' | 'underlined' | 'borderless';\n\n/**\n * Get the number of decimal places in a number\n */\nconst getDecimalPlaces = (num: number): number => {\n const str = String(num);\n const decimalIndex = str.indexOf('.');\n if (decimalIndex === -1) return 0;\n return str.length - decimalIndex - 1;\n};\n\n/**\n * Precision-safe addition to avoid floating point errors\n * e.g., 0.1 + 0.2 = 0.30000000000000004 -> 0.3\n */\nconst precisionAdd = (a: number, b: number): number => {\n const precision = Math.max(getDecimalPlaces(a), getDecimalPlaces(b));\n const multiplier = Math.pow(10, precision);\n return Math.round(a * multiplier + b * multiplier) / multiplier;\n};\n\n/**\n * Precision-safe subtraction to avoid floating point errors\n * e.g., 0.11 - 0.1 = 0.009999999999999998 -> 0.01\n */\nconst precisionSubtract = (a: number, b: number): number => {\n const precision = Math.max(getDecimalPlaces(a), getDecimalPlaces(b));\n const multiplier = Math.pow(10, precision);\n return Math.round(a * multiplier - b * multiplier) / multiplier;\n};\n\nexport interface NumberInputProps {\n /**\n * Current value\n */\n value?: number;\n /**\n * Default value\n */\n defaultValue?: number;\n /**\n * Minimum value\n */\n min?: number;\n /**\n * Maximum value\n */\n max?: number;\n /**\n * Step increment/decrement\n */\n step?: number;\n /**\n * Size variant\n */\n size?: 'small' | 'large';\n /**\n * Whether the input is disabled\n */\n disabled?: boolean;\n /**\n * Whether to show alert state (red border)\n */\n alert?: boolean;\n /**\n * Number of decimal places\n */\n precision?: number;\n /**\n * Format the display value\n */\n formatter?: (value: number) => string;\n /**\n * Parse the input value\n */\n parser?: (displayValue: string) => number;\n /**\n * Unit text to display after the input\n */\n unit?: string;\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Whether to show step buttons (increment/decrement)\n * @default true\n */\n showStepButtons?: boolean;\n /**\n * Trigger mode for showing step buttons\n * - 'normal': always show (default)\n * - 'hover': show only on hover\n * @default 'normal'\n */\n showStepButtonsTrigger?: 'hover' | 'normal';\n /**\n * Input line type\n * - 'outlined': with full border (default)\n * - 'underlined': with bottom border only\n * - 'borderless': no border\n * @default 'outlined'\n */\n lineType?: LineType;\n /**\n * Whether to use thousands separator in display\n * @default false\n */\n useThousandsSeparator?: boolean;\n /**\n * Value map for piecewise linear mapping (non-linear stepping)\n * When provided, min/max/step props are ignored\n */\n valueMap?: ValueMap;\n /**\n * Callback when value changes\n * @param fixedValue - The clamped value within min/max range (can be undefined if empty)\n * @param rawValue - The original input value before clamping (can be undefined if empty)\n */\n onChange?: (fixedValue: number | undefined, rawValue: number | undefined) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Callback when input receives focus\n */\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * Callback when input loses focus\n */\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * Callback when input value changes during typing\n * Useful for real-time validation (e.g., check if value is multiple of 3)\n * @param inputValue - The raw input string\n * @param parsedValue - The parsed number value (undefined if invalid)\n */\n onInputChange?: (inputValue: string, parsedValue: number | undefined) => void;\n /**\n * Whether to select all text when the input receives focus\n * @default false\n */\n selectAllOnFocus?: boolean;\n /**\n * Whether to blur the input when Escape key is pressed\n * @default true\n */\n blurOnEscape?: boolean;\n}\n\n\nconst UpArrow = () => (\n <svg viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.5L10.5 8.5H3.5L7 4.5Z\" fill=\"currentColor\" />\n </svg>\n);\n\nconst DownArrow = () => (\n <svg viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 9.5L3.5 5.5H10.5L7 9.5Z\" fill=\"currentColor\" />\n </svg>\n);\n\n/**\n * NumberInput Component\n *\n * A numeric input with increment/decrement buttons\n *\n * @example\n * <NumberInput value={35} onChange={(val) => console.log(val)} />\n */\nexport const NumberInput: React.FC<NumberInputProps> = ({\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n size = 'large',\n disabled = false,\n alert = false,\n precision,\n formatter,\n parser,\n unit,\n placeholder,\n showStepButtons = true,\n showStepButtonsTrigger = 'normal',\n lineType = 'outlined',\n useThousandsSeparator = false,\n valueMap: valueMapProp,\n onChange,\n className,\n style,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n onInputChange,\n selectAllOnFocus = false,\n blurOnEscape = true,\n}) => {\n const config = useUIConfig();\n const locale = config?.locale ?? 'en-US';\n\n const [internalValue, setInternalValue] = useState<number | undefined>(controlledValue ?? defaultValue);\n const [displayValue, setDisplayValue] = useState<string>('');\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Create extended value map when valueMap is provided\n const extendedValueMap: ValueMapExtended | undefined = useMemo(() => {\n if (!valueMapProp) return undefined;\n return extendValueMap(valueMapProp);\n }, [valueMapProp]);\n\n // Derive effective min/max from value map or props\n const effectiveMin = extendedValueMap ? extendedValueMap.start : min;\n const effectiveMax = extendedValueMap ? extendedValueMap.end : max;\n\n // Format value for display (optionally with thousands separator and unit)\n const formatValue = useCallback(\n (val: number | undefined): string => {\n if (val === undefined) {\n return '';\n }\n let formatted: string;\n if (formatter) {\n formatted = formatter(val);\n } else if (useThousandsSeparator) {\n formatted = formatNumber(val, locale, precision);\n } else {\n formatted = formatNumberForEdit(val, locale, precision);\n }\n // Append unit directly to the number for display\n if (unit) {\n return formatted + unit;\n }\n return formatted;\n },\n [formatter, precision, locale, useThousandsSeparator, unit]\n );\n\n // Format value for editing (without thousands separator, for easier input)\n const formatValueForEdit = useCallback(\n (val: number | undefined): string => {\n if (val === undefined) {\n return '';\n }\n if (formatter) {\n return formatter(val);\n }\n return formatNumberForEdit(val, locale, precision);\n },\n [formatter, precision, locale]\n );\n\n // Parse display value to number (handles locale-specific separators)\n const parseValue = useCallback(\n (displayVal: string): number | null => {\n if (parser) {\n return parser(displayVal);\n }\n return parseLocalizedNumber(displayVal, locale);\n },\n [parser, locale]\n );\n\n // Update display value when value changes\n useEffect(() => {\n if (!isFocused) {\n setDisplayValue(formatValue(value));\n }\n }, [value, isFocused, formatValue]);\n\n // Apply precision to a value (rounds to specified decimal places)\n const applyPrecision = useCallback(\n (val: number | undefined): number | undefined => {\n if (val === undefined || precision === undefined) {\n return val;\n }\n // Use toFixed and parseFloat to round to precision\n // This ensures 0.006 with precision=2 becomes 0.01\n const multiplier = Math.pow(10, precision);\n return Math.round(val * multiplier) / multiplier;\n },\n [precision]\n );\n\n // Clamp value to min/max\n const clampValue = useCallback(\n (val: number | undefined): number | undefined => {\n if (val === undefined) {\n return undefined;\n }\n return Math.max(effectiveMin, Math.min(effectiveMax, val));\n },\n [effectiveMin, effectiveMax]\n );\n\n // Handle value change\n const handleValueChange = useCallback(\n (newValue: number | undefined) => {\n const clampedValue = clampValue(newValue);\n\n if (controlledValue === undefined) {\n setInternalValue(clampedValue);\n }\n\n onChange?.(clampedValue, newValue);\n },\n [clampValue, controlledValue, onChange]\n );\n\n // Increment value\n const increment = useCallback(() => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = extendedValueMap\n ? changeByStep(currentValue, 1, extendedValueMap)\n : precisionAdd(currentValue, step);\n handleValueChange(newValue);\n // If focused, sync displayValue immediately (use edit format without thousands separator)\n if (isFocused) {\n const clampedValue = clampValue(newValue);\n setDisplayValue(formatValueForEdit(clampedValue));\n }\n }, [disabled, value, step, handleValueChange, isFocused, clampValue, formatValueForEdit, extendedValueMap]);\n\n // Decrement value\n const decrement = useCallback(() => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = extendedValueMap\n ? changeByStep(currentValue, -1, extendedValueMap)\n : precisionSubtract(currentValue, step);\n handleValueChange(newValue);\n // If focused, sync displayValue immediately (use edit format without thousands separator)\n if (isFocused) {\n const clampedValue = clampValue(newValue);\n setDisplayValue(formatValueForEdit(clampedValue));\n }\n }, [disabled, value, step, handleValueChange, isFocused, clampValue, formatValueForEdit, extendedValueMap]);\n\n // Handle input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n setDisplayValue(inputValue);\n\n // Parse and call onInputChange callback\n const trimmed = inputValue.trim();\n const parsedValue = trimmed === '' ? undefined : (parseValue(trimmed) ?? undefined);\n onInputChange?.(inputValue, parsedValue);\n },\n [parseValue, onInputChange]\n );\n\n // Handle input blur\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n const trimmedValue = displayValue.trim();\n if (trimmedValue === '') {\n handleValueChange(undefined);\n setDisplayValue('');\n } else {\n const parsed = parseValue(trimmedValue);\n if (parsed !== null) {\n // Apply precision to ensure stored value matches displayed value\n const preciseValue = applyPrecision(parsed);\n // Snap to step when valueMap is provided\n const finalValue = extendedValueMap && preciseValue !== undefined\n ? snapToStep(preciseValue, extendedValueMap)\n : preciseValue;\n handleValueChange(finalValue);\n } else {\n setDisplayValue(formatValue(value));\n }\n }\n onBlurProp?.(e);\n },\n [displayValue, parseValue, handleValueChange, value, formatValue, applyPrecision, onBlurProp, extendedValueMap]\n );\n\n // Handle input focus\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n // Use edit format (without thousands separator) for easier editing\n setDisplayValue(formatValueForEdit(value));\n if (selectAllOnFocus) {\n // Use requestAnimationFrame to select after React updates the display value\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n onFocusProp?.(e);\n },\n [value, formatValueForEdit, onFocusProp, selectAllOnFocus]\n );\n\n // Handle keyboard events\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n increment();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n decrement();\n } else if (e.key === 'Enter') {\n inputRef.current?.blur();\n } else if (e.key === 'Escape' && blurOnEscape) {\n inputRef.current?.blur();\n }\n },\n [increment, decrement, blurOnEscape]\n );\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n return (\n <NumberInputContainer\n $size={size}\n $disabled={disabled}\n $alert={alert}\n $isFocused={isFocused}\n $lineType={lineType}\n className={className}\n style={style}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <InputWrapper>\n <StyledInput\n ref={inputRef}\n type=\"text\"\n value={displayValue}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n $size={size}\n $disabled={disabled}\n />\n </InputWrapper>\n\n {showStepButtons && (showStepButtonsTrigger !== 'hover' || isHovered || isFocused) && (\n <ButtonGroup $alert={alert} $disabled={disabled} $lineType={lineType}>\n <StepButton\n type=\"button\"\n $disabled={disabled}\n onClick={increment}\n disabled={disabled}\n tabIndex={-1}\n >\n <UpArrow />\n </StepButton>\n\n <StepButton\n type=\"button\"\n $disabled={disabled}\n onClick={decrement}\n disabled={disabled}\n tabIndex={-1}\n >\n <DownArrow />\n </StepButton>\n </ButtonGroup>\n )}\n </NumberInputContainer>\n );\n};\n\nNumberInput.displayName = 'NumberInput';\n","export { NumberInput } from './NumberInput';\nexport type { NumberInputProps } from './NumberInput';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\nimport { Slider } from '../Slider';\nimport { NumberInput, NumberInputProps } from '../NumberInput';\nimport type { ValueMap } from '../Slider/valueMap';\n\nexport interface SpinButtonProps {\n /**\n * Current value\n */\n value?: number;\n /**\n * Default value\n */\n defaultValue?: number;\n /**\n * Minimum value\n */\n min?: number;\n /**\n * Maximum value\n */\n max?: number;\n /**\n * Step increment/decrement\n */\n step?: number;\n /**\n * Size variant\n */\n size?: 'small' | 'large';\n /**\n * Whether the input is disabled\n */\n disabled?: boolean;\n /**\n * Whether to show alert state (red border)\n */\n alert?: boolean;\n /**\n * Whether to show the slider\n */\n showSlider?: boolean;\n /**\n * Number of decimal places\n */\n precision?: number;\n /**\n * Format the display value\n */\n formatter?: (value: number) => string;\n /**\n * Parse the input value\n */\n parser?: (displayValue: string) => number;\n /**\n * Value map for piecewise linear mapping (non-linear stepping)\n * When provided, min/max/step props are ignored in NumberInput and Slider\n */\n valueMap?: ValueMap;\n /**\n * Callback when value changes\n */\n onChange?: (value: number | null) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Additional props passed to the internal NumberInput component\n * Allows customizing unit, placeholder, lineType, showStepButtons, etc.\n */\n inputProps?: Partial<\n Omit<\n NumberInputProps,\n | 'value'\n | 'defaultValue'\n | 'min'\n | 'max'\n | 'step'\n | 'size'\n | 'disabled'\n | 'alert'\n | 'precision'\n | 'formatter'\n | 'parser'\n | 'valueMap'\n | 'onChange'\n | 'className'\n | 'style'\n >\n >;\n}\n\nconst SpinButtonWrapper = styled.div<{\n $showSlider: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n gap: ${({ $showSlider }) => ($showSlider ? '0' : '0')};\n width: ${({ $showSlider }) => ($showSlider ? '100%' : 'auto')};\n`;\n\nconst SliderWrapper = styled.div<{\n $size: 'small' | 'large';\n}>`\n flex: 1;\n display: flex;\n align-items: center;\n padding: ${({ $size }) => ($size === 'small' ? '7px 0' : '7px 0')};\n padding-right: ${({ $size }) => ($size === 'small' ? '8px' : '8px')};\n min-width: 0;\n`;\n\n\n/**\n * SpinButton Component - Spin Button\n *\n * A numeric input with increment/decrement buttons\n *\n * @example\n * <SpinButton value={35} onChange={(val) => console.log(val)} />\n */\nexport const SpinButton: React.FC<SpinButtonProps> = ({\n value: controlledValue,\n defaultValue = 0,\n min = -Infinity,\n max = Infinity,\n step = 1,\n size = 'large',\n disabled = false,\n alert = false,\n showSlider = false,\n precision,\n formatter,\n parser,\n valueMap,\n onChange,\n className,\n style,\n inputProps,\n}) => {\n const [internalValue, setInternalValue] = useState<number>(controlledValue ?? defaultValue);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Handle value change from NumberInput or Slider\n // NumberInput passes (fixedValue, rawValue), Slider passes single value\n const handleValueChange = useCallback(\n (fixedValue: number | undefined | null, rawValue?: number | undefined) => {\n // Handle both NumberInput signature (fixedValue, rawValue) and Slider signature (single value)\n // If rawValue is undefined, it means this is from Slider (single value)\n // If rawValue is defined, it means this is from NumberInput (two parameters)\n const newValue = rawValue === undefined\n ? (fixedValue ?? 0) // Slider: single value\n : (fixedValue ?? 0); // NumberInput: use fixedValue\n\n if (newValue === null) {\n onChange?.(null);\n return;\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n\n onChange?.(newValue);\n },\n [controlledValue, onChange]\n );\n\n return (\n <SpinButtonWrapper $showSlider={showSlider} className={className} style={style}>\n {showSlider && (\n <SliderWrapper $size={size}>\n <Slider\n value={value}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n valueMap={valueMap}\n onChange={handleValueChange}\n />\n </SliderWrapper>\n )}\n\n <NumberInput\n value={value}\n min={min}\n max={max}\n step={step}\n size={size}\n disabled={disabled}\n alert={alert}\n precision={precision}\n formatter={formatter}\n parser={parser}\n valueMap={valueMap}\n {...inputProps}\n onChange={handleValueChange}\n />\n </SpinButtonWrapper>\n );\n};\n\nSpinButton.displayName = 'SpinButton';\n","export { Button } from './Button';\nexport type { ButtonProps } from './Button';\n\nexport { SpinButton } from './SpinButton';\nexport type { SpinButtonProps } from './SpinButton';\n\n","export { Button, SpinButton } from './Button';\nexport type { ButtonProps, SpinButtonProps } from './Button';\n\nexport { Switch } from './Switch';\nexport type { SwitchProps } from './Switch';\n\nexport { Radio } from './Radio';\nexport type { RadioProps } from './Radio';\n\nexport { Checkbox } from './Checkbox';\nexport type { CheckboxProps } from './Checkbox';\n\nexport { Slider } from './Slider';\nexport type { SliderProps } from './Slider';\n\nexport { Input, SearchInput, UnderlinedInput } from './Input';\nexport type { InputProps, SearchInputProps, UnderlinedInputProps } from './Input';\n\nexport { NumberInput } from './NumberInput';\nexport type { NumberInputProps } from './NumberInput';\n\nexport { Icon, IconProvider, useIconRegistry } from './Icon';\nexport type { IconProps, IconProviderProps, IconRegistry, IconComponent } from './Icon';\n\nexport { Toast, ToastContainer, useToast, toast } from './Toast';\nexport type { ToastProps, ToastContainerProps, ToastContainerConfig } from './Toast';\n\nexport { Tabs } from './Tabs';\nexport type { TabsProps, TabItem } from './Tabs';\n\nexport { Tooltip } from './Tooltip';\nexport type { TooltipProps } from './Tooltip';\n\nexport { ToolbarButton } from './ToolbarButton';\nexport type { ToolbarButtonProps } from './ToolbarButton';\n\nexport { DropdownButton, Menu, Dropdown, MenuGlobalStyles, DropdownGlobalStyles } from './dropdown';\nexport type { DropdownButtonProps, MenuProps, MenuItem, MenuGroup, MenuDivider, MenuItemType, DropdownProps } from './dropdown';\n\nexport { Modal, ModalGlobalStyles } from './Modal';\nexport type { ModalProps } from './Modal';\n\nexport { Loading } from './Loading';\nexport type { LoadingProps } from './Loading';\n\nexport {\n UIConfigProvider,\n useUIConfig,\n createUIConfig,\n mergeUIConfig,\n initUIConfig,\n getUIConfig,\n getGlobalIconRegistry,\n getGlobalToastConfig,\n} from './UIConfigProvider';\n\nexport type {\n UIConfigProviderProps,\n UIConfig,\n ToastConfig,\n ToastPosition,\n ZIndexConfig,\n AnimationConfig,\n A11yConfig,\n I18nConfig,\n} from './UIConfigProvider';\n\nexport { styled } from './utils/styled';\nexport { getGlobalTheme } from './utils/context';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\n\nexport interface SwitchProps {\n /**\n * Whether the switch is checked\n */\n checked?: boolean;\n /**\n * Default checked state\n */\n defaultChecked?: boolean;\n /**\n * Size variant\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * Whether the switch is disabled\n */\n disabled?: boolean;\n /**\n * Callback when checked state changes\n */\n onChange?: (checked: boolean) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst SwitchContainer = styled.label<{\n $size: 'small' | 'medium' | 'large';\n $checked: boolean;\n $disabled: boolean;\n}>`\n position: relative;\n display: inline-block;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components.switch[$size];\n return `\n width: ${sizeConfig.container.width};\n height: ${sizeConfig.container.height};\n `;\n }}\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst Track = styled.div<{\n $size: 'small' | 'medium' | 'large';\n $checked: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n inset: 0;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n transition: ${({ theme }) => theme.components.switch.transition || 'all 0.2s ease'};\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components.switch[$size];\n return `\n border-radius: ${sizeConfig.track.borderRadius};\n width: ${sizeConfig.track.width};\n height: ${sizeConfig.track.height};\n `;\n }}\n\n ${({ $checked, $disabled, theme }) => {\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n if ($disabled) {\n return `\n background: ${stateConfig.track.backgroundDisabled};\n box-shadow: ${stateConfig.track.boxShadowDisabled};\n `;\n }\n\n return `\n background: ${stateConfig.track.background};\n box-shadow: ${stateConfig.track.boxShadow};\n `;\n }}\n\n ${({ $disabled, $checked, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n return `\n :hover {\n background: ${stateConfig.track.backgroundHover};\n box-shadow: ${stateConfig.track.boxShadowHover};\n }\n `;\n }}\n`;\n\nconst Thumb = styled.div<{\n $size: 'small' | 'medium' | 'large';\n $checked: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n top: 50%;\n border-style: solid;\n box-sizing: border-box;\n left: 0;\n transition: ${({ theme }) => theme.components.switch.transition || 'all 0.2s ease'};\n\n ${({ $size, $checked, theme }) => {\n const sizeConfig = theme.components.switch[$size];\n const thumbSize = sizeConfig.thumb.size;\n const thumbOffset = sizeConfig.thumb.offset;\n const thumbBorderRadius = sizeConfig.thumb.borderRadius;\n const thumbBorderWidth = sizeConfig.thumb.borderWidth;\n\n // Calculate thumb position based on track width\n const trackWidth = sizeConfig.container.width;\n const thumbSizeNum = parseFloat(thumbSize);\n const offsetNum = parseFloat(thumbOffset);\n const trackWidthNum = parseFloat(trackWidth);\n\n // Position from left (unchecked: offset, checked: trackWidth - thumbSize - offset)\n const leftPosition = $checked\n ? `${trackWidthNum - thumbSizeNum - offsetNum}px`\n : thumbOffset;\n\n return `\n width: ${thumbSize};\n height: ${thumbSize};\n border-radius: ${thumbBorderRadius};\n border-width: ${thumbBorderWidth};\n transform: translate(${leftPosition}, -50%);\n `;\n }}\n\n ${({ $checked, $disabled, theme }) => {\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n if ($disabled) {\n return `\n background: ${stateConfig.thumb.backgroundDisabled};\n border-color: ${stateConfig.thumb.borderColorDisabled};\n box-shadow: ${stateConfig.thumb.boxShadowDisabled};\n `;\n }\n\n return `\n background: ${stateConfig.thumb.background};\n border-color: ${stateConfig.thumb.borderColor};\n box-shadow: ${stateConfig.thumb.boxShadow};\n `;\n }}\n\n ${({ $disabled, $checked, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked ? theme.components.switch.on : theme.components.switch.off;\n\n return `\n :hover & {\n background: ${stateConfig.thumb.backgroundHover};\n border-color: ${stateConfig.thumb.borderColorHover};\n box-shadow: ${stateConfig.thumb.boxShadowHover};\n }\n `;\n }}\n`;\n\n/**\n * Switch Component\n *\n * A toggle switch for binary states\n *\n * @example\n * <Switch checked={true} onChange={(checked) => console.log(checked)} />\n */\nexport const Switch: React.FC<SwitchProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n size = 'large',\n disabled = false,\n onChange,\n className,\n style,\n}) => {\n const [internalChecked, setInternalChecked] = useState<boolean>(\n controlledChecked ?? defaultChecked\n );\n const [isFocused, setIsFocused] = useState(false);\n\n const checked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (controlledChecked === undefined) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(newChecked);\n },\n [disabled, controlledChecked, onChange]\n );\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n return (\n <SwitchContainer\n $size={size}\n $checked={checked}\n $disabled={disabled}\n className={className}\n style={style}\n >\n <HiddenInput\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n />\n <Track\n $size={size}\n $checked={checked}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n <Thumb\n $size={size}\n $checked={checked}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n </SwitchContainer>\n );\n};\n\nSwitch.displayName = 'Switch';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\n\nexport interface RadioProps {\n /**\n * Whether the radio is checked\n * @default false\n */\n checked?: boolean;\n /**\n * Default checked state\n * @default false\n */\n defaultChecked?: boolean;\n /**\n * Whether the radio is disabled\n */\n disabled?: boolean;\n /**\n * Value of the radio\n */\n value?: string | number;\n /**\n * Name attribute for grouping radios\n */\n name?: string;\n /**\n * ID attribute for the radio (used with htmlFor in labels)\n */\n id?: string;\n /**\n * Callback when checked state changes\n */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * prevent default click event, if true, change event will not be triggered\n * @default false\n */\n clickPreventDefault?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst RadioContainer = styled.label<{\n $disabled: boolean;\n}>`\n position: relative;\n display: inline-block;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n\n ${({ theme }) => {\n const sizeConfig = theme.components.radio.small;\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n `;\n }}\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst RadioOuter = styled.div<{\n $checked: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n inset: 0;\n border-radius: 50%;\n border: 1px solid;\n transition: all 0.2s ease;\n\n ${({ $checked, $disabled, theme }) => {\n if ($disabled) {\n const stateConfig = $checked\n ? theme.components.radio.checked\n : theme.components.radio.unchecked;\n return `\n background: ${stateConfig.backgroundDisabled};\n border-color: ${stateConfig.borderColorDisabled};\n `;\n }\n\n if ($checked) {\n const checkedConfig = theme.components.radio.checked;\n return `\n background: ${checkedConfig.background};\n border-color: ${checkedConfig.borderColor};\n `;\n }\n\n const uncheckedConfig = theme.components.radio.unchecked;\n return `\n background: ${uncheckedConfig.background};\n border-color: ${uncheckedConfig.borderColor};\n `;\n }}\n\n ${({ $disabled, $checked, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked\n ? theme.components.radio.checked\n : theme.components.radio.unchecked;\n\n return `\n :hover & {\n background: ${stateConfig.backgroundHover};\n border-color: ${stateConfig.borderColorHover};\n }\n\n :active & {\n border-color: ${stateConfig.borderColorActive};\n }\n `;\n }}\n`;\n\nconst RadioInner = styled.div<{\n $checked: boolean;\n $disabled: boolean;\n}>`\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n border-radius: 50%;\n background: white;\n opacity: ${({ $checked }) => ($checked ? 1 : 0)};\n transition: opacity 0.2s ease;\n\n ${({ theme }) => {\n const dotSize = theme.components.radio.small.dotSize;\n return `\n width: ${dotSize};\n height: ${dotSize};\n `;\n }}\n`;\n\n/**\n * Radio Component\n *\n * A radio button for selecting one option from a group\n *\n * @example\n * <Radio checked={true} onChange={(e) => console.log(e.target.checked)} />\n */\nexport const Radio: React.FC<RadioProps> = ({\n clickPreventDefault = false,\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n value,\n name,\n id,\n onChange,\n className,\n style,\n}) => {\n const [internalChecked, setInternalChecked] = useState<boolean>(\n controlledChecked ?? defaultChecked\n );\n const [isFocused, setIsFocused] = useState(false);\n\n const checked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (controlledChecked === undefined) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(e);\n },\n [disabled, controlledChecked, onChange]\n );\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleContainerClick = useCallback((e: React.MouseEvent) => {\n // Prevent event bubbling to avoid triggering parent element's click handlers\n if (clickPreventDefault) {\n e.preventDefault();\n }\n }, []);\n\n return (\n <RadioContainer\n $disabled={disabled}\n className={className}\n style={style}\n onClick={handleContainerClick}\n >\n <HiddenInput\n type=\"radio\"\n id={id}\n checked={checked}\n value={value}\n name={name}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n />\n <RadioOuter\n $checked={checked}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n <RadioInner\n $checked={checked}\n $disabled={disabled}\n />\n </RadioContainer>\n );\n};\n\nRadio.displayName = 'Radio';\n\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { styled } from '../utils/styled';\nimport { getGlobalTheme } from '../utils/context';\nimport { Icon } from '../Icon';\nimport { CheckIcon } from '@officesdk/design/icons';\n\nexport interface CheckboxProps {\n /**\n * Whether the checkbox is checked\n */\n checked?: boolean;\n /**\n * Default checked state\n */\n defaultChecked?: boolean;\n /**\n * Whether the checkbox is in indeterminate state\n */\n indeterminate?: boolean;\n /**\n * Whether the checkbox is disabled\n */\n disabled?: boolean;\n /**\n * Value of the checkbox\n */\n value?: string | number;\n /**\n * Name attribute for the checkbox\n */\n name?: string;\n /**\n * ID attribute for the checkbox (used with htmlFor in labels)\n */\n id?: string;\n /**\n * Callback when checked state changes\n */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * prevent default click event, if true, change event will not be triggered\n * @default false\n */\n clickPreventDefault?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst CheckboxContainer = styled.label<{\n $disabled: boolean;\n}>`\n position: relative;\n display: inline-block;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n\n ${({ theme }) => {\n const sizeConfig = theme.components.checkbox.small;\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n `;\n }}\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n`;\n\nconst CheckboxBox = styled.div<{\n $checked: boolean;\n $indeterminate: boolean;\n $disabled: boolean;\n $isFocused: boolean;\n}>`\n position: absolute;\n inset: 1px;\n border: 1px solid;\n transition: all 0.2s ease;\n\n ${({ theme }) => {\n const sizeConfig = theme.components.checkbox.small;\n return `\n border-radius: ${sizeConfig.borderRadius};\n `;\n }}\n\n ${({ $checked, $indeterminate, $disabled, theme }) => {\n if ($disabled) {\n const stateConfig = $checked || $indeterminate\n ? theme.components.checkbox.checked\n : theme.components.checkbox.unchecked;\n return `\n background: ${stateConfig.backgroundDisabled};\n border-color: ${stateConfig.borderColorDisabled};\n `;\n }\n\n if ($checked) {\n const checkedConfig = theme.components.checkbox.checked;\n return `\n background: ${checkedConfig.background};\n border-color: ${checkedConfig.borderColor};\n `;\n }\n\n if ($indeterminate) {\n const indeterminateConfig = theme.components.checkbox.indeterminate;\n return `\n background: ${indeterminateConfig.background};\n border-color: ${indeterminateConfig.borderColor};\n `;\n }\n\n const uncheckedConfig = theme.components.checkbox.unchecked;\n return `\n background: ${uncheckedConfig.background};\n border-color: ${uncheckedConfig.borderColor};\n `;\n }}\n\n ${({ $disabled, $checked, $indeterminate, theme }) => {\n if ($disabled) return '';\n\n const stateConfig = $checked || $indeterminate\n ? theme.components.checkbox.checked\n : theme.components.checkbox.unchecked;\n\n return `\n :hover & {\n background: ${stateConfig.backgroundHover};\n border-color: ${stateConfig.borderColorHover};\n }\n\n :active & {\n border-color: ${stateConfig.borderColorActive};\n }\n `;\n }}\n`;\n\nconst IconWrapper = styled.div<{\n $visible: boolean;\n}>`\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n opacity: ${({ $visible }) => ($visible ? 1 : 0)};\n transition: opacity 0.2s ease;\n pointer-events: none;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${({ theme }) => {\n const iconSize = theme.components.checkbox.small.iconSize;\n return `\n width: ${iconSize.width};\n height: ${iconSize.height};\n `;\n }}\n\n svg, img {\n display: block;\n }\n`;\n\nconst DefaultIndeterminateIcon = styled.div`\n width: 8px;\n height: 2px;\n background: white;\n`;\n\n/**\n * Checkbox Component\n *\n * A checkbox for selecting multiple options\n *\n * @example\n * <Checkbox checked={true} onChange={(e) => console.log(e.target.checked)} />\n *\n * @example\n * // Indeterminate state\n * <Checkbox indeterminate={true} />\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n indeterminate = false,\n disabled = false,\n value,\n name,\n id,\n onChange,\n clickPreventDefault = false,\n className,\n style,\n}) => {\n const theme = getGlobalTheme()\n const [internalChecked, setInternalChecked] = useState<boolean>(\n controlledChecked ?? defaultChecked\n );\n const [isFocused, setIsFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const checked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n // Set indeterminate property on the native input element\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (controlledChecked === undefined) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(e);\n },\n [disabled, controlledChecked, onChange]\n );\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleContainerClick = useCallback((e: React.MouseEvent) => {\n // Prevent event bubbling to avoid triggering parent element's click handlers\n if (clickPreventDefault) {\n e.preventDefault();\n }\n }, []);\n\n return (\n <CheckboxContainer\n $disabled={disabled}\n className={className}\n style={style}\n onClick={handleContainerClick}\n >\n <HiddenInput\n ref={inputRef}\n type=\"checkbox\"\n id={id}\n checked={checked}\n value={value}\n name={name}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n />\n <CheckboxBox\n $checked={checked}\n $indeterminate={indeterminate}\n $disabled={disabled}\n $isFocused={isFocused}\n />\n {!indeterminate && (\n <IconWrapper $visible={checked}>\n {\n !theme.components.checkbox.icons.checked\n ? <Icon size={theme.components.checkbox.small.iconSize.width} color=\"#fff\"><CheckIcon /></Icon>\n : <Icon src={theme.components.checkbox.icons.checked} size={theme.components.checkbox.small.iconSize.width} />\n }\n </IconWrapper>\n )}\n {indeterminate && (\n <IconWrapper $visible={indeterminate}>\n {\n !theme.components.checkbox.icons.indeterminate\n ? <DefaultIndeterminateIcon />\n : <Icon src={theme.components.checkbox.icons.indeterminate} size={theme.components.checkbox.small.iconSize.width} />\n }\n </IconWrapper>\n )}\n </CheckboxContainer>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\n","import React, { forwardRef, useState } from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { CloseIcon } from '@officesdk/design/icons';\n\ntype InputSize = 'mini' | 'small' | 'medium' | 'large';\ntype LineType = 'outlined' | 'underlined' | 'borderless';\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n /**\n * Input line type\n */\n lineType?: LineType;\n /**\n * Input size\n */\n size?: InputSize;\n /**\n * Whether the input has an error state\n */\n error?: boolean;\n /**\n * Whether the input is in readonly mode\n */\n readOnly?: boolean;\n /**\n * Node to display before the input\n */\n prefixNode?: React.ReactNode;\n /**\n * Node to display after the input\n */\n suffixNode?: React.ReactNode;\n /**\n * Whether to show clear button when input has value\n */\n clearable?: boolean;\n /**\n * Clear button click handler\n */\n onClear?: () => void;\n /**\n * Custom clear icon\n */\n clearIcon?: React.ReactNode;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom inline styles\n */\n style?: React.CSSProperties;\n /**\n * Custom input className\n */\n inputClassName?: string;\n /**\n * Custom input styles\n */\n inputStyle?: React.CSSProperties;\n}\n\nconst InputContainer = styled.div<{\n $size: InputSize;\n $lineType: LineType;\n}>`\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n height: ${sizeConfig.height};\n `;\n }}\n`;\n\nconst InputWrapper = styled.div<{\n $size: InputSize;\n $lineType: LineType;\n $error: boolean;\n $disabled: boolean;\n $readOnly: boolean;\n $isFocused: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n flex: 1;\n transition: all 0.2s ease;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n height: ${sizeConfig.height};\n padding: ${sizeConfig.padding};\n gap: ${sizeConfig.gap || '4px'};\n ${\n $lineType === 'outlined'\n ? `\n border-radius: ${sizeConfig.borderRadius};\n `\n : ''\n }\n `;\n }}\n\n ${({ $error, $disabled, $readOnly, $isFocused, $lineType, theme, $size }) => {\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const stateConfig = typeConfig?.state;\n if (!stateConfig) return '';\n\n let borderColor = stateConfig.borderColor;\n let background = stateConfig.background;\n let boxShadow = 'none';\n\n if ($disabled) {\n borderColor = stateConfig.borderColorDisabled;\n background = stateConfig.backgroundDisabled;\n } else if ($readOnly) {\n borderColor = stateConfig.borderColorReadonly || stateConfig.borderColor;\n background = stateConfig.backgroundReadonly || stateConfig.background;\n } else if ($error) {\n borderColor = stateConfig.borderColorError;\n background = $lineType === 'outlined' ? stateConfig.backgroundActive : stateConfig.background;\n } else if ($isFocused) {\n borderColor = stateConfig.borderColorActive;\n background = stateConfig.backgroundActive;\n if ($lineType === 'outlined') {\n const size = $size || 'medium';\n const sizeConfig = typeConfig?.[size];\n boxShadow = sizeConfig?.boxShadowActive || 'none';\n }\n }\n\n if ($lineType === 'borderless') {\n // borderless type: no border, no boxShadow\n return `\n border: none;\n background: transparent;\n box-shadow: none;\n\n &:hover:not(:disabled) {\n background: transparent;\n }\n `;\n } else if ($lineType === 'outlined') {\n return `\n border: 1px solid ${borderColor};\n background: ${background};\n box-shadow: ${boxShadow};\n\n &:hover:not(:disabled) {\n ${\n !$disabled && !$readOnly && !$isFocused\n ? `\n border-color: ${stateConfig.borderColorHover};\n background: ${stateConfig.backgroundHover};\n `\n : ''\n }\n }\n `;\n } else {\n // underlined type\n return `\n background: ${background};\n border-bottom: 1px solid ${$error ? borderColor : $isFocused ? borderColor : 'transparent'};\n\n &:hover:not(:disabled) {\n ${\n !$disabled && !$isFocused && !$error\n ? `\n border-bottom-color: ${stateConfig.borderColorHover};\n `\n : ''\n }\n }\n `;\n }\n }}\n\n ${({ $disabled }) =>\n $disabled &&\n `\n cursor: not-allowed;\n opacity: ${$disabled ? '0.6' : '1'};\n `}\n`;\n\nconst ContentBlock = styled.div<{\n $size: InputSize;\n $lineType: LineType;\n}>`\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n padding: ${sizeConfig.contentPadding || '0'};\n gap: ${sizeConfig.gap || '4px'};\n `;\n }}\n`;\n\nconst StyledInput = styled.input<{\n $size: InputSize;\n $lineType: LineType;\n $disabled: boolean;\n $readOnly: boolean;\n $isFocused: boolean;\n}>`\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n min-width: 0;\n padding: 0;\n margin: 0;\n font-family: inherit;\n\n ${({ $size, $lineType, $disabled, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n const stateConfig = typeConfig?.state;\n if (!sizeConfig || !stateConfig) return '';\n\n // textColorNormal is used for all states except disabled\n const textColor = $disabled ? stateConfig.textColorDisabled : stateConfig.textColorNormal;\n\n return `\n font-size: ${sizeConfig.fontSize};\n line-height: ${sizeConfig.lineHeight};\n color: ${textColor};\n `;\n }}\n\n &::placeholder {\n color: ${({ $isFocused, $lineType, theme }) => {\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const stateConfig = typeConfig?.state;\n return $isFocused\n ? stateConfig?.placeholderColorHover || 'rgba(65, 70, 75, 0.3)'\n : stateConfig?.placeholderColorNormal || 'rgba(65, 70, 75, 0.3)';\n }};\n }\n\n ${({ $disabled }) =>\n $disabled &&\n `\n cursor: not-allowed;\n `}\n\n ${({ $readOnly }) =>\n $readOnly &&\n `\n cursor: default;\n `}\n`;\n\nconst PrefixNode = styled.div<{ $size: InputSize; $lineType: LineType }>`\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n svg, img {\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n }\n `;\n }}\n`;\n\nconst SuffixNode = styled.div<{ $size: InputSize; $lineType: LineType }>`\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n if (!sizeConfig) return '';\n\n return `\n svg, img {\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n }\n `;\n }}\n`;\n\nconst ClearButton = styled.button<{ $size: InputSize; $lineType: LineType }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0;\n margin: 0;\n outline: none;\n transition: opacity 0.2s ease;\n\n ${({ $size, $lineType, theme }) => {\n const size = $size || 'medium';\n const typeConfig =\n $lineType === 'underlined'\n ? theme.components?.input?.underlined\n : theme.components?.input?.outlined;\n const sizeConfig = typeConfig?.[size];\n const clearIconSize = sizeConfig?.clearIcon?.size;\n if (!clearIconSize) return '';\n\n return `\n width: ${clearIconSize.width};\n height: ${clearIconSize.height};\n\n svg {\n width: ${clearIconSize.width};\n height: ${clearIconSize.height};\n }\n `;\n }}\n\n &:hover {\n opacity: 0.7;\n }\n\n &:active {\n opacity: 0.5;\n }\n`;\n\nconst AlertLine = styled.div`\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => theme.colors?.palettes?.red?.['6'] || '#E95555'};\n`;\n\n/**\n * Input Component\n *\n * @example\n * // Basic outlined input (default)\n * <Input placeholder=\"Enter text\" />\n *\n * @example\n * // Underlined input\n * <Input lineType=\"underlined\" placeholder=\"Enter text\" />\n *\n * @example\n * // Input with prefix and suffix\n * <Input prefixNode={<SearchIcon />} suffixNode={<Icon />} />\n *\n * @example\n * // Input with clearable\n * <Input clearable onClear={() => console.log('cleared')} />\n *\n * @example\n * // Input with error state\n * <Input error placeholder=\"Enter text\" />\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n lineType = 'outlined',\n size = 'medium',\n error = false,\n disabled = false,\n readOnly = false,\n prefixNode,\n suffixNode,\n clearable = false,\n onClear,\n clearIcon,\n className,\n style,\n inputClassName,\n inputStyle,\n onFocus,\n onBlur,\n value,\n onChange,\n defaultValue,\n ...rest\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(\n value !== undefined ? value : (defaultValue as string) || ''\n );\n\n // Controlled vs Uncontrolled\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n const hasValue = !!currentValue && String(currentValue).length > 0;\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!isControlled) {\n setInternalValue('');\n }\n\n // Trigger onChange event for controlled components\n if (onChange && ref && 'current' in ref && ref.current) {\n const syntheticEvent = {\n target: { ...ref.current, value: '' },\n currentTarget: ref.current,\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n\n onClear?.();\n };\n\n // Show clear button when clearable and has value\n const shouldShowClearButton = clearable && hasValue && !disabled && !readOnly;\n const clearButtonNode = shouldShowClearButton ? (\n <ClearButton\n type=\"button\"\n $size={size}\n $lineType={lineType}\n onClick={handleClear}\n aria-label=\"Clear\"\n tabIndex={-1}\n >\n {clearIcon || (\n <Icon size={16} color=\"rgba(65, 70, 75, 0.6)\">\n <CloseIcon />\n </Icon>\n )}\n </ClearButton>\n ) : null;\n\n return (\n <InputContainer $size={size} $lineType={lineType} className={className} style={style}>\n <InputWrapper\n $size={size}\n $lineType={lineType}\n $error={error}\n $disabled={!!disabled}\n $readOnly={!!readOnly}\n $isFocused={isFocused}\n >\n {prefixNode && (\n <PrefixNode $size={size} $lineType={lineType}>\n {prefixNode}\n </PrefixNode>\n )}\n <ContentBlock $size={size} $lineType={lineType}>\n <StyledInput\n ref={ref}\n $size={size}\n $lineType={lineType}\n $disabled={!!disabled}\n $readOnly={!!readOnly}\n $isFocused={isFocused}\n disabled={disabled}\n readOnly={readOnly}\n value={currentValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={inputClassName}\n style={inputStyle}\n {...rest}\n />\n {clearButtonNode}\n </ContentBlock>\n {suffixNode && (\n <SuffixNode $size={size} $lineType={lineType}>\n {suffixNode}\n </SuffixNode>\n )}\n </InputWrapper>\n {lineType === 'underlined' && error && <AlertLine />}\n </InputContainer>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import React, { forwardRef } from 'react';\nimport { styled } from '../utils/styled';\nimport { Input, InputProps } from './Input';\nimport { Icon } from '../Icon';\nimport { getGlobalTheme } from '../utils/context';\nimport { SearchIcon } from '@officesdk/design/icons';\n\nexport interface SearchInputProps extends Omit<InputProps, 'prefixNode' | 'suffixNode'> {\n /**\n * Line type (outlined or underlined)\n */\n lineType?: 'outlined' | 'underlined';\n /**\n * SearchInput size\n */\n size?: 'mini' | 'small' | 'medium' | 'large';\n /**\n * Whether to show the clear button when input has value\n */\n clearable?: boolean;\n /**\n * Callback when clear button is clicked\n */\n onClear?: () => void;\n /**\n * Custom search icon (URL string or React node)\n */\n searchIcon?: string | React.ReactNode;\n}\n\nconst SearchIconWrapper = styled.div`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n svg {\n width: 100%;\n height: 100%;\n color: ${({ theme }) => theme.colors?.palettes?.transparency?.['100'] || '#41464b'};\n }\n`;\n\n/**\n * SearchInput Component\n *\n * A wrapper around Input component with search icon and clear functionality\n *\n * @example\n * // Basic search input\n * <SearchInput placeholder=\"Search...\" />\n *\n * @example\n * // Underlined search input\n * <SearchInput lineType=\"underlined\" placeholder=\"Search...\" />\n *\n * @example\n * // Search input without clearable\n * <SearchInput clearable={false} placeholder=\"Search...\" />\n *\n * @example\n * // Different sizes\n * <SearchInput size=\"small\" placeholder=\"Search...\" />\n * <SearchInput size=\"medium\" placeholder=\"Search...\" />\n * <SearchInput size=\"large\" placeholder=\"Search...\" />\n */\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n { lineType = 'outlined', size = 'medium', clearable = true, onClear, searchIcon, ...rest },\n ref\n ) => {\n // Render search icon by priority:\n // 1. props.searchIcon (string or ReactNode)\n // 2. theme.components.inputSearch.searchIcon.url\n // 3. Default search icon from registry\n const getSearchIconElement = () => {\n // Priority 1: props.searchIcon\n if (searchIcon !== undefined) {\n if (typeof searchIcon === 'string') {\n return <Icon src={searchIcon} />;\n }\n return searchIcon;\n }\n\n // Priority 2: theme icon\n const theme = getGlobalTheme();\n const themeIconUrl = theme?.components?.inputSearch?.searchIcon?.url;\n if (themeIconUrl) {\n return <Icon src={themeIconUrl} />;\n }\n\n // Priority 3: default icon\n return <SearchIcon />;\n };\n\n const prefixNode = <SearchIconWrapper>{getSearchIconElement()}</SearchIconWrapper>;\n\n return (\n <Input\n ref={ref}\n lineType={lineType}\n size={size}\n prefixNode={prefixNode}\n clearable={clearable}\n onClear={onClear}\n {...rest}\n />\n );\n }\n);\n\nSearchInput.displayName = 'SearchInput';\n","// React is required for JSX transform (jsx: \"react\")\nimport React, { forwardRef } from 'react';\nimport { Input, InputProps } from './Input';\n\n/**\n * UnderlinedInput Component\n *\n * @deprecated Use <Input lineType=\"underlined\" /> instead\n *\n * This component is a simple alias for Input with lineType=\"underlined\"\n * and will be removed in a future version.\n *\n * @example\n * // Old way (deprecated)\n * <UnderlinedInput placeholder=\"Search...\" />\n *\n * // New way (recommended)\n * <Input lineType=\"underlined\" placeholder=\"Search...\" />\n */\nexport const UnderlinedInput = forwardRef<HTMLInputElement, Omit<InputProps, 'lineType'>>(\n (props, ref) => {\n // React is used implicitly by JSX transform\n void React;\n return <Input {...props} lineType=\"underlined\" ref={ref} />;\n }\n);\n\nUnderlinedInput.displayName = 'UnderlinedInput';\n\nexport type { InputProps as UnderlinedInputProps };\n","export { Toast } from './Toast';\nexport type { ToastProps } from './Toast';\n\nexport { ToastContainer, useToast } from './ToastContainer';\nexport type { ToastContainerProps } from './ToastContainer';\n\nexport { toast } from './toastManager';\nexport type { ToastContainerConfig } from './toastManager';\n\n","import React, { useState, useCallback } from 'react';\nimport { styled } from '../utils/styled';\n\nexport interface TabItem {\n /**\n * Unique key for the tab\n */\n key: string;\n /**\n * Tab label\n */\n label: string | React.ReactNode;\n /**\n * Whether the tab is disabled\n */\n disabled?: boolean;\n /**\n * Custom icon\n */\n icon?: React.ReactNode;\n}\n\nexport interface TabsProps {\n /**\n * Tab items\n */\n items: TabItem[];\n /**\n * Active tab key\n */\n activeKey?: string;\n /**\n * Default active tab key\n */\n defaultActiveKey?: string;\n /**\n * Tab variant\n */\n variant?: 'line' | 'card';\n /**\n * Tab size\n */\n size?: 'large';\n /**\n * Tab items alignment (only works for 'line' variant)\n */\n justify?: 'start' | 'center' | 'end';\n /**\n * Callback when tab changes\n */\n onChange?: (key: string) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Custom className for tab item\n */\n tabItemClassName?: string;\n /**\n * Custom style for tab item\n */\n tabItemStyle?: React.CSSProperties;\n}\n\nconst TabContainer = styled.div<{\n $variant: 'line' | 'card';\n}>`\n display: flex;\n flex-direction: column;\n\n ${({ $variant, theme }) => {\n\n const variantConfig = theme.components.tab[$variant];\n const sizeConfig = theme.components.tab.large;\n return `\n height: ${sizeConfig.height};\n border-radius: ${sizeConfig.borderRadius};\n background-color: ${variantConfig.backgroundColor};\n `;\n }}\n`;\n\nconst TabList = styled.div<{\n $variant: 'line' | 'card';\n $justify: 'start' | 'center' | 'end';\n}>`\n display: flex;\n align-items: center;\n position: relative;\n width: 100%;\n height: 100%;\n\n\n ${({ $variant, $justify, theme }) => {\n const variantConfig = theme.components.tab[$variant];\n const justifyContent =\n $variant === 'line'\n ? $justify === 'center'\n ? 'center'\n : $justify === 'end'\n ? 'flex-end'\n : 'flex-start'\n : 'flex-start';\n return `\n gap: ${variantConfig.layout.gap};\n justify-content: ${justifyContent};\n `;\n }}\n\n ${({ $variant }) => {\n if ($variant === 'line') {\n return `\n border-bottom: 2px solid rgba(65, 70, 75, 0.1);\n `;\n }\n return '';\n }}\n`;\n\nconst TabItem = styled.button<{\n $variant: 'line' | 'card';\n $active: boolean;\n $disabled: boolean;\n $count: number\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n border: none;\n outline: none;\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n transition: all 0.2s ease;\n position: relative;\n white-space: nowrap;\n\n ${({ theme }) => {\n const sizeConfig = theme.components.tab.large;\n return `\n height: 100%;\n font-size: ${sizeConfig.fontSize};\n line-height: ${sizeConfig.lineHeight};\n border-radius: ${sizeConfig.borderRadius};\n font-weight: ${sizeConfig.fontWeight};\n `;\n }}\n\n ${({ $variant, $active, $disabled, theme }) => {\n const variantConfig = theme.components.tab[$variant];\n const itemConfig = variantConfig.item;\n\n if ($disabled) {\n return `\n background: ${itemConfig.backgroundDisabled};\n color: ${itemConfig.colorDisabled};\n `;\n }\n\n if ($active) {\n return `\n background: ${itemConfig.backgroundActive};\n color: ${itemConfig.colorActive};\n font-weight: 500;\n `;\n }\n\n return `\n background: ${itemConfig.background};\n border-color: ${itemConfig.borderColor};\n color: ${itemConfig.color};\n `;\n }}\n\n ${({ $variant, $disabled, theme, $active }) => {\n if ($disabled) return '';\n\n const variantConfig = theme.components.tab[$variant];\n const itemConfig = variantConfig.item;\n\n const isHoverNormal = !$active && !$disabled;\n\n return `\n &:hover {\n background: ${ isHoverNormal ? itemConfig.backgroundHover : ''};\n border-color: ${ isHoverNormal ? itemConfig.borderColorHover : ''};\n color: ${ isHoverNormal ? itemConfig.colorHover : ''};\n }\n `;\n }}\n\n ${({ $variant, $active, $disabled, theme }) => {\n // Line variant: show underline when active\n if ($variant === 'line' && $active) {\n return `\n &::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background: currentColor;\n }\n `;\n }\n\n // Card variant: use box-shadow inset for border\n if ($variant === 'card') {\n const variantConfig = theme.components.tab[$variant];\n const itemConfig = variantConfig.item;\n\n // Get border color based on state\n let borderColor: string;\n if ($disabled) {\n borderColor = itemConfig.borderColorDisabled;\n } else if ($active) {\n borderColor = itemConfig.borderColorActive;\n } else {\n borderColor = itemConfig.borderColor;\n }\n\n\n return `\n box-shadow: inset 0 0 0 1px ${borderColor};\n flex: 1;\n overflow: hidden;\n &:hover {\n }\n `;\n }\n\n return '';\n }}\n\n ${({ $variant, theme, $count }) => {\n if ($variant === 'line') {\n const gapNumber = parseInt(theme.components.tab.line.layout.gap ?? '0');\n return `\n max-width: ${$count > 1 ? `calc((100% - ${gapNumber * ($count - 1)}px) / ${$count})` : '100%'};\n `;\n }\n return '';\n }}\n`;\n\nconst TabItemLabel = styled.span`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n`;\n\n/**\n * Tab Component\n *\n * A tab component with line and card variants\n *\n * @example\n * <Tab\n * items={[\n * { key: '1', label: 'Tab 1' },\n * { key: '2', label: 'Tab 2' },\n * ]}\n * defaultActiveKey=\"1\"\n * />\n */\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n activeKey: controlledActiveKey,\n defaultActiveKey,\n variant = 'line',\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n size: _size = 'large',\n justify = 'start',\n onChange,\n className,\n style,\n tabItemClassName,\n tabItemStyle,\n}) => {\n const [internalActiveKey, setInternalActiveKey] = useState<string>(\n controlledActiveKey ?? defaultActiveKey ?? items[0]?.key ?? ''\n );\n\n const activeKey = controlledActiveKey !== undefined ? controlledActiveKey : internalActiveKey;\n\n const handleTabClick = useCallback(\n (key: string, disabled?: boolean) => {\n if (disabled) return;\n\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(key);\n }\n\n onChange?.(key);\n },\n [controlledActiveKey, onChange]\n );\n\n return (\n <TabContainer $variant={variant} className={className} style={style}>\n <TabList $variant={variant} $justify={justify} role=\"tablist\">\n {items.map((item) => (\n <TabItem\n key={item.key}\n $variant={variant}\n $active={activeKey === item.key}\n $disabled={item.disabled || false}\n $count={items.length}\n onClick={() => handleTabClick(item.key, item.disabled)}\n role=\"tab\"\n aria-selected={activeKey === item.key}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n type=\"button\"\n className={tabItemClassName}\n style={tabItemStyle}\n >\n {!!item.icon && item.icon}\n {typeof item.label === 'string' ? <TabItemLabel>{item.label}</TabItemLabel> : item.label}\n </TabItem>\n ))}\n </TabList>\n </TabContainer>\n );\n};\n\nTabs.displayName = 'Tab';\n","import { createGlobalStyle } from 'styled-components';\nimport { getGlobalTheme } from '../utils/context';\n\n// Helper functions to get arrow config values at runtime\nconst getArrowSize = () => parseInt(getGlobalTheme().components.tooltip.arrow.size.width);\nconst getArrowRadius = () => getGlobalTheme().components.tooltip.arrow.borderRadius;\n// The rotated square's visible height is arrowSize * 0.707 (half of diagonal)\nconst getArrowVisibleHeight = () => Math.round(getArrowSize() * 1.414) / 2;\nconst getPaddingDistance = () => `${getArrowVisibleHeight()}px`;\nconst getArrowOverlap = () => `${Math.ceil(getArrowVisibleHeight() - getArrowSize() / 2)}px!important`;\n\n// Tooltip global styles - includes base styles and all variant/size combinations\nexport const TooltipGlobalStyles = createGlobalStyle`\n /* Base tooltip container */\n .od-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n visibility: visible;\n font-size: 12px;\n line-height: 1.5;\n opacity: 1;\n }\n\n .od-tooltip-hidden {\n display: none;\n }\n\n /* Tooltip content wrapper */\n .od-tooltip-content {\n position: relative;\n }\n\n /* Tooltip inner content */\n .od-tooltip-inner {\n padding: 6px 8px;\n text-align: left;\n white-space: nowrap;\n min-height: unset;\n text-align: center;\n }\n\n /* Tooltip arrow base - rotated square for rounded corners */\n .od-tooltip-arrow {\n position: absolute;\n width: ${() => getArrowSize()}px;\n height: ${() => getArrowSize()}px;\n transform: rotate(45deg);\n }\n\n .od-tooltip-placement-top,\n .od-tooltip-placement-topLeft,\n .od-tooltip-placement-topRight {\n padding-bottom: ${() => getPaddingDistance()};\n }\n\n .od-tooltip-placement-right,\n .od-tooltip-placement-rightTop,\n .od-tooltip-placement-rightBottom {\n padding-left: ${() => getPaddingDistance()};\n }\n\n .od-tooltip-placement-bottom,\n .od-tooltip-placement-bottomLeft,\n .od-tooltip-placement-bottomRight {\n padding-top: ${() => getPaddingDistance()};\n }\n\n .od-tooltip-placement-left,\n .od-tooltip-placement-leftTop,\n .od-tooltip-placement-leftBottom {\n padding-right: ${() => getPaddingDistance()};\n }\n\n /* Placement specific adjustments - position arrows to overlap with content edge */\n .od-tooltip-placement-top .od-tooltip-arrow,\n .od-tooltip-placement-topLeft .od-tooltip-arrow,\n .od-tooltip-placement-topRight .od-tooltip-arrow {\n bottom: ${() => getArrowOverlap()};\n margin-left: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `0 0 ${getArrowRadius()} 0`};\n }\n\n .od-tooltip-placement-right .od-tooltip-arrow,\n .od-tooltip-placement-rightTop .od-tooltip-arrow,\n .od-tooltip-placement-rightBottom .od-tooltip-arrow {\n left: ${() => getArrowOverlap()};\n margin-top: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `0 0 0 ${getArrowRadius()}`};\n }\n\n .od-tooltip-placement-left .od-tooltip-arrow,\n .od-tooltip-placement-leftTop .od-tooltip-arrow,\n .od-tooltip-placement-leftBottom .od-tooltip-arrow {\n right: ${() => getArrowOverlap()};\n margin-top: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `0 ${getArrowRadius()} 0 0`};\n }\n\n .od-tooltip-placement-bottom .od-tooltip-arrow,\n .od-tooltip-placement-bottomLeft .od-tooltip-arrow,\n .od-tooltip-placement-bottomRight .od-tooltip-arrow {\n top: ${() => getArrowOverlap()};\n margin-left: ${() => `-${getArrowSize() / 2}px`};\n border-radius: ${() => `${getArrowRadius()} 0 0 0`};\n }\n\n /* Alignment adjustments */\n .od-tooltip-placement-topLeft .od-tooltip-arrow,\n .od-tooltip-placement-bottomLeft .od-tooltip-arrow {\n left: 15%;\n }\n\n .od-tooltip-placement-topRight .od-tooltip-arrow,\n .od-tooltip-placement-bottomRight .od-tooltip-arrow {\n right: 15%;\n }\n\n .od-tooltip-placement-rightTop .od-tooltip-arrow,\n .od-tooltip-placement-leftTop .od-tooltip-arrow {\n top: 15%;\n }\n\n .od-tooltip-placement-rightBottom .od-tooltip-arrow,\n .od-tooltip-placement-leftBottom .od-tooltip-arrow {\n bottom: 15%;\n }\n\n .od-tooltip.od-tooltip-zoom-enter,\n .od-tooltip.od-tooltip-zoom-leave {\n display: block;\n }\n\n .od-tooltip-zoom-enter,\n .od-tooltip-zoom-appear {\n opacity: 0;\n animation-duration: 0.3s;\n animation-fill-mode: both;\n animation-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1.28);\n animation-play-state: paused;\n }\n\n .od-tooltip-zoom-leave {\n animation-duration: 0.3s;\n animation-fill-mode: both;\n animation-timing-function: cubic-bezier(0.6, -0.3, 0.74, 0.05);\n animation-play-state: paused;\n }\n\n .od-tooltip-zoom-enter.od-tooltip-zoom-enter-active,\n .od-tooltip-zoom-appear.od-tooltip-zoom-appear-active {\n animation-name: rcToolTipZoomIn;\n animation-play-state: running;\n }\n\n .od-tooltip-zoom-leave.od-tooltip-zoom-leave-active {\n animation-name: rcToolTipZoomOut;\n animation-play-state: running;\n }\n\n @keyframes rcToolTipZoomIn {\n 0% {\n opacity: 0;\n transform-origin: 50% 50%;\n transform: scale(0, 0);\n }\n 100% {\n opacity: 1;\n transform-origin: 50% 50%;\n transform: scale(1, 1);\n }\n }\n\n @keyframes rcToolTipZoomOut {\n 0% {\n opacity: 1;\n transform-origin: 50% 50%;\n transform: scale(1, 1);\n }\n 100% {\n opacity: 0;\n transform-origin: 50% 50%;\n transform: scale(0, 0);\n }\n }\n\n /* Black variant */\n .tooltip-variant-black .od-tooltip-inner {\n background: ${() => getGlobalTheme().components.tooltip.black.background};\n border: 1px solid ${() => getGlobalTheme().components.tooltip.black.borderColor};\n color: ${() => getGlobalTheme().components.tooltip.black.color};\n border-radius: ${() => getGlobalTheme().components.tooltip.black.borderRadius};\n padding: ${() => getGlobalTheme().components.tooltip.black.padding};\n box-shadow: ${() => getGlobalTheme().components.tooltip.black.boxShadow};\n font-size: ${() => getGlobalTheme().components.tooltip.black.fontSize};\n line-height: ${() => getGlobalTheme().components.tooltip.black.lineHeight};\n font-weight: ${() => getGlobalTheme().components.tooltip.black.fontWeight};\n max-width: ${() => getGlobalTheme().components.tooltip.black.maxWidth};\n white-space: normal;\n word-wrap: break-word;\n text-align: left;\n text-decoration: none;\n }\n\n .tooltip-variant-black .od-tooltip-arrow {\n background: ${() => getGlobalTheme().components.tooltip.black.background};\n }\n\n /* White variant - small size */\n .tooltip-variant-white.tooltip-size-small .od-tooltip-inner {\n background: ${() => getGlobalTheme().components.tooltip.white.small.background};\n border: 1px solid ${() => getGlobalTheme().components.tooltip.white.small.borderColor};\n color: ${() => getGlobalTheme().components.tooltip.white.small.color};\n border-radius: ${() => getGlobalTheme().components.tooltip.white.small.borderRadius};\n padding: ${() => getGlobalTheme().components.tooltip.white.small.padding};\n box-shadow: ${() => getGlobalTheme().components.tooltip.white.small.boxShadow};\n font-size: ${() => getGlobalTheme().components.tooltip.white.small.fontSize};\n line-height: ${() => getGlobalTheme().components.tooltip.white.small.lineHeight};\n font-weight: ${() => getGlobalTheme().components.tooltip.white.small.fontWeight};\n max-width: ${() => getGlobalTheme().components.tooltip.white.small.maxWidth};\n white-space: normal;\n word-wrap: break-word;\n text-align: left;\n text-decoration: none;\n }\n\n .tooltip-variant-white.tooltip-size-small .od-tooltip-arrow {\n background: ${() => getGlobalTheme().components.tooltip.white.small.background};\n }\n\n /* White variant - large size */\n .tooltip-variant-white.tooltip-size-large .od-tooltip-inner {\n background: ${() => getGlobalTheme().components.tooltip.white.large.background};\n border: 1px solid ${() => getGlobalTheme().components.tooltip.white.large.borderColor};\n color: ${() => getGlobalTheme().components.tooltip.white.large.color};\n border-radius: ${() => getGlobalTheme().components.tooltip.white.large.borderRadius};\n padding: ${() => getGlobalTheme().components.tooltip.white.large.padding};\n box-shadow: ${() => getGlobalTheme().components.tooltip.white.large.boxShadow};\n font-size: ${() => getGlobalTheme().components.tooltip.white.large.fontSize};\n line-height: ${() => getGlobalTheme().components.tooltip.white.large.lineHeight};\n font-weight: ${() => getGlobalTheme().components.tooltip.white.large.fontWeight};\n max-width: ${() => getGlobalTheme().components.tooltip.white.large.maxWidth};\n white-space: normal;\n word-wrap: break-word;\n text-align: left;\n text-decoration: none;\n }\n\n .tooltip-variant-white.tooltip-size-large .od-tooltip-arrow {\n background: ${() => getGlobalTheme().components.tooltip.white.large.background};\n }\n`;\n","import React from 'react';\nimport type { ReactElement } from 'react';\nimport type { GlobalStyleComponent } from 'styled-components';\nimport { getGlobalRenderFunction } from './context';\n\nconst injectedStyles = new Set<string>();\n\n/**\n * Style Manager\n *\n * Manages global style injection on demand.\n * Styles are injected only once when first component is used.\n */\nexport const styleManager = {\n /**\n * Inject global styles on demand\n * @param id Unique identifier for the style (e.g., 'od-tooltip-styles')\n * @param StyleComponent The styled component to inject\n */\n inject: (id: string, StyleComponent: React.ComponentType<any> | GlobalStyleComponent<any, any>) => {\n if (injectedStyles.has(id) || typeof document === 'undefined') {\n return;\n }\n\n // Check if already in DOM\n if (document.getElementById(id)) {\n injectedStyles.add(id);\n return;\n }\n\n // Get render function from global context\n const renderFunction = getGlobalRenderFunction();\n if (!renderFunction) {\n console.warn(\n `Style injection failed for \"${id}\": render function not available. ` +\n `Please call initUIConfig() or use UIConfigProvider first.`\n );\n return;\n }\n\n // Create container and inject styles\n const container = document.createElement('div');\n container.id = id;\n document.head.appendChild(container);\n\n // Use global render function for consistency\n // Cast StyleComponent to any to avoid type issues with GlobalStyleComponent\n renderFunction(\n React.createElement(StyleComponent as React.ComponentType<any>) as ReactElement,\n container\n );\n\n injectedStyles.add(id);\n },\n\n /**\n * Check if styles have been injected\n */\n isInjected: (id: string): boolean => {\n return (\n injectedStyles.has(id) ||\n (typeof document !== 'undefined' && !!document.getElementById(id))\n );\n },\n\n /**\n * Reset injected styles (mainly for testing)\n */\n reset: () => {\n injectedStyles.clear();\n },\n};\n","import React, { useEffect } from 'react';\nimport RcTooltip from 'rc-tooltip';\nimport type { TooltipProps as RcTooltipProps } from 'rc-tooltip/lib/Tooltip';\nimport 'rc-tooltip/assets/bootstrap.css';\nimport { TooltipGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\n\nexport interface TooltipProps extends Omit<Partial<RcTooltipProps>, 'prefixCls'> {\n /**\n * Tooltip content\n */\n content?: React.ReactNode;\n /**\n * Tooltip variant\n */\n variant?: 'black' | 'white';\n /**\n * Tooltip size (only for white variant)\n */\n size?: 'small' | 'large';\n /**\n * Children element that triggers the tooltip\n */\n children: React.ReactElement;\n /**\n * Function to get the container element for the tooltip\n */\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n}\n/**\n * Tooltip Component\n *\n * Note: Coverage for this component may appear lower than expected due to\n * styled-components CSS-in-JS template literals (lines 68-200+) which are\n * not properly tracked by V8 coverage. The actual component logic is fully tested.\n *\n * @example\n * // Basic black tooltip\n * <Tooltip content=\"Tooltip text\">\n * <button>Hover me</button>\n * </Tooltip>\n *\n * @example\n * // White tooltip with small size\n * <Tooltip content=\"Tooltip text\" variant=\"white\" size=\"small\">\n * <button>Hover me</button>\n * </Tooltip>\n *\n * @example\n * // White tooltip with large size\n * <Tooltip content=\"Complex content\" variant=\"white\" size=\"large\">\n * <button>Hover me</button>\n * </Tooltip>\n */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n variant = 'black',\n size = 'small',\n children,\n placement = 'top',\n trigger = ['hover'],\n overlay,\n overlayClassName,\n getPopupContainer,\n ...rest\n}) => {\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('od-tooltip-styles', TooltipGlobalStyles);\n }, []);\n\n const overlayContent = React.useMemo(() => <div>{content}</div>, [content]);\n\n // Generate className for variant/size combination\n const variantClass = `tooltip-variant-${variant}`;\n const sizeClass = variant === 'white' ? `tooltip-size-${size}` : '';\n const combinedClassName = [variantClass, sizeClass, overlayClassName].filter(Boolean).join(' ');\n\n const tooltipProps = {\n overlay: overlay ?? overlayContent,\n placement,\n trigger,\n destroyTooltipOnHide: false,\n overlayClassName: combinedClassName,\n ...(getPopupContainer && { getPopupContainer }),\n ...rest,\n };\n\n return (\n <RcTooltip {...tooltipProps} prefixCls=\"od-tooltip\">\n {children}\n </RcTooltip>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n","import React from 'react';\nimport { styled } from '../utils/styled';\n\nconst ArrowDownIcon = () => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.1858 9.79353C8.08649 9.90387 7.91346 9.90387 7.81415 9.79353L4.77549 6.41724C4.6307 6.25636 4.74487 6 4.96132 6L11.0386 6C11.2551 6 11.3693 6.25636 11.2245 6.41724L8.1858 9.79353Z\" fill=\"#41464B\" fillOpacity=\"0.6\"/>\n </svg>\n );\n};\n\nexport interface ToolbarButtonProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick' | 'onDoubleClick'> {\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n /**\n * Whether the button is in active state\n */\n isActive?: boolean;\n /**\n * Icon to display\n * - If string: image URL\n * - If ReactNode: custom icon component\n */\n icon?: string | React.ReactNode;\n /**\n * Label text or custom node\n */\n label?: string | React.ReactNode;\n /**\n * Whether to show dropdown arrow\n */\n hasDropdown?: boolean;\n /**\n * Whether the dropdown section is clickable separately\n */\n splitDropdown?: boolean;\n /**\n * Click handler for main button\n */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Double click handler for main button\n */\n onDoubleClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler for dropdown section\n */\n onDropdownClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst ToolbarButtonContainer = styled.div<{\n $disabled: boolean;\n $isActive: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n border: 1px solid;\n border-radius: 2px;\n transition: border-color 0.15s ease;\n box-sizing: border-box;\n overflow: hidden;\n\n ${({ $disabled, $isActive, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n border-color: ${config.border.borderColorDisabled};\n `;\n }\n if ($isActive) {\n return `\n border-color: ${config.border.borderColorActive};\n\n ${Divider} {\n background-color: ${config.border.borderColorActive};\n }\n `;\n }\n return `\n border-color: ${config.border.borderColor};\n\n &:hover {\n border-color: ${config.border.borderColorHover};\n box-shadow: ${config.boxShadow.boxShadowHover};\n ${Divider} {\n background-color: ${config.border.borderColorHover};\n }\n }\n\n button:active {\n box-shadow: ${config.boxShadow.boxShadowClick};\n ${Divider} {\n background-color: ${config.border.borderColorClick};\n }\n }\n `;\n }}\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n height: ${config.layout.height};\n padding: ${config.layout.padding};\n border-radius: ${config.layout.borderRadius};\n `;\n }}\n`;\n\nconst MainButton = styled.button<{\n $disabled: boolean;\n $isActive: boolean;\n $hasLabel: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n cursor: pointer;\n outline: none;\n height: 100%;\n transition: background-color 0.15s ease;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n padding: ${config.layout.content.padding};\n `;\n }}\n\n ${({ $disabled, $isActive, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n cursor: not-allowed;\n background: ${config.background.backgroundDisabled};\n `;\n }\n if ($isActive) {\n return `\n background: ${config.background.backgroundActive};\n `;\n }\n return `\n background: ${config.background.background};\n\n &:hover {\n background: ${config.background.backgroundHover};\n }\n\n &:active {\n background: ${config.background.backgroundClick};\n }\n `;\n }}\n`;\n\nconst IconWrapper = styled.span<{ $disabled: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n width: ${config.layout.content.iconSize.width};\n height: ${config.layout.content.iconSize.height};\n `;\n }}\n\n ${({ $disabled }) => {\n return $disabled ? `opacity: 0.3;` : ``;\n }}\n\n svg, img {\n width: 100%;\n height: 100%;\n display: block;\n }\n`;\n\nconst LabelText = styled.span<{ $disabled: boolean }>`\n font-family: 'PingFang SC', sans-serif;\n white-space: nowrap;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n font-size: ${config.typography.fontSize};\n font-weight: ${config.typography.fontWeight};\n line-height: 20px;\n padding: ${config.layout.content.padding};\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components.toolbarButton;\n return $disabled\n ? `\n color: ${config.color.colorDisabled};\n `\n : `\n color: ${config.color.color};\n `;\n }}\n`;\n\nconst DropdownButton = styled.button<{\n $disabled: boolean;\n $isActive: boolean;\n $split: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none;\n border: none;\n transition: background-color 0.15s ease;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n height: ${config.layout.height};\n padding: 5px 0;\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n cursor: not-allowed;\n background: ${config.background.backgroundDisabled};\n `;\n }\n return `\n background: ${config.background.background};\n\n &:hover {\n background: ${config.background.backgroundHover};\n }\n\n &:active {\n background: ${config.background.backgroundClick};\n }\n `;\n }}\n`;\n\nconst DropdownArrow = styled.span<{ $disabled: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n width: ${config.layout.dropdown.iconSize.width};\n height: ${config.layout.dropdown.iconSize.height};\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components.toolbarButton;\n return $disabled\n ? `\n color: ${config.color.colorDisabled};\n `\n : `\n color: ${config.color.color};\n `;\n }}\n\n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n`;\n\nconst Divider = styled.div<{\n $disabled: boolean;\n $isActive: boolean;\n}>`\n width: 1px;\n transition: background-color 0.15s ease;\n\n ${({ theme }) => {\n const config = theme.components.toolbarButton;\n return `\n height: ${config.layout.height};\n `;\n }}\n\n ${({ $disabled, $isActive, theme }) => {\n const config = theme.components.toolbarButton;\n\n if ($disabled) {\n return `\n background-color: ${config.border.borderColorDisabled};\n `;\n }\n if ($isActive) {\n return `\n background-color: ${config.border.borderColorActive};\n `;\n }\n return `\n background-color: ${config.border.borderColor};\n `;\n }}\n`;\n\n/**\n * ToolbarButton Component\n *\n * A toolbar button with optional icon, label, and dropdown functionality\n *\n * @example\n * // Icon component\n * <ToolbarButton icon={<Icon />} />\n *\n * @example\n * // Icon from URL\n * <ToolbarButton icon=\"https://example.com/icon.png\" />\n *\n * @example\n * // Button with label and dropdown\n * <ToolbarButton icon={<Icon />} label=\"Format\" hasDropdown />\n *\n * @example\n * // Button with custom label node\n * <ToolbarButton icon={<Icon />} label={<CustomLabel />} />\n *\n * @example\n * // Button with split dropdown\n * <ToolbarButton\n * icon={<Icon />}\n * label=\"Format\"\n * hasDropdown\n * splitDropdown\n * onClick={handleClick}\n * onDropdownClick={handleDropdownClick}\n * />\n */\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n disabled = false,\n isActive = false,\n icon,\n label,\n hasDropdown = false,\n splitDropdown = false,\n onClick,\n onDoubleClick,\n onDropdownClick,\n className,\n style,\n}) => {\n const handleMainClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onClick?.(e);\n };\n\n const handleMainDoubleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onDoubleClick?.(e);\n };\n\n const handleDropdownClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onDropdownClick?.(e);\n };\n\n // Render icon based on type\n const renderIcon = () => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n return (\n <IconWrapper $disabled={disabled}>\n <img src={icon} alt=\"icon\" />\n </IconWrapper>\n );\n }\n\n return <IconWrapper $disabled={disabled}>{icon}</IconWrapper>;\n };\n\n // Render label based on type\n const renderLabel = () => {\n if (!label) return null;\n\n if (typeof label === 'string') {\n return <LabelText $disabled={disabled}>{label}</LabelText>;\n }\n\n return label;\n };\n\n // Single click area (no split dropdown)\n if (!splitDropdown && hasDropdown) {\n return (\n <ToolbarButtonContainer\n className={className}\n style={style}\n $disabled={disabled}\n $isActive={isActive}\n >\n <MainButton\n $disabled={disabled}\n $isActive={isActive}\n $hasLabel={!!label}\n onClick={handleMainClick}\n onDoubleClick={handleMainDoubleClick}\n disabled={disabled}\n >\n {renderIcon()}\n {renderLabel()}\n <DropdownArrow $disabled={disabled}>\n <ArrowDownIcon />\n </DropdownArrow>\n </MainButton>\n </ToolbarButtonContainer>\n );\n }\n\n // Split dropdown (two click areas)\n if (splitDropdown && hasDropdown) {\n return (\n <ToolbarButtonContainer\n className={className}\n style={style}\n $disabled={disabled}\n $isActive={isActive}\n >\n <MainButton\n $disabled={disabled}\n $isActive={isActive}\n $hasLabel={!!label}\n onClick={handleMainClick}\n onDoubleClick={handleMainDoubleClick}\n disabled={disabled}\n >\n {renderIcon()}\n {renderLabel()}\n </MainButton>\n\n <Divider $disabled={disabled} $isActive={isActive} />\n\n <DropdownButton\n $disabled={disabled}\n $isActive={isActive}\n $split={true}\n onClick={handleDropdownClick}\n disabled={disabled}\n >\n <DropdownArrow $disabled={disabled}>\n <ArrowDownIcon />\n </DropdownArrow>\n </DropdownButton>\n </ToolbarButtonContainer>\n );\n }\n\n // Simple button (no dropdown)\n return (\n <ToolbarButtonContainer\n className={className}\n style={style}\n $disabled={disabled}\n $isActive={isActive}\n >\n <MainButton\n $disabled={disabled}\n $isActive={isActive}\n $hasLabel={!!label}\n onClick={handleMainClick}\n onDoubleClick={handleMainDoubleClick}\n disabled={disabled}\n >\n {renderIcon()}\n {renderLabel()}\n </MainButton>\n </ToolbarButtonContainer>\n );\n};\n\nToolbarButton.displayName = 'ToolbarButton';\n","import React, { forwardRef } from 'react';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { ArrowRightIcon } from '@officesdk/design/icons';\n\ntype DropdownButtonSize = 'large' | 'medium' | 'small';\ntype DropdownButtonVariant = 'framed' | 'frameless';\n\nexport interface DropdownButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n /**\n * Button variant\n * - framed: with border (40px large)\n * - frameless: without border (28px medium)\n */\n variant?: DropdownButtonVariant;\n /**\n * Button size\n */\n size?: DropdownButtonSize;\n /**\n * Display value/label\n */\n value?: string;\n /**\n * Placeholder when no value\n */\n placeholder?: string;\n /**\n * Optional icon (URL string or ReactNode)\n */\n icon?: string | React.ReactNode;\n /**\n * Custom indicator/arrow icon\n */\n indicatorIcon?: React.ReactNode;\n /**\n * Whether the dropdown is open (controls arrow rotation)\n */\n open?: boolean;\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n /**\n * Error state\n */\n error?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n\n /**\n * Custom text style\n */\n textStyle?: React.CSSProperties;\n\n /**\n * Custom content to render instead of value/placeholder\n * When provided, value and placeholder are ignored\n */\n children?: React.ReactNode;\n}\n\nconst DropdownButtonContainer = styled.button<{\n $variant: DropdownButtonVariant;\n $size: DropdownButtonSize;\n $disabled: boolean;\n $open: boolean;\n $error: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n border: none;\n outline: none;\n box-sizing: border-box;\n transition: all 0.2s ease;\n font-family: 'PingFang SC', sans-serif;\n width: 100%;\n\n ${({ $size, theme }) => {\n const config = theme.components?.dropdownButton;\n const sizeConfig = config?.size?.[$size];\n if (!sizeConfig) return '';\n\n return `\n height: ${sizeConfig.height};\n padding: ${sizeConfig.padding};\n gap: ${sizeConfig.gap};\n font-size: ${sizeConfig.fontSize};\n border-radius: ${sizeConfig.borderRadius};\n `;\n }}\n\n ${({ $variant, $disabled, $error, theme }) => {\n const config = theme.components?.dropdownButton;\n if (!config) return '';\n\n // Background\n let background = config.background.normal;\n if ($disabled) {\n background =\n $variant === 'frameless' ? config.frameLessBackground.disabled : config.background.disabled;\n } else if ($variant === 'frameless') {\n background = config.frameLessBackground.normal;\n }\n\n // Border for framed variant\n let border = 'none';\n\n if ($variant === 'framed') {\n const borderColor = $disabled\n ? config.borderColor.disabled\n : $error\n ? config.borderColor.error\n : config.borderColor.normal;\n border = `1px solid ${borderColor}`;\n }\n\n // Text color\n const color = $disabled ? config.color.disabled : config.color.normal;\n\n return `\n background: ${background};\n border: ${border};\n color: ${color};\n\n &:hover:not(:disabled) {\n background: ${\n $variant === 'frameless' ? config.frameLessBackground.hover : config.background.hover\n };\n color: ${config.color.hover};\n ${\n $variant === 'framed'\n ? `\n border-color: ${$error ? config.borderColor.error : config.borderColor.hover};\n `\n : ''\n }\n }\n\n &:active:not(:disabled) {\n background: ${\n $variant === 'frameless' ? config.frameLessBackground.active : config.background.active\n };\n color: ${config.color.active};\n ${\n $variant === 'framed'\n ? `\n border-color: ${$error ? config.borderColor.error : config.borderColor.active};\n `\n : ''\n }\n }\n `;\n }}\n\n ${({ $disabled }) =>\n $disabled &&\n `\n cursor: not-allowed;\n `}\n`;\n\nconst IconWrapper = styled.div<{ $size: DropdownButtonSize }>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const config = theme.components?.dropdownButton;\n const sizeConfig = config?.size?.[$size];\n if (!sizeConfig) return '';\n\n return `\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n\n svg, img {\n width: ${sizeConfig.iconSize.width};\n height: ${sizeConfig.iconSize.height};\n }\n `;\n }}\n\n ${({ theme }) => {\n const config = theme.components?.dropdownButton;\n return `\n color: ${config?.color?.normal || '#41464b'};\n `;\n }}\n`;\n\nconst TextContent = styled.div<{ $disabled: boolean; $hasValue: boolean }>`\n flex: 1;\n min-width: 0; /* Important: allows flex item to shrink below content size */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n line-height: 20px;\n\n ${({ $hasValue, $disabled, theme }) => {\n const config = theme.components?.dropdownButton;\n const color = $disabled ? config?.color?.disabled : config?.color?.normal;\n\n return `\n color: ${color};\n ${!$hasValue ? `opacity: 0.3;` : ''}\n `;\n }}\n`;\n\nconst IndicatorWrapper = styled.div<{\n $size: DropdownButtonSize;\n $open: boolean;\n $disabled: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n\n ${({ $size, theme }) => {\n const config = theme.components?.dropdownButton;\n const sizeConfig = config?.size?.[$size];\n if (!sizeConfig) return '';\n\n return `\n width: ${sizeConfig.indicatorSize.width};\n height: ${sizeConfig.indicatorSize.height};\n `;\n }}\n\n ${({ $open, theme }) => {\n const config = theme.components?.dropdownButton?.indicator;\n const rotate = config?.rotate || '90deg';\n\n return `\n transform: rotate(${$open ? rotate : 0});\n `;\n }}\n\n ${({ $disabled, theme }) => {\n const config = theme.components?.dropdownButton?.indicator?.opacity;\n const opacity = $disabled ? config?.disabled || '0.3' : config?.normal || '1';\n\n return `\n opacity: ${opacity};\n color: ${theme.components?.dropdownButton?.color?.normal || '#41464b'};\n `;\n }}\n`;\n\n/**\n * DropdownButton Component\n *\n * A button component for triggering dropdown menus\n *\n * @example\n * // Framed dropdown button (with border, 40px)\n * <DropdownButton variant=\"framed\" value=\"Option 1\" />\n *\n * @example\n * // Frameless dropdown button (no border, 28px)\n * <DropdownButton variant=\"frameless\" value=\"Option 1\" />\n *\n * @example\n * // With icon\n * <DropdownButton icon={<CustomIcon />} value=\"Option 1\" />\n *\n * @example\n * // Open state (arrow rotated)\n * <DropdownButton open value=\"Option 1\" />\n */\nexport const DropdownButton = forwardRef<HTMLButtonElement, DropdownButtonProps>(\n (\n {\n variant = 'framed',\n size,\n value,\n placeholder = 'Select...',\n icon,\n indicatorIcon,\n open = false,\n disabled = false,\n error = false,\n className,\n style,\n textStyle,\n onClick,\n children,\n ...rest\n },\n ref\n ) => {\n // Auto-determine size based on variant if not specified\n const effectiveSize = size || (variant === 'framed' ? 'large' : 'medium');\n const hasValue = !!value;\n\n // Render icon with priority: props.icon (string or ReactNode)\n const getIconElement = () => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n return <Icon src={icon} />;\n }\n return icon;\n };\n\n const iconElement = getIconElement();\n\n return (\n <DropdownButtonContainer\n ref={ref}\n type=\"button\"\n $variant={variant}\n $size={effectiveSize}\n $disabled={disabled}\n $open={open}\n $error={error}\n disabled={disabled}\n onClick={onClick}\n className={className}\n style={style}\n {...rest}\n >\n {iconElement && <IconWrapper $size={effectiveSize}>{iconElement}</IconWrapper>}\n\n {children ? (\n children\n ) : (\n <TextContent $disabled={disabled} $hasValue={hasValue} style={textStyle}>\n {value || placeholder}\n </TextContent>\n )}\n\n <IndicatorWrapper $size={effectiveSize} $open={open} $disabled={disabled}>\n {indicatorIcon || <ArrowRightIcon />}\n </IndicatorWrapper>\n </DropdownButtonContainer>\n );\n }\n);\n\nDropdownButton.displayName = 'DropdownButton';\n","import React, { useState, useMemo, useEffect } from 'react';\nimport RcMenu, { MenuItem as RcMenuItem, SubMenu as RcSubMenu, Divider as RcDivider, ItemGroup as RcItemGroup } from 'rc-menu';\nimport VirtualList from 'rc-virtual-list';\nimport { styled } from '../utils/styled';\nimport { Icon } from '../Icon';\nimport { Input } from '../Input';\nimport 'rc-menu/assets/index.css';\nimport { MenuGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\nimport { getGlobalTheme } from '../utils/context';\nimport { ArrowRightIcon, CheckIcon, SearchIcon as SearchIconComponent } from '@officesdk/design/icons';\n\nexport interface MenuItem {\n type?: 'item';\n key: string;\n label: string;\n description?: string; // Right-aligned text (shortcuts like \"Cmd+Ctrl+C\")\n icon?: string | React.ReactNode;\n disabled?: boolean;\n selected?: boolean;\n selectable?: boolean; // Whether this item can be selected (shows checkmark)\n children?: MenuItem[]; // SubMenu items\n onClick?: (key: string) => void;\n}\n\nexport interface MenuGroup {\n type: 'group';\n key: string;\n label: string;\n children: MenuItem[];\n}\n\nexport interface MenuDivider {\n type: 'divider';\n key: string;\n}\n\nexport type MenuItemType = MenuItem | MenuGroup | MenuDivider;\n\nexport interface MenuProps {\n /**\n * Menu items\n */\n items: MenuItemType[];\n /**\n * Currently selected key(s)\n */\n selectedKeys?: string[];\n /**\n * Open submenu keys (controlled)\n */\n openKeys?: string[];\n /**\n * Menu size\n */\n size?: 'medium' | 'large';\n /**\n * Whether to show search box\n */\n searchable?: boolean;\n /**\n * Search placeholder\n */\n searchPlaceholder?: string;\n /**\n * Max height for scrolling\n */\n maxHeight?: number;\n /**\n * Enable virtual scrolling\n */\n virtual?: boolean;\n /**\n * Whether to always reserve space for active icon (for description alignment)\n */\n reserveActiveIconSpace?: boolean;\n /**\n * Select handler\n */\n onSelect?: (key: string) => void;\n /**\n * Search handler\n */\n onSearch?: (value: string) => void;\n /**\n * Open keys change handler\n */\n onOpenChange?: (keys: string[]) => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\nconst MenuContainer = styled.div`\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 220px;\n\n ${({ theme }) => {\n const dropdownConfig = theme.components?.dropdown;\n const menuConfig = theme.components?.menu;\n\n return `\n padding: ${dropdownConfig?.padding || '4px 0'};\n background: ${dropdownConfig?.background || '#fff'};\n border: ${menuConfig?.border?.width || '1px'} solid ${menuConfig?.border?.color || 'rgba(65, 70, 75, 0.1)'};\n border-radius: ${menuConfig?.border?.radius || '4px'};\n box-shadow: ${dropdownConfig?.boxShadow || '0 2px 8px rgba(0, 0, 0, 0.15)'};\n `;\n }}\n\n /* Ensure virtual list container has proper width */\n .rc-virtual-list {\n width: 100%;\n }\n\n .rc-virtual-list-holder {\n width: 100%;\n }\n\n .rc-virtual-list-holder-inner {\n width: 100%;\n }\n`;\n\nconst SearchBoxContainer = styled.div`\n padding: 8px 12px;\n border-bottom: 1px solid ${({ theme }) => theme.colors?.palettes?.transparency?.['10']};\n`;\n\n// MenuItem content wrapper\nconst MenuItemContent = styled.div<{ $size: 'medium' | 'large' }>`\n display: flex;\n align-items: center;\n width: 100%;\n\n ${({ theme }) => {\n const config = theme.components?.menu?.menuItem;\n return `\n gap: ${config?.layout?.gap || '8px'};\n `;\n }}\n`;\n\n// Icon container\nconst IconContainer = styled.div<{ $size: 'medium' | 'large' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ theme }) => {\n const iconSize = theme.components?.menu?.menuItem?.icon?.size;\n return `\n width: ${iconSize?.width || '18px'};\n height: ${iconSize?.height || '18px'};\n\n svg, img {\n width: 100%;\n height: 100%;\n }\n `;\n }}\n`;\n\n// Content block (label + description, two-end alignment)\nconst ContentBlock = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n min-width: 0;\n`;\n\n// Label text\nconst LabelText = styled.div<{ $size: 'medium' | 'large'; $disabled: boolean }>`\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: 20px;\n\n ${({ $size, theme }) => {\n const config = theme.components?.menu?.menuItem;\n const sizeConfig = config?.size?.[$size];\n const colorConfig = config?.label?.color;\n\n const fontSize = sizeConfig?.label?.fontSize || '13px';\n const color = colorConfig?.normal || '#41464b'\n\n return `\n font-size: ${fontSize};\n color: ${color};\n `;\n }}\n`;\n\n// Description text (shortcuts, right-aligned)\nconst DescriptionText = styled.div<{ $size: 'medium' | 'large'; $disabled: boolean }>`\n flex: 0 0 auto;\n white-space: nowrap;\n line-height: 20px;\n text-align: right;\n\n ${({ $size, $disabled, theme }) => {\n const config = theme.components?.menu?.menuItem;\n const sizeConfig = config?.size?.[$size];\n const colorConfig = config?.description?.color;\n\n const fontSize = sizeConfig?.description?.fontSize || '10px';\n const color = $disabled\n ? (colorConfig?.disabled || 'rgba(65, 70, 75, 0.3)')\n : (colorConfig?.normal || 'rgba(65, 70, 75, 0.6)');\n\n return `\n font-size: ${fontSize};\n color: ${color};\n `;\n }}\n`;\n\n// Selected checkmark icon (with placeholder support)\nconst ActiveIconContainer = styled.div<{\n $size: 'medium' | 'large';\n $visible: boolean;\n $placeholder: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components?.menu?.menuItem?.size?.[$size];\n const iconSize = sizeConfig?.activeIcon?.size;\n\n return `\n width: ${iconSize?.width || '18px'};\n height: ${iconSize?.height || '18px'};\n `;\n }}\n\n ${({ $visible, $placeholder }) => {\n if (!$visible && !$placeholder) {\n return 'display: none;';\n }\n if ($placeholder && !$visible) {\n return 'visibility: hidden;'; // Reserve space but invisible\n }\n return '';\n }}\n`;\n\n// Next level arrow icon\nconst NextLevelIconContainer = styled.div<{ $size: 'medium' | 'large' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n ${({ $size, theme }) => {\n const sizeConfig = theme.components?.menu?.menuItem?.size?.[$size];\n const iconSize = sizeConfig?.nextLevelIcon?.size;\n\n return `\n width: ${iconSize?.width || '18px'};\n height: ${iconSize?.height || '18px'};\n `;\n }}\n`;\n\n/**\n * Menu Component\n *\n * A menu component based on rc-menu with virtual scrolling support\n *\n * @example\n * // Basic menu\n * <Menu\n * items={[\n * { key: '1', label: 'Option 1' },\n * { key: '2', label: 'Option 2' },\n * ]}\n * onSelect={(key) => console.log(key)}\n * />\n *\n * @example\n * // Menu with groups and dividers\n * <Menu\n * items={[\n * { type: 'group', key: 'g1', label: 'Group A', children: [...] },\n * { type: 'divider', key: 'd1' },\n * { key: '1', label: 'Option 1' },\n * ]}\n * />\n *\n * @example\n * // Menu with search\n * <Menu\n * searchable\n * items={items}\n * onSearch={(value) => console.log(value)}\n * />\n */\nexport const Menu: React.FC<MenuProps> = ({\n items,\n selectedKeys = [],\n openKeys,\n size = 'large',\n searchable = false,\n searchPlaceholder = 'Enter search content',\n maxHeight = 300,\n virtual = false,\n reserveActiveIconSpace = true,\n onSelect,\n onSearch,\n onOpenChange,\n className,\n style,\n}) => {\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('od-menu-styles', MenuGlobalStyles);\n }, []);\n\n const [searchValue, setSearchValue] = useState('');\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n onSearch?.(value);\n };\n\n // Filter items based on search (supports recursive submenu search)\n const filteredItems = useMemo(() => {\n if (!searchValue) return items;\n\n const searchLower = searchValue.toLowerCase();\n\n const filterMenuItem = (item: MenuItem): MenuItem | null => {\n // If item itself matches, return it with all children\n if (item.label.toLowerCase().includes(searchLower) ||\n item.description?.toLowerCase().includes(searchLower)) {\n return item;\n }\n\n // If item has children, check if any child matches\n if (item.children && item.children.length > 0) {\n const filteredChildren = item.children\n .map(child => filterMenuItem(child))\n .filter(Boolean) as MenuItem[];\n\n if (filteredChildren.length > 0) {\n // Parent doesn't match but children do - return with filtered children\n return { ...item, children: filteredChildren };\n }\n }\n\n return null;\n };\n\n const filterItem = (item: MenuItemType): MenuItemType | null => {\n if (item.type === 'divider') return null;\n\n if (item.type === 'group') {\n // Filter group children\n const filteredChildren = item.children\n .map(child => filterMenuItem(child))\n .filter(Boolean) as MenuItem[];\n\n // Only show group if it has matching children\n if (filteredChildren.length > 0) {\n return { ...item, children: filteredChildren };\n }\n return null;\n }\n\n // Regular item with potential submenu\n return filterMenuItem(item);\n };\n\n return items\n .map(item => filterItem(item))\n .filter(Boolean) as MenuItemType[];\n }, [items, searchValue]);\n\n // Render menu item content\n const renderMenuItemContent = (item: MenuItem, reserveSpace: boolean) => {\n const isSelected = item.selected || selectedKeys.includes(item.key);\n const isSelectable = item.selectable !== false; // Default to true\n const shouldShowActiveIcon = isSelectable && isSelected;\n const shouldReserveSpace = reserveSpace || isSelectable;\n\n // Icon element\n const iconElement = item.icon ? (\n <IconContainer $size={size}>\n {typeof item.icon === 'string' ? <Icon src={item.icon} /> : item.icon}\n </IconContainer>\n ) : null;\n\n return (\n <MenuItemContent $size={size}>\n {iconElement}\n\n <ContentBlock>\n <LabelText $size={size} $disabled={!!item.disabled}>\n {item.label}\n </LabelText>\n\n {item.description && (\n <DescriptionText $size={size} $disabled={!!item.disabled}>\n {item.description}\n </DescriptionText>\n )}\n </ContentBlock>\n\n {/* Active icon - always reserve space if needed for alignment */}\n <ActiveIconContainer\n $size={size}\n $visible={shouldShowActiveIcon}\n $placeholder={shouldReserveSpace && !shouldShowActiveIcon}\n >\n {shouldShowActiveIcon && <CheckIcon />}\n </ActiveIconContainer>\n\n {item.children && item.children.length > 0 && (\n <NextLevelIconContainer $size={size}>\n <ArrowRightIcon />\n </NextLevelIconContainer>\n )}\n </MenuItemContent>\n );\n };\n\n // Render item based on type\n const renderItem = (item: MenuItemType): React.ReactNode => {\n // Divider\n if (item.type === 'divider') {\n return <RcDivider key={item.key} />;\n }\n\n // Group\n if (item.type === 'group') {\n return (\n <RcItemGroup key={item.key} title={item.label}>\n {item.children.map(child => renderMenuItem(child))}\n </RcItemGroup>\n );\n }\n\n // Regular item\n return renderMenuItem(item);\n };\n\n // Render menu item (supports submenu)\n const renderMenuItem = (item: MenuItem): React.ReactNode => {\n const theme = getGlobalTheme();\n\n // SubMenu\n if (item.children && item.children.length > 0) {\n return (\n <RcSubMenu\n key={item.key}\n title={renderMenuItemContent(item, reserveActiveIconSpace)}\n disabled={item.disabled}\n popupOffset={theme.components?.menu?.subMenu?.popupOffset || [15, 0]}\n >\n {item.children.map(child => renderMenuItem(child))}\n </RcSubMenu>\n );\n }\n\n // Regular item\n return (\n <RcMenuItem\n key={item.key}\n disabled={item.disabled}\n onClick={() => {\n item.onClick?.(item.key);\n onSelect?.(item.key);\n }}\n >\n {renderMenuItemContent(item, reserveActiveIconSpace)}\n </RcMenuItem>\n );\n };\n\n // Virtual list wrapper\n const itemHeight = size === 'medium' ? 28 : 36;\n\n // Force re-render when openKeys changes to close submenus\n const menuKey = openKeys?.join(',') || 'menu';\n\n return (\n <MenuContainer className={className} style={style}>\n {searchable && (\n <SearchBoxContainer>\n <Input\n lineType=\"underlined\"\n size=\"small\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n clearable\n onClear={() => handleSearch('')}\n prefixNode={<SearchIconComponent />}\n />\n </SearchBoxContainer>\n )}\n\n {virtual && filteredItems.length > 10 ? (\n <VirtualList\n data={filteredItems}\n height={maxHeight}\n itemHeight={itemHeight}\n itemKey=\"key\"\n fullHeight={false}\n style={{ width: '100%' }}\n >\n {(item: MenuItemType) => (\n <RcMenu\n key={menuKey}\n prefixCls=\"od-menu\"\n mode=\"vertical\"\n selectedKeys={selectedKeys}\n openKeys={openKeys}\n onOpenChange={onOpenChange}\n triggerSubMenuAction=\"hover\"\n expandIcon={null}\n style={{\n border: 'none',\n background: 'transparent',\n padding: 0,\n }}\n >\n {renderItem(item)}\n </RcMenu>\n )}\n </VirtualList>\n ) : (\n <RcMenu\n key={menuKey}\n prefixCls=\"od-menu\"\n mode=\"vertical\"\n selectedKeys={selectedKeys}\n openKeys={openKeys}\n onOpenChange={onOpenChange}\n triggerSubMenuAction=\"hover\"\n expandIcon={null}\n style={{\n border: 'none',\n background: 'transparent',\n }}\n >\n {filteredItems.map(renderItem)}\n </RcMenu>\n )}\n </MenuContainer>\n );\n};\n\nMenu.displayName = 'Menu';\n\n","import { createGlobalStyle } from 'styled-components';\nimport { getGlobalTheme } from '../utils/context';\n\nconst theme = getGlobalTheme();\n\nexport const DropdownGlobalStyles = createGlobalStyle`\n /* Dropdown container */\n .od-dropdown {\n position: absolute;\n z-index: 1050;\n }\n\n .od-dropdown-hidden {\n display: none;\n }\n\n /* Dropdown slide animations */\n .od-dropdown-slide-up-enter,\n .od-dropdown-slide-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n }\n\n .od-dropdown-slide-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n }\n\n .od-dropdown-slide-up-enter.od-dropdown-slide-up-enter-active,\n .od-dropdown-slide-up-appear.od-dropdown-slide-up-appear-active {\n animation-name: rcDropdownSlideUpIn;\n animation-play-state: running;\n }\n\n .od-dropdown-slide-up-leave.od-dropdown-slide-up-leave-active {\n animation-name: rcDropdownSlideUpOut;\n animation-play-state: running;\n }\n\n @keyframes rcDropdownSlideUpIn {\n 0% {\n opacity: 0;\n transform: scaleY(0.8);\n }\n 100% {\n opacity: 1;\n transform: scaleY(1);\n }\n }\n\n @keyframes rcDropdownSlideUpOut {\n 0% {\n opacity: 1;\n transform: scaleY(1);\n }\n 100% {\n opacity: 0;\n transform: scaleY(0.8);\n }\n }\n`;\n\nexport const MenuGlobalStyles = createGlobalStyle`\n /* Base menu container */\n .od-menu {\n margin: 0;\n padding: 0;\n list-style: none;\n outline: none;\n box-shadow: none;\n background: transparent;\n border: none;\n }\n\n .od-menu-hidden {\n display: none;\n }\n\n /* Menu item */\n .od-menu-item, .od-menu-submenu-title {\n position: relative;\n display: flex;\n align-items: center;\n margin: 0;\n cursor: pointer;\n transition: background-color 0.15s ease;\n user-select: none;\n list-style: none;\n\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n padding: ${config?.layout?.padding || '6px 12px'};\n background: ${config?.background?.normal || 'transparent'};\n border-radius: ${config?.border?.radius || '0'};\n `;\n }}\n }\n\n .od-menu-item:hover {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.hover || 'rgba(65, 70, 75, 0.05)'};\n `;\n }}\n }\n\n .od-menu-item-active,\n .od-menu-item-selected {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.active || 'rgba(65, 70, 75, 0.1)'};\n `;\n }}\n }\n\n .od-menu-item-disabled {\n cursor: not-allowed;\n opacity: 0.3;\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.disabled || 'transparent'};\n `;\n }}\n }\n\n .od-menu-item-disabled:hover {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.disabled || 'transparent'};\n `;\n }}\n }\n\n /* SubMenu */\n .od-menu-submenu {\n position: relative;\n list-style: none;\n }\n\n .od-menu-submenu-popup {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n\n ${() => {\n const dropdownConfig = theme.components?.dropdown;\n\n return `\n background: ${dropdownConfig?.background || '#fff'};\n border: ${dropdownConfig?.border || 'none'};\n border-radius: ${dropdownConfig?.borderRadius || '4px'};\n padding: ${dropdownConfig?.padding || '4px 0'};\n box-shadow: ${dropdownConfig?.boxShadow || 'none'};\n `;\n }}\n\n\n\n }\n\n .od-menu-submenu-popup.od-menu-submenu .od-menu {\n border: none;\n box-shadow: none;\n background: transparent;\n padding: 0;\n }\n\n .od-menu-submenu-title {\n position: relative;\n display: flex;\n align-items: center;\n margin: 0;\n cursor: pointer;\n transition: background-color 0.15s ease;\n user-select: none;\n\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n padding: ${config?.layout?.padding || '6px 12px'};\n background: ${config?.background?.normal || 'transparent'};\n `;\n }}\n }\n\n .od-menu-submenu-title:hover {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.hover || 'rgba(65, 70, 75, 0.05)'};\n `;\n }}\n }\n\n .od-menu-submenu-open > .od-menu-submenu-title {\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.active || 'rgba(65, 70, 75, 0.1)'};\n `;\n }}\n }\n\n .od-menu-submenu-disabled .od-menu-submenu-title {\n cursor: not-allowed;\n opacity: 0.3;\n ${() => {\n const config = theme.components?.menu?.menuItem;\n return `\n background: ${config?.background?.disabled || 'transparent'};\n `;\n }}\n }\n\n /* Submenu popup */\n .od-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n }\n\n /* Submenu popup positioning - add 5px gap */\n .od-menu-submenu-placement-rightTop,\n .od-menu-submenu-placement-rightBottom {\n /* padding-left: 5px; */\n }\n\n .od-menu-submenu-placement-leftTop,\n .od-menu-submenu-placement-leftBottom {\n /* padding-right: 5px; */\n }\n\n .od-menu-submenu > .od-menu {\n ${() => {\n const dropdownConfig = theme.components?.dropdown;\n const menuConfig = theme.components?.menu;\n\n return `\n background: ${dropdownConfig?.background || '#fff'};\n border: ${menuConfig?.border?.width || '1px'} solid ${menuConfig?.border?.color || 'rgba(65, 70, 75, 0.1)'};\n border-radius: ${menuConfig?.border?.radius || '4px'};\n box-shadow: ${dropdownConfig?.boxShadow || '0 2px 8px rgba(0, 0, 0, 0.15)'};\n `;\n }}\n }\n\n /* Item Group */\n .od-menu-item-group-title {\n padding: 8px 12px 4px;\n user-select: none;\n list-style: none;\n\n ${() => {\n const config = theme.components?.menu?.groupTitle;\n return `\n font-size: ${config?.fontSize || '12px'};\n font-weight: ${config?.fontWeight || '500'};\n color: ${config?.color || 'rgba(65, 70, 75, 0.6)'};\n line-height: 20px;\n `;\n }}\n }\n\n .od-menu-item-group-list {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n /* Divider */\n .od-menu-item-divider {\n overflow: hidden;\n line-height: 0;\n list-style: none;\n\n ${() => {\n const config = theme.components?.menu?.divider;\n return `\n height: ${config?.height || '1px'};\n background: ${config?.background || 'rgba(65, 70, 75, 0.1)'};\n margin: ${config?.margin || '4px 0'};\n `;\n }}\n }\n\n /* Animation */\n .od-menu-submenu-inline {\n border: 0;\n box-shadow: none;\n }\n\n .od-menu-submenu-inline > .od-menu {\n padding: 0;\n border: 0;\n box-shadow: none;\n }\n\n /* Collapse animation */\n .od-menu-submenu-inline-collapsed {\n max-height: 0;\n overflow: hidden;\n transition: max-height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n }\n\n .od-menu-submenu-inline-collapsed-active {\n max-height: 1000px;\n }\n`;\n\n","import React, { useState, useEffect } from 'react';\nimport RcDropdown from 'rc-dropdown';\nimport type { DropdownProps as RcDropdownProps } from 'rc-dropdown';\nimport 'rc-dropdown/assets/index.css';\nimport { DropdownGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\n\nexport interface DropdownProps extends Omit<Partial<RcDropdownProps>, 'prefixCls' | 'placement'> {\n /**\n * Dropdown overlay content (usually a Menu component)\n */\n overlay?: React.ReactElement | (() => React.ReactElement);\n /**\n * Trigger action (click, hover, contextMenu)\n */\n trigger?: ('click' | 'hover' | 'contextMenu')[];\n /**\n * Placement of dropdown\n */\n placement?: 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';\n /**\n * Whether dropdown is visible (controlled)\n */\n visible?: boolean;\n /**\n * Default visibility (uncontrolled)\n */\n defaultVisible?: boolean;\n /**\n * Callback when visibility changes\n */\n onVisibleChange?: (visible: boolean) => void;\n /**\n * Children element that triggers the dropdown\n */\n children: React.ReactElement;\n /**\n * Dropdown container class name\n */\n overlayClassName?: string;\n /**\n * Function to get the container element for the dropdown\n */\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n}\n\n/**\n * Dropdown Component\n *\n * A dropdown container component based on rc-dropdown\n *\n * @example\n * // Basic dropdown with menu\n * <Dropdown\n * overlay={<Menu items={items} />}\n * trigger={['click']}\n * >\n * <DropdownButton value=\"Select\" />\n * </Dropdown>\n *\n * @example\n * // Controlled dropdown\n * <Dropdown\n * visible={open}\n * onVisibleChange={setOpen}\n * overlay={<Menu items={items} />}\n * >\n * <Button>Click me</Button>\n * </Dropdown>\n *\n * @example\n * // Custom trigger\n * <Dropdown\n * overlay={<Menu items={items} />}\n * trigger={['hover']}\n * placement=\"bottomLeft\"\n * >\n * <span>Hover me</span>\n * </Dropdown>\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n overlay,\n trigger = ['click'],\n placement = 'bottomLeft',\n visible: controlledVisible,\n defaultVisible = false,\n onVisibleChange,\n children,\n overlayClassName,\n getPopupContainer,\n ...rest\n}) => {\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('od-dropdown-styles', DropdownGlobalStyles);\n }, []);\n\n const [internalVisible, setInternalVisible] = useState(defaultVisible);\n\n const isControlled = controlledVisible !== undefined;\n const isVisible = isControlled ? controlledVisible : internalVisible;\n\n const handleVisibleChange = (visible: boolean) => {\n if (!isControlled) {\n setInternalVisible(visible);\n }\n onVisibleChange?.(visible);\n };\n\n return (\n <RcDropdown\n overlay={overlay || <div />}\n trigger={trigger}\n placement={placement}\n visible={isVisible}\n onVisibleChange={handleVisibleChange}\n prefixCls=\"od-dropdown\"\n overlayClassName={overlayClassName}\n getPopupContainer={getPopupContainer}\n {...rest}\n >\n {children}\n </RcDropdown>\n );\n};\n\nDropdown.displayName = 'Dropdown';\n","import React, { useCallback, useEffect } from 'react';\nimport RcDialog from 'rc-dialog';\nimport type { DialogProps } from 'rc-dialog';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { CloseIcon } from '@officesdk/design/icons';\nimport { ModalGlobalStyles } from './globalStyle';\nimport { styleManager } from '../utils/styleManager';\nimport { getGlobalTheme } from '../utils/context';\n\nexport interface ModalProps extends DialogProps {\n /**\n * Whether the modal is visible\n */\n visible?: boolean;\n /**\n * Modal variant type\n * - 'message': Message dialog (max 400px, min 360px)\n * - 'functional': Functional dialog (default 640px, max 800px, min 400px)\n */\n variant?: 'message' | 'functional';\n /**\n * Mask layer type\n * - 'light': Light mask (rgba(65,70,75,0.5))\n * - 'dark': Dark mask (rgba(44,48,51,0.8))\n */\n maskType?: 'light' | 'dark';\n /**\n * Modal title\n */\n title?: React.ReactNode;\n /**\n * Modal width\n */\n width?: string | number;\n /**\n * Modal height\n */\n height?: string | number;\n /**\n * Whether to show mask\n */\n mask?: boolean;\n /**\n * Whether to close modal when clicking mask\n */\n maskClosable?: boolean;\n /**\n * Whether to show close button\n */\n closable?: boolean;\n /**\n * OK button text, set to null to hide\n */\n okText?: string | null;\n /**\n * Cancel button text, set to null to hide\n */\n cancelText?: string | null;\n /**\n * Whether OK button is disabled\n */\n disabledOkButton?: boolean;\n /**\n * Custom footer, set to null to hide footer\n */\n footer?: React.ReactNode;\n /**\n * Callback when OK button is clicked\n */\n onOk?: (e: React.MouseEvent) => void;\n /**\n * Callback when Cancel button is clicked or modal is closed\n */\n onCancel?: (e: React.MouseEvent | React.KeyboardEvent) => void;\n /**\n * Modal content\n */\n children?: React.ReactNode;\n /**\n * CSS class prefix\n */\n prefixCls?: string;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * z-index of the modal\n */\n zIndex?: number;\n /**\n * Whether to destroy modal on close\n */\n destroyOnClose?: boolean;\n /**\n * Whether to focus on modal when opened\n */\n focusTriggerAfterClose?: boolean;\n /**\n * Return the mount node for Modal\n */\n getContainer?: () => HTMLElement;\n}\n\n/**\n * Modal Component\n *\n * A dialog component for displaying content in a layer above the page.\n *\n * @example\n * // Basic usage\n * <Modal\n * visible={visible}\n * title=\"Modal Title\"\n * onOk={handleOk}\n * onCancel={handleCancel}\n * >\n * Modal content\n * </Modal>\n *\n * @example\n * // Custom footer\n * <Modal\n * visible={visible}\n * title=\"Custom Footer\"\n * footer={<Button onClick={handleClose}>Close</Button>}\n * onCancel={handleCancel}\n * >\n * Modal content\n * </Modal>\n *\n * @example\n * // No footer\n * <Modal\n * visible={visible}\n * title=\"No Footer\"\n * footer={null}\n * onCancel={handleCancel}\n * >\n * Modal content\n * </Modal>\n */\nexport const Modal: React.FC<ModalProps> = ({\n visible = false,\n variant = 'message',\n maskType = 'light',\n title,\n width,\n okText,\n cancelText,\n footer,\n onOk,\n onCancel,\n onClose,\n disabledOkButton = false,\n prefixCls = 'osd-modal',\n closable = true,\n closeIcon,\n mask = true,\n maskClosable = true,\n className,\n children,\n ...restProps\n}) => {\n const handleClose = useCallback(\n (e: React.SyntheticEvent) => {\n onClose?.(e);\n onCancel?.(e as React.MouseEvent | React.KeyboardEvent);\n },\n [onClose, onCancel]\n );\n\n // Inject styles on first render using styleManager\n useEffect(() => {\n styleManager.inject('osd-modal-styles', ModalGlobalStyles);\n }, []);\n\n // Get modal config from theme\n const modalConfig = getGlobalTheme().components.modal;\n\n // Calculate width - use prop if provided, otherwise use theme default\n const modalWidth = width ?? modalConfig[variant].defaultWidth;\n\n // Build classNames for semantic elements\n const classNames = {\n ...(maskType === 'dark' && { mask: `${prefixCls}-mask-dark` }),\n content: `${prefixCls}-content-${variant}`,\n };\n\n // Build styles for custom width\n const styles: Record<string, React.CSSProperties> | undefined =\n width !== undefined ? { content: { width } } : undefined;\n\n // Build default footer when not provided\n const renderFooter = () => {\n if (footer !== undefined) return footer;\n\n return (\n <>\n {cancelText !== null && (\n <Button key=\"cancel\" variant=\"outlined\" colorType=\"default\" onClick={handleClose}>\n {cancelText ?? 'Cancel'}\n </Button>\n )}\n {okText !== null && (\n <Button\n key=\"confirm\"\n variant=\"solid\"\n colorType=\"guidance\"\n onClick={onOk}\n disabled={disabledOkButton}\n >\n {okText ?? 'OK'}\n </Button>\n )}\n </>\n );\n };\n\n return (\n <RcDialog\n {...restProps}\n visible={visible}\n title={title}\n width={width === undefined ? modalWidth : undefined}\n prefixCls={prefixCls}\n closable={closable}\n closeIcon={\n closeIcon ?? (\n <Icon size={19.2}>\n <CloseIcon />\n </Icon>\n )\n }\n mask={mask}\n maskClosable={maskClosable}\n classNames={classNames}\n styles={styles}\n className={className}\n onClose={handleClose}\n footer={renderFooter()}\n >\n {children}\n </RcDialog>\n );\n};\n\nModal.displayName = 'Modal';\n","import { createGlobalStyle } from '../utils/styled';\nexport const ModalGlobalStyles = createGlobalStyle`\n .osd-modal {\n position: relative;\n width: auto;\n max-height: 100%;\n }\n\n .osd-modal-mask {\n position: fixed;\n inset: 0;\n background-color: ${({ theme }) => theme.components.modal.message.maskLight};\n height: 100%;\n z-index: ${({ theme }) => theme.components.modal.message.maskZIndex};\n }\n\n .osd-modal-mask-dark {\n background-color: ${({ theme }) => theme.components.modal.message.maskDark};\n }\n\n .osd-modal-mask-hidden {\n display: none;\n }\n\n .osd-modal-wrap {\n position: fixed;\n overflow: auto;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: ${({ theme }) => theme.components.modal.message.maskZIndex};\n -webkit-overflow-scrolling: touch;\n outline: 0;\n }\n\n .osd-modal-section {\n position: relative;\n display: flex;\n flex-direction: column;\n padding: ${({ theme }) => theme.components.modal.message.padding};\n background: ${({ theme }) => theme.components.modal.message.background};\n border: ${({ theme }) => theme.components.modal.message.border};\n box-shadow: ${({ theme }) => theme.components.modal.message.shadow};\n border-radius: ${({ theme }) => theme.components.modal.message.borderRadius};\n box-sizing: border-box;\n }\n\n .osd-modal-section-message {\n max-width: ${({ theme }) => theme.components.modal.message.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.message.minWidth};\n max-height: ${({ theme }) => theme.components.modal.message.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.message.minHeight};\n }\n\n .osd-modal-section-functional {\n max-width: ${({ theme }) => theme.components.modal.functional.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.functional.minWidth};\n max-height: ${({ theme }) => theme.components.modal.functional.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.functional.minHeight};\n }\n\n .osd-modal-content-message {\n max-width: ${({ theme }) => theme.components.modal.message.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.message.minWidth};\n max-height: ${({ theme }) => theme.components.modal.message.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.message.minHeight};\n }\n\n .osd-modal-content-functional {\n max-width: ${({ theme }) => theme.components.modal.functional.maxWidth};\n min-width: ${({ theme }) => theme.components.modal.functional.minWidth};\n max-height: ${({ theme }) => theme.components.modal.functional.maxHeight};\n min-height: ${({ theme }) => theme.components.modal.functional.minHeight};\n }\n\n .osd-modal-close {\n position: absolute;\n right: 32px;\n top: 24px;\n z-index: 10;\n padding: 2.4px;\n line-height: 1;\n border: 0;\n outline: 0;\n background: transparent;\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .osd-modal-close:hover {\n background: ${({ theme }) => theme.components.modal.message.closeButtonHoverBackground};\n }\n\n .osd-modal-close:active {\n background: ${({ theme }) => theme.components.modal.message.closeButtonActiveBackground};\n }\n\n .osd-modal-header {\n margin-bottom: 16px;\n padding-right: 24px;\n }\n\n .osd-modal-title {\n font-size: ${({ theme }) => theme.components.modal.message.titleFontSize};\n font-weight: ${({ theme }) => theme.components.modal.message.titleFontWeight};\n line-height: ${({ theme }) => theme.components.modal.message.titleLineHeight};\n color: ${({ theme }) => theme.components.modal.message.titleColor};\n }\n\n .osd-modal-body {\n flex: 1;\n font-size: ${({ theme }) => theme.components.modal.message.bodyFontSize};\n line-height: ${({ theme }) => theme.components.modal.message.bodyLineHeight};\n color: ${({ theme }) => theme.components.modal.message.bodyColor};\n }\n\n .osd-modal-footer {\n margin-top: 16px;\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n\n .osd-modal.zoom-enter,\n .osd-modal.zoom-appear {\n animation-duration: 0.3s;\n transform: none;\n opacity: 0;\n }\n\n .osd-modal-open {\n overflow: hidden;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { styled } from '../utils/styled';\nimport loadingGif from '../assets/loading.gif';\nimport { getGlobalTheme } from '../utils/context';\n\nexport interface LoadingProps {\n /**\n * Size of the loading spinner\n * - 'small': 16x16 (for dropdown menus, search refresh)\n * - 'medium': 24x24 (for list/table refresh)\n * - 'large': 32x32 (for full page refresh)\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * Whether the spinner is visible\n */\n spinning?: boolean;\n /**\n * Delay in milliseconds before showing the spinner (prevents flash)\n */\n delay?: number;\n /**\n * Tip text displayed below the spinner\n */\n tip?: React.ReactNode;\n /**\n * Whether to use fullscreen overlay mode\n */\n fullscreen?: boolean;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Child content to wrap with loading overlay\n */\n children?: React.ReactNode;\n /**\n * Custom loading indicator (React element or image URL)\n * When provided as a string, it will be used as the image src\n * When provided as a React element, it will be rendered directly\n */\n indicator?: React.ReactNode | string;\n}\n\n// Shared size styles for indicators\nconst getIndicatorSize = (size: LoadingProps['size'], theme: any) => {\n const sizeConfig = theme.components.loading[size || 'medium'];\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n `;\n};\n\nconst SpinnerImage = styled.img<{ $size: LoadingProps['size'] }>`\n display: inline-block;\n ${({ $size, theme }) => getIndicatorSize($size, theme)}\n object-fit: contain;\n`;\n\nconst CustomIndicatorWrapper = styled.span<{ $size: LoadingProps['size'] }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n ${({ $size, theme }) => getIndicatorSize($size, theme)}\n`;\n\nconst CSSSpinner = styled.div<{ $size: LoadingProps['size'] }>`\n display: inline-block;\n border-radius: 50%;\n box-sizing: border-box;\n\n ${({ $size, theme }) => {\n const loadingConfig = theme.components.loading;\n const sizeConfig = loadingConfig[$size || 'medium'];\n const { color, animation } = loadingConfig.indicator;\n const sizeValue = Number.parseFloat(sizeConfig.size);\n const borderWidth = Math.max(2, Math.round((Number.isNaN(sizeValue) ? 24 : sizeValue) / 12));\n\n return `\n width: ${sizeConfig.size};\n height: ${sizeConfig.size};\n border: ${borderWidth}px solid rgba(0, 0, 0, 0.1);\n border-top-color: ${color};\n animation: loading-spin ${animation.duration} ${animation.timingFunction} infinite;\n\n @keyframes loading-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `;\n }}\n`;\n\nconst LoadingContainer = styled.div<{ $fullscreen: boolean; $hasTip: boolean }>`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: ${({ $hasTip, theme }) => ($hasTip ? theme.components.loading.indicator.gap : '0')};\n\n ${({ $fullscreen, theme }) =>\n $fullscreen &&\n `\n position: fixed;\n inset: 0;\n z-index: ${theme.components.loading.fullscreen.zIndex};\n background: ${theme.components.loading.fullscreen.background};\n `}\n`;\n\nconst Tip = styled.span`\n font-size: 14px;\n line-height: 1.5;\n color: ${({ theme }) => theme.components.loading.tipColor};\n`;\n\nconst Wrapper = styled.div`\n position: relative;\n`;\n\nconst WrapperContent = styled.div<{ $spinning: boolean }>`\n transition: opacity 0.3s;\n opacity: ${({ $spinning, theme }) =>\n $spinning ? theme.components.loading.wrapper.contentOpacity : 1};\n pointer-events: ${({ $spinning }) => ($spinning ? 'none' : 'auto')};\n`;\n\nconst WrapperOverlay = styled.div<{ $hasTip: boolean }>`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: 1;\n background: ${({ theme }) => theme.components.loading.wrapper.overlayBackground};\n gap: ${({ $hasTip, theme }) => ($hasTip ? theme.components.loading.indicator.gap : '0')};\n`;\n\n/**\n * Loading Component\n *\n * A loading component that displays an animated indicator.\n * Supports GIF/CSS defaults via theme configuration or custom indicators via props.\n *\n * @example\n * // Basic usage (uses theme default indicator type)\n * <Loading />\n *\n * @example\n * // Different sizes\n * <Loading size=\"small\" />\n * <Loading size=\"medium\" />\n * <Loading size=\"large\" />\n *\n * @example\n * // With tip\n * <Loading tip=\"Loading...\" />\n *\n * @example\n * // Custom indicator (image URL)\n * <Loading indicator=\"/path/to/custom-loading.gif\" />\n *\n * @example\n * // Custom indicator (React element)\n * <Loading indicator={<MyCustomSpinner />} />\n *\n * @example\n * // Wrap content\n * <Loading spinning={isLoading}>\n * <div>Content to load</div>\n * </Loading>\n *\n * @example\n * // Fullscreen loading\n * <Loading fullscreen spinning={isLoading} />\n */\nexport const Loading: React.FC<LoadingProps> = ({\n size = 'medium',\n spinning = true,\n delay = 0,\n tip,\n fullscreen = false,\n className,\n children,\n indicator,\n}) => {\n const [shouldShow, setShouldShow] = useState(delay === 0 && spinning);\n\n // Simplified effect: only set timer when delay > 0 and spinning\n useEffect(() => {\n if (!spinning) {\n setShouldShow(false);\n return;\n }\n\n if (delay <= 0) {\n setShouldShow(true);\n return;\n }\n\n const timer = setTimeout(() => setShouldShow(true), delay);\n return () => clearTimeout(timer);\n }, [spinning, delay]);\n\n // Render indicator - not memoized because theme can change dynamically via registerGlobalTheme\n const renderIndicator = () => {\n const a11yProps = { role: 'status' as const, 'aria-label': 'Loading' };\n\n // Custom indicator as string (image URL)\n if (typeof indicator === 'string') {\n return <SpinnerImage $size={size} src={indicator} alt=\"Loading\" {...a11yProps} />;\n }\n\n // Custom indicator as React element\n if (indicator) {\n return (\n <CustomIndicatorWrapper $size={size} {...a11yProps}>\n {indicator}\n </CustomIndicatorWrapper>\n );\n }\n\n // Default indicator from theme\n const { indicator: indicatorConfig } = getGlobalTheme().components.loading;\n\n if (indicatorConfig.defaultType === 'css') {\n return <CSSSpinner $size={size} {...a11yProps} />;\n }\n\n return (\n <SpinnerImage\n $size={size}\n src={indicatorConfig.defaultImage || loadingGif}\n alt=\"Loading\"\n {...a11yProps}\n />\n );\n };\n\n // Render spinner with optional tip\n const renderSpinner = () => (\n <>\n {renderIndicator()}\n {tip && <Tip>{tip}</Tip>}\n </>\n );\n\n const hasChildren = React.Children.count(children) > 0;\n\n // Wrapper mode (with children)\n if (hasChildren) {\n return (\n <Wrapper className={className}>\n <WrapperContent $spinning={shouldShow}>{children}</WrapperContent>\n {shouldShow && <WrapperOverlay $hasTip={!!tip}>{renderSpinner()}</WrapperOverlay>}\n </Wrapper>\n );\n }\n\n // Standalone or fullscreen mode (no children)\n if (!shouldShow) return null;\n\n return (\n <LoadingContainer $fullscreen={fullscreen} $hasTip={!!tip} className={className}>\n {renderSpinner()}\n </LoadingContainer>\n );\n};\n\nLoading.displayName = 'Loading';\n"]}