smartsell-ui-kit 0.0.6 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +16 -15
- package/README.md +170 -84
- package/dist/img/index.cjs +373 -0
- package/dist/img/index.cjs.map +1 -0
- package/dist/img/index.d.cts +170 -0
- package/dist/img/index.d.ts +170 -0
- package/dist/img/index.js +328 -0
- package/dist/img/index.js.map +1 -0
- package/dist/index.cjs +4608 -1201
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +306 -25
- package/dist/index.d.ts +306 -25
- package/dist/index.js +4952 -1094
- package/dist/index.js.map +1 -1
- package/dist/types.cjs +19 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +4 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.js +1 -0
- package/package.json +30 -19
- package/dist/chunk-UIFTQDYM.js +0 -460
- package/dist/chunk-UIFTQDYM.js.map +0 -1
- package/dist/modal-CS9SuYSC.d.cts +0 -97
- package/dist/modal-CS9SuYSC.d.ts +0 -97
- package/dist/modal.cjs +0 -486
- package/dist/modal.cjs.map +0 -1
- package/dist/modal.d.cts +0 -4
- package/dist/modal.d.ts +0 -4
- package/dist/modal.js +0 -7
- /package/dist/{modal.js.map → types.js.map} +0 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Button.tsx","../src/components/controlSize.ts","../src/theme.ts","../src/components/Card.tsx","../src/components/ComposableModal.tsx","../src/components/Modal.tsx","../src/components/Input.tsx","../src/components/Select.tsx","../src/components/Textarea.tsx"],"sourcesContent":["export { Button, type ButtonProps } from './components/Button';\nexport { Card, type CardProps } from './components/Card';\nexport {\n ComposableModal,\n createModalSlotIds,\n type ComposableModalProps,\n type ModalSlotContext,\n type ModalSlotIds,\n} from './components/ComposableModal';\nexport { Input, type InputProps } from './components/Input';\nexport {\n type ModalAction,\n Modal,\n type LegacyModalAction,\n type LegacyModalCompatProps,\n type LegacyModalProps,\n type ModalProps,\n type ModalTheme,\n type ModalThemeSource,\n type StandardModalProps,\n} from './components/Modal';\nexport { Select, type SelectProps } from './components/Select';\nexport { Textarea, type TextareaProps } from './components/Textarea';\nexport { useUiKitTheme, type UiKitThemeTokens } from './theme';","import { useState, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from 'react';\n\nimport { withAlpha, type SmartSellSDK } from 'smartsell-sales-sdk';\n\nimport { getButtonSizeStyles, type ControlSize } from './controlSize';\nimport { useUiKitTheme } from '../theme';\n\ntype ButtonVariant = 'solid' | 'outline' | 'ghost';\ntype ButtonSize = ControlSize;\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'dangerouslySetInnerHTML'> {\n sdk: SmartSellSDK;\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n}\n\nexport function Button({\n sdk,\n variant = 'solid',\n size = 'md',\n fullWidth = false,\n leadingIcon,\n trailingIcon,\n children,\n disabled,\n style,\n type = 'button',\n onMouseEnter,\n onMouseLeave,\n onMouseDown,\n onMouseUp,\n onBlur,\n onKeyDown,\n onKeyUp,\n onTouchStart,\n onTouchEnd,\n onTouchCancel,\n ...rest\n}: ButtonProps) {\n const { theme } = useUiKitTheme(sdk);\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const variantStyles: Record<ButtonVariant, CSSProperties> = {\n solid: {\n backgroundColor: theme.colors.primary,\n borderColor: withAlpha(theme.colors.primary, 0.5),\n color: theme.colors.onPrimary,\n },\n outline: {\n backgroundColor: 'transparent',\n borderColor: withAlpha(theme.colors.text, 0.5),\n color: theme.colors.onSurface,\n },\n ghost: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n color: theme.colors.onSurface,\n },\n };\n\n const interactiveColor = variant === 'solid' ? theme.colors.primary : theme.colors.onSurface;\n const isInteractive = !disabled;\n\n const interactionStyles: Record<ButtonVariant, CSSProperties> = {\n solid: {\n transform: isPressed ? 'translateY(1px) scale(0.985)' : isHovered ? 'translateY(-1px)' : 'translateY(0)',\n boxShadow: 'none',\n filter: undefined,\n },\n outline: {\n transform: isPressed ? 'translateY(1px) scale(0.985)' : isHovered ? 'translateY(-1px)' : 'translateY(0)',\n backgroundColor: isPressed\n ? withAlpha(interactiveColor, 0.14)\n : isHovered\n ? withAlpha(interactiveColor, 0.08)\n : 'transparent',\n boxShadow: 'none',\n },\n ghost: {\n transform: isPressed ? 'translateY(1px) scale(0.985)' : isHovered ? 'translateY(-1px)' : 'translateY(0)',\n backgroundColor: isPressed\n ? withAlpha(interactiveColor, 0.12)\n : isHovered\n ? withAlpha(interactiveColor, 0.06)\n : 'transparent',\n boxShadow: 'none',\n },\n };\n\n return (\n <button\n {...rest}\n type={type}\n disabled={disabled}\n onMouseEnter={(event) => {\n if (isInteractive) {\n setIsHovered(true);\n }\n\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setIsHovered(false);\n setIsPressed(false);\n onMouseLeave?.(event);\n }}\n onMouseDown={(event) => {\n if (isInteractive) {\n setIsPressed(true);\n }\n\n onMouseDown?.(event);\n }}\n onMouseUp={(event) => {\n setIsPressed(false);\n onMouseUp?.(event);\n }}\n onBlur={(event) => {\n setIsHovered(false);\n setIsPressed(false);\n onBlur?.(event);\n }}\n onKeyDown={(event) => {\n if (isInteractive && (event.key === ' ' || event.key === 'Enter')) {\n setIsPressed(true);\n }\n\n onKeyDown?.(event);\n }}\n onKeyUp={(event) => {\n setIsPressed(false);\n onKeyUp?.(event);\n }}\n onTouchStart={(event) => {\n if (isInteractive) {\n setIsPressed(true);\n }\n\n onTouchStart?.(event);\n }}\n onTouchEnd={(event) => {\n setIsPressed(false);\n onTouchEnd?.(event);\n }}\n onTouchCancel={(event) => {\n setIsPressed(false);\n onTouchCancel?.(event);\n }}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 10,\n width: fullWidth ? '100%' : undefined,\n borderRadius: 16,\n borderStyle: 'solid',\n borderWidth: 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontWeight: 700,\n letterSpacing: '0.01em',\n opacity: disabled ? 0.58 : 1,\n transition: 'transform 140ms ease, opacity 160ms ease, background-color 160ms ease',\n ...getButtonSizeStyles(size),\n ...variantStyles[variant],\n ...(isInteractive ? interactionStyles[variant] : undefined),\n ...style,\n }}\n >\n {leadingIcon}\n {children}\n {trailingIcon}\n </button>\n );\n}","import type { CSSProperties } from 'react';\n\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\ntype ControlMetrics = {\n height: number;\n fontSize: number;\n lineHeight: string;\n paddingX: number;\n paddingY: number;\n buttonPaddingX: number;\n selectPaddingRight: number;\n selectIndicatorOffset: number;\n};\n\ntype TextInputPaddingOptions = {\n leadingInset?: number;\n trailingInset?: number;\n};\n\nconst CONTROL_METRICS_BY_SIZE: Record<ControlSize, ControlMetrics> = {\n sm: {\n height: 30,\n fontSize: 13,\n lineHeight: '16px',\n paddingX: 12,\n paddingY: 6,\n buttonPaddingX: 14,\n selectPaddingRight: 40,\n selectIndicatorOffset: 12,\n },\n md: {\n height: 38,\n fontSize: 14,\n lineHeight: '18px',\n paddingX: 16,\n paddingY: 9,\n buttonPaddingX: 18,\n selectPaddingRight: 44,\n selectIndicatorOffset: 16,\n },\n lg: {\n height: 46,\n fontSize: 15,\n lineHeight: '18px',\n paddingX: 18,\n paddingY: 13,\n buttonPaddingX: 20,\n selectPaddingRight: 48,\n selectIndicatorOffset: 18,\n },\n};\n\nexport const getControlMetrics = (size: ControlSize): ControlMetrics => CONTROL_METRICS_BY_SIZE[size];\n\nexport const getTextInputPadding = (size: ControlSize, options: TextInputPaddingOptions = {}): string => {\n const metrics = getControlMetrics(size);\n const leadingInset = options.leadingInset ?? 0;\n const trailingInset = options.trailingInset ?? 0;\n\n return `${metrics.paddingY}px ${metrics.paddingX + trailingInset}px ${metrics.paddingY}px ${metrics.paddingX + leadingInset}px`;\n};\n\nexport const getSelectControlPadding = (size: ControlSize): string => {\n const metrics = getControlMetrics(size);\n return `${metrics.paddingY}px ${metrics.selectPaddingRight}px ${metrics.paddingY}px ${metrics.paddingX}px`;\n};\n\nexport const getSelectIndicatorOffset = (size: ControlSize): number => getControlMetrics(size).selectIndicatorOffset;\n\nexport const getButtonSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n boxSizing: 'border-box',\n height: metrics.height,\n padding: `0 ${metrics.buttonPaddingX}px`,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};","import { useMemo } from 'react';\n\nimport {\n useSalesTheme,\n withAlpha,\n type SalesTheme,\n type SmartSellSDK,\n} from 'smartsell-sales-sdk';\n\nexport interface UiKitThemeTokens {\n theme: SalesTheme;\n borderSoft: string;\n borderStrong: string;\n surfaceMuted: string;\n surfaceRaised: string;\n overlay: string;\n focusRing: string;\n mutedText: string;\n}\n\nexport function useUiKitTheme(sdk: SmartSellSDK): UiKitThemeTokens {\n const { theme } = useSalesTheme(sdk);\n\n return useMemo(() => {\n return {\n theme,\n borderSoft: withAlpha(theme.colors.onSurface, 0.1),\n borderStrong: withAlpha(theme.colors.onSurface, 0.16),\n surfaceMuted: withAlpha(theme.colors.onSurface, 0.04),\n surfaceRaised: withAlpha(theme.colors.surface, 0.94),\n overlay: withAlpha('#030712', 0.62),\n focusRing: withAlpha(theme.colors.primary, 0.22),\n mutedText: withAlpha(theme.colors.onSurface, 0.72),\n };\n }, [theme]);\n}","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport { withAlpha, type SmartSellSDK } from 'smartsell-sales-sdk';\n\nimport { useUiKitTheme } from '../theme';\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n sdk: SmartSellSDK;\n children: ReactNode;\n eyebrow?: ReactNode;\n title?: ReactNode;\n action?: ReactNode;\n padded?: boolean;\n}\n\nexport function Card({\n sdk,\n children,\n eyebrow,\n title,\n action,\n padded = true,\n style,\n ...rest\n}: CardProps) {\n const { theme } = useUiKitTheme(sdk);\n\n return (\n <div\n {...rest}\n style={{\n borderRadius: 28,\n border: `1px solid ${withAlpha(theme.colors.text, 0.5)}`,\n background: `${withAlpha(theme.colors.background, 0.7)}`,\n color: theme.colors.text,\n padding: padded ? 24 : undefined,\n ...style,\n }}\n >\n {(eyebrow || title || action) && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: 16,\n marginBottom: 18,\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n {eyebrow ? (\n <span\n style={{\n color: theme.colors.textLight,\n fontSize: 12,\n fontWeight: 800,\n letterSpacing: '0.16em',\n textTransform: 'uppercase',\n }}\n >\n {eyebrow}\n </span>\n ) : null}\n {title ? (\n <div\n style={{\n color: theme.colors.text,\n fontSize: 24,\n fontWeight: 700,\n lineHeight: 1.2,\n }}\n >\n {title}\n </div>\n ) : null}\n </div>\n {action ? <div style={{ color: theme.colors.text }}>{action}</div> : null}\n </div>\n )}\n {children}\n </div>\n );\n}","import { useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { SlotRenderer, type SmartSellSDK } from 'smartsell-sales-sdk';\n\nimport { Button } from './Button';\nimport { Modal } from './Modal';\nimport { useUiKitTheme } from '../theme';\n\nexport interface ModalSlotIds {\n header: string;\n body: string;\n footer: string;\n}\n\nexport interface ModalSlotContext<TPayload = unknown> {\n title: string;\n description?: string;\n payload?: TPayload;\n close: () => void;\n confirm?: () => void;\n confirmLabel: string;\n cancelLabel: string;\n isOpen: boolean;\n isBusy: boolean;\n}\n\nexport interface ComposableModalProps<TPayload = unknown> {\n sdk: SmartSellSDK;\n isOpen: boolean;\n onClose: () => void;\n title: string;\n description?: string;\n slotBaseId: string;\n payload?: TPayload;\n onConfirm?: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isBusy?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideExpandButton?: boolean;\n maximized?: boolean;\n hideDefaultFooter?: boolean;\n maxWidth?: number | string;\n headerFallback?: ReactNode;\n footerFallback?: ReactNode;\n children?: ReactNode;\n}\n\nexport const createModalSlotIds = (slotBaseId: string): ModalSlotIds => ({\n header: `${slotBaseId}:modal-header`,\n body: `${slotBaseId}:modal-body`,\n footer: `${slotBaseId}:modal-footer`,\n});\n\nexport function ComposableModal<TPayload = unknown>({\n sdk,\n isOpen,\n onClose,\n title,\n description,\n slotBaseId,\n payload,\n onConfirm,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n isBusy = false,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideExpandButton = false,\n maximized,\n hideDefaultFooter = false,\n maxWidth,\n headerFallback,\n footerFallback,\n children,\n}: ComposableModalProps<TPayload>) {\n const theme = useUiKitTheme(sdk);\n const slotIds = createModalSlotIds(slotBaseId);\n\n const context = useMemo<ModalSlotContext<TPayload>>(\n () => ({\n title,\n description,\n payload,\n close: onClose,\n confirm: onConfirm,\n confirmLabel,\n cancelLabel,\n isOpen,\n isBusy,\n }),\n [cancelLabel, confirmLabel, description, isBusy, isOpen, onClose, onConfirm, payload, title],\n );\n\n const defaultFooter = hideDefaultFooter ? undefined : (\n footerFallback ?? (\n <>\n <Button sdk={sdk} variant=\"outline\" onClick={onClose} disabled={isBusy}>\n {cancelLabel}\n </Button>\n {onConfirm ? (\n <Button sdk={sdk} onClick={onConfirm} disabled={isBusy}>\n {confirmLabel}\n </Button>\n ) : null}\n </>\n )\n );\n\n const defaultHeader = headerFallback ?? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <h2\n style={{\n margin: 0,\n fontSize: 30,\n fontWeight: 800,\n lineHeight: 1.1,\n }}\n >\n {title}\n </h2>\n {description ? (\n <p\n style={{\n margin: 0,\n fontSize: 15,\n lineHeight: 1.6,\n opacity: 0.78,\n }}\n >\n {description}\n </p>\n ) : null}\n </div>\n );\n\n const headerContent = (\n <SlotRenderer id={slotIds.header} sdk={sdk} context={context}>\n {defaultHeader}\n </SlotRenderer>\n );\n\n const bodyContent = (\n <SlotRenderer id={slotIds.body} sdk={sdk} context={context}>\n {children}\n </SlotRenderer>\n );\n\n const footerContent = (\n <SlotRenderer id={slotIds.footer} sdk={sdk} context={context}>\n {defaultFooter}\n </SlotRenderer>\n );\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n description={description}\n headerContent={headerContent}\n footer={footerContent}\n theme={theme}\n maxWidth={maxWidth}\n hideExpandButton={hideExpandButton}\n maximized={maximized}\n closeOnBackdrop={closeOnBackdrop}\n closeOnEscape={closeOnEscape}\n >\n {bodyContent}\n </Modal>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\n\nimport type { UiKitThemeTokens } from '../theme';\n\ntype ModalActionAppearance = 'text' | 'outlined' | 'contained' | 'link';\n\ntype ModalThemeColors = {\n background: string;\n surface: string;\n onSurface: string;\n onBackground: string;\n primary: string;\n onPrimary: string;\n secondary: string;\n onSecondary: string;\n negative: string;\n warning: string;\n};\n\nexport interface ModalTheme {\n colors?: Partial<ModalThemeColors>;\n}\n\nexport type ModalThemeSource = ModalTheme | UiKitThemeTokens;\n\nexport interface ModalAction {\n label: ReactNode;\n onClick: () => void;\n appearance?: ModalActionAppearance;\n style?: CSSProperties;\n disabled?: boolean;\n hidden?: boolean;\n}\n\ninterface BaseModalProps {\n children?: ReactNode;\n theme?: ModalThemeSource;\n}\n\nexport interface ModalProps extends BaseModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: ReactNode;\n description?: ReactNode;\n headerContent?: ReactNode;\n footer?: ReactNode;\n confirmAction?: ModalAction;\n cancelAction?: ModalAction;\n closeAction?: ModalAction;\n extraActions?: ModalAction[];\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideCloseButton?: boolean;\n hideExpandButton?: boolean;\n disableDismiss?: boolean;\n maximized?: boolean;\n contentStyle?: CSSProperties;\n bodyStyle?: CSSProperties;\n isBusy?: boolean;\n}\n\nexport interface LegacyModalAction {\n name: string;\n onClick: () => void;\n type?: ModalActionAppearance;\n style?: CSSProperties;\n disable?: boolean;\n}\n\nexport interface LegacyModalCompatProps extends BaseModalProps {\n title: ReactNode;\n showModal: boolean;\n closeModal: () => void;\n action?: () => void;\n actionNameBtn?: string | undefined;\n hideActionButton?: boolean;\n cancelButton?: () => void;\n disableActionBtn?: boolean;\n isLoading?: boolean;\n onlyCloseButton?: boolean;\n hideCloseIcon?: boolean;\n style?: CSSProperties;\n bodyStyle?: CSSProperties;\n additionalActions?: LegacyModalAction[];\n maximized?: boolean;\n}\n\nexport type LegacyModalProps = LegacyModalCompatProps;\nexport type StandardModalProps = ModalProps;\n\ntype ModalInputProps = ModalProps | LegacyModalCompatProps;\n\nconst defaultThemeColors: ModalThemeColors = {\n background: '#f8fafc',\n surface: '#ffffff',\n onSurface: '#0f172a',\n onBackground: '#0f172a',\n primary: '#0f766e',\n onPrimary: '#ffffff',\n secondary: '#1d4ed8',\n onSecondary: '#ffffff',\n negative: '#dc2626',\n warning: '#d97706',\n};\n\nconst withAlpha = (hex: string, alpha: number): string => {\n const normalized = hex.replace('#', '').trim();\n const value = normalized.length === 3\n ? normalized.split('').map((char) => char + char).join('')\n : normalized;\n\n const red = Number.parseInt(value.slice(0, 2), 16);\n const green = Number.parseInt(value.slice(2, 4), 16);\n const blue = Number.parseInt(value.slice(4, 6), 16);\n\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n};\n\nconst isUiKitThemeTokens = (theme?: ModalThemeSource): theme is UiKitThemeTokens => {\n return Boolean(theme && typeof theme === 'object' && 'theme' in theme);\n};\n\nconst resolveTheme = (theme?: ModalThemeSource) => {\n const colorOverrides = isUiKitThemeTokens(theme)\n ? theme.theme.colors\n : (theme?.colors ?? {});\n\n const colors: ModalThemeColors = {\n ...defaultThemeColors,\n ...colorOverrides,\n };\n\n return {\n colors,\n borderSoft: isUiKitThemeTokens(theme)\n ? theme.borderSoft\n : withAlpha(colors.onSurface, 0.1),\n borderStrong: isUiKitThemeTokens(theme)\n ? theme.borderStrong\n : withAlpha(colors.onSurface, 0.16),\n surfaceMuted: isUiKitThemeTokens(theme)\n ? theme.surfaceMuted\n : withAlpha(colors.onSurface, 0.04),\n surfaceRaised: isUiKitThemeTokens(theme)\n ? theme.surfaceRaised\n : withAlpha(colors.surface, 0.94),\n overlay: isUiKitThemeTokens(theme)\n ? theme.overlay\n : withAlpha('#030712', 0.62),\n mutedText: isUiKitThemeTokens(theme)\n ? theme.mutedText\n : withAlpha(colors.onSurface, 0.72),\n };\n};\n\nconst normalizeWidth = (maxWidth?: number | string): string | number => {\n if (typeof maxWidth === 'number') {\n return `${maxWidth}px`;\n }\n\n return maxWidth ?? '720px';\n};\n\nconst isLikelyMobileViewport = (): boolean => {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return false;\n }\n\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n};\n\nconst createTitleId = (title?: ReactNode): string => {\n if (typeof title === 'string' || typeof title === 'number') {\n const normalized = String(title)\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n\n return `smartsell-modal-${normalized || 'dialog'}`;\n }\n\n return 'smartsell-modal-dialog';\n};\n\nconst isLegacyModalProps = (props: ModalInputProps): props is LegacyModalCompatProps => {\n return 'showModal' in props;\n};\n\nconst normalizeLegacyAction = (\n action: LegacyModalAction,\n fallbackDisabled = false,\n): ModalAction => {\n return {\n label: action.name,\n onClick: action.onClick,\n appearance: action.type ?? 'contained',\n style: action.style ?? { maxWidth: '150px' },\n disabled: action.disable ?? fallbackDisabled,\n };\n};\n\nconst normalizeModalProps = (props: ModalInputProps): ModalProps => {\n if (!isLegacyModalProps(props)) {\n return props;\n }\n\n const isBusy = Boolean(props.isLoading);\n const disableAction = Boolean(props.disableActionBtn || props.isLoading);\n\n return {\n isOpen: props.showModal,\n onClose: props.closeModal,\n title: props.title,\n children: props.children,\n theme: props.theme,\n maximized: props.maximized,\n contentStyle: props.style,\n bodyStyle: props.bodyStyle,\n hideCloseButton: props.hideCloseIcon,\n disableDismiss: isBusy,\n closeOnBackdrop: false,\n closeOnEscape: false,\n isBusy,\n closeAction: props.onlyCloseButton\n ? {\n label: 'Close',\n onClick: props.closeModal,\n appearance: 'contained',\n disabled: isBusy,\n }\n : undefined,\n cancelAction: props.onlyCloseButton || !props.cancelButton\n ? undefined\n : {\n label: 'Cancel',\n onClick: props.cancelButton,\n appearance: 'text',\n style: { maxWidth: '100px' },\n },\n confirmAction: props.onlyCloseButton || props.hideActionButton || !props.action\n ? undefined\n : {\n label: props.actionNameBtn ?? 'Save',\n onClick: props.action,\n appearance: 'contained',\n style: { maxWidth: '100px' },\n disabled: disableAction,\n },\n extraActions: props.onlyCloseButton\n ? undefined\n : props.additionalActions?.map((action) => normalizeLegacyAction(action, disableAction)),\n };\n};\n\nfunction ModalActionButton({\n action,\n theme,\n}: {\n action: ModalAction;\n theme: ReturnType<typeof resolveTheme>;\n}) {\n const { colors } = theme;\n const {\n label,\n onClick,\n appearance = 'contained',\n disabled = false,\n style,\n } = action;\n\n const buttonStyle: CSSProperties = {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '0.4rem',\n padding: appearance === 'link' ? 0 : '1.3rem',\n boxSizing: 'border-box',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontWeight: 700,\n fontSize: '1.3rem',\n margin: 0,\n textAlign: 'center',\n transition: '0.5s',\n opacity: disabled ? 0.5 : 1,\n filter: disabled ? 'saturate(0)' : undefined,\n };\n\n if (appearance === 'text') {\n buttonStyle.background = 'none';\n buttonStyle.border = '1px solid transparent';\n buttonStyle.color = colors.primary;\n buttonStyle.boxShadow = 'none';\n } else if (appearance === 'link') {\n buttonStyle.background = 'none';\n buttonStyle.border = 'none';\n buttonStyle.color = colors.primary;\n buttonStyle.boxShadow = 'none';\n } else if (appearance === 'outlined') {\n buttonStyle.background = 'none';\n buttonStyle.border = `2px solid ${colors.primary}`;\n buttonStyle.color = colors.primary;\n buttonStyle.boxShadow = `0 14px 28px ${withAlpha(colors.onSurface, 0.08)}`;\n } else {\n buttonStyle.background = colors.primary;\n buttonStyle.border = '1px solid transparent';\n buttonStyle.color = colors.onPrimary;\n buttonStyle.boxShadow = `0 14px 28px ${withAlpha(colors.primary, 0.22)}`;\n }\n\n return (\n <div\n style={{\n width: style?.width ?? (style?.maxWidth ? '100%' : 'max-content'),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 5px',\n marginBottom: style?.marginBottom ?? 0,\n ...style,\n }}\n >\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n style={buttonStyle}\n >\n {label}\n </button>\n </div>\n );\n}\n\nfunction UnifiedModal({\n isOpen,\n onClose,\n children,\n title,\n description,\n headerContent,\n footer,\n confirmAction,\n cancelAction,\n closeAction,\n extraActions,\n maxWidth,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideCloseButton = false,\n hideExpandButton = false,\n disableDismiss = false,\n maximized,\n contentStyle,\n bodyStyle,\n isBusy = false,\n theme,\n}: ModalProps) {\n const modalTheme = useMemo(() => resolveTheme(theme), [theme]);\n const [isMaximized, setIsMaximized] = useState<boolean>(maximized ?? false);\n const titleId = useMemo(() => createTitleId(title), [title]);\n\n useEffect(() => {\n if (typeof maximized === 'boolean') {\n setIsMaximized(maximized);\n return;\n }\n\n if (isLikelyMobileViewport()) {\n setIsMaximized(true);\n }\n }, [maximized]);\n\n useEffect(() => {\n if (!isOpen || typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!disableDismiss && closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeOnEscape, disableDismiss, isOpen, onClose]);\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedHeader = headerContent ?? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {title ? (\n <h2\n id={titleId}\n style={{\n margin: 0,\n color: modalTheme.colors.onSurface,\n fontSize: 30,\n fontWeight: 800,\n lineHeight: 1.1,\n }}\n >\n {title}\n </h2>\n ) : null}\n {description ? (\n <p\n style={{\n margin: 0,\n color: modalTheme.mutedText,\n fontSize: 15,\n lineHeight: 1.6,\n }}\n >\n {description}\n </p>\n ) : null}\n </div>\n );\n\n let footerContent = footer;\n\n if (footerContent === undefined) {\n if (closeAction && !closeAction.hidden) {\n footerContent = <ModalActionButton action={closeAction} theme={modalTheme} />;\n } else {\n const resolvedActions = [\n cancelAction\n ? { ...cancelAction, appearance: cancelAction.appearance ?? 'text' }\n : undefined,\n ...(extraActions ?? []).map((action) => ({\n ...action,\n appearance: action.appearance ?? 'contained',\n })),\n confirmAction\n ? { ...confirmAction, appearance: confirmAction.appearance ?? 'contained' }\n : undefined,\n ].reduce<ModalAction[]>((items, action) => {\n if (!action || action.hidden) {\n return items;\n }\n\n items.push(action);\n return items;\n }, []);\n\n footerContent = resolvedActions.length > 0\n ? resolvedActions.map((action, index) => (\n <ModalActionButton\n key={`modal-action-${index}`}\n action={action}\n theme={modalTheme}\n />\n ))\n : undefined;\n }\n }\n\n const shouldRenderFooter = footerContent !== undefined && footerContent !== null && footerContent !== false;\n\n return (\n <div\n aria-label={headerContent ? (typeof title === 'string' ? title : 'Dialog') : undefined}\n aria-labelledby={headerContent ? undefined : title ? titleId : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n onMouseDown={(event) => {\n if (!disableDismiss && closeOnBackdrop && event.target === event.currentTarget) {\n onClose();\n }\n }}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 70,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: isMaximized ? 0 : 16,\n backgroundColor: modalTheme.overlay,\n backdropFilter: 'blur(8px)',\n }}\n >\n <div\n id={isBusy ? 'ldg1' : undefined}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: isMaximized ? '100vw' : 'min(100%, 100%)',\n maxWidth: isMaximized ? '100vw' : normalizeWidth(maxWidth),\n height: isMaximized ? '100vh' : undefined,\n maxHeight: isMaximized ? '100vh' : 'calc(100vh - 32px)',\n minWidth: isMaximized ? '100vw' : 300,\n borderRadius: isMaximized ? 0 : 30,\n border: `1px solid ${modalTheme.borderSoft}`,\n background: `linear-gradient(180deg, ${modalTheme.surfaceRaised}, ${modalTheme.colors.surface})`,\n boxShadow: `0 34px 80px ${withAlpha('#020617', 0.28)}`,\n color: modalTheme.colors.onSurface,\n overflow: 'hidden',\n opacity: isBusy ? 0.5 : 1,\n ...contentStyle,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 16,\n padding: '24px 24px 16px',\n borderBottom: `1px solid ${withAlpha(modalTheme.colors.onSurface, 0.06)}`,\n }}\n >\n <div style={{ flex: 1 }}>{resolvedHeader}</div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>\n {!hideExpandButton ? (\n <button\n aria-label={isMaximized ? 'Minimize modal' : 'Maximize modal'}\n title={isMaximized ? 'Minimize' : 'Maximize'}\n type=\"button\"\n onClick={() => setIsMaximized((current) => !current)}\n style={{\n height: 42,\n width: 42,\n borderRadius: 999,\n border: `1px solid ${modalTheme.borderSoft}`,\n backgroundColor: 'transparent',\n color: modalTheme.colors.onSurface,\n cursor: 'pointer',\n fontSize: 18,\n fontWeight: 700,\n }}\n >\n {isMaximized ? '▢' : '□'}\n </button>\n ) : null}\n {!hideCloseButton ? (\n <button\n aria-label=\"Close modal\"\n type=\"button\"\n onClick={disableDismiss ? undefined : onClose}\n style={{\n height: 42,\n width: 42,\n borderRadius: 999,\n border: `1px solid ${modalTheme.borderSoft}`,\n backgroundColor: 'transparent',\n color: modalTheme.colors.onSurface,\n cursor: disableDismiss ? 'not-allowed' : 'pointer',\n fontSize: 20,\n fontWeight: 700,\n opacity: disableDismiss ? 0.5 : 1,\n }}\n >\n ×\n </button>\n ) : null}\n </div>\n </div>\n\n <div\n style={{\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n padding: 24,\n ...bodyStyle,\n }}\n >\n {children}\n </div>\n\n {shouldRenderFooter ? (\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 12,\n padding: '16px 24px 24px',\n borderTop: `1px solid ${withAlpha(modalTheme.colors.onSurface, 0.06)}`,\n }}\n >\n {footerContent}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function Modal(props: ModalInputProps) {\n return <UnifiedModal {...normalizeModalProps(props)} />;\n}\n","import { useState, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport { withAlpha, type SmartSellSDK } from 'smartsell-sales-sdk';\n\nimport { getControlMetrics, getTextInputPadding, type ControlSize } from './controlSize';\nimport { useUiKitTheme } from '../theme';\n\ntype ControlFrameProps = {\n sdk: SmartSellSDK;\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n htmlFor?: string;\n required?: boolean;\n useLabelWrapper?: boolean;\n children: ReactNode;\n style?: CSSProperties;\n};\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size'> {\n sdk: SmartSellSDK;\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n controlSize?: ControlSize;\n showPasswordToggle?: boolean;\n}\n\ntype PasswordToggleMetrics = {\n buttonSize: number;\n leftOffset: number;\n contentGap: number;\n iconSize: number;\n};\n\nconst PASSWORD_TOGGLE_METRICS_BY_SIZE: Record<ControlSize, PasswordToggleMetrics> = {\n sm: {\n buttonSize: 18,\n leftOffset: 8,\n contentGap: 8,\n iconSize: 14,\n },\n md: {\n buttonSize: 20,\n leftOffset: 10,\n contentGap: 10,\n iconSize: 16,\n },\n lg: {\n buttonSize: 22,\n leftOffset: 12,\n contentGap: 12,\n iconSize: 18,\n },\n};\n\nconst getPasswordToggleMetrics = (size: ControlSize): PasswordToggleMetrics => PASSWORD_TOGGLE_METRICS_BY_SIZE[size];\n\nexport function ControlFrame({\n sdk,\n label,\n hint,\n error,\n htmlFor,\n required = false,\n useLabelWrapper = true,\n children,\n style,\n}: ControlFrameProps) {\n if (!label && !hint && !error) {\n return <>{children}</>;\n }\n\n const { theme, mutedText } = useUiKitTheme(sdk);\n const labelStyle: CSSProperties = {\n color: theme.colors.onSurface,\n fontSize: 14,\n fontWeight: 700,\n letterSpacing: '0.01em',\n };\n const wrapperStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n width: '100%',\n ...style,\n };\n\n if (!useLabelWrapper) {\n return (\n <div style={wrapperStyle}>\n {(label || hint) ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {label ? (\n <label htmlFor={htmlFor} style={labelStyle}>\n {label}\n {required ? <span style={{ color: theme.colors.negative, marginLeft: 4 }}>*</span> : null}\n </label>\n ) : null}\n {hint ? (\n <span\n style={{\n color: mutedText,\n fontSize: 13,\n lineHeight: 1.45,\n }}\n >\n {hint}\n </span>\n ) : null}\n </div>\n ) : null}\n {children}\n {error ? (\n <span\n style={{\n color: theme.colors.negative,\n fontSize: 13,\n fontWeight: 600,\n lineHeight: 1.45,\n }}\n >\n {error}\n </span>\n ) : null}\n </div>\n );\n }\n\n return (\n <label htmlFor={htmlFor} style={wrapperStyle}>\n {(label || hint) ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {label ? (\n <span style={labelStyle}>\n {label}\n {required ? <span style={{ color: theme.colors.negative, marginLeft: 4 }}>*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span\n style={{\n color: mutedText,\n fontSize: 13,\n lineHeight: 1.45,\n }}\n >\n {hint}\n </span>\n ) : null}\n </div>\n ) : null}\n {children}\n {error ? (\n <span\n style={{\n color: theme.colors.negative,\n fontSize: 13,\n fontWeight: 600,\n lineHeight: 1.45,\n }}\n >\n {error}\n </span>\n ) : null}\n </label>\n );\n}\n\nexport function Input({\n sdk,\n label,\n hint,\n error,\n controlSize = 'md',\n showPasswordToggle = false,\n id,\n disabled,\n style,\n type = 'text',\n ...rest\n}: InputProps) {\n const { theme, borderSoft, focusRing, surfaceMuted } = useUiKitTheme(sdk);\n const controlMetrics = getControlMetrics(controlSize);\n const passwordToggleMetrics = getPasswordToggleMetrics(controlSize);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const isPasswordField = type === 'password';\n const canTogglePasswordVisibility = isPasswordField && showPasswordToggle;\n const passwordToggleInset = Math.max(\n 0,\n passwordToggleMetrics.leftOffset + passwordToggleMetrics.buttonSize + passwordToggleMetrics.contentGap - controlMetrics.paddingX,\n );\n const leadingInset = Number(canTogglePasswordVisibility) * passwordToggleInset;\n const resolvedType = canTogglePasswordVisibility\n ? isPasswordVisible\n ? 'text'\n : 'password'\n : type;\n\n const inputStyle: CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n borderRadius: 16,\n border: `1px solid ${error ? theme.colors.negative : withAlpha(theme.colors.textLight, 0.5)}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'text',\n opacity: disabled ? 0.7 : 1,\n padding: getTextInputPadding(controlSize, { leadingInset }),\n outline: 'none',\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n boxShadow: error ? `0 0 0 3px ${withAlpha(theme.colors.negative, 0.12)}` : `0 0 0 0 ${focusRing}`,\n transition: 'border-color 160ms ease, box-shadow 160ms ease, background-color 160ms ease',\n ...style,\n };\n\n const input = canTogglePasswordVisibility ? (\n <div style={{ position: 'relative', width: '100%' }}>\n <button\n type=\"button\"\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isPasswordVisible}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n setIsPasswordVisible((currentValue) => !currentValue);\n }}\n style={{\n position: 'absolute',\n top: '50%',\n left: passwordToggleMetrics.leftOffset,\n transform: 'translateY(-50%)',\n zIndex: 1,\n width: passwordToggleMetrics.buttonSize,\n height: passwordToggleMetrics.buttonSize,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n padding: 0,\n margin: 0,\n borderRadius: 999,\n backgroundColor: 'transparent',\n color: isPasswordVisible ? theme.colors.primary : theme.colors.textLight,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n {isPasswordVisible ? (\n <svg\n width={passwordToggleMetrics.iconSize}\n height={passwordToggleMetrics.iconSize}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 3.5L17.5 16.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M8.825 8.786a2 2 0 0 0 2.389 2.389\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.42 6.774C3.422 7.73 2.777 8.815 2.5 9.375c1.182 2.39 3.934 5.625 7.5 5.625 1.155 0 2.224-.34 3.166-.847\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.043 4.455A7.7 7.7 0 0 1 10 3.75c3.566 0 6.318 3.235 7.5 5.625-.39.787-1.504 2.588-3.259 3.986\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg\n width={passwordToggleMetrics.iconSize}\n height={passwordToggleMetrics.iconSize}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 10c1.182-2.39 3.934-5.625 7.5-5.625S16.318 7.61 17.5 10c-1.182 2.39-3.934 5.625-7.5 5.625S3.682 12.39 2.5 10Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"10\" cy=\"10\" r=\"2.25\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n </svg>\n )}\n </button>\n <input {...rest} id={id} type={resolvedType} disabled={disabled} style={inputStyle} />\n </div>\n ) : (\n <input {...rest} id={id} type={resolvedType} disabled={disabled} style={inputStyle} />\n );\n\n return (\n <ControlFrame sdk={sdk} label={label} hint={hint} error={error} htmlFor={id} required={rest.required}>\n {input}\n </ControlFrame>\n );\n}","import {\n Children,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n type SelectHTMLAttributes,\n} from 'react';\n\nimport { withAlpha, type SmartSellSDK } from 'smartsell-sales-sdk';\n\nimport {\n getControlMetrics,\n getSelectControlPadding,\n getSelectIndicatorOffset,\n type ControlSize,\n} from './controlSize';\nimport { useUiKitTheme } from '../theme';\nimport { ControlFrame } from './Input';\n\ntype SelectChildProps = {\n value?: string | number | readonly string[];\n disabled?: boolean;\n label?: ReactNode;\n children?: ReactNode;\n};\n\ntype ParsedOption = {\n key: string;\n value: string;\n label: ReactNode;\n disabled: boolean;\n};\n\ntype ParsedGroup = {\n key: string;\n label?: ReactNode;\n options: ParsedOption[];\n};\n\ntype MenuPlacement = 'bottom' | 'top';\n\nconst MENU_OFFSET = 8;\nconst MENU_MAX_HEIGHT = 280;\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'dangerouslySetInnerHTML' | 'size'> {\n sdk: SmartSellSDK;\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n controlSize?: ControlSize;\n isMulti?: boolean;\n isFilterable?: boolean;\n}\n\nconst getOptionPadding = (size: ControlSize): string => {\n if (size === 'sm') return '10px 12px';\n if (size === 'lg') return '14px 16px';\n return '12px 14px';\n};\n\nfunction getTextContent(node: ReactNode): string {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map(getTextContent).join('');\n }\n\n if (isValidElement<SelectChildProps>(node)) {\n return getTextContent(node.props.children);\n }\n\n return '';\n}\n\nfunction normalizeSelectValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.length > 0 ? normalizeSelectValue(value[0]) : '';\n }\n\n return value == null ? '' : String(value);\n}\n\nfunction normalizeSelectValues(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeSelectValue(item));\n }\n\n if (value == null) {\n return [];\n }\n\n return [normalizeSelectValue(value)];\n}\n\nfunction buildOption(\n keyPrefix: string,\n index: number,\n props: SelectChildProps,\n groupLabel?: ReactNode,\n groupDisabled = false,\n): ParsedOption {\n const rawValue = props.value !== undefined ? props.value : getTextContent(props.children).trim();\n const normalizedValue = normalizeSelectValue(rawValue);\n\n return {\n key: `${keyPrefix}-${index}-${normalizedValue}`,\n value: normalizedValue,\n label: props.children ?? normalizedValue,\n disabled: groupDisabled || Boolean(props.disabled),\n };\n}\n\nfunction parseSelectChildren(children: ReactNode): ParsedGroup[] {\n const groups: ParsedGroup[] = [];\n const standaloneOptions: ParsedOption[] = [];\n let optionIndex = 0;\n let groupIndex = 0;\n\n const flushStandaloneOptions = () => {\n if (standaloneOptions.length === 0) {\n return;\n }\n\n groups.push({\n key: `standalone-${groups.length}`,\n options: [...standaloneOptions],\n });\n\n standaloneOptions.length = 0;\n };\n\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectChildProps>(child)) {\n return;\n }\n\n if (child.type === 'option') {\n standaloneOptions.push(buildOption('option', optionIndex, child.props));\n optionIndex += 1;\n return;\n }\n\n if (child.type !== 'optgroup') {\n return;\n }\n\n flushStandaloneOptions();\n\n const groupOptions: ParsedOption[] = [];\n let groupOptionIndex = 0;\n\n Children.forEach(child.props.children, (optionChild) => {\n if (!isValidElement<SelectChildProps>(optionChild) || optionChild.type !== 'option') {\n return;\n }\n\n groupOptions.push(\n buildOption(\n `group-${groupIndex}-option`,\n groupOptionIndex,\n optionChild.props,\n child.props.label,\n Boolean(child.props.disabled),\n ),\n );\n\n groupOptionIndex += 1;\n });\n\n if (groupOptions.length > 0) {\n groups.push({\n key: `group-${groupIndex}`,\n label: child.props.label,\n options: groupOptions,\n });\n\n groupIndex += 1;\n }\n });\n\n flushStandaloneOptions();\n\n return groups;\n}\n\nfunction filterSelectGroups(groups: ParsedGroup[], query: string): ParsedGroup[] {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return groups;\n }\n\n return groups\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n const optionText = getTextContent(option.label).trim().toLowerCase();\n return optionText.includes(normalizedQuery);\n }),\n }))\n .filter((group) => group.options.length > 0);\n}\n\nexport function Select({\n sdk,\n label,\n hint,\n error,\n controlSize = 'md',\n id,\n disabled,\n style,\n children,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n autoFocus,\n className,\n isMulti,\n isFilterable,\n multiple,\n ...rest\n}: SelectProps) {\n const { theme, borderSoft, mutedText, surfaceMuted, surfaceRaised } = useUiKitTheme(sdk);\n const generatedId = useId().replace(/:/g, '');\n const resolvedId = id ?? `ss-select-${generatedId}`;\n const isMultiSelect = Boolean(isMulti || multiple);\n const hasFilter = Boolean(isFilterable);\n const groups = parseSelectChildren(children);\n const flatOptions = groups.flatMap((group) => group.options);\n const enabledOptions = flatOptions.filter((option) => !option.disabled);\n const isControlled = value !== undefined;\n const fallbackValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n const [uncontrolledValues, setUncontrolledValues] = useState(fallbackValues);\n const [isOpen, setIsOpen] = useState(false);\n const [filterQuery, setFilterQuery] = useState('');\n const [menuPlacement, setMenuPlacement] = useState<MenuPlacement>('bottom');\n const [isPlacementResolved, setIsPlacementResolved] = useState(false);\n const [highlightedValue, setHighlightedValue] = useState(fallbackValues[0] ?? enabledOptions[0]?.value ?? '');\n const shellRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const selectedValues = isControlled ? normalizeSelectValues(value) : uncontrolledValues;\n const selectedValue = selectedValues[0] ?? '';\n const selectedOptions = flatOptions.filter((option) => selectedValues.includes(option.value));\n const selectedOption = selectedOptions[0] ?? null;\n const displayLabel = isMultiSelect\n ? selectedOptions.length > 0\n ? selectedOptions.map((option) => getTextContent(option.label).trim() || option.value).join(', ')\n : null\n : selectedOption?.label ?? (selectedValue ? selectedValue : null);\n const displayContent = displayLabel ?? '\\u00A0';\n const visibleGroups = hasFilter ? filterSelectGroups(groups, filterQuery) : groups;\n const visibleOptions = visibleGroups.flatMap((group) => group.options);\n const visibleEnabledOptions = visibleOptions.filter((option) => !option.disabled);\n const visibleEnabledValues = visibleEnabledOptions.map((option) => option.value);\n const selectedValuesKey = selectedValues.join('\\u0000');\n const visibleEnabledValuesKey = visibleEnabledValues.join('\\u0000');\n const indicatorOffset = getSelectIndicatorOffset(controlSize);\n const controlMetrics = getControlMetrics(controlSize);\n const listboxId = `${resolvedId}-listbox`;\n const scrollbarThumbColor = withAlpha(theme.colors.onSurface, 0.22);\n const scrollbarThumbHoverColor = withAlpha(theme.colors.onSurface, 0.32);\n const highlightedOption = visibleOptions.find((option) => option.value === highlightedValue) ?? null;\n const optionHoverBackground = withAlpha(theme.colors.primary, 1);\n const optionSelectedBackground = withAlpha(theme.colors.primary, 1);\n const triggerShadow = error ? `0 0 0 3px ${withAlpha(theme.colors.negative, 0.12)}` : 'none';\n const buttonPassthroughProps = Object.fromEntries(\n Object.entries(rest).filter(([key]) => key.startsWith('aria-') || key.startsWith('data-')),\n );\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n const invalidValues = uncontrolledValues.filter(\n (currentValue) => !flatOptions.some((option) => option.value === currentValue),\n );\n\n if (invalidValues.length === 0) {\n return;\n }\n\n const nextValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue).filter(\n (currentValue) => flatOptions.some((option) => option.value === currentValue),\n )\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n }, [children, defaultValue, enabledOptions, flatOptions, isControlled, isMultiSelect, uncontrolledValues]);\n\n useEffect(() => {\n if (!isOpen) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(false);\n return;\n }\n\n const nextHighlightedValue = [...selectedValues].reverse().find((currentValue) => visibleEnabledValues.includes(currentValue))\n ?? visibleEnabledOptions[0]?.value\n ?? '';\n setHighlightedValue(nextHighlightedValue);\n }, [isOpen, selectedValuesKey, visibleEnabledValuesKey]);\n\n useEffect(() => {\n if (!isOpen || !hasFilter) {\n return;\n }\n\n searchInputRef.current?.focus();\n }, [hasFilter, isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n const menuElement = menuRef.current;\n\n if (!triggerRect || !menuElement) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(true);\n return;\n }\n\n const measuredMenuHeight = menuElement.getBoundingClientRect().height;\n const menuHeight = Math.min(measuredMenuHeight || menuElement.scrollHeight, MENU_MAX_HEIGHT);\n const availableBelow = window.innerHeight - triggerRect.bottom - MENU_OFFSET;\n const availableAbove = triggerRect.top - MENU_OFFSET;\n const nextPlacement: MenuPlacement = availableBelow < menuHeight && availableAbove >= menuHeight ? 'top' : 'bottom';\n\n setMenuPlacement(nextPlacement);\n setIsPlacementResolved(true);\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [isOpen, visibleOptions.length]);\n\n useEffect(() => {\n if (isOpen) {\n return;\n }\n\n setFilterQuery('');\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (shellRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n const form = hiddenSelectRef.current?.form;\n\n if (!form) {\n return;\n }\n\n const handleReset = () => {\n queueMicrotask(() => {\n const nextValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n setIsOpen(false);\n });\n };\n\n form.addEventListener('reset', handleReset);\n\n return () => {\n form.removeEventListener('reset', handleReset);\n };\n }, [defaultValue, enabledOptions, isControlled, isMultiSelect]);\n\n const syncHiddenSelect = (nextValues: string[]) => {\n const selectElement = hiddenSelectRef.current;\n\n if (!selectElement) {\n return;\n }\n\n if (isMultiSelect) {\n Array.from(selectElement.options).forEach((optionElement) => {\n optionElement.selected = nextValues.includes(optionElement.value);\n });\n } else {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value');\n\n if (descriptor?.set) {\n descriptor.set.call(selectElement, nextValues[0] ?? '');\n } else {\n selectElement.value = nextValues[0] ?? '';\n }\n }\n\n selectElement.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const updateMultiSelection = (nextValues: string[]) => {\n if (!isMultiSelect || disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '');\n syncHiddenSelect(nextValues);\n };\n\n const toggleVisibleSelection = (checked: boolean) => {\n if (!isMultiSelect || disabled || visibleEnabledValues.length === 0) {\n return;\n }\n\n const nextValues = checked\n ? Array.from(new Set([...selectedValues, ...visibleEnabledValues]))\n : selectedValues.filter((currentValue) => !visibleEnabledValues.includes(currentValue));\n\n updateMultiSelection(nextValues);\n };\n\n const commitSelection = (nextValue: string) => {\n if (disabled) {\n if (!isMultiSelect) {\n setIsOpen(false);\n }\n\n return;\n }\n\n if (isMultiSelect) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((currentValue) => currentValue !== nextValue)\n : [...selectedValues, nextValue];\n\n updateMultiSelection(nextValues);\n return;\n }\n\n if (nextValue === selectedValue) {\n setIsOpen(false);\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues([nextValue]);\n }\n\n setHighlightedValue(nextValue);\n setIsOpen(false);\n\n syncHiddenSelect([nextValue]);\n\n buttonRef.current?.focus();\n };\n\n const handleHiddenSelectChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const nextValues = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : [event.currentTarget.value];\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '');\n onChange?.(event);\n };\n\n const visibleSelectedCount = visibleEnabledValues.filter((currentValue) => selectedValues.includes(currentValue)).length;\n const hasSomeVisibleSelected = visibleSelectedCount > 0 && visibleSelectedCount < visibleEnabledValues.length;\n const hasAllVisibleSelected = visibleEnabledValues.length > 0 && visibleSelectedCount === visibleEnabledValues.length;\n const canToggleVisibleSelection = !disabled && visibleEnabledValues.length > 0;\n const bulkToggleControl = isMultiSelect ? (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-label=\"Toggle all visible options\"\n aria-checked={hasAllVisibleSelected ? true : hasSomeVisibleSelected ? 'mixed' : false}\n disabled={!canToggleVisibleSelection}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.stopPropagation();\n toggleVisibleSelection(!hasAllVisibleSelected);\n }}\n style={{\n width: 20,\n height: 20,\n padding: 0,\n margin: 0,\n borderRadius: 999,\n border: `1.5px solid ${hasAllVisibleSelected || hasSomeVisibleSelected ? theme.colors.secondary : withAlpha(theme.colors.onSurface, 0.22)}`,\n backgroundColor: hasAllVisibleSelected || hasSomeVisibleSelected ? theme.colors.secondary : theme.colors.surface,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n cursor: canToggleVisibleSelection ? 'pointer' : 'not-allowed',\n opacity: canToggleVisibleSelection ? 1 : 0.45,\n }}\n >\n {hasAllVisibleSelected ? (\n <span\n aria-hidden=\"true\"\n style={{\n width: 8,\n height: 8,\n borderRadius: 999,\n backgroundColor: theme.colors.surface,\n }}\n />\n ) : hasSomeVisibleSelected ? (\n <span\n aria-hidden=\"true\"\n style={{\n width: 8,\n height: 2,\n borderRadius: 999,\n backgroundColor: theme.colors.surface,\n }}\n />\n ) : null}\n </button>\n ) : null;\n\n const moveHighlight = (direction: 1 | -1) => {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n const currentIndex = visibleEnabledOptions.findIndex((option) => option.value === highlightedValue);\n\n if (currentIndex === -1) {\n setHighlightedValue(\n direction === 1 ? visibleEnabledOptions[0].value : visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n const nextIndex = Math.max(0, Math.min(visibleEnabledOptions.length - 1, currentIndex + direction));\n setHighlightedValue(visibleEnabledOptions[nextIndex].value);\n };\n\n const handleTriggerClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event as unknown as MouseEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled || flatOptions.length === 0) {\n return;\n }\n\n setIsOpen((current) => !current);\n };\n\n const handleTriggerFocus = (event: FocusEvent<HTMLButtonElement>) => {\n onFocus?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (!shellRef.current?.contains(nextTarget)) {\n setIsOpen(false);\n }\n\n onBlur?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event as unknown as KeyboardEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled || visibleEnabledOptions.length === 0) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[0].value);\n return;\n }\n\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[visibleEnabledOptions.length - 1].value);\n return;\n }\n\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen) {\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[0].value);\n return;\n }\n\n if (event.key === 'End' && isOpen) {\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[visibleEnabledOptions.length - 1].value);\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n if (!isOpen) {\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[0].value);\n return;\n }\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const handleFilterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const select = (\n <div ref={shellRef} style={{ position: 'relative', width: '100%' }}>\n <button\n {...buttonPassthroughProps}\n id={resolvedId}\n ref={buttonRef}\n type=\"button\"\n className={className}\n title={rest.title}\n disabled={disabled || flatOptions.length === 0}\n autoFocus={autoFocus}\n tabIndex={rest.tabIndex}\n role=\"combobox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error ? true : rest['aria-invalid']}\n aria-required={rest.required}\n onClick={handleTriggerClick}\n onFocus={handleTriggerFocus}\n onBlur={handleTriggerBlur}\n onKeyDown={handleTriggerKeyDown}\n style={{\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n borderRadius: 16,\n border: `1px solid ${error ? theme.colors.negative : withAlpha(theme.colors.textLight, 0.5)}`,\n backgroundColor: theme.colors.surface,\n color: displayLabel ? theme.colors.onSurface : mutedText,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.7 : 1,\n padding: getSelectControlPadding(controlSize),\n outline: 'none',\n font: 'inherit',\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n transition: 'border-color 160ms ease, box-shadow 160ms ease, background-color 160ms ease',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n minWidth: 0,\n textAlign: 'left',\n ...style,\n }}\n >\n <span\n style={{\n display: 'block',\n flex: '1 1 auto',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {displayContent}\n </span>\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n right: indicatorOffset,\n top: '50%',\n transform: `translateY(-50%) rotate(${isOpen ? 180 : 0}deg)`,\n transformOrigin: 'center',\n color: disabled ? withAlpha(theme.colors.onSurface, 0.42) : mutedText,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n transition: 'transform 160ms ease, color 160ms ease',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 7.75L10 12l4.25-4.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <select\n {...rest}\n id={`${resolvedId}-native`}\n ref={hiddenSelectRef}\n name={rest.name}\n disabled={disabled}\n multiple={isMultiSelect}\n value={isMultiSelect ? selectedValues : selectedValue}\n onChange={handleHiddenSelectChange}\n tabIndex={-1}\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: 0,\n border: 0,\n opacity: 0,\n pointerEvents: 'none',\n clipPath: 'inset(50%)',\n }}\n >\n {children}\n </select>\n\n {isOpen ? (\n <>\n <style>\n {`\n #${listboxId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n }\n\n #${listboxId}::-webkit-scrollbar {\n width: 8px;\n }\n\n #${listboxId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n }\n `}\n </style>\n <div\n ref={menuRef}\n style={{\n position: 'absolute',\n top: menuPlacement === 'bottom' ? `calc(100% + ${MENU_OFFSET}px)` : 'auto',\n bottom: menuPlacement === 'top' ? `calc(100% + ${MENU_OFFSET}px)` : 'auto',\n left: 0,\n right: 0,\n zIndex: 30,\n maxHeight: MENU_MAX_HEIGHT,\n overflow: 'hidden',\n boxSizing: 'border-box',\n borderRadius: 20,\n border: `1px solid ${withAlpha(theme.colors.textLight, 0.5)}`,\n backgroundColor: surfaceRaised,\n // boxShadow: `0 10px 24px ${withAlpha(theme.colors.onSurface, 0.08)}`,\n padding: 8,\n backdropFilter: 'blur(6px)',\n visibility: isPlacementResolved ? 'visible' : 'hidden',\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n }}\n >\n {hasFilter ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n gap: 8,\n padding: '4px 4px 10px',\n borderBottom: `1px solid ${withAlpha(theme.colors.onSurface, 0.08)}`,\n flexShrink: 0,\n }}\n >\n {bulkToggleControl}\n <input\n ref={searchInputRef}\n type=\"search\"\n value={filterQuery}\n onChange={(event) => {\n setFilterQuery(event.currentTarget.value);\n }}\n onKeyDown={handleFilterKeyDown}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n placeholder=\"Search options\"\n aria-label=\"Search options\"\n style={{\n flex: '1 1 auto',\n width: '100%',\n border: `1px solid ${withAlpha(theme.colors.textLight, 0.5)}`,\n backgroundColor: theme.colors.surface,\n padding: '8px 12px',\n borderRadius: 12,\n font: 'inherit',\n fontSize: 12,\n lineHeight: 1.4,\n color: theme.colors.textLight,\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n ) : isMultiSelect ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: '4px 4px 10px',\n borderBottom: `1px solid ${withAlpha(theme.colors.onSurface, 0.08)}`,\n flexShrink: 0,\n }}\n >\n {bulkToggleControl}\n </div>\n ) : null}\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={resolvedId}\n aria-multiselectable={isMultiSelect || undefined}\n style={{\n overflowY: 'auto',\n overflowX: 'hidden',\n minHeight: 0,\n flex: '1 1 auto',\n }}\n >\n {visibleGroups.length === 0 ? (\n <div\n style={{\n padding: '14px 12px',\n color: mutedText,\n fontSize: 13,\n textAlign: 'center',\n }}\n >\n No options found.\n </div>\n ) : visibleGroups.map((group) => (\n <div\n key={group.key}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n marginTop: group.label ? 4 : 0,\n }}\n >\n {group.label ? (\n <span\n style={{\n padding: '6px 8px 2px',\n color: mutedText,\n fontSize: 11,\n fontWeight: 800,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n {group.label}\n </span>\n ) : null}\n {group.options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n const isHighlighted = option.value === highlightedValue;\n const isActive = isSelected || isHighlighted;\n\n return (\n <div\n key={option.key}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onMouseEnter={() => {\n if (!option.disabled) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n if (!option.disabled) {\n commitSelection(option.value);\n }\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n width: '100%',\n minWidth: 0,\n boxSizing: 'border-box',\n borderRadius: 14,\n padding: getOptionPadding(controlSize),\n cursor: option.disabled ? 'not-allowed' : 'pointer',\n color: option.disabled\n ? withAlpha(theme.colors.onSurface, 0.38)\n : isActive\n ? theme.colors.onPrimary\n : theme.colors.onSurface,\n backgroundColor: isSelected\n ? optionSelectedBackground\n : isHighlighted\n ? optionHoverBackground\n : 'transparent',\n fontWeight: isSelected ? 700 : 500,\n transition: 'background-color 140ms ease, color 140ms ease',\n }}\n >\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flex: '1 1 auto',\n minWidth: 0,\n }}\n >\n {isMultiSelect ? (\n <span\n aria-hidden=\"true\"\n style={{\n width: 10,\n height: 10,\n borderRadius: 999,\n flexShrink: 0,\n border: `1.5px solid ${isSelected ? theme.colors.secondary : 'currentColor'}`,\n backgroundColor: isSelected ? theme.colors.secondary : 'transparent',\n opacity: option.disabled ? 0.45 : 1,\n transition: 'background-color 140ms ease, border-color 140ms ease, opacity 140ms ease',\n }}\n />\n ) : null}\n <span\n style={{\n display: 'block',\n flex: '1 1 auto',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {option.label}\n </span>\n </span>\n {isSelected ? (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.primary,\n flexShrink: 0,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n </>\n ) : null}\n </div>\n );\n\n return (\n <ControlFrame\n sdk={sdk}\n label={label}\n hint={hint}\n error={error}\n htmlFor={resolvedId}\n required={rest.required}\n useLabelWrapper={false}\n >\n {select}\n </ControlFrame>\n );\n}","import type { CSSProperties, ReactNode, TextareaHTMLAttributes } from 'react';\n\nimport { withAlpha, type SmartSellSDK } from 'smartsell-sales-sdk';\n\nimport { useUiKitTheme } from '../theme';\nimport { ControlFrame } from './Input';\n\ntype ControlSize = 'sm' | 'md' | 'lg';\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'dangerouslySetInnerHTML'> {\n sdk: SmartSellSDK;\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n controlSize?: ControlSize;\n}\n\nconst getPadding = (size: ControlSize): string => {\n if (size === 'sm') return '10px 12px';\n if (size === 'lg') return '16px 18px';\n return '13px 16px';\n};\n\nexport function Textarea({\n sdk,\n label,\n hint,\n error,\n controlSize = 'md',\n id,\n disabled,\n style,\n rows = 5,\n ...rest\n}: TextareaProps) {\n const { theme, borderSoft, focusRing, surfaceMuted } = useUiKitTheme(sdk);\n\n const textareaStyle: CSSProperties = {\n border: `1px solid ${error ? theme.colors.negative : withAlpha(theme.colors.textLight, 0.5)}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'text',\n opacity: disabled ? 0.7 : 1,\n width: '100%',\n boxSizing: 'border-box',\n borderRadius: 16,\n padding: getPadding(controlSize),\n outline: 'none',\n boxShadow: error ? `0 0 0 3px ${withAlpha(theme.colors.negative, 0.12)}` : `0 0 0 0 ${focusRing}`,\n transition: 'border-color 160ms ease, box-shadow 160ms ease, background-color 160ms ease',\n resize: 'vertical',\n ...style,\n };\n\n const textarea = (\n <textarea {...rest} id={id} disabled={disabled} rows={rows} style={textareaStyle} />\n );\n\n return (\n <ControlFrame sdk={sdk} label={label} hint={hint} error={error} htmlFor={id} required={rest.required}>\n {textarea}\n </ControlFrame>\n );\n}"],"mappings":"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","names":["import_react","import_smartsell_sales_sdk","import_smartsell_sales_sdk","import_jsx_runtime","import_react","import_smartsell_sales_sdk","import_react","import_jsx_runtime","withAlpha","_a","import_jsx_runtime","import_react","import_smartsell_sales_sdk","import_jsx_runtime","import_react","import_smartsell_sales_sdk","import_jsx_runtime","_a","_b","_c","_d","import_smartsell_sales_sdk","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Button.tsx","../src/foundation/async.ts","../src/foundation/color.ts","../src/foundation/componentState.ts","../src/foundation/controlSize.ts","../src/foundation/motion.ts","../src/foundation/shadow.ts","../src/foundation/shape.ts","../src/foundation/theme.ts","../src/components/Card.tsx","../src/components/CardSmall.tsx","../src/components/Checkbox.tsx","../src/components/ComposableModal.tsx","../src/components/Modal.tsx","../src/components/DatePicker.tsx","../src/components/Input.tsx","../src/components/Separator.tsx","../src/componentsBase/select/SelectBase.tsx","../src/componentsBase/select/utils.ts","../src/componentsBase/select/childrenAdapter.ts","../src/components/Select.tsx","../src/components/SelectAsync.tsx","../src/componentsBase/select/objectOptionsAdapter.tsx","../src/components/Table.tsx","../src/componentsBase/table/TableBase.tsx","../src/componentsBase/table/utils.ts","../src/componentsBase/table/downloads.ts","../src/components/TableAsync.tsx","../src/components/Textarea.tsx"],"sourcesContent":["export { Button, type ButtonProps } from './components/Button';\nexport { Card, type CardProps } from './components/Card';\nexport { CardSmall, type CardSmallProps } from './components/CardSmall';\nexport { Checkbox, type CheckboxProps } from './components/Checkbox';\nexport {\n ComposableModal,\n createModalSlotIds,\n type ComposableModalProps,\n type ComposableModalSlotRenderProps,\n type ComposableModalSlotRenderer,\n type ModalSlotContext,\n type ModalSlotIds,\n} from './components/ComposableModal';\nexport {\n DatePicker,\n type DatePickerChangeContext,\n type DatePickerChangeReason,\n type DatePickerMode,\n type DatePickerProps,\n type DatePickerValue,\n} from './components/DatePicker';\nexport { Input, type InputProps } from './components/Input';\nexport {\n type ModalAction,\n Modal,\n type ModalProps,\n type ModalTheme,\n type ModalThemeSource,\n type StandardModalProps,\n} from './components/Modal';\nexport { Separator, type SeparatorOrientation, type SeparatorProps } from './components/Separator';\nexport { Select, type SelectProps } from './components/Select';\nexport {\n SelectAsync,\n type SelectAsyncLoadContext,\n type SelectAsyncLoadResult,\n type SelectAsyncOption,\n type SelectAsyncOptionValue,\n type SelectAsyncProps,\n} from './components/SelectAsync';\nexport {\n Table,\n type TableProps,\n} from './components/Table';\nexport {\n TableAsync,\n type TableAsyncProps,\n} from './components/TableAsync';\nexport type {\n SharedTableProps,\n TableAction,\n TableActionSource,\n TableActionTone,\n TableAsyncLoadContext,\n TableAsyncLoadResult,\n TableColumn,\n TableColumnAlign,\n TableColumnType,\n TableLabels,\n} from './componentsBase/table/types';\nexport type { ControlSize } from './foundation';\nexport { Textarea, type TextareaProps } from './components/Textarea';\nexport { useUiKitTheme, type UiKitThemeTokens } from './foundation';","import { useState, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from 'react';\n\nimport {\n DISABLED_COMPONENT_OPACITY,\n STANDARD_COMPONENT_BORDER_RADIUS,\n getButtonSizeStyles,\n getComponentShadow,\n useUiKitTheme,\n withAlpha,\n type ControlSize,\n} from '../foundation';\n\ntype ButtonVariant = 'solid' | 'outline' | 'ghost';\ntype ButtonSize = ControlSize;\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'dangerouslySetInnerHTML'> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n}\n\nexport function Button({\n variant = 'solid',\n size = 'sm',\n leadingIcon,\n trailingIcon,\n children,\n disabled,\n style,\n type = 'button',\n onMouseEnter,\n onMouseLeave,\n onMouseDown,\n onMouseUp,\n onBlur,\n onKeyDown,\n onKeyUp,\n onTouchStart,\n onTouchEnd,\n onTouchCancel,\n ...rest\n}: ButtonProps) {\n const { theme } = useUiKitTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n const buttonShadow = getComponentShadow(theme);\n\n const variantStyles: Record<ButtonVariant, CSSProperties> = {\n solid: {\n backgroundColor: theme.colors.primary,\n borderColor: theme.colors.primary,\n color: theme.colors.onPrimary,\n },\n outline: {\n backgroundColor: 'transparent',\n borderColor: theme.colors.textLight,\n color: theme.colors.text,\n },\n ghost: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n },\n };\n\n const interactiveColor = variant === 'solid' ? theme.colors.primary : theme.colors.text;\n const isInteractive = !disabled;\n const buttonTransform = isPressed\n ? 'translateY(1px) scale(0.985)'\n : isHovered\n ? 'translateY(-0.5px)'\n : 'translateY(0)';\n\n const interactionStyles: Record<ButtonVariant, CSSProperties> = {\n solid: {\n transform: buttonTransform,\n filter: undefined,\n },\n outline: {\n transform: buttonTransform,\n backgroundColor: isPressed\n ? withAlpha(interactiveColor, 0.14)\n : isHovered\n ? withAlpha(interactiveColor, 0.08)\n : 'transparent',\n },\n ghost: {\n transform: buttonTransform,\n backgroundColor: isPressed || isHovered ? theme.colors.primary : 'transparent',\n borderColor: isPressed || isHovered ? withAlpha(theme.colors.primary, 0.5) : 'transparent',\n color: isPressed || isHovered ? theme.colors.onPrimary : theme.colors.text,\n },\n };\n\n return (\n <button\n {...rest}\n type={type}\n disabled={disabled}\n onMouseEnter={(event) => {\n if (isInteractive) {\n setIsHovered(true);\n }\n\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setIsHovered(false);\n setIsPressed(false);\n onMouseLeave?.(event);\n }}\n onMouseDown={(event) => {\n if (isInteractive) {\n setIsPressed(true);\n }\n\n onMouseDown?.(event);\n }}\n onMouseUp={(event) => {\n setIsPressed(false);\n onMouseUp?.(event);\n }}\n onBlur={(event) => {\n setIsHovered(false);\n setIsPressed(false);\n onBlur?.(event);\n }}\n onKeyDown={(event) => {\n if (isInteractive && (event.key === ' ' || event.key === 'Enter')) {\n setIsPressed(true);\n }\n\n onKeyDown?.(event);\n }}\n onKeyUp={(event) => {\n setIsPressed(false);\n onKeyUp?.(event);\n }}\n onTouchStart={(event) => {\n if (isInteractive) {\n setIsPressed(true);\n }\n\n onTouchStart?.(event);\n }}\n onTouchEnd={(event) => {\n setIsPressed(false);\n onTouchEnd?.(event);\n }}\n onTouchCancel={(event) => {\n setIsPressed(false);\n onTouchCancel?.(event);\n }}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 10,\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n borderStyle: 'solid',\n borderWidth: 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontWeight: 700,\n letterSpacing: '0.01em',\n opacity: disabled ? DISABLED_COMPONENT_OPACITY : 1,\n boxShadow: variant === 'ghost' && !isHovered ? 'none' : buttonShadow,\n transitionDuration: '0.3s',\n width: style?.width ?? 'fit-content',\n maxWidth: style?.maxWidth ?? 'fit-content',\n ...getButtonSizeStyles(size),\n ...variantStyles[variant],\n ...(isInteractive ? interactionStyles[variant] : undefined),\n ...style,\n }}\n >\n {leadingIcon}\n {children}\n {trailingIcon}\n </button>\n );\n}","export const DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS = 1500;","export function withAlpha(hex: string, alpha: number): string {\n const normalized = hex.replace('#', '').trim();\n const value = normalized.length === 3\n ? normalized.split('').map((char) => char + char).join('')\n : normalized;\n\n const red = Number.parseInt(value.slice(0, 2), 16);\n const green = Number.parseInt(value.slice(2, 4), 16);\n const blue = Number.parseInt(value.slice(4, 6), 16);\n\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n}","export const DISABLED_COMPONENT_OPACITY = 0.5;\nexport const DISABLED_FIELD_OPACITY = 0.7;","import type { CSSProperties } from 'react';\n\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\ntype ControlMetrics = {\n height: number;\n fontSize: number;\n lineHeight: string;\n paddingX: number;\n paddingY: number;\n buttonPaddingX: number;\n selectPaddingRight: number;\n selectIndicatorOffset: number;\n};\n\ntype TextInputPaddingOptions = {\n leadingInset?: number;\n trailingInset?: number;\n};\n\nconst CONTROL_METRICS_BY_SIZE: Record<ControlSize, ControlMetrics> = {\n sm: {\n height: 30,\n fontSize: 13,\n lineHeight: '16px',\n paddingX: 12,\n paddingY: 6,\n buttonPaddingX: 14,\n selectPaddingRight: 40,\n selectIndicatorOffset: 12,\n },\n md: {\n height: 38,\n fontSize: 14,\n lineHeight: '18px',\n paddingX: 16,\n paddingY: 9,\n buttonPaddingX: 18,\n selectPaddingRight: 44,\n selectIndicatorOffset: 16,\n },\n lg: {\n height: 46,\n fontSize: 15,\n lineHeight: '18px',\n paddingX: 18,\n paddingY: 13,\n buttonPaddingX: 20,\n selectPaddingRight: 48,\n selectIndicatorOffset: 18,\n },\n};\n\nexport const getControlMetrics = (size: ControlSize): ControlMetrics => CONTROL_METRICS_BY_SIZE[size];\n\nexport const getTextInputPadding = (size: ControlSize, options: TextInputPaddingOptions = {}): string => {\n const metrics = getControlMetrics(size);\n const leadingInset = options.leadingInset ?? 0;\n const trailingInset = options.trailingInset ?? 0;\n\n return `${metrics.paddingY}px ${metrics.paddingX + trailingInset}px ${metrics.paddingY}px ${metrics.paddingX + leadingInset}px`;\n};\n\nexport const getSelectControlPadding = (size: ControlSize): string => {\n const metrics = getControlMetrics(size);\n return `${metrics.paddingY}px ${metrics.selectPaddingRight}px ${metrics.paddingY}px ${metrics.paddingX}px`;\n};\n\nexport const getSelectIndicatorOffset = (size: ControlSize): number => getControlMetrics(size).selectIndicatorOffset;\n\nexport const getButtonSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n boxSizing: 'border-box',\n height: metrics.height,\n padding: `0 ${metrics.buttonPaddingX}px`,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};","export const FIELD_SURFACE_TRANSITION = 'border-color 160ms ease, box-shadow 160ms ease, background-color 160ms ease';","import type { SmartSellTheme } from 'smartsell-theme';\n\ntype ThemeColorMap = SmartSellTheme['colors'] & Record<string, string | undefined>;\n\nconst LIGHT_SHADOW = '#B8B8B8';\nconst DARK_SHADOW = '#181818';\n\nexport function getComponentShadow(theme: SmartSellTheme): string {\n const colors = theme.colors as ThemeColorMap;\n const fallbackShadow = `${theme.title}`.toUpperCase() === 'DARK' ? DARK_SHADOW : LIGHT_SHADOW;\n const shadowColor = colors.shadow ?? fallbackShadow;\n\n return `${shadowColor} 0px 4px 5px`;\n}","export const STANDARD_COMPONENT_BORDER_RADIUS = 16;","import { useMemo } from 'react';\n\nimport {\n darkTheme,\n lightTheme,\n useThemeValue,\n type SmartSellTheme,\n type ThemeColors,\n} from 'smartsell-theme';\n\nimport { withAlpha } from './color';\n\nexport const UI_KIT_THEME_COLOR_NAMES = [\n 'primary',\n 'primaryLight',\n 'primaryDark',\n 'shadow',\n 'secondary',\n 'background',\n 'surface',\n 'text',\n 'textLight',\n 'positive',\n 'negative',\n 'warning',\n 'info',\n 'onPrimary',\n 'onSecondary',\n] as const;\n\nexport type UiKitThemeColorName = (typeof UI_KIT_THEME_COLOR_NAMES)[number];\nexport type UiKitThemeColors = {\n [key in UiKitThemeColorName]: ThemeColors[key];\n};\n\nexport interface UiKitTheme extends Omit<SmartSellTheme, 'title' | 'colors' | 'color'> {\n title: SmartSellTheme['title'];\n colors: UiKitThemeColors;\n color: UiKitThemeColors;\n}\n\nconst DEFAULT_THEME_COLORS = {\n primary: '#BE1E2D',\n primaryLight: '#d33948',\n primaryDark: '#A31826',\n shadow: '#B8B8B8',\n onPrimary: '#ffffff',\n secondary: '#b3b3b3',\n onSecondary: '#000',\n background: '#e6e6e6',\n surface: '#dad9d9',\n text: '#2b2b2b',\n textLight: '#4f4f4f',\n positive: '#006705',\n negative: '#c90000',\n warning: '#876e00',\n info: '#00517d',\n} as const;\n\nconst expectedThemeColorNameSet = new Set<string>(UI_KIT_THEME_COLOR_NAMES);\n\nconst assertThemeColorSchema = (theme: SmartSellTheme): void => {\n const availableColorNames = Object.keys(theme.colors);\n const missingColorNames = UI_KIT_THEME_COLOR_NAMES.filter((colorName) => {\n return !availableColorNames.includes(colorName);\n });\n const unexpectedColorNames = availableColorNames.filter((colorName) => {\n return !expectedThemeColorNameSet.has(colorName);\n });\n\n if (missingColorNames.length === 0 && unexpectedColorNames.length === 0) {\n return;\n }\n\n throw new Error(\n `smartsell-ui-kit expected smartsell-theme color schema [${UI_KIT_THEME_COLOR_NAMES.join(', ')}], but theme \"${theme.title}\" exposes [${availableColorNames.join(', ')}]. Missing: [${missingColorNames.join(', ')}]. Unexpected: [${unexpectedColorNames.join(', ')}].`,\n );\n};\n\nassertThemeColorSchema(lightTheme);\nassertThemeColorSchema(darkTheme);\n\nexport interface UiKitThemeTokens {\n theme: UiKitTheme;\n borderSoft: string;\n borderStrong: string;\n surfaceMuted: string;\n surfaceRaised: string;\n overlay: string;\n focusRing: string;\n mutedText: string;\n}\n\nexport function normalizeUiKitTheme(theme: SmartSellTheme): UiKitTheme {\n const colors = theme.colors as Partial<ThemeColors>;\n const isDarkTheme = `${theme.title}`.toUpperCase() === 'DARK';\n const primary = colors.primary ?? DEFAULT_THEME_COLORS.primary;\n const background = colors.background ?? DEFAULT_THEME_COLORS.background;\n const surface = colors.surface ?? background;\n const text = colors.text ?? DEFAULT_THEME_COLORS.text;\n const textLight = colors.textLight ?? text;\n\n const normalizedColors: UiKitThemeColors = {\n primary,\n primaryLight: colors.primaryLight ?? primary,\n primaryDark: colors.primaryDark ?? primary,\n shadow: colors.shadow ?? (isDarkTheme ? '#181818' : DEFAULT_THEME_COLORS.shadow),\n secondary: colors.secondary ?? DEFAULT_THEME_COLORS.secondary,\n background,\n surface,\n text,\n textLight,\n positive: colors.positive ?? DEFAULT_THEME_COLORS.positive,\n negative: colors.negative ?? DEFAULT_THEME_COLORS.negative,\n warning: colors.warning ?? DEFAULT_THEME_COLORS.warning,\n info: colors.info ?? DEFAULT_THEME_COLORS.info,\n onPrimary: colors.onPrimary ?? DEFAULT_THEME_COLORS.onPrimary,\n onSecondary: colors.onSecondary ?? text,\n };\n\n return {\n ...theme,\n colors: normalizedColors,\n color: normalizedColors,\n } as UiKitTheme;\n}\n\nexport function createUiKitThemeTokens(themeSource: SmartSellTheme): UiKitThemeTokens {\n const theme = normalizeUiKitTheme(themeSource);\n\n return {\n theme,\n borderSoft: withAlpha(theme.colors.text, 0.1),\n borderStrong: withAlpha(theme.colors.text, 0.16),\n surfaceMuted: withAlpha(theme.colors.text, 0.04),\n surfaceRaised: withAlpha(theme.colors.surface, 0.94),\n overlay: withAlpha('#030712', 0.62),\n focusRing: withAlpha(theme.colors.primary, 0.22),\n mutedText: withAlpha(theme.colors.text, 0.72),\n };\n}\n\nexport function useUiKitTheme(): UiKitThemeTokens {\n const activeTheme = useThemeValue();\n\n return useMemo(() => createUiKitThemeTokens(activeTheme), [activeTheme]);\n}","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport { withAlpha, getComponentShadow, useUiKitTheme } from '../foundation';\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n children: ReactNode;\n eyebrow?: ReactNode;\n title?: ReactNode;\n action?: ReactNode;\n padded?: boolean;\n}\n\nexport function Card({\n children,\n eyebrow,\n title,\n action,\n padded = true,\n style,\n ...rest\n}: CardProps) {\n const { theme } = useUiKitTheme();\n const componentShadow = getComponentShadow(theme);\n\n return (\n <div\n {...rest}\n style={{\n borderRadius: 28,\n border: `1px solid ${withAlpha(theme.colors.text, 0.5)}`,\n background: `${withAlpha(theme.colors.background, 0.7)}`,\n boxShadow: componentShadow,\n color: theme.colors.text,\n padding: padded ? 24 : undefined,\n ...style,\n }}\n >\n {(eyebrow || title || action) && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: 16,\n marginBottom: 18,\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n {eyebrow ? (\n <span\n style={{\n color: theme.colors.textLight,\n fontSize: 12,\n fontWeight: 800,\n letterSpacing: '0.16em',\n textTransform: 'uppercase',\n }}\n >\n {eyebrow}\n </span>\n ) : null}\n {title ? (\n <div\n style={{\n color: theme.colors.text,\n fontSize: 24,\n fontWeight: 700,\n lineHeight: 1.2,\n }}\n >\n {title}\n </div>\n ) : null}\n </div>\n {action ? <div style={{ color: theme.colors.text }}>{action}</div> : null}\n </div>\n )}\n {children}\n </div>\n );\n}","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport {\n STANDARD_COMPONENT_BORDER_RADIUS,\n withAlpha,\n getComponentShadow,\n useUiKitTheme,\n} from '../foundation';\n\nexport interface CardSmallProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title' | 'color'> {\n title?: ReactNode;\n value?: ReactNode;\n icon?: ReactNode;\n color?: CSSProperties['color'];\n}\n\nexport function CardSmall({\n title,\n value,\n icon,\n color,\n style,\n ...rest\n}: CardSmallProps) {\n const { theme, surfaceRaised, borderSoft } = useUiKitTheme();\n const accentColor = color ?? theme.colors.primary;\n const componentShadow = getComponentShadow(theme);\n\n return (\n <div\n {...rest}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n minHeight: 80,\n padding: '0px 0px 0px 24px',\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n overflow: 'hidden',\n border: `1px solid ${theme.colors.textLight}`,\n backgroundColor: surfaceRaised,\n boxShadow: componentShadow,\n color: theme.colors.text,\n ...style,\n }}\n >\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n width: 25,\n backgroundColor: accentColor,\n }}\n />\n\n {icon ? (\n <div\n aria-hidden=\"true\"\n style={{\n width: 52,\n height: 52,\n borderRadius: 12,\n backgroundColor: withAlpha(accentColor, 0.24),\n color: accentColor,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n marginLeft: 16,\n }}\n >\n {icon}\n </div>\n ) : null}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6, minWidth: 0, }}>\n {title ? (\n <div\n style={{\n color: theme.colors.text,\n fontSize: 14,\n fontWeight: 700,\n lineHeight: 1.25,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {title}\n </div>\n ) : null}\n {value ? (\n <div\n style={{\n color: theme.colors.text,\n fontSize: 18,\n fontWeight: 800,\n lineHeight: 1.15,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {value}\n </div>\n ) : null}\n </div>\n </div>\n );\n}","import { useEffect, useId, useRef, useState, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport {\n DISABLED_FIELD_OPACITY,\n getControlMetrics,\n useUiKitTheme,\n withAlpha,\n type ControlSize,\n} from '../foundation';\n\nexport interface CheckboxIndicatorProps {\n checked: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n size?: number;\n checkedColor?: string;\n iconColor?: string;\n uncheckedBorderColor?: string;\n uncheckedBackgroundColor?: string;\n style?: CSSProperties;\n}\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size' | 'type'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n controlSize?: ControlSize;\n indeterminate?: boolean;\n}\n\nconst CHECKBOX_SIZE_BY_CONTROL_SIZE: Record<ControlSize, number> = {\n sm: 18,\n md: 20,\n lg: 22,\n};\n\nconst getCheckboxSize = (controlSize: ControlSize): number => CHECKBOX_SIZE_BY_CONTROL_SIZE[controlSize];\n\nconst hasNodeContent = (value: ReactNode): boolean => {\n if (Array.isArray(value)) {\n return value.some(hasNodeContent);\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n return value !== null && value !== undefined && value !== false;\n};\n\nfunction CheckIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke={color}\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MixedIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.5 10H14.5\" stroke={color} strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function CheckboxIndicator({\n checked,\n indeterminate = false,\n disabled = false,\n size = 20,\n checkedColor,\n iconColor,\n uncheckedBorderColor,\n uncheckedBackgroundColor,\n style,\n}: CheckboxIndicatorProps) {\n const { theme } = useUiKitTheme();\n const isActive = checked || indeterminate;\n const resolvedCheckedColor = checkedColor ?? theme.colors.textLight;\n const resolvedIconColor = iconColor ?? theme.colors.surface;\n const resolvedUncheckedBorderColor = uncheckedBorderColor ?? theme.colors.textLight;\n const resolvedUncheckedBackgroundColor = uncheckedBackgroundColor ?? theme.colors.surface;\n\n return (\n <span\n aria-hidden=\"true\"\n style={{\n width: size,\n height: size,\n borderRadius: 999,\n boxSizing: 'border-box',\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: `1.5px solid ${isActive ? resolvedCheckedColor : resolvedUncheckedBorderColor}`,\n backgroundColor: isActive ? resolvedCheckedColor : resolvedUncheckedBackgroundColor,\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n transition: 'background-color 140ms ease, border-color 140ms ease, opacity 140ms ease',\n ...style,\n }}\n >\n {indeterminate ? <MixedIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n {!indeterminate && checked ? <CheckIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n </span>\n );\n}\n\nexport function Checkbox({\n label,\n hint,\n error,\n controlSize = 'sm',\n id,\n checked,\n defaultChecked,\n disabled,\n indeterminate = false,\n required,\n className,\n style,\n onChange,\n onFocus,\n onBlur,\n ...rest\n}: CheckboxProps) {\n const { theme, mutedText } = useUiKitTheme();\n const controlMetrics = getControlMetrics(controlSize);\n const indicatorSize = getCheckboxSize(controlSize);\n const hasLabel = hasNodeContent(label);\n const hasHint = hasNodeContent(hint);\n const hasError = hasNodeContent(error);\n const hasSecondaryContent = hasLabel && hasHint;\n const resolvedId = id ?? `ss-checkbox-${useId().replace(/:/g, '')}`;\n const inputRef = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n const [internalChecked, setInternalChecked] = useState(Boolean(defaultChecked));\n const isControlled = checked !== undefined;\n const resolvedChecked = isControlled ? Boolean(checked) : internalChecked;\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n inputRef.current.indeterminate = indeterminate;\n }, [indeterminate, resolvedChecked]);\n\n return (\n <div\n className={className}\n style={{\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }}\n >\n <label\n htmlFor={resolvedId}\n style={{\n display: 'inline-flex',\n alignItems: hasSecondaryContent ? 'flex-start' : 'center',\n gap: 10,\n width: hasLabel || hasHint || hasError ? '100%' : 'auto',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n userSelect: 'none',\n }}\n >\n <span\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n padding: 2,\n marginTop: hasSecondaryContent ? 1 : 0,\n borderRadius: 999,\n boxShadow: isFocused ? `0 0 0 3px ${withAlpha(theme.colors.primary, 0.16)}` : 'none',\n transition: 'box-shadow 140ms ease',\n }}\n >\n <input\n {...rest}\n ref={inputRef}\n id={resolvedId}\n type=\"checkbox\"\n checked={resolvedChecked}\n disabled={disabled}\n required={required}\n onChange={(event) => {\n if (!isControlled) {\n setInternalChecked(event.currentTarget.checked);\n }\n\n onChange?.(event);\n }}\n onFocus={(event) => {\n setIsFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setIsFocused(false);\n onBlur?.(event);\n }}\n style={{\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n margin: 0,\n opacity: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n />\n <CheckboxIndicator\n checked={resolvedChecked}\n indeterminate={indeterminate}\n disabled={disabled}\n size={indicatorSize}\n checkedColor={theme.colors.primary}\n iconColor={theme.colors.onPrimary}\n uncheckedBorderColor={withAlpha(theme.colors.text, 0.24)}\n uncheckedBackgroundColor={theme.colors.surface}\n />\n </span>\n\n {hasLabel || hasHint || hasError ? (\n <span\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n justifyContent: hasSecondaryContent ? 'flex-start' : 'center',\n minWidth: 0,\n }}\n >\n {label ? (\n <span\n style={{\n color: theme.colors.text,\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n fontWeight: 600,\n }}\n >\n {label}\n {required ? <span style={{ color: theme.colors.negative, marginLeft: 4 }}>*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span\n style={{\n color: mutedText,\n fontSize: 13,\n lineHeight: 1.45,\n }}\n >\n {hint}\n </span>\n ) : null}\n {error ? (\n <span\n style={{\n color: theme.colors.negative,\n fontSize: 13,\n lineHeight: 1.45,\n fontWeight: 600,\n }}\n >\n {error}\n </span>\n ) : null}\n </span>\n ) : null}\n </label>\n </div>\n );\n}","import { useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from './Button';\nimport { Modal } from './Modal';\n\nexport interface ModalSlotIds {\n header: string;\n body: string;\n footer: string;\n}\n\nexport interface ModalSlotContext<TPayload = unknown> {\n title: string;\n payload?: TPayload;\n close: () => void;\n confirm?: () => void;\n confirmLabel: string;\n cancelLabel: string;\n isOpen: boolean;\n isBusy: boolean;\n}\n\nexport interface ComposableModalSlotRenderProps<TPayload = unknown> {\n id: string;\n context: ModalSlotContext<TPayload>;\n children?: ReactNode;\n}\n\nexport type ComposableModalSlotRenderer<TPayload = unknown> = (\n props: ComposableModalSlotRenderProps<TPayload>,\n) => ReactNode;\n\nexport interface ComposableModalProps<TPayload = unknown> {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n slotBaseId: string;\n renderSlot?: ComposableModalSlotRenderer<TPayload>;\n payload?: TPayload;\n onConfirm?: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isBusy?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideExpandButton?: boolean;\n maximized?: boolean;\n hideDefaultFooter?: boolean;\n maxWidth?: number | string;\n headerFallback?: ReactNode;\n footerFallback?: ReactNode;\n children?: ReactNode;\n}\n\nexport const createModalSlotIds = (slotBaseId: string): ModalSlotIds => ({\n header: `${slotBaseId}:modal-header`,\n body: `${slotBaseId}:modal-body`,\n footer: `${slotBaseId}:modal-footer`,\n});\n\nexport function ComposableModal<TPayload = unknown>({\n isOpen,\n onClose,\n title,\n slotBaseId,\n renderSlot,\n payload,\n onConfirm,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n isBusy = false,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideExpandButton = false,\n maximized,\n hideDefaultFooter = false,\n maxWidth,\n headerFallback,\n footerFallback,\n children,\n}: ComposableModalProps<TPayload>) {\n const slotIds = createModalSlotIds(slotBaseId);\n\n const context = useMemo<ModalSlotContext<TPayload>>(\n () => ({\n title,\n payload,\n close: onClose,\n confirm: onConfirm,\n confirmLabel,\n cancelLabel,\n isOpen,\n isBusy,\n }),\n [cancelLabel, confirmLabel, isBusy, isOpen, onClose, onConfirm, payload, title],\n );\n\n const defaultFooter = hideDefaultFooter ? undefined : (\n footerFallback ?? (\n <>\n <Button variant=\"outline\" onClick={onClose} disabled={isBusy}>\n {cancelLabel}\n </Button>\n {onConfirm ? (\n <Button onClick={onConfirm} disabled={isBusy}>\n {confirmLabel}\n </Button>\n ) : null}\n </>\n )\n );\n\n const defaultHeader = headerFallback ?? (\n <h2\n style={{\n margin: 0,\n fontSize: 30,\n fontWeight: 800,\n lineHeight: 1.1,\n }}\n >\n {title}\n </h2>\n );\n\n const renderSlotContent = (id: string, slotChildren: ReactNode) => {\n if (!renderSlot) {\n return slotChildren;\n }\n\n return renderSlot({\n id,\n context,\n children: slotChildren,\n });\n };\n\n const headerContent = renderSlotContent(slotIds.header, defaultHeader);\n const bodyContent = renderSlotContent(slotIds.body, children);\n const footerContent = renderSlotContent(slotIds.footer, defaultFooter);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n isBusy={isBusy}\n headerContent={headerContent}\n footer={footerContent}\n maxWidth={maxWidth}\n hideExpandButton={hideExpandButton}\n maximized={maximized}\n closeOnBackdrop={closeOnBackdrop}\n closeOnEscape={closeOnEscape}\n >\n {bodyContent}\n </Modal>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\n\nimport {\n DISABLED_COMPONENT_OPACITY,\n createUiKitThemeTokens,\n getComponentShadow,\n useUiKitTheme,\n withAlpha,\n type UiKitThemeTokens,\n} from '../foundation';\n\ntype ModalActionAppearance = 'text' | 'outlined' | 'contained' | 'link';\n\ntype ModalThemeColors = {\n background: string;\n surface: string;\n text: string;\n textLight: string;\n primary: string;\n onPrimary: string;\n secondary: string;\n onSecondary: string;\n negative: string;\n warning: string;\n};\n\nexport interface ModalTheme {\n colors?: Partial<ModalThemeColors>;\n}\n\nexport type ModalThemeSource = ModalTheme | UiKitThemeTokens;\n\nexport interface ModalAction {\n label: ReactNode;\n onClick: () => void;\n appearance?: ModalActionAppearance;\n style?: CSSProperties;\n disabled?: boolean;\n hidden?: boolean;\n}\n\ninterface BaseModalProps {\n children?: ReactNode;\n theme?: ModalThemeSource;\n}\n\nexport interface ModalProps extends BaseModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: ReactNode;\n headerContent?: ReactNode;\n footer?: ReactNode;\n confirmAction?: ModalAction;\n cancelAction?: ModalAction;\n closeAction?: ModalAction;\n extraActions?: ModalAction[];\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideCloseButton?: boolean;\n hideExpandButton?: boolean;\n disableDismiss?: boolean;\n maximized?: boolean;\n contentStyle?: CSSProperties;\n bodyStyle?: CSSProperties;\n isBusy?: boolean;\n}\n\nexport type StandardModalProps = ModalProps;\n\nconst srOnlyStyle: CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n\nconst isUiKitThemeTokens = (theme?: ModalThemeSource): theme is UiKitThemeTokens => {\n return Boolean(theme && typeof theme === 'object' && 'theme' in theme);\n};\n\ntype ResolvedModalTheme = UiKitThemeTokens & {\n colors: UiKitThemeTokens['theme']['colors'];\n};\n\nconst withResolvedModalColors = (theme: UiKitThemeTokens): ResolvedModalTheme => ({\n ...theme,\n colors: theme.theme.colors,\n});\n\nconst resolveTheme = (baseTheme: UiKitThemeTokens, themeOverride?: ModalThemeSource): ResolvedModalTheme => {\n if (isUiKitThemeTokens(themeOverride)) {\n return withResolvedModalColors(themeOverride);\n }\n\n if (!themeOverride?.colors) {\n return withResolvedModalColors(baseTheme);\n }\n\n const colors: UiKitThemeTokens['theme']['colors'] = {\n ...baseTheme.theme.colors,\n ...themeOverride.colors,\n };\n\n return withResolvedModalColors(createUiKitThemeTokens({\n ...baseTheme.theme,\n colors,\n color: colors,\n }));\n};\n\nconst normalizeWidth = (maxWidth?: number | string): string | number => {\n if (typeof maxWidth === 'number') {\n return `${maxWidth}px`;\n }\n\n return maxWidth ?? '720px';\n};\n\nconst isLikelyMobileViewport = (): boolean => {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return false;\n }\n\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n};\n\nconst createTitleId = (title?: ReactNode): string => {\n if (typeof title === 'string' || typeof title === 'number') {\n const normalized = String(title)\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n\n return `smartsell-modal-${normalized || 'dialog'}`;\n }\n\n return 'smartsell-modal-dialog';\n};\n\nfunction ModalActionButton({\n action,\n theme,\n}: {\n action: ModalAction;\n theme: ReturnType<typeof resolveTheme>;\n}) {\n const { colors } = theme;\n const {\n label,\n onClick,\n appearance = 'contained',\n disabled = false,\n style,\n } = action;\n\n const buttonStyle: CSSProperties = {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '0.4rem',\n padding: appearance === 'link' ? 0 : '0.9rem 1.15rem',\n boxSizing: 'border-box',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontWeight: 700,\n fontSize: '1.05rem',\n lineHeight: 1.2,\n margin: 0,\n textAlign: 'center',\n transition: '0.5s',\n opacity: disabled ? DISABLED_COMPONENT_OPACITY : 1,\n filter: disabled ? 'saturate(0)' : undefined,\n };\n\n if (appearance === 'text') {\n buttonStyle.background = 'none';\n buttonStyle.border = '1px solid transparent';\n buttonStyle.color = colors.primary;\n buttonStyle.boxShadow = 'none';\n } else if (appearance === 'link') {\n buttonStyle.background = 'none';\n buttonStyle.border = 'none';\n buttonStyle.color = colors.primary;\n buttonStyle.boxShadow = 'none';\n } else if (appearance === 'outlined') {\n buttonStyle.background = 'none';\n buttonStyle.border = `2px solid ${colors.primary}`;\n buttonStyle.color = colors.primary;\n buttonStyle.boxShadow = `0 14px 28px ${withAlpha(colors.text, 0.08)}`;\n } else {\n buttonStyle.background = colors.primary;\n buttonStyle.border = '1px solid transparent';\n buttonStyle.color = colors.onPrimary;\n buttonStyle.boxShadow = `0 14px 28px ${withAlpha(colors.primary, 0.22)}`;\n }\n\n return (\n <div\n style={{\n width: style?.width ?? (style?.maxWidth ? '100%' : 'max-content'),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: 0,\n marginBottom: style?.marginBottom ?? 0,\n ...style,\n }}\n >\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n style={buttonStyle}\n >\n {label}\n </button>\n </div>\n );\n}\n\nfunction ModalBusyIndicator({\n theme,\n}: {\n theme: ReturnType<typeof resolveTheme>;\n}) {\n return (\n <div\n aria-live=\"polite\"\n role=\"status\"\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 56,\n height: 56,\n borderRadius: 999,\n backgroundColor: withAlpha(theme.colors.surface, 0.88),\n boxShadow: `0 18px 36px ${withAlpha(theme.colors.text, 0.08)}`,\n }}\n >\n <span style={srOnlyStyle}>Loading</span>\n <svg aria-hidden=\"true\" width=\"32\" height=\"32\" viewBox=\"0 0 40 40\" fill=\"none\">\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"16\"\n stroke={withAlpha(theme.colors.text, 0.12)}\n strokeWidth=\"4\"\n />\n <path\n d=\"M20 4C28.837 4 36 11.163 36 20\"\n stroke={theme.colors.primary}\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n >\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 20 20\"\n to=\"360 20 20\"\n dur=\"0.75s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n </div>\n );\n}\n\nfunction UnifiedModal({\n isOpen,\n onClose,\n children,\n title,\n headerContent,\n footer,\n confirmAction,\n cancelAction,\n closeAction,\n extraActions,\n maxWidth,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideCloseButton = false,\n hideExpandButton = false,\n disableDismiss = false,\n maximized,\n contentStyle,\n bodyStyle,\n isBusy = false,\n theme,\n}: ModalProps) {\n const inheritedTheme = useUiKitTheme();\n const modalTheme = useMemo(() => resolveTheme(inheritedTheme, theme), [inheritedTheme, theme]);\n const modalShadow = useMemo(() => {\n return `0 34px 80px ${withAlpha(modalTheme.theme.colors.shadow, 0.28)}`;\n }, [modalTheme.theme.colors.shadow]);\n const controlShadow = useMemo(() => getComponentShadow(modalTheme.theme), [modalTheme.theme]);\n const [isMaximized, setIsMaximized] = useState<boolean>(maximized ?? false);\n const titleId = useMemo(() => createTitleId(title), [title]);\n const shouldDisableDismiss = disableDismiss || isBusy;\n\n useEffect(() => {\n if (typeof maximized === 'boolean') {\n setIsMaximized(maximized);\n return;\n }\n\n if (isLikelyMobileViewport()) {\n setIsMaximized(true);\n }\n }, [maximized]);\n\n useEffect(() => {\n if (!isOpen || typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!shouldDisableDismiss && closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeOnEscape, isOpen, onClose, shouldDisableDismiss]);\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedHeader = headerContent ?? (title ? (\n <h2\n id={titleId}\n style={{\n margin: 0,\n color: modalTheme.colors.text,\n fontSize: 24,\n fontWeight: 800,\n lineHeight: 1.1,\n }}\n >\n {title}\n </h2>\n ) : null);\n\n let footerContent = footer;\n\n if (footerContent === undefined) {\n if (closeAction && !closeAction.hidden) {\n footerContent = (\n <ModalActionButton\n action={{ ...closeAction, disabled: closeAction.disabled || isBusy }}\n theme={modalTheme}\n />\n );\n } else {\n const resolvedActions = [\n cancelAction\n ? {\n ...cancelAction,\n appearance: cancelAction.appearance ?? 'text',\n disabled: cancelAction.disabled || isBusy,\n }\n : undefined,\n ...(extraActions ?? []).map((action) => ({\n ...action,\n appearance: action.appearance ?? 'contained',\n disabled: action.disabled || isBusy,\n })),\n confirmAction\n ? {\n ...confirmAction,\n appearance: confirmAction.appearance ?? 'contained',\n disabled: confirmAction.disabled || isBusy,\n }\n : undefined,\n ].reduce<ModalAction[]>((items, action) => {\n if (!action || action.hidden) {\n return items;\n }\n\n items.push(action);\n return items;\n }, []);\n\n footerContent = resolvedActions.length > 0\n ? resolvedActions.map((action, index) => (\n <ModalActionButton\n key={`modal-action-${index}`}\n action={action}\n theme={modalTheme}\n />\n ))\n : undefined;\n }\n }\n\n const shouldRenderFooter = footerContent !== undefined && footerContent !== null && footerContent !== false;\n\n return (\n <div\n aria-label={headerContent ? (typeof title === 'string' ? title : 'Dialog') : undefined}\n aria-labelledby={headerContent ? undefined : title ? titleId : undefined}\n aria-busy={isBusy}\n aria-modal=\"true\"\n role=\"dialog\"\n onMouseDown={(event) => {\n if (!shouldDisableDismiss && closeOnBackdrop && event.target === event.currentTarget) {\n onClose();\n }\n }}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 70,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: isMaximized ? 0 : 16,\n backgroundColor: modalTheme.overlay,\n backdropFilter: 'blur(8px)',\n }}\n >\n <div\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: isMaximized ? '100vw' : 'min(100%, 100%)',\n maxWidth: isMaximized ? '100vw' : normalizeWidth(maxWidth),\n height: isMaximized ? '100vh' : undefined,\n maxHeight: isMaximized ? '100vh' : 'calc(100vh - 32px)',\n minWidth: isMaximized ? '100vw' : 300,\n borderRadius: isMaximized ? 0 : 30,\n border: `1px solid ${modalTheme.borderSoft}`,\n background: `linear-gradient(180deg, ${modalTheme.surfaceRaised}, ${modalTheme.colors.surface})`,\n boxShadow: modalShadow,\n color: modalTheme.colors.text,\n overflow: 'hidden',\n ...contentStyle,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 12,\n padding: '18px 20px 12px',\n borderBottom: `1px solid ${withAlpha(modalTheme.colors.text, 0.06)}`,\n }}\n >\n <div\n style={{\n flex: 1,\n opacity: isBusy ? 0.38 : 1,\n transition: 'opacity 180ms ease',\n }}\n >\n {resolvedHeader}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {!hideExpandButton ? (\n <button\n aria-label={isMaximized ? 'Minimize modal' : 'Maximize modal'}\n title={isMaximized ? 'Minimize' : 'Maximize'}\n type=\"button\"\n onClick={() => setIsMaximized((current) => !current)}\n style={{\n height: 30,\n width: 30,\n borderRadius: 999,\n border: `1px solid ${modalTheme.borderSoft}`,\n backgroundColor: 'transparent',\n color: modalTheme.colors.text,\n cursor: 'pointer',\n fontSize: 18,\n fontWeight: 700,\n boxShadow: controlShadow,\n }}\n >\n {isMaximized ? '▢' : '□'}\n </button>\n ) : null}\n {!hideCloseButton ? (\n <button\n aria-label=\"Close modal\"\n type=\"button\"\n onClick={shouldDisableDismiss ? undefined : onClose}\n style={{\n height: 30,\n width: 30,\n borderRadius: 999,\n border: `1px solid ${modalTheme.borderSoft}`,\n backgroundColor: 'transparent',\n color: modalTheme.colors.text,\n cursor: shouldDisableDismiss ? 'not-allowed' : 'pointer',\n fontSize: 20,\n fontWeight: 700,\n opacity: shouldDisableDismiss ? DISABLED_COMPONENT_OPACITY : 1,\n boxShadow: controlShadow,\n }}\n >\n ×\n </button>\n ) : null}\n </div>\n </div>\n\n <div\n style={{\n flex: 1,\n minHeight: 0,\n position: 'relative',\n overflow: 'auto',\n padding: 24,\n ...bodyStyle,\n }}\n >\n <div\n style={{\n opacity: isBusy ? 0.38 : 1,\n filter: isBusy ? 'saturate(0.8)' : 'none',\n pointerEvents: isBusy ? 'none' : 'auto',\n transition: 'opacity 180ms ease, filter 180ms ease',\n }}\n >\n {children}\n </div>\n {isBusy ? (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: withAlpha(modalTheme.colors.surface, 0.58),\n backdropFilter: 'blur(2px)',\n }}\n >\n <ModalBusyIndicator theme={modalTheme} />\n </div>\n ) : null}\n </div>\n\n {shouldRenderFooter ? (\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 10,\n padding: '12px 20px 16px',\n borderTop: `1px solid ${withAlpha(modalTheme.colors.text, 0.06)}`,\n }}\n >\n {footerContent}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function Modal(props: ModalProps) {\n return <UnifiedModal {...props} />;\n}\n","import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\n\nimport {\n DISABLED_FIELD_OPACITY,\n FIELD_SURFACE_TRANSITION,\n STANDARD_COMPONENT_BORDER_RADIUS,\n getControlMetrics,\n getComponentShadow,\n getTextInputPadding,\n useUiKitTheme,\n withAlpha,\n type ControlSize,\n} from '../foundation';\nimport { ControlFrame } from './Input';\n\nexport type DatePickerMode = 'date' | 'datetime';\nexport type DatePickerValue = string | Date | null;\nexport type DatePickerChangeReason = 'input' | 'picker' | 'clear';\n\nexport interface DatePickerChangeContext {\n reason: DatePickerChangeReason;\n date: Date | null;\n nativeValue: string;\n displayValue: string;\n}\n\nexport interface DatePickerProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'dangerouslySetInnerHTML' | 'size' | 'type' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'\n > {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n controlSize?: ControlSize;\n value?: DatePickerValue;\n defaultValue?: DatePickerValue;\n onChange?: (value: string | null, context: DatePickerChangeContext) => void;\n mode?: DatePickerMode;\n format?: string;\n allowPastDates?: boolean;\n allowFutureDates?: boolean;\n minDate?: DatePickerValue;\n maxDate?: DatePickerValue;\n minuteStep?: number;\n clearable?: boolean;\n showPickerButton?: boolean;\n isDateUnavailable?: (date: Date) => boolean;\n invalidDateMessage?: ReactNode;\n unavailableDateMessage?: ReactNode;\n pickerButtonLabel?: string;\n clearButtonLabel?: string;\n}\n\ntype DatePartKey = 'year' | 'month' | 'day' | 'hour' | 'minute';\n\ntype DatePickerAccessoryMetrics = {\n buttonSize: number;\n iconSize: number;\n rightOffset: number;\n clusterGap: number;\n contentGap: number;\n};\n\ntype FormatTokenDefinition = {\n token: string;\n key: DatePartKey;\n pattern: string;\n formatter: (date: Date) => string;\n};\n\nconst DEFAULT_FORMAT_BY_MODE: Record<DatePickerMode, string> = {\n date: 'DD/MM/YYYY',\n datetime: 'DD/MM/YYYY HH:mm',\n};\n\nconst HTML_DATE_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst HTML_DATETIME_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::\\d{2})?$/;\n\nconst FORMAT_TOKENS: FormatTokenDefinition[] = [\n {\n token: 'YYYY',\n key: 'year',\n pattern: '(\\\\d{4})',\n formatter: (date) => String(date.getFullYear()),\n },\n {\n token: 'MM',\n key: 'month',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getMonth() + 1),\n },\n {\n token: 'DD',\n key: 'day',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getDate()),\n },\n {\n token: 'HH',\n key: 'hour',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getHours()),\n },\n {\n token: 'mm',\n key: 'minute',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getMinutes()),\n },\n];\n\nconst ACCESSORY_METRICS_BY_SIZE: Record<ControlSize, DatePickerAccessoryMetrics> = {\n sm: {\n buttonSize: 18,\n iconSize: 14,\n rightOffset: 8,\n clusterGap: 6,\n contentGap: 8,\n },\n md: {\n buttonSize: 20,\n iconSize: 16,\n rightOffset: 10,\n clusterGap: 8,\n contentGap: 10,\n },\n lg: {\n buttonSize: 22,\n iconSize: 18,\n rightOffset: 12,\n clusterGap: 8,\n contentGap: 12,\n },\n};\n\nfunction padNumber(value: number, length = 2): string {\n return String(value).padStart(length, '0');\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction isValidDateInstance(value: Date): boolean {\n return !Number.isNaN(value.getTime());\n}\n\nfunction createValidatedDate(year: number, month: number, day: number, hour = 0, minute = 0): Date | null {\n const nextDate = new Date(year, month - 1, day, hour, minute, 0, 0);\n\n if (!isValidDateInstance(nextDate)) {\n return null;\n }\n\n if (\n nextDate.getFullYear() !== year ||\n nextDate.getMonth() !== month - 1 ||\n nextDate.getDate() !== day ||\n nextDate.getHours() !== hour ||\n nextDate.getMinutes() !== minute\n ) {\n return null;\n }\n\n return nextDate;\n}\n\nfunction normalizeDatePrecision(date: Date, mode: DatePickerMode): Date {\n if (mode === 'date') {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n }\n\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), 0, 0);\n}\n\nfunction toLocalInputValue(date: Date, mode: DatePickerMode): string {\n const normalizedDate = normalizeDatePrecision(date, mode);\n const datePart = `${normalizedDate.getFullYear()}-${padNumber(normalizedDate.getMonth() + 1)}-${padNumber(normalizedDate.getDate())}`;\n\n if (mode === 'date') {\n return datePart;\n }\n\n return `${datePart}T${padNumber(normalizedDate.getHours())}:${padNumber(normalizedDate.getMinutes())}`;\n}\n\nfunction parseHtmlDateLikeValue(value: string): Date | null {\n const trimmedValue = value.trim();\n\n const dateMatch = HTML_DATE_PATTERN.exec(trimmedValue);\n\n if (dateMatch) {\n return createValidatedDate(\n Number(dateMatch[1]),\n Number(dateMatch[2]),\n Number(dateMatch[3]),\n );\n }\n\n const datetimeMatch = HTML_DATETIME_PATTERN.exec(trimmedValue);\n\n if (datetimeMatch) {\n return createValidatedDate(\n Number(datetimeMatch[1]),\n Number(datetimeMatch[2]),\n Number(datetimeMatch[3]),\n Number(datetimeMatch[4]),\n Number(datetimeMatch[5]),\n );\n }\n\n return null;\n}\n\nfunction parseFormattedDateValue(value: string, format: string, mode: DatePickerMode): Date | null {\n const orderedParts: DatePartKey[] = [];\n let expression = '^';\n\n for (let index = 0; index < format.length; ) {\n const token = FORMAT_TOKENS.find(({ token: currentToken }) => format.startsWith(currentToken, index));\n\n if (token) {\n expression += token.pattern;\n orderedParts.push(token.key);\n index += token.token.length;\n continue;\n }\n\n expression += escapeRegExp(format[index]);\n index += 1;\n }\n\n expression += '$';\n\n const match = new RegExp(expression).exec(value.trim());\n\n if (!match) {\n return null;\n }\n\n const resolvedParts: Record<DatePartKey, number> = {\n year: 0,\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n };\n\n orderedParts.forEach((key, index) => {\n resolvedParts[key] = Number(match[index + 1]);\n });\n\n if (!resolvedParts.year || !resolvedParts.month || !resolvedParts.day) {\n return null;\n }\n\n return createValidatedDate(\n resolvedParts.year,\n resolvedParts.month,\n resolvedParts.day,\n mode === 'datetime' ? resolvedParts.hour : 0,\n mode === 'datetime' ? resolvedParts.minute : 0,\n );\n}\n\nfunction parseDateValue(value: DatePickerValue | undefined, mode: DatePickerMode, format: string): Date | null {\n if (value == null || value === '') {\n return null;\n }\n\n if (value instanceof Date) {\n return isValidDateInstance(value) ? normalizeDatePrecision(value, mode) : null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n const parsedFormattedDate = parseFormattedDateValue(value, format, mode);\n\n if (parsedFormattedDate) {\n return normalizeDatePrecision(parsedFormattedDate, mode);\n }\n\n const parsedHtmlDate = parseHtmlDateLikeValue(value);\n\n if (parsedHtmlDate) {\n return normalizeDatePrecision(parsedHtmlDate, mode);\n }\n\n const parsedNativeDate = new Date(value);\n\n return isValidDateInstance(parsedNativeDate) ? normalizeDatePrecision(parsedNativeDate, mode) : null;\n}\n\nfunction formatDateValue(date: Date, format: string): string {\n return FORMAT_TOKENS.reduce((currentFormat, token) => {\n return currentFormat.split(token.token).join(token.formatter(date));\n }, format);\n}\n\nfunction getLaterDate(leftDate: Date | null, rightDate: Date | null): Date | null {\n if (!leftDate) return rightDate;\n if (!rightDate) return leftDate;\n return leftDate.getTime() >= rightDate.getTime() ? leftDate : rightDate;\n}\n\nfunction getEarlierDate(leftDate: Date | null, rightDate: Date | null): Date | null {\n if (!leftDate) return rightDate;\n if (!rightDate) return leftDate;\n return leftDate.getTime() <= rightDate.getTime() ? leftDate : rightDate;\n}\n\nfunction CalendarIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"4.5\" width=\"14\" height=\"12.5\" rx=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path d=\"M6.25 2.75V6\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n <path d=\"M13.75 2.75V6\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n <path d=\"M3 7.5H17\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <circle cx=\"10\" cy=\"11.5\" r=\"1.2\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction ClearIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 5L15 15\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n <path d=\"M15 5L5 15\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function DatePicker({\n label,\n hint,\n error,\n controlSize = 'sm',\n value,\n defaultValue,\n onChange,\n mode = 'date',\n format,\n allowPastDates = true,\n allowFutureDates = true,\n minDate,\n maxDate,\n minuteStep = 5,\n clearable = true,\n showPickerButton = true,\n isDateUnavailable,\n invalidDateMessage,\n unavailableDateMessage,\n pickerButtonLabel,\n clearButtonLabel,\n id,\n name,\n disabled,\n readOnly,\n required,\n style,\n className,\n placeholder,\n onBlur,\n onClick,\n onFocus,\n onKeyDown,\n ...rest\n}: DatePickerProps) {\n const { theme, focusRing } = useUiKitTheme();\n const controlMetrics = getControlMetrics(controlSize);\n const accessoryMetrics = ACCESSORY_METRICS_BY_SIZE[controlSize];\n const generatedIdRef = useRef<string>();\n const visibleInputRef = useRef<HTMLInputElement | null>(null);\n const nativeInputRef = useRef<HTMLInputElement | null>(null);\n const [internalError, setInternalError] = useState<ReactNode>();\n const resolvedFormat = format?.trim() ? format : DEFAULT_FORMAT_BY_MODE[mode];\n const isControlled = value !== undefined;\n const nativePickerType = mode === 'datetime' ? 'datetime-local' : 'date';\n\n if (!generatedIdRef.current) {\n generatedIdRef.current = `ss-date-picker-${Math.random().toString(36).slice(2, 10)}`;\n }\n\n const resolvedId = id ?? generatedIdRef.current;\n const normalizedDefaultValue = useMemo(() => {\n const parsedDefaultValue = parseDateValue(defaultValue, mode, resolvedFormat);\n return parsedDefaultValue ? toLocalInputValue(parsedDefaultValue, mode) : null;\n }, [defaultValue, mode, resolvedFormat]);\n const [uncontrolledValue, setUncontrolledValue] = useState<string | null>(normalizedDefaultValue);\n const committedDate = useMemo(() => {\n const sourceValue = isControlled ? value : uncontrolledValue;\n return parseDateValue(sourceValue, mode, resolvedFormat);\n }, [isControlled, mode, resolvedFormat, uncontrolledValue, value]);\n const committedValue = committedDate ? toLocalInputValue(committedDate, mode) : null;\n const committedDisplayValue = committedDate ? formatDateValue(committedDate, resolvedFormat) : '';\n const [draftValue, setDraftValue] = useState(committedDisplayValue);\n\n useEffect(() => {\n setDraftValue(committedDisplayValue);\n setInternalError(undefined);\n }, [committedDisplayValue]);\n\n useEffect(() => {\n if (!isControlled) {\n setUncontrolledValue((currentValue) => {\n if (currentValue == null) {\n return currentValue;\n }\n\n const parsedCurrentValue = parseDateValue(currentValue, mode, resolvedFormat);\n return parsedCurrentValue ? toLocalInputValue(parsedCurrentValue, mode) : null;\n });\n }\n }, [isControlled, mode, resolvedFormat]);\n\n const parsedMinDate = useMemo(() => {\n const explicitMinDate = parseDateValue(minDate, mode, resolvedFormat);\n const guardedMinDate = allowPastDates ? null : normalizeDatePrecision(new Date(), mode);\n return getLaterDate(explicitMinDate, guardedMinDate);\n }, [allowPastDates, minDate, mode, resolvedFormat]);\n\n const parsedMaxDate = useMemo(() => {\n const explicitMaxDate = parseDateValue(maxDate, mode, resolvedFormat);\n const guardedMaxDate = allowFutureDates ? null : normalizeDatePrecision(new Date(), mode);\n return getEarlierDate(explicitMaxDate, guardedMaxDate);\n }, [allowFutureDates, maxDate, mode, resolvedFormat]);\n\n const hasExternalError = error !== undefined && error !== null && error !== '';\n const hasConfigurationConflict = Boolean(parsedMinDate && parsedMaxDate && parsedMinDate.getTime() > parsedMaxDate.getTime());\n const derivedError = hasConfigurationConflict\n ? 'Current date rules do not allow any selection.'\n : internalError;\n const resolvedError = hasExternalError ? error : derivedError;\n const hasAnyValue = draftValue.trim().length > 0 || Boolean(committedValue);\n const inputBorderColor = resolvedError ? theme.colors.negative : theme.colors.textLight;\n const showPickerAdornment = showPickerButton;\n const canOpenPicker = !disabled && !readOnly && !hasConfigurationConflict;\n const canClear = clearable && !disabled && !readOnly && !required && hasAnyValue;\n const leadingContentGap = Math.max(0, Math.round(controlMetrics.paddingX / 3));\n const pickerAdornmentWidth = controlMetrics.paddingX + accessoryMetrics.iconSize;\n const trailingButtonCount = Number(canClear);\n const trailingInset = trailingButtonCount > 0\n ? Math.max(\n 0,\n accessoryMetrics.rightOffset +\n trailingButtonCount * accessoryMetrics.buttonSize +\n (trailingButtonCount - 1) * accessoryMetrics.clusterGap +\n accessoryMetrics.contentGap -\n controlMetrics.paddingX,\n )\n : 0;\n\n const getValidationMessage = (parsedDate: Date): ReactNode | undefined => {\n if (parsedMinDate && parsedDate.getTime() < parsedMinDate.getTime()) {\n return `Choose a value on or after ${formatDateValue(parsedMinDate, resolvedFormat)}.`;\n }\n\n if (parsedMaxDate && parsedDate.getTime() > parsedMaxDate.getTime()) {\n return `Choose a value on or before ${formatDateValue(parsedMaxDate, resolvedFormat)}.`;\n }\n\n if (mode === 'datetime' && minuteStep > 1 && parsedDate.getMinutes() % minuteStep !== 0) {\n return `Minutes must use ${minuteStep}-minute intervals.`;\n }\n\n if (isDateUnavailable?.(parsedDate)) {\n return unavailableDateMessage ?? 'This date is not available.';\n }\n\n return undefined;\n };\n\n const emitChange = (nextValue: string | null, context: DatePickerChangeContext) => {\n onChange?.(nextValue, context);\n };\n\n const commitValue = (nextValue: string | null, reason: DatePickerChangeReason): boolean => {\n if (hasConfigurationConflict) {\n setInternalError('Current date rules do not allow any selection.');\n return false;\n }\n\n if (!nextValue) {\n if (!isControlled) {\n setUncontrolledValue(null);\n }\n\n setDraftValue('');\n setInternalError(undefined);\n emitChange(null, {\n reason,\n date: null,\n nativeValue: '',\n displayValue: '',\n });\n return true;\n }\n\n const parsedDate = parseHtmlDateLikeValue(nextValue);\n\n if (!parsedDate) {\n setInternalError(invalidDateMessage ?? `Enter a valid value using ${resolvedFormat}.`);\n return false;\n }\n\n const normalizedDate = normalizeDatePrecision(parsedDate, mode);\n const validationMessage = getValidationMessage(normalizedDate);\n\n if (validationMessage) {\n setInternalError(validationMessage);\n return false;\n }\n\n const normalizedValue = toLocalInputValue(normalizedDate, mode);\n const displayValue = formatDateValue(normalizedDate, resolvedFormat);\n\n if (!isControlled) {\n setUncontrolledValue(normalizedValue);\n }\n\n setDraftValue(displayValue);\n setInternalError(undefined);\n emitChange(normalizedValue, {\n reason,\n date: normalizedDate,\n nativeValue: normalizedValue,\n displayValue,\n });\n\n return true;\n };\n\n const commitDraftValue = (): boolean => {\n const trimmedDraftValue = draftValue.trim();\n\n if (!trimmedDraftValue) {\n return commitValue(null, 'clear');\n }\n\n const parsedDraftDate =\n parseFormattedDateValue(trimmedDraftValue, resolvedFormat, mode) ??\n parseHtmlDateLikeValue(trimmedDraftValue) ??\n parseDateValue(trimmedDraftValue, mode, resolvedFormat);\n\n if (!parsedDraftDate) {\n setInternalError(invalidDateMessage ?? `Enter a valid value using ${resolvedFormat}.`);\n return false;\n }\n\n return commitValue(toLocalInputValue(parsedDraftDate, mode), 'input');\n };\n\n const openNativePicker = () => {\n if (!canOpenPicker || !nativeInputRef.current) {\n return;\n }\n\n const parsedDraftDate = draftValue.trim()\n ? parseFormattedDateValue(draftValue, resolvedFormat, mode) ?? parseHtmlDateLikeValue(draftValue)\n : null;\n\n if (parsedDraftDate) {\n nativeInputRef.current.value = toLocalInputValue(parsedDraftDate, mode);\n }\n\n const pickerInput = nativeInputRef.current as HTMLInputElement & { showPicker?: () => void };\n\n try {\n if (pickerInput.showPicker) {\n pickerInput.showPicker();\n return;\n }\n\n pickerInput.focus();\n } catch {\n visibleInputRef.current?.focus();\n }\n };\n\n const inputStyle: CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: `1px solid ${inputBorderColor}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : readOnly ? 'default' : 'text',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n padding: getTextInputPadding(controlSize, { trailingInset }),\n outline: 'none',\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n boxShadow: resolvedError\n ? `0 0 0 3px ${withAlpha(theme.colors.negative, 0.12)}, ${getComponentShadow(theme)}`\n : `${getComponentShadow(theme)}, 0 0 0 0 ${focusRing}`,\n transition: FIELD_SURFACE_TRANSITION,\n ...style,\n };\n\n const integratedFieldStyle: CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n overflow: 'hidden',\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: `1px solid ${inputBorderColor}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : readOnly ? 'default' : 'text',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n padding: 0,\n outline: 'none',\n boxShadow: resolvedError\n ? `0 0 0 3px ${withAlpha(theme.colors.negative, 0.12)}, ${getComponentShadow(theme)}`\n : `${getComponentShadow(theme)}, 0 0 0 0 ${focusRing}`,\n transition: FIELD_SURFACE_TRANSITION,\n ...style,\n };\n\n const pickerSegmentStyle: CSSProperties = {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n alignSelf: 'stretch',\n boxSizing: 'border-box',\n width: pickerAdornmentWidth,\n border: 'none',\n backgroundColor: 'transparent',\n color: inputBorderColor,\n cursor: disabled || readOnly || hasConfigurationConflict ? 'not-allowed' : 'pointer',\n padding: 0,\n appearance: 'none',\n };\n\n const integratedInputWrapStyle: CSSProperties = {\n position: 'relative',\n flex: 1,\n minWidth: 0,\n height: '100%',\n };\n\n const integratedTextInputStyle: CSSProperties = {\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : readOnly ? 'default' : 'text',\n padding: `${controlMetrics.paddingY}px ${controlMetrics.paddingX + trailingInset}px ${controlMetrics.paddingY}px ${leadingContentGap}px`,\n outline: 'none',\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n };\n\n const accessoryButtonStyle: CSSProperties = {\n width: accessoryMetrics.buttonSize,\n height: accessoryMetrics.buttonSize,\n border: 'none',\n padding: 0,\n margin: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 999,\n backgroundColor: 'transparent',\n color: theme.colors.textLight,\n cursor: disabled || readOnly ? 'not-allowed' : 'pointer',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n };\n\n // The text input keeps the visual identity of the kit, while the hidden native input opens the browser picker.\n const visibleInputProps = {\n ...rest,\n ref: visibleInputRef,\n id: resolvedId,\n className,\n type: 'text' as const,\n value: draftValue,\n disabled,\n readOnly,\n required,\n placeholder: placeholder ?? resolvedFormat,\n autoComplete: rest.autoComplete ?? 'off',\n spellCheck: false,\n 'aria-invalid': Boolean(resolvedError),\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDraftValue(event.target.value);\n setInternalError(undefined);\n },\n onFocus: (event: React.FocusEvent<HTMLInputElement>) => {\n setInternalError(undefined);\n onFocus?.(event);\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n openNativePicker();\n },\n onBlur: (event: React.FocusEvent<HTMLInputElement>) => {\n commitDraftValue();\n onBlur?.(event);\n },\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n commitDraftValue();\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setDraftValue(committedDisplayValue);\n setInternalError(undefined);\n }\n },\n };\n\n const nativePickerInput = (\n <input\n ref={nativeInputRef}\n tabIndex={-1}\n aria-hidden=\"true\"\n name={name}\n type={nativePickerType}\n value={committedValue ?? ''}\n min={parsedMinDate ? toLocalInputValue(parsedMinDate, mode) : undefined}\n max={parsedMaxDate ? toLocalInputValue(parsedMaxDate, mode) : undefined}\n step={mode === 'datetime' ? Math.max(1, minuteStep) * 60 : undefined}\n disabled={disabled || readOnly || hasConfigurationConflict}\n onChange={(event) => {\n commitValue(event.target.value || null, 'picker');\n }}\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n opacity: 0,\n pointerEvents: 'none',\n }}\n />\n );\n\n const clearButtonCluster = canClear ? (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n right: accessoryMetrics.rightOffset,\n transform: 'translateY(-50%)',\n display: 'inline-flex',\n alignItems: 'center',\n gap: accessoryMetrics.clusterGap,\n }}\n >\n <button\n type=\"button\"\n aria-label={clearButtonLabel ?? 'Clear date'}\n disabled={disabled || readOnly}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n commitValue(null, 'clear');\n visibleInputRef.current?.focus();\n }}\n style={accessoryButtonStyle}\n >\n <ClearIcon size={accessoryMetrics.iconSize} />\n </button>\n </div>\n ) : null;\n\n const input = showPickerAdornment ? (\n <div style={integratedFieldStyle}>\n <button\n type=\"button\"\n aria-label={pickerButtonLabel ?? (mode === 'datetime' ? 'Open date and time picker' : 'Open date picker')}\n disabled={!canOpenPicker}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={openNativePicker}\n style={pickerSegmentStyle}\n >\n <CalendarIcon size={accessoryMetrics.iconSize} />\n </button>\n <div style={integratedInputWrapStyle}>\n <input {...visibleInputProps} style={integratedTextInputStyle} />\n {nativePickerInput}\n {clearButtonCluster}\n </div>\n </div>\n ) : (\n <div style={{ position: 'relative', width: '100%' }}>\n <input {...visibleInputProps} style={inputStyle} />\n {nativePickerInput}\n {clearButtonCluster}\n </div>\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={resolvedError}\n htmlFor={resolvedId}\n required={required}\n >\n {input}\n </ControlFrame>\n );\n}","import { useEffect, useId, useRef, useState, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport {\n DISABLED_FIELD_OPACITY,\n FIELD_SURFACE_TRANSITION,\n STANDARD_COMPONENT_BORDER_RADIUS,\n getControlMetrics,\n getComponentShadow,\n getTextInputPadding,\n useUiKitTheme,\n withAlpha,\n type ControlSize,\n} from '../foundation';\n\ntype ControlFrameProps = {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n htmlFor?: string;\n required?: boolean;\n useLabelWrapper?: boolean;\n children: ReactNode;\n style?: CSSProperties;\n};\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n controlSize?: ControlSize;\n showPasswordToggle?: boolean;\n fileButtonLabel?: ReactNode;\n}\n\ntype PasswordToggleMetrics = {\n buttonSize: number;\n leftOffset: number;\n contentGap: number;\n iconSize: number;\n};\n\nconst PASSWORD_TOGGLE_METRICS_BY_SIZE: Record<ControlSize, PasswordToggleMetrics> = {\n sm: {\n buttonSize: 18,\n leftOffset: 8,\n contentGap: 8,\n iconSize: 14,\n },\n md: {\n buttonSize: 20,\n leftOffset: 10,\n contentGap: 10,\n iconSize: 16,\n },\n lg: {\n buttonSize: 22,\n leftOffset: 12,\n contentGap: 12,\n iconSize: 18,\n },\n};\n\nconst getPasswordToggleMetrics = (size: ControlSize): PasswordToggleMetrics => PASSWORD_TOGGLE_METRICS_BY_SIZE[size];\n\nexport function ControlFrame({\n label,\n hint,\n error,\n htmlFor,\n required = false,\n useLabelWrapper = true,\n children,\n style,\n}: ControlFrameProps) {\n const { theme, mutedText } = useUiKitTheme();\n\n if (!label && !hint && !error) {\n return <>{children}</>;\n }\n\n const labelStyle: CSSProperties = {\n color: theme.colors.text,\n fontSize: 14,\n fontWeight: 700,\n letterSpacing: '0.01em',\n };\n const wrapperStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n width: '100%',\n ...style,\n };\n\n if (!useLabelWrapper) {\n return (\n <div style={wrapperStyle}>\n {(label || hint) ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {label ? (\n <label htmlFor={htmlFor} style={labelStyle}>\n {label}\n {required ? <span style={{ color: theme.colors.negative, marginLeft: 4 }}>*</span> : null}\n </label>\n ) : null}\n {hint ? (\n <span\n style={{\n color: mutedText,\n fontSize: 13,\n lineHeight: 1.45,\n }}\n >\n {hint}\n </span>\n ) : null}\n </div>\n ) : null}\n {children}\n {error ? (\n <span\n style={{\n color: theme.colors.negative,\n fontSize: 13,\n fontWeight: 600,\n lineHeight: 1.45,\n }}\n >\n {error}\n </span>\n ) : null}\n </div>\n );\n }\n\n return (\n <label htmlFor={htmlFor} style={wrapperStyle}>\n {(label || hint) ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {label ? (\n <span style={labelStyle}>\n {label}\n {required ? <span style={{ color: theme.colors.negative, marginLeft: 4 }}>*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span\n style={{\n color: mutedText,\n fontSize: 13,\n lineHeight: 1.45,\n }}\n >\n {hint}\n </span>\n ) : null}\n </div>\n ) : null}\n {children}\n {error ? (\n <span\n style={{\n color: theme.colors.negative,\n fontSize: 13,\n fontWeight: 600,\n lineHeight: 1.45,\n }}\n >\n {error}\n </span>\n ) : null}\n </label>\n );\n}\n\nexport function Input({\n label,\n hint,\n error,\n controlSize = 'sm',\n showPasswordToggle = true,\n fileButtonLabel,\n id,\n disabled,\n placeholder,\n onChange,\n style,\n type = 'text',\n ...rest\n}: InputProps) {\n const { theme } = useUiKitTheme();\n const controlMetrics = getControlMetrics(controlSize);\n const componentShadow = getComponentShadow(theme);\n const passwordToggleMetrics = getPasswordToggleMetrics(controlSize);\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [selectedFileNames, setSelectedFileNames] = useState<string[]>([]);\n const isPasswordField = type === 'password';\n const isEmailField = type === 'email';\n const isFileField = type === 'file';\n const canTogglePasswordVisibility = isPasswordField && showPasswordToggle;\n const resolvedType = canTogglePasswordVisibility\n ? isPasswordVisible\n ? 'text'\n : 'password'\n : type;\n\n useEffect(() => {\n if (!isFileField) {\n setSelectedFileNames([]);\n }\n }, [isFileField]);\n\n const inputBorderColor = error ? theme.colors.negative : theme.colors.textLight;\n const adornedFieldShadow = `0 0 0 1px ${inputBorderColor}, ${componentShadow}`;\n\n const inputStyle: CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: `1px solid ${inputBorderColor}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'text',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n padding: getTextInputPadding(controlSize),\n outline: 'none',\n boxShadow: componentShadow,\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n transition: FIELD_SURFACE_TRANSITION,\n ...style,\n };\n\n const hasFileButtonLabel = typeof fileButtonLabel === 'string'\n ? fileButtonLabel.trim().length > 0\n : fileButtonLabel != null;\n const hasSelectedFiles = selectedFileNames.length > 0;\n const showUploadLabel = hasFileButtonLabel && !hasSelectedFiles;\n const inputPlaceholderColor = withAlpha(theme.colors.text, 0.5);\n const passwordLockIconSize = passwordToggleMetrics.iconSize + 2;\n const leadingContentGap = Math.max(0, Math.round(controlMetrics.paddingX / 3));\n const fileSelectionText = selectedFileNames.length === 0\n ? (placeholder ?? '')\n : selectedFileNames.length === 1\n ? selectedFileNames[0]\n : `${selectedFileNames.length} files selected`;\n const fileIconSize = Math.max(controlMetrics.fontSize + 3, 16);\n const fileTriggerWidth = controlMetrics.paddingX + fileIconSize;\n const emailAdornmentWidth = controlMetrics.paddingX + fileIconSize;\n const passwordAdornmentWidth = controlMetrics.paddingX + passwordLockIconSize;\n\n const hiddenFileInputStyle: CSSProperties = {\n display: 'none',\n };\n\n const fileTriggerStyle: CSSProperties = {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: showUploadLabel ? 'flex-start' : 'center',\n alignSelf: 'stretch',\n gap: showUploadLabel ? leadingContentGap : 0,\n width: showUploadLabel ? undefined : fileTriggerWidth,\n padding: showUploadLabel\n ? `0 ${controlMetrics.buttonPaddingX}px 0 ${Math.max(8, Math.round(controlMetrics.paddingX / 2))}px`\n : 0,\n borderRadius: '15px 0 0 15px',\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.text,\n fontSize: controlMetrics.fontSize,\n fontWeight: 700,\n lineHeight: controlMetrics.lineHeight,\n whiteSpace: 'nowrap',\n cursor: disabled ? 'not-allowed' : 'pointer',\n appearance: 'none',\n };\n\n const fileIconStyle: CSSProperties = {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: inputBorderColor,\n };\n\n const fileFieldStyle: CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n overflow: 'hidden',\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: 'none',\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n padding: 0,\n outline: 'none',\n boxShadow: adornedFieldShadow,\n transition: 'box-shadow 160ms ease, background-color 160ms ease',\n textAlign: 'left',\n ...style,\n };\n\n const fileSelectionStyle: CSSProperties = {\n flex: 1,\n minWidth: 0,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: 0,\n border: 'none',\n backgroundColor: 'transparent',\n textAlign: 'left',\n cursor: disabled ? 'not-allowed' : 'pointer',\n appearance: 'none',\n };\n\n const fileSelectionTextStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: selectedFileNames.length === 0 ? inputPlaceholderColor : theme.colors.text,\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n padding: `0 ${controlMetrics.paddingX}px 0 ${leadingContentGap}px`,\n };\n\n const emailFieldStyle: CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n overflow: 'hidden',\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: 'none',\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'text',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n padding: 0,\n outline: 'none',\n boxShadow: adornedFieldShadow,\n transition: 'box-shadow 160ms ease, background-color 160ms ease',\n textAlign: 'left',\n ...style,\n };\n\n const emailAdornmentStyle: CSSProperties = {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n alignSelf: 'stretch',\n boxSizing: 'border-box',\n width: emailAdornmentWidth,\n backgroundColor: 'transparent',\n color: inputBorderColor,\n };\n\n const emailInputStyle: CSSProperties = {\n flex: 1,\n minWidth: 0,\n height: '100%',\n boxSizing: 'border-box',\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'text',\n padding: `0 ${controlMetrics.paddingX}px 0 ${leadingContentGap}px`,\n outline: 'none',\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n };\n\n const passwordFieldStyle: CSSProperties = {\n ...emailFieldStyle,\n };\n\n const passwordToggleStyle: CSSProperties = {\n border: 'none',\n ...emailAdornmentStyle,\n width: passwordAdornmentWidth,\n padding: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n appearance: 'none',\n };\n\n const passwordInputStyle: CSSProperties = {\n ...emailInputStyle,\n };\n\n const openFilePicker = () => {\n if (disabled) {\n return;\n }\n\n fileInputRef.current?.click();\n };\n\n const clearSelectedFiles = () => {\n if (disabled || !fileInputRef.current) {\n return;\n }\n\n fileInputRef.current.value = '';\n fileInputRef.current.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const input = isFileField ? (\n <>\n <input\n {...rest}\n ref={fileInputRef}\n id={inputId}\n type=\"file\"\n disabled={disabled}\n aria-hidden=\"true\"\n tabIndex={-1}\n onChange={(event) => {\n setSelectedFileNames(Array.from(event.target.files ?? [], (file) => file.name));\n onChange?.(event);\n }}\n style={hiddenFileInputStyle}\n />\n <div style={fileFieldStyle}>\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={hasSelectedFiles ? (rest.multiple ? 'Remove selected files' : 'Remove selected file') : (rest.multiple ? 'Select files' : 'Select file')}\n onClick={hasSelectedFiles ? clearSelectedFiles : openFilePicker}\n style={fileTriggerStyle}\n >\n <span style={fileIconStyle} aria-hidden=\"true\">\n <svg width={fileIconSize} height={fileIconSize} viewBox=\"0 0 20 20\" fill=\"none\">\n {hasSelectedFiles ? (\n <>\n <path\n d=\"M5.5 6.25h9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.25 6.25V5.25A1.5 1.5 0 0 1 8.75 3.75h2.5a1.5 1.5 0 0 1 1.5 1.5v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.75 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M10 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12.25 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6.75 6.25l.5 8a1.5 1.5 0 0 0 1.497 1.406h2.506A1.5 1.5 0 0 0 12.75 14.25l.5-8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n ) : (\n <>\n <path\n d=\"M6.25 2.5h5.652l4.348 4.348V15A2.5 2.5 0 0 1 13.75 17.5h-7.5A2.5 2.5 0 0 1 3.75 15V5A2.5 2.5 0 0 1 6.25 2.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.875 2.75V6.25H15.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.5 10h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.5 13h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </>\n )}\n </svg>\n </span>\n {showUploadLabel ? fileButtonLabel : null}\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={rest.multiple ? 'Select files' : 'Select file'}\n onClick={openFilePicker}\n style={fileSelectionStyle}\n >\n {fileSelectionText ? <span style={fileSelectionTextStyle}>{fileSelectionText}</span> : null}\n </button>\n </div>\n </>\n ) : isEmailField ? (\n <div style={emailFieldStyle}>\n <span style={emailAdornmentStyle} aria-hidden=\"true\">\n <svg width={fileIconSize} height={fileIconSize} viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M3.75 6.25A1.875 1.875 0 0 1 5.625 4.375h8.75A1.875 1.875 0 0 1 16.25 6.25v7.5a1.875 1.875 0 0 1-1.875 1.875h-8.75A1.875 1.875 0 0 1 3.75 13.75v-7.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.375 6.25 10 10.625l5.625-4.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n <input {...rest} id={inputId} placeholder={placeholder} type={resolvedType} disabled={disabled} onChange={onChange} style={emailInputStyle} />\n </div>\n ) : canTogglePasswordVisibility ? (\n <div style={passwordFieldStyle}>\n <button\n type=\"button\"\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isPasswordVisible}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n setIsPasswordVisible((currentValue) => !currentValue);\n }}\n style={passwordToggleStyle}\n >\n {isPasswordVisible ? (\n <svg\n width={passwordLockIconSize}\n height={passwordLockIconSize}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 0 1 12.262 4.415\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n ) : (\n <svg\n width={passwordLockIconSize}\n height={passwordLockIconSize}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 1 1 13.25 6.75V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M10 11.25v1.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n )}\n </button>\n <input {...rest} id={inputId} placeholder={placeholder} type={resolvedType} disabled={disabled} onChange={onChange} style={passwordInputStyle} />\n </div>\n ) : (\n <input {...rest} id={inputId} placeholder={placeholder} type={resolvedType} disabled={disabled} onChange={onChange} style={inputStyle} />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={isFileField ? undefined : inputId}\n required={rest.required}\n useLabelWrapper={!isFileField}\n >\n {input}\n </ControlFrame>\n );\n}","import type { CSSProperties, HTMLAttributes } from 'react';\n\nimport { useUiKitTheme } from '../foundation';\n\nexport type SeparatorOrientation = 'vertical' | 'horizontal';\n\nexport interface SeparatorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'color'> {\n orientation?: SeparatorOrientation;\n color?: CSSProperties['backgroundColor'];\n size?: CSSProperties['width'];\n}\n\nexport function Separator({\n orientation = 'vertical',\n color,\n size = '100%',\n style,\n ...rest\n}: SeparatorProps) {\n const { theme } = useUiKitTheme();\n const usesVerticalStretch = orientation === 'vertical' && size === '100%';\n\n const separatorStyle: CSSProperties = {\n flexShrink: 0,\n alignSelf: 'stretch',\n backgroundColor: color ?? theme.colors.text,\n width: orientation === 'vertical' ? 1 : size,\n height: orientation === 'vertical' ? (usesVerticalStretch ? 'auto' : size) : 1,\n ...style,\n };\n\n return <div {...rest} role=\"separator\" aria-orientation={orientation} style={separatorStyle} />;\n}","import {\n useEffect,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type UIEventHandler,\n} from 'react';\n\nimport {\n DISABLED_FIELD_OPACITY,\n FIELD_SURFACE_TRANSITION,\n STANDARD_COMPONENT_BORDER_RADIUS,\n getComponentShadow,\n getControlMetrics,\n getSelectControlPadding,\n getSelectIndicatorOffset,\n useUiKitTheme,\n withAlpha,\n} from '../../foundation';\nimport { CheckboxIndicator } from '../../components/Checkbox';\nimport { ControlFrame } from '../../components/Input';\nimport type { MenuPlacement, SelectBaseProps } from './types';\nimport { filterSelectGroups, getTextContent, normalizeSelectValues } from './utils';\n\nconst MENU_OFFSET = 8;\nconst MENU_MAX_HEIGHT = 280;\n\nconst getOptionPadding = (size: SelectBaseProps['controlSize']): string => {\n if (size === 'sm') return '8px 11px';\n if (size === 'lg') return '12px 15px';\n return '10px 13px';\n};\n\nexport function SelectBase({\n label,\n hint,\n error,\n placeholder,\n controlSize = 'sm',\n id,\n disabled,\n style,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n autoFocus,\n className,\n isMulti,\n isFilterable,\n multiple,\n groups,\n nativeOptions,\n emptyMessage = 'No options found.',\n isLoading = false,\n loadingMessage = 'Loading options...',\n searchPlaceholder = 'Search options',\n searchQuery,\n onSearchQueryChange,\n allowOpenWithoutOptions = false,\n filterOptions = true,\n clearSearchOnClose = true,\n preserveUnknownValues = false,\n onListboxScroll,\n menuFooter,\n ...rest\n}: SelectBaseProps) {\n const { theme, mutedText, surfaceRaised } = useUiKitTheme();\n const componentShadow = getComponentShadow(theme);\n const generatedId = useId().replace(/:/g, '');\n const resolvedId = id ?? `ss-select-${generatedId}`;\n const isMultiSelect = Boolean(isMulti || multiple);\n const hasFilter = Boolean(isFilterable);\n const flatOptions = groups.flatMap((group) => group.options);\n const enabledOptions = flatOptions.filter((option) => !option.disabled);\n const isControlled = value !== undefined;\n const fallbackValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : placeholder != null\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n const [uncontrolledValues, setUncontrolledValues] = useState(fallbackValues);\n const [isOpen, setIsOpen] = useState(false);\n const [uncontrolledSearchQuery, setUncontrolledSearchQuery] = useState('');\n const [menuPlacement, setMenuPlacement] = useState<MenuPlacement>('bottom');\n const [isPlacementResolved, setIsPlacementResolved] = useState(false);\n const [highlightedValue, setHighlightedValue] = useState(fallbackValues[0] ?? enabledOptions[0]?.value ?? '');\n const shellRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const highlightSyncKeyRef = useRef('');\n const currentSearchQuery = searchQuery !== undefined ? searchQuery : uncontrolledSearchQuery;\n const selectedValues = isControlled ? normalizeSelectValues(value) : uncontrolledValues;\n const selectedValue = selectedValues[0] ?? '';\n const optionLookup = new Map(flatOptions.map((option) => [option.value, option]));\n const selectedOption = optionLookup.get(selectedValue) ?? null;\n const placeholderTextColor = withAlpha(theme.colors.text, 0.5);\n const hasSelection = isMultiSelect ? selectedValues.length > 0 : selectedValue !== '';\n const displayLabel = hasSelection\n ? isMultiSelect\n ? selectedValues.map((currentValue) => {\n const option = optionLookup.get(currentValue);\n return option ? getTextContent(option.label).trim() || option.value : currentValue;\n }).join(', ')\n : selectedOption?.label ?? selectedValue\n : null;\n const displayContent = displayLabel ?? placeholder ?? '\\u00A0';\n const visibleGroups = hasFilter && filterOptions ? filterSelectGroups(groups, currentSearchQuery) : groups;\n const visibleOptions = visibleGroups.flatMap((group) => group.options);\n const visibleEnabledOptions = visibleOptions.filter((option) => !option.disabled);\n const visibleEnabledValues = visibleEnabledOptions.map((option) => option.value);\n const selectedValuesKey = selectedValues.join('\\u0000');\n const visibleEnabledValuesKey = visibleEnabledValues.join('\\u0000');\n const indicatorOffset = getSelectIndicatorOffset(controlSize);\n const controlMetrics = getControlMetrics(controlSize);\n const listboxId = `${resolvedId}-listbox`;\n const searchInputId = `${resolvedId}-search`;\n const scrollbarThumbColor = withAlpha(theme.colors.text, 0.22);\n const scrollbarThumbHoverColor = withAlpha(theme.colors.text, 0.32);\n const highlightedOption = visibleOptions.find((option) => option.value === highlightedValue) ?? null;\n const optionHoverBackground = withAlpha(theme.colors.primary, 1);\n const optionSelectedBackground = withAlpha(theme.colors.primary, 1);\n const canOpenMenu = allowOpenWithoutOptions || flatOptions.length > 0;\n const buttonPassthroughProps = Object.fromEntries(\n Object.entries(rest).filter(([key]) => key.startsWith('aria-') || key.startsWith('data-')),\n );\n\n useEffect(() => {\n if (isControlled || preserveUnknownValues) {\n return;\n }\n\n const invalidValues = uncontrolledValues.filter(\n (currentValue) => !flatOptions.some((option) => option.value === currentValue),\n );\n\n if (invalidValues.length === 0) {\n return;\n }\n\n const nextValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue).filter(\n (currentValue) => flatOptions.some((option) => option.value === currentValue),\n )\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n }, [defaultValue, enabledOptions, flatOptions, isControlled, isMultiSelect, preserveUnknownValues, uncontrolledValues]);\n\n useEffect(() => {\n if (!isOpen) {\n highlightSyncKeyRef.current = '';\n setMenuPlacement('bottom');\n setIsPlacementResolved(false);\n return;\n }\n\n const nextHighlightSyncKey = `${selectedValuesKey}\\u0001${visibleEnabledValuesKey}`;\n\n if (highlightSyncKeyRef.current === nextHighlightSyncKey) {\n return;\n }\n\n highlightSyncKeyRef.current = nextHighlightSyncKey;\n\n const nextHighlightedValue = [...selectedValues].reverse().find((currentValue) => visibleEnabledValues.includes(currentValue))\n ?? visibleEnabledOptions[0]?.value\n ?? '';\n setHighlightedValue(nextHighlightedValue);\n }, [isOpen, selectedValuesKey, visibleEnabledValuesKey, selectedValues, visibleEnabledOptions, visibleEnabledValues]);\n\n useEffect(() => {\n if (!isOpen || !hasFilter) {\n return;\n }\n\n searchInputRef.current?.focus();\n }, [hasFilter, isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n const menuElement = menuRef.current;\n\n if (!triggerRect || !menuElement) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(true);\n return;\n }\n\n const measuredMenuHeight = menuElement.getBoundingClientRect().height;\n const menuHeight = Math.min(measuredMenuHeight || menuElement.scrollHeight, MENU_MAX_HEIGHT);\n const availableBelow = window.innerHeight - triggerRect.bottom - MENU_OFFSET;\n const availableAbove = triggerRect.top - MENU_OFFSET;\n const nextPlacement: MenuPlacement = availableBelow < menuHeight && availableAbove >= menuHeight ? 'top' : 'bottom';\n\n setMenuPlacement(nextPlacement);\n setIsPlacementResolved(true);\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [isOpen, visibleOptions.length]);\n\n useEffect(() => {\n if (isOpen || !clearSearchOnClose || currentSearchQuery === '') {\n return;\n }\n\n if (searchQuery === undefined) {\n setUncontrolledSearchQuery('');\n }\n\n onSearchQueryChange?.('');\n }, [clearSearchOnClose, currentSearchQuery, isOpen, onSearchQueryChange, searchQuery]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (shellRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n const form = hiddenSelectRef.current?.form;\n\n if (!form) {\n return;\n }\n\n const handleReset = () => {\n queueMicrotask(() => {\n const nextValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n setIsOpen(false);\n });\n };\n\n form.addEventListener('reset', handleReset);\n\n return () => {\n form.removeEventListener('reset', handleReset);\n };\n }, [defaultValue, enabledOptions, isControlled, isMultiSelect]);\n\n const syncHiddenSelect = (nextValues: string[]) => {\n const selectElement = hiddenSelectRef.current;\n\n if (!selectElement) {\n return;\n }\n\n if (isMultiSelect) {\n Array.from(selectElement.options).forEach((optionElement) => {\n optionElement.selected = nextValues.includes(optionElement.value);\n });\n } else {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value');\n\n if (descriptor?.set) {\n descriptor.set.call(selectElement, nextValues[0] ?? '');\n } else {\n selectElement.value = nextValues[0] ?? '';\n }\n }\n\n selectElement.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const updateMultiSelection = (nextValues: string[]) => {\n if (!isMultiSelect || disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '');\n syncHiddenSelect(nextValues);\n };\n\n const toggleVisibleSelection = (checked: boolean) => {\n if (!isMultiSelect || disabled || visibleEnabledValues.length === 0) {\n return;\n }\n\n const nextValues = checked\n ? Array.from(new Set([...selectedValues, ...visibleEnabledValues]))\n : selectedValues.filter((currentValue) => !visibleEnabledValues.includes(currentValue));\n\n updateMultiSelection(nextValues);\n };\n\n const commitSelection = (nextValue: string) => {\n if (disabled) {\n if (!isMultiSelect) {\n setIsOpen(false);\n }\n\n return;\n }\n\n if (isMultiSelect) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((currentValue) => currentValue !== nextValue)\n : [...selectedValues, nextValue];\n\n updateMultiSelection(nextValues);\n return;\n }\n\n if (nextValue === selectedValue) {\n setIsOpen(false);\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues([nextValue]);\n }\n\n setHighlightedValue(nextValue);\n setIsOpen(false);\n syncHiddenSelect([nextValue]);\n buttonRef.current?.focus();\n };\n\n const handleHiddenSelectChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const nextValues = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : [event.currentTarget.value];\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '');\n onChange?.(event);\n };\n\n const visibleSelectedCount = visibleEnabledValues.filter((currentValue) => selectedValues.includes(currentValue)).length;\n const hasSomeVisibleSelected = visibleSelectedCount > 0 && visibleSelectedCount < visibleEnabledValues.length;\n const hasAllVisibleSelected = visibleEnabledValues.length > 0 && visibleSelectedCount === visibleEnabledValues.length;\n const canToggleVisibleSelection = !disabled && visibleEnabledValues.length > 0;\n const bulkToggleControl = isMultiSelect ? (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-label=\"Toggle all visible options\"\n aria-checked={hasAllVisibleSelected ? true : hasSomeVisibleSelected ? 'mixed' : false}\n disabled={!canToggleVisibleSelection}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.stopPropagation();\n toggleVisibleSelection(!hasAllVisibleSelected);\n }}\n style={{\n width: 20,\n height: 20,\n padding: 0,\n margin: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n border: 'none',\n background: 'transparent',\n cursor: canToggleVisibleSelection ? 'pointer' : 'not-allowed',\n opacity: canToggleVisibleSelection ? 1 : 0.45,\n }}\n >\n <CheckboxIndicator\n checked={hasAllVisibleSelected}\n indeterminate={hasSomeVisibleSelected}\n disabled={!canToggleVisibleSelection}\n />\n </button>\n ) : null;\n\n const moveHighlight = (direction: 1 | -1) => {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n const currentIndex = visibleEnabledOptions.findIndex((option) => option.value === highlightedValue);\n\n if (currentIndex === -1) {\n setHighlightedValue(\n direction === 1 ? visibleEnabledOptions[0].value : visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n const nextIndex = Math.max(0, Math.min(visibleEnabledOptions.length - 1, currentIndex + direction));\n setHighlightedValue(visibleEnabledOptions[nextIndex].value);\n };\n\n const handleTriggerClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event as unknown as MouseEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled || !canOpenMenu) {\n return;\n }\n\n setIsOpen((current) => !current);\n };\n\n const handleTriggerFocus = (event: FocusEvent<HTMLButtonElement>) => {\n onFocus?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (!shellRef.current?.contains(nextTarget)) {\n setIsOpen(false);\n }\n\n onBlur?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event as unknown as KeyboardEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '');\n return;\n }\n\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[visibleEnabledOptions.length - 1]?.value ?? '');\n return;\n }\n\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[0].value);\n return;\n }\n\n if (event.key === 'End' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[visibleEnabledOptions.length - 1].value);\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '');\n return;\n }\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const handleFilterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const emptyState = isLoading ? loadingMessage : emptyMessage;\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={resolvedId}\n required={rest.required}\n useLabelWrapper={false}\n >\n <div ref={shellRef} style={{ position: 'relative', width: '100%' }}>\n <button\n {...buttonPassthroughProps}\n id={resolvedId}\n ref={buttonRef}\n type=\"button\"\n className={className}\n title={rest.title}\n disabled={disabled || !canOpenMenu}\n autoFocus={autoFocus}\n tabIndex={rest.tabIndex}\n role=\"combobox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error ? true : rest['aria-invalid']}\n aria-required={rest.required}\n onClick={handleTriggerClick}\n onFocus={handleTriggerFocus}\n onBlur={handleTriggerBlur}\n onKeyDown={handleTriggerKeyDown}\n style={{\n width: '100%',\n boxSizing: 'border-box',\n height: controlMetrics.height,\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: `1px solid ${error ? theme.colors.negative : theme.colors.textLight}`,\n backgroundColor: theme.colors.surface,\n color: hasSelection ? theme.colors.text : placeholderTextColor,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n padding: getSelectControlPadding(controlSize),\n outline: 'none',\n boxShadow: componentShadow,\n font: 'inherit',\n fontSize: controlMetrics.fontSize,\n lineHeight: controlMetrics.lineHeight,\n transition: FIELD_SURFACE_TRANSITION,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n minWidth: 0,\n textAlign: 'left',\n ...style,\n }}\n >\n <span\n style={{\n display: 'block',\n flex: '1 1 auto',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {displayContent}\n </span>\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n right: indicatorOffset,\n top: '50%',\n transform: `translateY(-50%) rotate(${isOpen ? 180 : 0}deg)`,\n transformOrigin: 'center',\n color: disabled ? withAlpha(theme.colors.text, 0.42) : mutedText,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n transition: 'transform 160ms ease, color 160ms ease',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 7.75L10 12l4.25-4.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <select\n {...rest}\n id={`${resolvedId}-native`}\n ref={hiddenSelectRef}\n name={rest.name}\n disabled={disabled}\n multiple={isMultiSelect}\n value={isMultiSelect ? selectedValues : selectedValue}\n onChange={handleHiddenSelectChange}\n tabIndex={-1}\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: 0,\n border: 0,\n opacity: 0,\n pointerEvents: 'none',\n clipPath: 'inset(50%)',\n }}\n >\n {nativeOptions}\n </select>\n\n {isOpen ? (\n <>\n <style>\n {`\n #${listboxId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n }\n\n #${listboxId}::-webkit-scrollbar {\n width: 8px;\n }\n\n #${listboxId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n }\n\n #${searchInputId}::placeholder {\n color: ${placeholderTextColor};\n opacity: 1;\n }\n `}\n </style>\n <div\n ref={menuRef}\n style={{\n position: 'absolute',\n top: menuPlacement === 'bottom' ? `calc(100% + ${MENU_OFFSET}px)` : 'auto',\n bottom: menuPlacement === 'top' ? `calc(100% + ${MENU_OFFSET}px)` : 'auto',\n left: 0,\n right: 0,\n zIndex: 30,\n maxHeight: MENU_MAX_HEIGHT,\n overflow: 'hidden',\n boxSizing: 'border-box',\n borderRadius: 20,\n border: `1px solid ${theme.colors.textLight}`,\n backgroundColor: surfaceRaised,\n padding: 8,\n boxShadow: componentShadow,\n backdropFilter: 'blur(6px)',\n visibility: isPlacementResolved ? 'visible' : 'hidden',\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n }}\n >\n {hasFilter ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n gap: 8,\n padding: '4px 4px 10px',\n borderBottom: `1px solid ${withAlpha(theme.colors.text, 0.08)}`,\n flexShrink: 0,\n }}\n >\n {bulkToggleControl}\n <input\n id={searchInputId}\n ref={searchInputRef}\n type=\"search\"\n value={currentSearchQuery}\n onChange={(event) => {\n const nextQuery = event.currentTarget.value;\n\n if (searchQuery === undefined) {\n setUncontrolledSearchQuery(nextQuery);\n }\n\n onSearchQueryChange?.(nextQuery);\n }}\n onKeyDown={handleFilterKeyDown}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n style={{\n flex: '1 1 auto',\n width: '100%',\n border: `1px solid ${theme.colors.textLight}`,\n backgroundColor: theme.colors.surface,\n padding: '7px 11px',\n borderRadius: 11,\n font: 'inherit',\n fontSize: 11,\n lineHeight: 1.4,\n color: theme.colors.text,\n outline: 'none',\n boxSizing: 'border-box',\n boxShadow: componentShadow,\n }}\n />\n </div>\n ) : isMultiSelect ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: '4px 4px 10px',\n borderBottom: `1px solid ${withAlpha(theme.colors.text, 0.08)}`,\n flexShrink: 0,\n }}\n >\n {bulkToggleControl}\n </div>\n ) : null}\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={resolvedId}\n aria-multiselectable={isMultiSelect || undefined}\n onScroll={onListboxScroll as UIEventHandler<HTMLDivElement> | undefined}\n style={{\n overflowY: 'auto',\n overflowX: 'hidden',\n minHeight: 0,\n flex: '1 1 auto',\n }}\n >\n {visibleGroups.length === 0 ? (\n <div\n style={{\n padding: '14px 12px',\n color: mutedText,\n fontSize: 13,\n textAlign: 'center',\n }}\n >\n {emptyState}\n </div>\n ) : visibleGroups.map((group) => (\n <div\n key={group.key}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n marginTop: group.label ? 4 : 0,\n }}\n >\n {group.label ? (\n <span\n style={{\n padding: '6px 8px 2px',\n color: mutedText,\n fontSize: 11,\n fontWeight: 800,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n {group.label}\n </span>\n ) : null}\n {group.options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n const isHighlighted = option.value === highlightedValue;\n const isActive = isSelected || isHighlighted;\n\n return (\n <div\n key={option.key}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onMouseEnter={() => {\n if (!option.disabled) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseMove={() => {\n if (!option.disabled && highlightedValue !== option.value) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n if (!option.disabled) {\n commitSelection(option.value);\n }\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n width: '100%',\n minWidth: 0,\n boxSizing: 'border-box',\n borderRadius: 12,\n padding: getOptionPadding(controlSize),\n cursor: option.disabled ? 'not-allowed' : 'pointer',\n color: option.disabled\n ? withAlpha(theme.colors.text, 0.38)\n : isActive\n ? theme.colors.onPrimary\n : theme.colors.text,\n backgroundColor: isSelected\n ? optionSelectedBackground\n : isHighlighted\n ? optionHoverBackground\n : 'transparent',\n fontWeight: isSelected ? 700 : 400,\n transition: 'background-color 140ms ease, color 140ms ease',\n }}\n >\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flex: '1 1 auto',\n minWidth: 0,\n }}\n >\n {isMultiSelect ? (\n <CheckboxIndicator\n checked={isSelected}\n disabled={option.disabled}\n size={16}\n checkedColor={isActive ? theme.colors.onPrimary : theme.colors.primary}\n iconColor={isActive ? theme.colors.primary : theme.colors.onPrimary}\n uncheckedBorderColor={isActive ? theme.colors.onPrimary : withAlpha(theme.colors.text, 0.26)}\n uncheckedBackgroundColor=\"transparent\"\n />\n ) : null}\n <span\n style={{\n display: 'block',\n flex: '1 1 auto',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {option.label}\n </span>\n </span>\n {!isMultiSelect && isSelected ? (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.primary,\n flexShrink: 0,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n {menuFooter ? (\n <div\n style={{\n padding: '10px 8px 4px',\n borderTop: `1px solid ${withAlpha(theme.colors.text, 0.08)}`,\n flexShrink: 0,\n }}\n >\n {menuFooter}\n </div>\n ) : null}\n </div>\n </>\n ) : null}\n </div>\n </ControlFrame>\n );\n}","import { isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, SelectChildProps } from './types';\n\nexport function getTextContent(node: ReactNode): string {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map(getTextContent).join('');\n }\n\n if (isValidElement<SelectChildProps>(node)) {\n return getTextContent(node.props.children);\n }\n\n return '';\n}\n\nexport function normalizeSelectValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.length > 0 ? normalizeSelectValue(value[0]) : '';\n }\n\n return value == null ? '' : String(value);\n}\n\nexport function normalizeSelectValues(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeSelectValue(item));\n }\n\n if (value == null) {\n return [];\n }\n\n return [normalizeSelectValue(value)];\n}\n\nexport function filterSelectGroups(groups: ParsedGroup[], query: string): ParsedGroup[] {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return groups;\n }\n\n return groups\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n const optionText = getTextContent(option.label).trim().toLowerCase();\n return optionText.includes(normalizedQuery);\n }),\n }))\n .filter((group) => group.options.length > 0);\n}","import { Children, isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption, SelectChildProps } from './types';\nimport { getTextContent, normalizeSelectValue } from './utils';\n\nfunction buildOption(keyPrefix: string, index: number, props: SelectChildProps, groupDisabled = false) {\n const rawValue = props.value !== undefined ? props.value : getTextContent(props.children).trim();\n const normalizedValue = normalizeSelectValue(rawValue);\n\n return {\n key: `${keyPrefix}-${index}-${normalizedValue}`,\n value: normalizedValue,\n label: props.children ?? normalizedValue,\n disabled: groupDisabled || Boolean(props.disabled),\n };\n}\n\nexport function parseSelectChildren(children: ReactNode): ParsedGroup[] {\n const groups: ParsedGroup[] = [];\n const standaloneOptions: ParsedOption[] = [];\n let optionIndex = 0;\n let groupIndex = 0;\n\n const flushStandaloneOptions = () => {\n if (standaloneOptions.length === 0) {\n return;\n }\n\n groups.push({\n key: `standalone-${groups.length}`,\n options: [...standaloneOptions],\n });\n\n standaloneOptions.length = 0;\n };\n\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectChildProps>(child)) {\n return;\n }\n\n if (child.type === 'option') {\n standaloneOptions.push(buildOption('option', optionIndex, child.props));\n optionIndex += 1;\n return;\n }\n\n if (child.type !== 'optgroup') {\n return;\n }\n\n flushStandaloneOptions();\n\n const groupOptions: ParsedOption[] = [];\n let groupOptionIndex = 0;\n\n Children.forEach(child.props.children, (optionChild) => {\n if (!isValidElement<SelectChildProps>(optionChild) || optionChild.type !== 'option') {\n return;\n }\n\n groupOptions.push(\n buildOption(\n `group-${groupIndex}-option`,\n groupOptionIndex,\n optionChild.props,\n Boolean(child.props.disabled),\n ),\n );\n\n groupOptionIndex += 1;\n });\n\n if (groupOptions.length > 0) {\n groups.push({\n key: `group-${groupIndex}`,\n label: child.props.label,\n options: groupOptions,\n });\n\n groupIndex += 1;\n }\n });\n\n flushStandaloneOptions();\n\n return groups;\n}","import type { ReactNode } from 'react';\n\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport { parseSelectChildren } from '../componentsBase/select/childrenAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport interface SelectProps extends SharedSelectProps {\n children?: ReactNode;\n}\n\nexport function Select({ children, ...props }: SelectProps) {\n return <SelectBase {...props} groups={parseSelectChildren(children)} nativeOptions={children} />;\n}","import { useEffect, useMemo, useRef, useState, type ReactNode, type UIEvent } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS, useUiKitTheme, withAlpha } from '../foundation';\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport {\n buildNativeOptionsFromObjectOptions,\n buildParsedGroupsFromObjectOptions,\n dedupeSelectObjectOptions,\n getSelectObjectOptionKey,\n type SelectObjectOption,\n type SelectObjectOptionValue,\n} from '../componentsBase/select/objectOptionsAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectAsyncOptionValue = SelectObjectOptionValue;\nexport type SelectAsyncOption<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> = SelectObjectOption<TValue>;\n\nexport interface SelectAsyncLoadContext {\n page: number;\n signal: AbortSignal;\n}\n\nexport interface SelectAsyncLoadResult<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> {\n options: Array<SelectAsyncOption<TValue>>;\n hasMore?: boolean;\n}\n\ntype SelectAsyncSingleValue<TValue extends SelectAsyncOptionValue> = SelectAsyncOption<TValue> | null;\ntype SelectAsyncMultiValue<TValue extends SelectAsyncOptionValue> = Array<SelectAsyncOption<TValue>>;\ntype SelectAsyncValue<TValue extends SelectAsyncOptionValue> =\n | SelectAsyncSingleValue<TValue>\n | SelectAsyncMultiValue<TValue>;\n\nexport interface SelectAsyncProps<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>\n extends Omit<SharedSelectProps, 'children' | 'value' | 'defaultValue' | 'onChange' | 'multiple'> {\n value?: SelectAsyncValue<TValue>;\n defaultValue?: SelectAsyncValue<TValue>;\n onChange?: (value: SelectAsyncValue<TValue>) => void;\n loadOptions: (\n query: string,\n loadedOptions: Array<SelectAsyncOption<TValue>>,\n context: SelectAsyncLoadContext,\n ) => Promise<SelectAsyncLoadResult<TValue>>;\n defaultOptions?: Array<SelectAsyncOption<TValue>>;\n fixedOptions?: Array<SelectAsyncOption<TValue>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n loadingMessage?: ReactNode;\n loadErrorMessage?: ReactNode;\n emptyMessage?: ReactNode;\n loadingMoreMessage?: ReactNode;\n loadMoreHintMessage?: ReactNode;\n loadMoreThreshold?: number;\n searchPlaceholder?: string;\n}\n\nconst DEFAULT_LOAD_MORE_THRESHOLD = 24;\n\nconst normalizeAsyncValue = <TValue extends SelectAsyncOptionValue>(\n value: SelectAsyncValue<TValue> | undefined,\n isMulti: boolean,\n): Array<SelectAsyncOption<TValue>> => {\n if (value == null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return isMulti ? [value] : [value];\n};\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function SelectAsync<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>({\n value,\n defaultValue,\n onChange,\n loadOptions,\n defaultOptions = [],\n fixedOptions = [],\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n loadingMessage = 'Loading options...',\n loadErrorMessage = 'Could not load options.',\n emptyMessage = 'No options found.',\n loadingMoreMessage = 'Loading more...',\n loadMoreHintMessage = 'Scroll to load more',\n loadMoreThreshold = DEFAULT_LOAD_MORE_THRESHOLD,\n isMulti,\n isFilterable,\n searchPlaceholder = 'Search options',\n ...props\n}: SelectAsyncProps<TValue>) {\n const { theme, mutedText } = useUiKitTheme();\n const isMultiSelect = Boolean(isMulti);\n const isControlled = value !== undefined;\n const [internalSelectedOptions, setInternalSelectedOptions] = useState<Array<SelectAsyncOption<TValue>>>(() => {\n return normalizeAsyncValue(defaultValue, isMultiSelect);\n });\n const [remoteOptions, setRemoteOptions] = useState<Array<SelectAsyncOption<TValue>>>(defaultOptions);\n const [searchQuery, setSearchQuery] = useState('');\n const [nextPage, setNextPage] = useState(1);\n const [hasMore, setHasMore] = useState(true);\n const [isInitialLoading, setIsInitialLoading] = useState(false);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [loadError, setLoadError] = useState<ReactNode | null>(null);\n const selectedOptions = isControlled\n ? normalizeAsyncValue(value as SelectAsyncValue<TValue>, isMultiSelect)\n : internalSelectedOptions;\n const optionLookupRef = useRef(new Map<string, SelectAsyncOption<TValue>>());\n const loadOptionsRef = useRef(loadOptions);\n const remoteOptionsRef = useRef(remoteOptions);\n const cacheUniqsRef = useRef(cacheUniqs);\n const requestVersionRef = useRef(0);\n const activeControllerRef = useRef<AbortController | null>(null);\n\n loadOptionsRef.current = loadOptions;\n remoteOptionsRef.current = remoteOptions;\n\n const mergedOptions = useMemo(() => {\n const baseOptions = dedupeSelectObjectOptions<TValue>([\n ...fixedOptions,\n ...remoteOptions,\n ]);\n const knownOptionKeys = new Set(baseOptions.map((option) => getSelectObjectOptionKey(option)));\n const missingSelectedOptions = selectedOptions.filter((option) => {\n return !knownOptionKeys.has(getSelectObjectOptionKey(option));\n });\n\n return [...baseOptions, ...missingSelectedOptions];\n }, [fixedOptions, remoteOptions, selectedOptions]);\n\n useEffect(() => {\n const nextLookup = new Map<string, SelectAsyncOption<TValue>>();\n\n mergedOptions.forEach((option) => {\n nextLookup.set(getSelectObjectOptionKey(option), option);\n });\n\n optionLookupRef.current = nextLookup;\n }, [mergedOptions]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setInternalSelectedOptions(normalizeAsyncValue(defaultValue, isMultiSelect));\n }, [defaultValue, isControlled, isMultiSelect]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setRemoteOptions(defaultOptions);\n setSearchQuery('');\n setNextPage(1);\n setHasMore(true);\n setLoadError(null);\n }, [cacheUniqs, defaultOptions]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n setIsInitialLoading(true);\n setIsLoadingMore(false);\n setLoadError(null);\n\n void loadOptionsRef.current(searchQuery, [], { page: 1, signal: controller.signal })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions(result.options);\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage(2);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions([]);\n setHasMore(false);\n setNextPage(1);\n\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setIsInitialLoading(false);\n });\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [loadErrorMessage, searchDebounceMs, searchQuery, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const loadNextPage = async () => {\n if (isInitialLoading || isLoadingMore || !hasMore) {\n return;\n }\n\n const controller = new AbortController();\n const currentRequestVersion = requestVersionRef.current;\n\n setIsLoadingMore(true);\n setLoadError(null);\n\n try {\n const result = await loadOptionsRef.current(searchQuery, remoteOptionsRef.current, {\n page: nextPage,\n signal: controller.signal,\n });\n\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions((currentOptions) => {\n return dedupeSelectObjectOptions<TValue>([\n ...currentOptions,\n ...result.options,\n ]);\n });\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage((currentPage) => currentPage + 1);\n } catch (error: unknown) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n } finally {\n setIsLoadingMore(false);\n }\n };\n\n const handleListboxScroll = (event: UIEvent<HTMLDivElement>) => {\n const element = event.currentTarget;\n const distanceToBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n\n if (distanceToBottom <= loadMoreThreshold) {\n void loadNextPage();\n }\n };\n\n const handleBaseChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextKeys = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : event.currentTarget.value\n ? [event.currentTarget.value]\n : [];\n const nextOptions = nextKeys\n .map((optionKey) => optionLookupRef.current.get(optionKey))\n .filter((option): option is SelectAsyncOption<TValue> => Boolean(option));\n const nextValue = isMultiSelect ? nextOptions : nextOptions[0] ?? null;\n\n if (!isControlled) {\n setInternalSelectedOptions(nextOptions);\n }\n\n onChange?.(nextValue);\n };\n\n const menuFooter = isLoadingMore || hasMore ? (\n <div\n aria-live=\"polite\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: hasMore ? 'space-between' : 'center',\n gap: 12,\n color: mutedText,\n fontSize: 12,\n lineHeight: 1.4,\n }}\n >\n <span>{isLoadingMore ? loadingMoreMessage : hasMore ? loadMoreHintMessage : null}</span>\n {isLoadingMore ? (\n <span\n aria-hidden=\"true\"\n style={{\n width: 8,\n height: 8,\n borderRadius: 999,\n backgroundColor: withAlpha(theme.colors.primary, 0.8),\n flexShrink: 0,\n }}\n />\n ) : null}\n </div>\n ) : null;\n\n const resolvedEmptyMessage = loadError && remoteOptions.length === 0 ? loadError : emptyMessage;\n const resolvedValue = selectedOptions.map((option) => getSelectObjectOptionKey(option));\n\n return (\n <SelectBase\n {...props}\n isMulti={isMultiSelect}\n isFilterable={isFilterable ?? true}\n value={isMultiSelect ? resolvedValue : resolvedValue[0] ?? ''}\n onChange={handleBaseChange}\n groups={buildParsedGroupsFromObjectOptions<TValue>(mergedOptions)}\n nativeOptions={buildNativeOptionsFromObjectOptions<TValue>(mergedOptions)}\n emptyMessage={resolvedEmptyMessage}\n isLoading={isInitialLoading && mergedOptions.length === 0}\n loadingMessage={loadingMessage}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchQueryChange={setSearchQuery}\n allowOpenWithoutOptions={true}\n filterOptions={false}\n preserveUnknownValues={true}\n onListboxScroll={handleListboxScroll}\n menuFooter={menuFooter}\n />\n );\n}","import type { ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption } from './types';\nimport { getTextContent } from './utils';\n\nexport type SelectObjectOptionValue = string | number;\n\nexport interface SelectObjectOption<TValue extends SelectObjectOptionValue = SelectObjectOptionValue> {\n value: TValue;\n label: ReactNode;\n disabled?: boolean;\n group?: ReactNode;\n}\n\nconst getOptionKey = <TValue extends SelectObjectOptionValue>(option: SelectObjectOption<TValue>): string => {\n return String(option.value);\n};\n\nexport const dedupeSelectObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): Array<SelectObjectOption<TValue>> => {\n const seenKeys = new Set<string>();\n\n return options.filter((option) => {\n const optionKey = getOptionKey(option);\n\n if (seenKeys.has(optionKey)) {\n return false;\n }\n\n seenKeys.add(optionKey);\n return true;\n });\n};\n\nexport const buildParsedGroupsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ParsedGroup[] => {\n const standaloneOptions: ParsedOption[] = [];\n const groupedOptions = new Map<string, ParsedGroup>();\n\n options.forEach((option, index) => {\n const parsedOption: ParsedOption = {\n key: `async-option-${index}-${getOptionKey(option)}`,\n value: getOptionKey(option),\n label: option.label,\n disabled: Boolean(option.disabled),\n };\n\n if (option.group == null) {\n standaloneOptions.push(parsedOption);\n return;\n }\n\n const labelText = getTextContent(option.group).trim();\n const groupKey = labelText || `group-${index}`;\n const currentGroup = groupedOptions.get(groupKey);\n\n if (currentGroup) {\n currentGroup.options.push(parsedOption);\n return;\n }\n\n groupedOptions.set(groupKey, {\n key: `async-group-${groupKey}`,\n label: option.group,\n options: [parsedOption],\n });\n });\n\n const parsedGroups: ParsedGroup[] = [];\n\n if (standaloneOptions.length > 0) {\n parsedGroups.push({\n key: 'async-standalone',\n options: standaloneOptions,\n });\n }\n\n parsedGroups.push(...groupedOptions.values());\n\n return parsedGroups;\n};\n\nexport const buildNativeOptionsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ReactNode => {\n return options.map((option) => {\n const optionValue = getOptionKey(option);\n const optionText = getTextContent(option.label).trim() || optionValue;\n\n return (\n <option key={`native-${optionValue}`} value={optionValue} disabled={option.disabled}>\n {optionText}\n </option>\n );\n });\n};\n\nexport const getSelectObjectOptionKey = getOptionKey;","import { useEffect, useMemo, useState } from 'react';\n\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps } from '../componentsBase/table/types';\nimport {\n DEFAULT_PAGE_SIZE,\n clampPage,\n resolveColumnSearchValue,\n sanitizePageSizeOptions,\n} from '../componentsBase/table/utils';\n\nexport interface TableProps<TItem> extends SharedTableProps<TItem> {\n items: Array<TItem>;\n}\n\nexport function Table<TItem>({\n items,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n const filteredItems = useMemo(() => {\n if (!searchable) {\n return items;\n }\n\n const query = searchValue.trim().toLowerCase();\n\n if (query.length === 0) {\n return items;\n }\n\n const searchableColumns = [...desktopColumns, ...mobileColumns];\n\n return items.filter((item, index) => {\n return searchableColumns.some((column) => {\n return resolveColumnSearchValue(column, item, index).toLowerCase().includes(query);\n });\n });\n }, [desktopColumns, items, mobileColumns, searchable, searchValue]);\n\n const totalItems = filteredItems.length;\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n const pageItems = useMemo(() => {\n const startIndex = (normalizedPage - 1) * pageSize;\n return filteredItems.slice(startIndex, startIndex + pageSize);\n }, [filteredItems, normalizedPage, pageSize]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={pageItems}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","import { useEffect, useId, useRef, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { Button } from '../../components/Button';\nimport { Modal } from '../../components/Modal';\nimport { Separator } from '../../components/Separator';\nimport {\n DISABLED_COMPONENT_OPACITY,\n STANDARD_COMPONENT_BORDER_RADIUS,\n getComponentShadow,\n useUiKitTheme,\n withAlpha,\n} from '../../foundation';\nimport type { TableAction, TableBaseProps, TableColumn, TableColumnAlign } from './types';\nimport {\n buildTableDownloadFileBaseName,\n buildTableDownloadMatrix,\n downloadTableAsCsv,\n downloadTableAsPdf,\n downloadTableAsXls,\n} from './downloads';\nimport {\n DEFAULT_COLLAPSE_BELOW,\n DEFAULT_MAX_INLINE_ACTIONS,\n clampPage,\n getColumnKey,\n getRowId,\n hasRenderableContent,\n isActionDisabled,\n mergeTableLabels,\n resolveColumnContent,\n resolveTableActions,\n sanitizePageSizeOptions,\n} from './utils';\n\ntype OverflowMenuProps = {\n label: string;\n children: ReactNode;\n buttonStyle: CSSProperties;\n menuStyle: CSSProperties;\n};\n\nfunction SettingsIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <path\n d=\"M19.4 15a1 1 0 0 0 .2 1.1l.1.1a1.2 1.2 0 0 1 0 1.7l-1.2 1.2a1.2 1.2 0 0 1-1.7 0l-.1-.1a1 1 0 0 0-1.1-.2 1 1 0 0 0-.6.9V20a1.2 1.2 0 0 1-1.2 1.2h-1.6A1.2 1.2 0 0 1 11 20v-.2a1 1 0 0 0-.6-.9 1 1 0 0 0-1.1.2l-.1.1a1.2 1.2 0 0 1-1.7 0l-1.2-1.2a1.2 1.2 0 0 1 0-1.7l.1-.1a1 1 0 0 0 .2-1.1 1 1 0 0 0-.9-.6H4A1.2 1.2 0 0 1 2.8 13v-1.6A1.2 1.2 0 0 1 4 10.2h.2a1 1 0 0 0 .9-.6 1 1 0 0 0-.2-1.1l-.1-.1a1.2 1.2 0 0 1 0-1.7l1.2-1.2a1.2 1.2 0 0 1 1.7 0l.1.1a1 1 0 0 0 1.1.2 1 1 0 0 0 .6-.9V4A1.2 1.2 0 0 1 11 2.8h1.6A1.2 1.2 0 0 1 13.8 4v.2a1 1 0 0 0 .6.9 1 1 0 0 0 1.1-.2l.1-.1a1.2 1.2 0 0 1 1.7 0l1.2 1.2a1.2 1.2 0 0 1 0 1.7l-.1.1a1 1 0 0 0-.2 1.1 1 1 0 0 0 .9.6h.2A1.2 1.2 0 0 1 21.2 11v1.6a1.2 1.2 0 0 1-1.2 1.2h-.2a1 1 0 0 0-.4.2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MoreActionsIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"5\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.8\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n const isLeft = direction === 'left';\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={isLeft ? 'M15 6 9 12l6 6' : 'm9 6 6 6-6 6'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction DoubleChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n const isLeft = direction === 'left';\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={isLeft ? 'M18 6 12 12l6 6' : 'm6 6 6 6-6 6'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={isLeft ? 'M12 6 6 12l6 6' : 'm12 6 6 6-6 6'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction OverflowMenu({ label, children, buttonStyle, menuStyle }: OverflowMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (containerRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n return (\n <div ref={containerRef} style={{ position: 'relative' }}>\n <button\n type=\"button\"\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((currentValue) => !currentValue)}\n style={buttonStyle}\n >\n <MoreActionsIcon />\n </button>\n {isOpen ? (\n <div role=\"menu\" aria-label={label} style={menuStyle}>\n {children}\n </div>\n ) : null}\n </div>\n );\n}\n\nconst getAlignItems = (align: TableColumnAlign): CSSProperties['alignItems'] => {\n if (align === 'right') return 'flex-end';\n if (align === 'center') return 'center';\n return 'flex-start';\n};\n\nconst getTextAlign = (align: TableColumnAlign): CSSProperties['textAlign'] => align;\n\nexport function TableBase<TItem>({\n items,\n loading = false,\n error,\n onRetry,\n desktopColumns,\n mobileColumns,\n getRowId: getCustomRowId,\n actions,\n stickyActionsColumn = true,\n maxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n collapseBelow = DEFAULT_COLLAPSE_BELOW,\n searchable = true,\n showSearch = true,\n showPagination = true,\n showRowsPerPage = true,\n showSettingsButton = true,\n pageSizeOptions,\n labels,\n translations,\n className,\n style,\n ariaLabel = 'Responsive data table',\n searchValue,\n page,\n pageSize,\n totalPages,\n totalItems,\n onSearchChange,\n onInternalPageChange,\n onInternalPageSizeChange,\n}: TableBaseProps<TItem>) {\n const uiKitTheme = useUiKitTheme();\n const { theme, borderSoft, borderStrong, focusRing, mutedText, surfaceMuted, surfaceRaised } = uiKitTheme;\n const componentShadow = getComponentShadow(theme);\n const scrollRegionId = useId().replace(/:/g, '');\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);\n const resolvedLabels = mergeTableLabels({\n ...(labels ?? {}),\n ...(translations ?? {}),\n });\n const normalizedPage = clampPage(page, totalPages);\n const normalizedPageSizeOptions = sanitizePageSizeOptions(pageSizeOptions, pageSize);\n const isCollapsed = containerWidth !== null ? containerWidth < collapseBelow : false;\n const mobileGridColumnCount = containerWidth !== null && containerWidth < 520 ? 1 : 2;\n const canGoToPreviousPage = normalizedPage > 1;\n const canGoToNextPage = normalizedPage < Math.max(1, totalPages);\n const canGoToFirstPage = canGoToPreviousPage;\n const canGoToLastPage = canGoToNextPage;\n const shouldShowSearch = searchable && showSearch;\n const shouldShowPaginationControls = showPagination && totalPages > 1;\n const shouldShowRowsPerPageControl = showRowsPerPage && normalizedPageSizeOptions.length > 1;\n const shouldRenderFooter = shouldShowPaginationControls || shouldShowRowsPerPageControl;\n const hasRows = items.length > 0;\n const hasSearchValue = searchValue.trim().length > 0;\n const visibleInlineActions = Math.max(0, Math.floor(maxInlineActions));\n const scrollbarThumbColor = withAlpha(theme.colors.textLight, 0.3);\n const scrollbarThumbHoverColor = theme.colors.text;\n const shouldShowToolbarStatus = loading || (!loading && Boolean(error) && hasRows);\n const shouldRenderToolbar = shouldShowSearch || shouldShowToolbarStatus || showSettingsButton;\n const shouldRenderToolbarPrimaryGroup = shouldShowSearch || showSettingsButton;\n const visibleDownloadColumns = desktopColumns.filter((column) => column.type !== 'actions');\n const totalItemCount = totalItems ?? items.length;\n const currentPageItemCount = items.length;\n const downloadMatrix = buildTableDownloadMatrix(visibleDownloadColumns, items);\n const downloadFileBaseName = buildTableDownloadFileBaseName(ariaLabel, normalizedPage);\n const stickyActionsColumnShadow = `-10px 0 16px -14px ${withAlpha(theme.colors.shadow, 0.7)}`;\n const shouldStickActionsColumn = Boolean(actions) && stickyActionsColumn;\n\n const getStickyActionsCellStyle = (\n backgroundColor: string,\n backgroundImage?: CSSProperties['backgroundImage'],\n isHeader = false,\n ): CSSProperties => ({\n position: 'sticky',\n right: 0,\n zIndex: isHeader ? 4 : 2,\n backgroundColor,\n backgroundImage,\n backgroundClip: 'padding-box',\n boxShadow: stickyActionsColumnShadow,\n borderLeft: `1px solid ${borderSoft}`,\n });\n\n useEffect(() => {\n const element = containerRef.current;\n\n if (!element) {\n return;\n }\n\n const setWidthFromElement = (nextWidth?: number) => {\n const measuredWidth = nextWidth ?? element.getBoundingClientRect().width;\n setContainerWidth(measuredWidth > 0 ? measuredWidth : null);\n };\n\n setWidthFromElement();\n\n if (typeof ResizeObserver === 'undefined') {\n const handleResize = () => {\n setWidthFromElement(window.innerWidth);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }\n\n const observer = new ResizeObserver((entries) => {\n const [entry] = entries;\n setWidthFromElement(entry?.contentRect.width);\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const actionButtonBaseStyle = (tone: 'default' | 'danger', disabled: boolean, iconOnly: boolean): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n minWidth: iconOnly ? 34 : undefined,\n width: iconOnly ? 34 : undefined,\n height: 34,\n padding: iconOnly ? 0 : '0 12px',\n borderRadius: 12,\n border: `1px solid ${tone === 'danger' ? withAlpha(theme.colors.negative, 0.28) : borderSoft}`,\n backgroundColor: tone === 'danger' ? withAlpha(theme.colors.negative, 0.08) : withAlpha(theme.colors.surface, 0.82),\n color: tone === 'danger' ? theme.colors.negative : theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? DISABLED_COMPONENT_OPACITY : 1,\n transition: 'background-color 160ms ease, border-color 160ms ease, color 160ms ease',\n boxSizing: 'border-box',\n boxShadow: componentShadow,\n });\n\n const overflowMenuStyle: CSSProperties = {\n position: 'absolute',\n top: 'calc(100% + 8px)',\n right: 0,\n zIndex: 20,\n minWidth: 180,\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n padding: 8,\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: `1px solid ${borderSoft}`,\n backgroundColor: theme.colors.surface,\n boxShadow: componentShadow,\n };\n\n const toolbarControlStyle: CSSProperties = {\n height: 42,\n borderRadius: 14,\n border: `1px solid ${borderSoft}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n padding: '0 10px',\n outline: 'none',\n boxSizing: 'border-box',\n fontSize: 14,\n lineHeight: 1.4,\n transition: 'border-color 160ms ease, box-shadow 160ms ease',\n boxShadow: `${componentShadow}, 0 0 0 0 ${focusRing}`,\n };\n\n const settingsButtonStyle: CSSProperties = {\n ...actionButtonBaseStyle('default', false, true),\n flexShrink: 0,\n };\n\n const infoCardStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n padding: '10px 12px',\n borderRadius: 14,\n border: `1px solid ${borderSoft}`,\n backgroundColor: withAlpha(theme.colors.surface, 0.94),\n boxShadow: componentShadow,\n };\n\n const handleDownloadCsv = () => {\n downloadTableAsCsv(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadXls = () => {\n downloadTableAsXls(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadPdf = () => {\n downloadTableAsPdf(\n downloadMatrix,\n downloadFileBaseName,\n String(ariaLabel),\n normalizedPage,\n totalPages,\n );\n };\n\n const renderActionButton = (\n action: TableAction<TItem>,\n item: TItem,\n rowIndex: number,\n appearance: 'inline' | 'menu',\n onAfterClick?: () => void,\n ) => {\n const disabled = isActionDisabled(action, item, rowIndex);\n const tone = action.tone ?? 'default';\n const iconOnly = appearance === 'inline' && action.icon != null;\n\n return (\n <button\n key={action.id ?? `${action.label}-${rowIndex}`}\n type=\"button\"\n role={appearance === 'menu' ? 'menuitem' : undefined}\n disabled={disabled}\n title={action.label}\n aria-label={action.label}\n onClick={() => {\n if (disabled) {\n return;\n }\n\n action.onClick(item, rowIndex);\n onAfterClick?.();\n }}\n style={{\n ...actionButtonBaseStyle(tone, disabled, iconOnly),\n width: appearance === 'menu' ? '100%' : undefined,\n justifyContent: appearance === 'menu' ? 'flex-start' : 'center',\n padding: appearance === 'menu' ? '0 12px' : iconOnly ? 0 : '0 12px',\n }}\n >\n {action.icon}\n {appearance === 'menu' || !iconOnly ? <span>{action.label}</span> : null}\n </button>\n );\n };\n\n const renderActions = (item: TItem, rowIndex: number) => {\n const resolvedActions = resolveTableActions(actions, item, rowIndex);\n\n if (resolvedActions.length === 0) {\n return null;\n }\n\n const inlineActions = resolvedActions.slice(0, visibleInlineActions);\n const overflowActions = resolvedActions.slice(visibleInlineActions);\n\n return (\n <div style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'flex-end', gap: 8 }}>\n {inlineActions.map((action) => renderActionButton(action, item, rowIndex, 'inline'))}\n {overflowActions.length > 0 ? (\n <OverflowMenu\n label={resolvedLabels.actionsMenuLabel}\n buttonStyle={actionButtonBaseStyle('default', false, true)}\n menuStyle={overflowMenuStyle}\n >\n {overflowActions.map((action) => renderActionButton(action, item, rowIndex, 'menu'))}\n </OverflowMenu>\n ) : null}\n </div>\n );\n };\n\n const renderDesktopCell = (\n column: TableColumn<TItem>,\n item: TItem,\n rowIndex: number,\n columnIndex: number,\n rowBackgroundColor: string,\n ) => {\n const content = resolveColumnContent(column, item, rowIndex);\n const align = column.align ?? (column.type === 'actions' ? 'right' : 'left');\n\n return (\n <td\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n colSpan={column.colSpan}\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${borderSoft}`,\n verticalAlign: 'middle',\n color: theme.colors.text,\n fontSize: 14,\n lineHeight: 1.55,\n textAlign: getTextAlign(align),\n backgroundColor: rowBackgroundColor,\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {hasRenderableContent(content) ? content : <span style={{ color: mutedText }}>-</span>}\n </td>\n );\n };\n\n const renderEmptyState = () => {\n const message = error\n ? error\n : loading\n ? resolvedLabels.loadingMessage\n : hasSearchValue\n ? resolvedLabels.noResultsMessage\n : resolvedLabels.emptyMessage;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 12,\n minHeight: 220,\n borderRadius: 20,\n border: `1px dashed ${borderStrong}`,\n backgroundColor: withAlpha(theme.colors.surface, 0.64),\n boxShadow: componentShadow,\n color: theme.colors.text,\n textAlign: 'center',\n padding: 24,\n }}\n >\n <strong style={{ fontSize: 16 }}>{message}</strong>\n {error && onRetry ? (\n <Button size=\"sm\" variant=\"outline\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n );\n };\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n width: '100%',\n maxWidth: '100%',\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n padding: 18,\n boxSizing: 'border-box',\n borderRadius: 24,\n backgroundColor: surfaceRaised,\n color: theme.colors.text,\n ...style,\n }}\n >\n {shouldRenderToolbar ? (\n <div style={{ display: 'flex', flexWrap: 'wrap', alignItems: 'center', justifyContent: 'space-between', gap: 12, minWidth: 0 }}>\n {shouldRenderToolbarPrimaryGroup ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n minWidth: 0,\n flex: shouldShowSearch ? '1 1 260px' : '0 0 auto',\n marginLeft: shouldShowSearch ? undefined : 'auto',\n }}\n >\n {shouldShowSearch ? (\n <input\n type=\"search\"\n value={searchValue}\n aria-label={resolvedLabels.searchPlaceholder}\n placeholder={resolvedLabels.searchPlaceholder}\n onChange={(event) => onSearchChange(event.currentTarget.value)}\n style={{\n ...toolbarControlStyle,\n flex: '1 1 260px',\n maxWidth: 360,\n minWidth: 0,\n }}\n />\n ) : null}\n\n {showSettingsButton ? (\n <button\n type=\"button\"\n aria-label={resolvedLabels.settingsButtonLabel}\n title={resolvedLabels.settingsButtonLabel}\n onClick={() => setIsSettingsModalOpen(true)}\n style={settingsButtonStyle}\n >\n <SettingsIcon />\n </button>\n ) : null}\n </div>\n ) : null}\n\n {shouldShowToolbarStatus ? (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 10,\n minWidth: 0,\n marginLeft: shouldRenderToolbarPrimaryGroup ? 'auto' : undefined,\n }}\n >\n {loading ? (\n <span style={{ color: mutedText, fontSize: 13, fontWeight: 600 }}>{resolvedLabels.loadingMessage}</span>\n ) : null}\n {!loading && error && hasRows ? (\n <div style={{ display: 'inline-flex', alignItems: 'center', gap: 10 }}>\n <span style={{ color: theme.colors.negative, fontSize: 13, fontWeight: 600 }}>\n {resolvedLabels.errorMessage}\n </span>\n {onRetry ? (\n <Button size=\"sm\" variant=\"ghost\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {!hasRows && (!loading || error) ? renderEmptyState() : null}\n\n {hasRows ? (\n isCollapsed ? (\n <div role=\"list\" aria-label={ariaLabel} style={{ display: 'flex', flexDirection: 'column', gap: 14 }}>\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n const rowBackgroundColor = rowIndex % 2 === 0 ? theme.colors.surface : surfaceMuted;\n\n return (\n <article\n key={getRowId(item, rowIndex, getCustomRowId)}\n role=\"listitem\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 14,\n padding: '16px 16px 6px 16px',\n borderRadius: 20,\n border: `1px solid ${borderSoft}`,\n backgroundColor: rowBackgroundColor,\n boxShadow: componentShadow,\n }}\n >\n <div\n style={{\n display: 'grid',\n gap: 6,\n gridTemplateColumns: mobileGridColumnCount === 1 ? 'minmax(0, 1fr)' : 'repeat(2, minmax(0, 1fr))',\n }}\n >\n {mobileColumns.map((column, columnIndex) => {\n const content = resolveColumnContent(column, item, rowIndex);\n const align = column.align ?? (column.type === 'actions' ? 'right' : 'left');\n const span = Math.max(1, Math.min(column.colSpan ?? 1, mobileGridColumnCount));\n\n return (\n <div\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n minWidth: 0,\n gridColumn: `span ${span}`,\n }}\n >\n {!column.hideLabel && column.label ? (\n <span\n style={{\n color: mutedText,\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: 'left',\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n {column.label}\n </span>\n ) : null}\n <div\n style={{\n flex: '1 1 auto',\n width: '100%',\n minWidth: 0,\n overflowX: 'auto',\n overflowY: 'hidden',\n }}\n >\n <div\n style={{\n width: 'fit-content',\n minWidth: !column.hideLabel && column.label ? 'max-content' : '100%',\n marginLeft: align === 'right' ? 'auto' : align === 'center' ? 'auto' : 0,\n marginRight: align === 'center' ? 'auto' : 0,\n color: theme.colors.text,\n fontSize: 14,\n lineHeight: 1.55,\n textAlign: getTextAlign(align),\n }}\n >\n {hasRenderableContent(content) ? content : <span style={{ color: mutedText }}>-</span>}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {rowActions ? (\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n paddingTop: 4,\n borderTop: `1px solid ${borderSoft}`,\n }}\n >\n {rowActions}\n </div>\n ) : null}\n </article>\n );\n })}\n </div>\n ) : (\n <>\n <style>\n {`\n #${scrollRegionId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n cursor: pointer;\n }\n\n #${scrollRegionId}::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n cursor: pointer;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n cursor: pointer;\n }\n `}\n </style>\n <div\n id={scrollRegionId}\n role=\"region\"\n aria-label={ariaLabel}\n style={{\n width: '100%',\n maxWidth: '100%',\n minWidth: 0,\n overflowX: 'auto',\n overflowY: 'hidden',\n borderRadius: 20,\n border: `1px solid ${borderSoft}`,\n backgroundColor: theme.colors.surface,\n boxShadow: componentShadow,\n }}\n >\n <table style={{ width: 'max-content', maxWidth: 'none', minWidth: '100%', borderCollapse: 'separate', borderSpacing: 0 }}>\n <thead>\n <tr>\n {desktopColumns.map((column, columnIndex) => {\n const align = column.align ?? (column.type === 'actions' ? 'right' : 'left');\n\n return (\n <th\n key={getColumnKey(column, columnIndex)}\n colSpan={column.headerColSpan ?? column.colSpan}\n scope=\"col\"\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${borderStrong}`,\n color: mutedText,\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: getTextAlign(align),\n whiteSpace: 'nowrap',\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {column.label}\n </th>\n );\n })}\n {actions ? (\n <th\n scope=\"col\"\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${borderStrong}`,\n color: mutedText,\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: 'right',\n whiteSpace: 'nowrap',\n width: 1,\n ...(shouldStickActionsColumn ? getStickyActionsCellStyle(theme.colors.surface, undefined, true) : {}),\n }}\n >\n {resolvedLabels.moreActionsLabel}\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n const rowBackgroundColor = rowIndex % 2 === 0 ? theme.colors.surface : surfaceMuted;\n const stickyRowBackgroundImage = rowIndex % 2 === 0\n ? undefined\n : `linear-gradient(${surfaceMuted}, ${surfaceMuted})`;\n\n return (\n <tr\n key={getRowId(item, rowIndex, getCustomRowId)}\n style={{ backgroundColor: rowBackgroundColor }}\n >\n {desktopColumns.map((column, columnIndex) => {\n return renderDesktopCell(column, item, rowIndex, columnIndex, rowBackgroundColor);\n })}\n {actions ? (\n <td\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${borderSoft}`,\n textAlign: 'right',\n verticalAlign: 'middle',\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(theme.colors.surface, stickyRowBackgroundImage)\n : {}),\n }}\n >\n {rowActions}\n </td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </>\n )\n ) : null}\n\n {hasRows && shouldRenderFooter ? (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n paddingTop: 4,\n }}\n >\n {shouldShowPaginationControls ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' }}>\n <span style={{ color: mutedText, fontSize: 13, marginRight: 4 }}>\n {resolvedLabels.pageLabel(normalizedPage, totalPages)}\n </span>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(1)}\n disabled={!canGoToFirstPage}\n aria-label={resolvedLabels.firstPageLabel}\n style={actionButtonBaseStyle('default', !canGoToFirstPage, true)}\n >\n <DoubleChevronIcon direction=\"left\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(normalizedPage - 1)}\n disabled={!canGoToPreviousPage}\n aria-label={resolvedLabels.previousPageLabel}\n style={actionButtonBaseStyle('default', !canGoToPreviousPage, true)}\n >\n <ChevronIcon direction=\"left\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(normalizedPage + 1)}\n disabled={!canGoToNextPage}\n aria-label={resolvedLabels.nextPageLabel}\n style={actionButtonBaseStyle('default', !canGoToNextPage, true)}\n >\n <ChevronIcon direction=\"right\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(totalPages)}\n disabled={!canGoToLastPage}\n aria-label={resolvedLabels.lastPageLabel}\n style={actionButtonBaseStyle('default', !canGoToLastPage, true)}\n >\n <DoubleChevronIcon direction=\"right\" />\n </button>\n </div>\n ) : null}\n\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, color: mutedText, fontSize: 13, marginLeft: shouldShowRowsPerPageControl ? 'auto' : undefined }}>\n {shouldShowRowsPerPageControl ? (\n <>\n <span>{resolvedLabels.rowsPerPageLabel}</span>\n <select\n value={pageSize}\n onChange={(event) => onInternalPageSizeChange(Number(event.currentTarget.value))}\n style={{\n ...toolbarControlStyle,\n height: 38,\n padding: '0 12px',\n }}\n >\n {normalizedPageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </>\n ) : null}\n </div>\n </div>\n ) : null}\n\n <Modal\n isOpen={isSettingsModalOpen}\n onClose={() => setIsSettingsModalOpen(false)}\n title={resolvedLabels.settingsModalTitle}\n maxWidth={560}\n bodyStyle={{ display: 'grid', gap: 0 }}\n >\n <section style={{ display: 'grid', gap: 12 }}>\n <strong style={{ color: theme.colors.text, fontSize: 14 }}>\n {resolvedLabels.tableInfoSectionTitle}\n </strong>\n <div style={{ display: 'grid', gap: 10, gridTemplateColumns: 'repeat(auto-fit, minmax(120px, 1fr))' }}>\n <div style={infoCardStyle}>\n <span style={{ color: mutedText, fontSize: 10, fontWeight: 700, letterSpacing: '0.06em', textTransform: 'uppercase' }}>\n {resolvedLabels.totalPagesInfoLabel}\n </span>\n <strong style={{ color: theme.colors.text, fontSize: 18, lineHeight: 1.1 }}>{totalPages}</strong>\n </div>\n <div style={infoCardStyle}>\n <span style={{ color: mutedText, fontSize: 10, fontWeight: 700, letterSpacing: '0.06em', textTransform: 'uppercase' }}>\n {resolvedLabels.totalItemsInfoLabel}\n </span>\n <strong style={{ color: theme.colors.text, fontSize: 18, lineHeight: 1.1 }}>{totalItemCount}</strong>\n </div>\n <div style={infoCardStyle}>\n <span style={{ color: mutedText, fontSize: 10, fontWeight: 700, letterSpacing: '0.06em', textTransform: 'uppercase' }}>\n {resolvedLabels.currentPageInfoLabel}\n </span>\n <strong style={{ color: theme.colors.text, fontSize: 18, lineHeight: 1.1 }}>{normalizedPage}</strong>\n </div>\n <div style={infoCardStyle}>\n <span style={{ color: mutedText, fontSize: 10, fontWeight: 700, letterSpacing: '0.06em', textTransform: 'uppercase' }}>\n {resolvedLabels.currentPageItemsInfoLabel}\n </span>\n <strong style={{ color: theme.colors.text, fontSize: 18, lineHeight: 1.1 }}>{currentPageItemCount}</strong>\n </div>\n </div>\n </section>\n\n <div style={{ paddingBlock: 18 }}>\n <Separator orientation=\"horizontal\" color={borderSoft} />\n </div>\n\n <section style={{ display: 'grid', gap: 12 }}>\n <strong style={{ color: theme.colors.text, fontSize: 14 }}>\n {resolvedLabels.downloadSectionTitle}\n </strong>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10 }}>\n <Button size=\"sm\" variant=\"outline\" onClick={handleDownloadCsv} disabled={!hasRows}>\n {resolvedLabels.downloadCsvLabel}\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleDownloadXls} disabled={!hasRows}>\n {resolvedLabels.downloadXlsLabel}\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleDownloadPdf} disabled={!hasRows}>\n {resolvedLabels.downloadPdfLabel}\n </Button>\n </div>\n </section>\n </Modal>\n </div>\n );\n}","import { isValidElement, type ReactNode } from 'react';\n\nimport type {\n TableAction,\n TableActionSource,\n TableColumn,\n TableLabels,\n} from './types';\n\nexport const DEFAULT_COLLAPSE_BELOW = 420;\nexport const DEFAULT_MAX_INLINE_ACTIONS = 2;\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\n\ntype ResolvedTableLabels = Required<Omit<TableLabels, 'pageLabel' | 'resultCountLabel'>> & {\n pageLabel: NonNullable<TableLabels['pageLabel']>;\n resultCountLabel: NonNullable<TableLabels['resultCountLabel']>;\n};\n\nconst DEFAULT_TABLE_LABELS: ResolvedTableLabels = {\n searchPlaceholder: 'Search rows',\n emptyMessage: 'No rows available.',\n noResultsMessage: 'No rows match the current search.',\n loadingMessage: 'Loading rows...',\n errorMessage: 'Could not load rows.',\n firstPageLabel: 'First page',\n previousPageLabel: 'Previous',\n nextPageLabel: 'Next',\n lastPageLabel: 'Last page',\n rowsPerPageLabel: 'Rows per page',\n actionsMenuLabel: 'More actions',\n moreActionsLabel: 'More actions',\n retryLabel: 'Retry',\n settingsButtonLabel: 'Table settings',\n settingsModalTitle: 'Table settings',\n tableInfoSectionTitle: 'Table details',\n totalPagesInfoLabel: 'Total pages',\n totalItemsInfoLabel: 'Total items',\n currentPageInfoLabel: 'Current page',\n currentPageItemsInfoLabel: 'Items in current page',\n downloadSectionTitle: 'Download current page',\n downloadCsvLabel: 'CSV',\n downloadXlsLabel: 'XLS',\n downloadPdfLabel: 'PDF',\n pageLabel: (page, totalPages) => `Page ${page} of ${totalPages}`,\n resultCountLabel: (start, end, totalItems) => `Showing ${start}-${end} of ${totalItems}`,\n};\n\nconst getNodeText = (node: ReactNode): string => {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map((entry) => getNodeText(entry)).join(' ');\n }\n\n if (isValidElement(node)) {\n const element = node as React.ReactElement<{ children?: ReactNode }>;\n return getNodeText(element.props.children);\n }\n\n return '';\n};\n\nexport const normalizeTableText = (value: unknown): string => {\n if (value == null || typeof value === 'boolean') {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTableText(entry)).join(' ');\n }\n\n if (isValidElement(value)) {\n return getNodeText(value);\n }\n\n return '';\n};\n\nconst resolveActionFlag = <TItem>(\n value: boolean | ((item: TItem, index: number) => boolean) | undefined,\n item: TItem,\n index: number,\n): boolean => {\n if (typeof value === 'function') {\n return value(item, index);\n }\n\n return Boolean(value);\n};\n\nexport const mergeTableLabels = (labels?: TableLabels): ResolvedTableLabels => ({\n searchPlaceholder: labels?.searchPlaceholder ?? DEFAULT_TABLE_LABELS.searchPlaceholder,\n emptyMessage: labels?.emptyMessage ?? DEFAULT_TABLE_LABELS.emptyMessage,\n noResultsMessage: labels?.noResultsMessage ?? DEFAULT_TABLE_LABELS.noResultsMessage,\n loadingMessage: labels?.loadingMessage ?? DEFAULT_TABLE_LABELS.loadingMessage,\n errorMessage: labels?.errorMessage ?? DEFAULT_TABLE_LABELS.errorMessage,\n firstPageLabel: labels?.firstPageLabel ?? DEFAULT_TABLE_LABELS.firstPageLabel,\n previousPageLabel: labels?.previousPageLabel ?? DEFAULT_TABLE_LABELS.previousPageLabel,\n nextPageLabel: labels?.nextPageLabel ?? DEFAULT_TABLE_LABELS.nextPageLabel,\n lastPageLabel: labels?.lastPageLabel ?? DEFAULT_TABLE_LABELS.lastPageLabel,\n rowsPerPageLabel: labels?.rowsPerPageLabel ?? DEFAULT_TABLE_LABELS.rowsPerPageLabel,\n actionsMenuLabel: labels?.actionsMenuLabel ?? DEFAULT_TABLE_LABELS.actionsMenuLabel,\n moreActionsLabel: labels?.moreActionsLabel ?? DEFAULT_TABLE_LABELS.moreActionsLabel,\n retryLabel: labels?.retryLabel ?? DEFAULT_TABLE_LABELS.retryLabel,\n settingsButtonLabel: labels?.settingsButtonLabel ?? DEFAULT_TABLE_LABELS.settingsButtonLabel,\n settingsModalTitle: labels?.settingsModalTitle ?? DEFAULT_TABLE_LABELS.settingsModalTitle,\n tableInfoSectionTitle: labels?.tableInfoSectionTitle ?? DEFAULT_TABLE_LABELS.tableInfoSectionTitle,\n totalPagesInfoLabel: labels?.totalPagesInfoLabel ?? DEFAULT_TABLE_LABELS.totalPagesInfoLabel,\n totalItemsInfoLabel: labels?.totalItemsInfoLabel ?? DEFAULT_TABLE_LABELS.totalItemsInfoLabel,\n currentPageInfoLabel: labels?.currentPageInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageInfoLabel,\n currentPageItemsInfoLabel: labels?.currentPageItemsInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageItemsInfoLabel,\n downloadSectionTitle: labels?.downloadSectionTitle ?? DEFAULT_TABLE_LABELS.downloadSectionTitle,\n downloadCsvLabel: labels?.downloadCsvLabel ?? DEFAULT_TABLE_LABELS.downloadCsvLabel,\n downloadXlsLabel: labels?.downloadXlsLabel ?? DEFAULT_TABLE_LABELS.downloadXlsLabel,\n downloadPdfLabel: labels?.downloadPdfLabel ?? DEFAULT_TABLE_LABELS.downloadPdfLabel,\n pageLabel: labels?.pageLabel ?? DEFAULT_TABLE_LABELS.pageLabel,\n resultCountLabel: labels?.resultCountLabel ?? DEFAULT_TABLE_LABELS.resultCountLabel,\n});\n\nexport const sanitizePageSizeOptions = (pageSizeOptions: number[] | undefined, pageSize: number): number[] => {\n const sourceOptions = (pageSizeOptions ?? DEFAULT_PAGE_SIZE_OPTIONS).filter((option) => {\n return Number.isFinite(option) && option > 0;\n });\n const nextOptions = sourceOptions.length > 0 ? sourceOptions : DEFAULT_PAGE_SIZE_OPTIONS;\n const normalizedPageSize = Number.isFinite(pageSize) && pageSize > 0 ? Math.floor(pageSize) : DEFAULT_PAGE_SIZE;\n\n return Array.from(new Set([...nextOptions, normalizedPageSize])).sort((left, right) => left - right);\n};\n\nexport const clampPage = (page: number, totalPages: number): number => {\n const normalizedTotal = Math.max(1, Math.floor(totalPages));\n const normalizedPage = Number.isFinite(page) ? Math.floor(page) : 1;\n\n return Math.min(Math.max(normalizedPage, 1), normalizedTotal);\n};\n\nexport const getColumnKey = <TItem>(column: TableColumn<TItem>, index: number): string => {\n if (column.id) {\n return column.id;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `column-${index}`;\n};\n\nexport const getRowId = <TItem>(\n item: TItem,\n index: number,\n getCustomRowId?: (item: TItem, index: number) => string,\n): string => {\n if (getCustomRowId) {\n return getCustomRowId(item, index);\n }\n\n const fallbackId = (item as { id?: unknown }).id;\n\n if (typeof fallbackId === 'string' || typeof fallbackId === 'number') {\n return String(fallbackId);\n }\n\n return `row-${index}`;\n};\n\nexport const resolveColumnContent = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): ReactNode => {\n if (column.Cell) {\n return column.Cell(item, index);\n }\n\n if (column.accessor) {\n return item[column.accessor] as ReactNode;\n }\n\n return null;\n};\n\nexport const resolveColumnSearchValue = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): string => {\n if (column.getSearchValue) {\n return column.getSearchValue(item, index);\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]);\n }\n\n return normalizeTableText(resolveColumnContent(column, item, index));\n};\n\nexport const resolveTableActions = <TItem>(\n actionsSource: TableActionSource<TItem> | undefined,\n item: TItem,\n index: number,\n): Array<TableAction<TItem>> => {\n if (!actionsSource) {\n return [];\n }\n\n const actions = typeof actionsSource === 'function' ? actionsSource(item, index) : actionsSource;\n\n return actions.filter((action) => !resolveActionFlag(action.hidden, item, index));\n};\n\nexport const isActionDisabled = <TItem>(action: TableAction<TItem>, item: TItem, index: number): boolean => {\n return resolveActionFlag(action.disabled, item, index);\n};\n\nexport const hasRenderableContent = (content: ReactNode): boolean => {\n if (content == null || typeof content === 'boolean') {\n return false;\n }\n\n if (typeof content === 'string') {\n return content.trim().length > 0;\n }\n\n if (typeof content === 'number') {\n return true;\n }\n\n if (Array.isArray(content)) {\n return content.some((entry) => hasRenderableContent(entry));\n }\n\n return true;\n};","import type { TableColumn } from './types';\nimport { normalizeTableText, resolveColumnContent } from './utils';\n\ntype TableDownloadMatrix = {\n headers: string[];\n rows: string[][];\n};\n\nconst escapeCsvValue = (value: string): string => {\n if (/[\",\\n;]/.test(value)) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n\n return value;\n};\n\nconst escapeHtml = (value: string): string => {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n};\n\nconst sanitizeFileName = (value: string): string => {\n return value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '') || 'table';\n};\n\nconst normalizePdfText = (value: string): string => {\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/[^\\x20-\\x7E]/g, '?');\n};\n\nconst wrapPdfLine = (value: string, maxLength: number): string[] => {\n if (value.length <= maxLength) {\n return [value];\n }\n\n const words = value.split(' ');\n const lines: string[] = [];\n let currentLine = '';\n\n words.forEach((word) => {\n const nextLine = currentLine ? `${currentLine} ${word}` : word;\n\n if (nextLine.length <= maxLength) {\n currentLine = nextLine;\n return;\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n currentLine = word;\n });\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n\nconst downloadBlob = (blob: Blob, fileName: string) => {\n const objectUrl = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = objectUrl;\n link.download = fileName;\n link.rel = 'noopener';\n link.style.display = 'none';\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n window.setTimeout(() => {\n window.URL.revokeObjectURL(objectUrl);\n }, 0);\n};\n\nconst buildPdfDocument = (lines: string[]): string => {\n const pageWidth = 612;\n const pageHeight = 792;\n const marginX = 40;\n const marginTop = 752;\n const lineHeight = 14;\n const linesPerPage = 48;\n const pages: string[][] = [];\n\n for (let index = 0; index < lines.length; index += linesPerPage) {\n pages.push(lines.slice(index, index + linesPerPage));\n }\n\n const objects: string[] = [];\n const pageObjectNumbers: number[] = [];\n const contentObjectNumbers: number[] = [];\n const fontObjectNumber = 3;\n let nextObjectNumber = 4;\n\n pages.forEach(() => {\n pageObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n contentObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n });\n\n objects[1] = '<< /Type /Catalog /Pages 2 0 R >>';\n objects[2] = `<< /Type /Pages /Count ${pages.length} /Kids [${pageObjectNumbers.map((objectNumber) => `${objectNumber} 0 R`).join(' ')}] >>`;\n objects[fontObjectNumber] = '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>';\n\n pages.forEach((pageLines, index) => {\n const content = `BT\\n/F1 10 Tf\\n${marginX} ${marginTop} Td\\n${lineHeight} TL\\n${pageLines.map((line, lineIndex) => {\n const normalizedLine = normalizePdfText(line);\n return `${lineIndex === 0 ? '' : 'T*\\n'}(${normalizedLine}) Tj`;\n }).join('\\n')}\\nET`;\n const contentObjectNumber = contentObjectNumbers[index];\n const pageObjectNumber = pageObjectNumbers[index];\n\n objects[contentObjectNumber] = `<< /Length ${content.length} >>\\nstream\\n${content}\\nendstream`;\n objects[pageObjectNumber] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pageWidth} ${pageHeight}] /Resources << /Font << /F1 ${fontObjectNumber} 0 R >> >> /Contents ${contentObjectNumber} 0 R >>`;\n });\n\n let pdf = '%PDF-1.4\\n';\n const offsets: number[] = [0];\n\n for (let index = 1; index < objects.length; index += 1) {\n const objectBody = objects[index];\n\n if (!objectBody) {\n continue;\n }\n\n offsets[index] = pdf.length;\n pdf += `${index} 0 obj\\n${objectBody}\\nendobj\\n`;\n }\n\n const xrefStart = pdf.length;\n pdf += `xref\\n0 ${objects.length}\\n`;\n pdf += '0000000000 65535 f \\n';\n\n for (let index = 1; index < objects.length; index += 1) {\n pdf += `${String(offsets[index] ?? 0).padStart(10, '0')} 00000 n \\n`;\n }\n\n pdf += `trailer\\n<< /Size ${objects.length} /Root 1 0 R >>\\nstartxref\\n${xrefStart}\\n%%EOF`;\n\n return pdf;\n};\n\nexport const buildTableDownloadMatrix = <TItem>(\n columns: Array<TableColumn<TItem>>,\n items: Array<TItem>,\n): TableDownloadMatrix => {\n const exportableColumns = columns.filter((column) => {\n return column.type !== 'actions' && (column.accessor || column.Cell || column.label);\n });\n const headers = exportableColumns.map((column, index) => {\n const labelText = normalizeTableText(column.label).trim();\n\n if (labelText.length > 0) {\n return labelText;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `Column ${index + 1}`;\n });\n const rows = items.map((item, rowIndex) => {\n return exportableColumns.map((column) => {\n const searchValue = column.getSearchValue?.(item, rowIndex).trim();\n\n if (searchValue && searchValue.length > 0) {\n return searchValue;\n }\n\n const contentText = normalizeTableText(resolveColumnContent(column, item, rowIndex)).trim();\n\n if (contentText.length > 0) {\n return contentText;\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]).trim();\n }\n\n return '';\n });\n });\n\n return {\n headers,\n rows,\n };\n};\n\nexport const buildTableDownloadFileBaseName = (tableName: string, page: number): string => {\n return `${sanitizeFileName(tableName)}-page-${page}`;\n};\n\nexport const downloadTableAsCsv = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const lines = [\n matrix.headers.map((header) => escapeCsvValue(header)).join(','),\n ...matrix.rows.map((row) => row.map((value) => escapeCsvValue(value)).join(',')),\n ];\n const blob = new Blob([`\\uFEFF${lines.join('\\n')}`], { type: 'text/csv;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.csv`);\n};\n\nexport const downloadTableAsXls = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const html = [\n '<html><head><meta charset=\"utf-8\" /></head><body><table border=\"1\">',\n '<thead><tr>',\n ...matrix.headers.map((header) => `<th>${escapeHtml(header)}</th>`),\n '</tr></thead><tbody>',\n ...matrix.rows.map((row) => {\n return `<tr>${row.map((value) => `<td>${escapeHtml(value)}</td>`).join('')}</tr>`;\n }),\n '</tbody></table></body></html>',\n ].join('');\n const blob = new Blob([html], { type: 'application/vnd.ms-excel;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.xls`);\n};\n\nexport const downloadTableAsPdf = (\n matrix: TableDownloadMatrix,\n fileBaseName: string,\n title: string,\n page: number,\n totalPages: number,\n) => {\n const lines = [\n title,\n `Page ${page} of ${totalPages}`,\n `Rows in export: ${matrix.rows.length}`,\n '',\n ...wrapPdfLine(matrix.headers.join(' | '), 88),\n ...wrapPdfLine('-'.repeat(Math.min(88, Math.max(20, matrix.headers.join(' | ').length))), 88),\n ...matrix.rows.flatMap((row) => wrapPdfLine(row.join(' | '), 88)),\n ];\n const pdf = buildPdfDocument(lines);\n const blob = new Blob([pdf], { type: 'application/pdf' });\n\n downloadBlob(blob, `${fileBaseName}.pdf`);\n};","import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS } from '../foundation';\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps, TableAsyncLoadContext, TableAsyncLoadResult } from '../componentsBase/table/types';\nimport { DEFAULT_PAGE_SIZE, clampPage, sanitizePageSizeOptions } from '../componentsBase/table/utils';\n\nexport interface TableAsyncProps<TItem> extends SharedTableProps<TItem> {\n loadItems: (query: string, context: TableAsyncLoadContext) => Promise<TableAsyncLoadResult<TItem>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n keepPreviousData?: boolean;\n}\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function TableAsync<TItem>({\n loadItems,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n keepPreviousData = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableAsyncProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [debouncedSearchValue, setDebouncedSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n const [items, setItems] = useState<Array<TItem>>([]);\n const [totalPages, setTotalPages] = useState(1);\n const [totalItems, setTotalItems] = useState<number | undefined>(undefined);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [reloadKey, setReloadKey] = useState(0);\n const loadItemsRef = useRef(loadItems);\n const cacheUniqsRef = useRef(cacheUniqs);\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestVersionRef = useRef(0);\n\n loadItemsRef.current = loadItems;\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedSearchValue(searchValue);\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [searchDebounceMs, searchValue]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setPage(1);\n setReloadKey((currentValue) => currentValue + 1);\n }, [cacheUniqs]);\n\n useEffect(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n\n if (!keepPreviousData) {\n setItems([]);\n }\n\n setLoading(true);\n setError(null);\n\n void loadItemsRef.current(searchable ? debouncedSearchValue : '', {\n page,\n pageSize,\n signal: controller.signal,\n })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setItems(result.items);\n setTotalPages(Math.max(1, result.totalPages));\n setTotalItems(result.totalItems);\n })\n .catch((loadError: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n if (loadError instanceof Error && loadError.name === 'AbortError') {\n return;\n }\n\n setError(loadError instanceof Error ? loadError.message : 'Could not load rows.');\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setLoading(false);\n });\n }, [debouncedSearchValue, keepPreviousData, page, pageSize, reloadKey, searchable, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={items}\n loading={loading}\n error={error}\n onRetry={() => setReloadKey((currentValue) => currentValue + 1)}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","import type { CSSProperties, ReactNode, TextareaHTMLAttributes } from 'react';\n\nimport {\n DISABLED_FIELD_OPACITY,\n FIELD_SURFACE_TRANSITION,\n STANDARD_COMPONENT_BORDER_RADIUS,\n getComponentShadow,\n useUiKitTheme,\n withAlpha,\n type ControlSize,\n} from '../foundation';\nimport { ControlFrame } from './Input';\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'dangerouslySetInnerHTML'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n controlSize?: ControlSize;\n}\n\nconst getPadding = (size: ControlSize): string => {\n if (size === 'sm') return '10px 12px';\n if (size === 'lg') return '16px 18px';\n return '13px 16px';\n};\n\nexport function Textarea({\n label,\n hint,\n error,\n controlSize = 'sm',\n id,\n disabled,\n style,\n rows = 5,\n ...rest\n}: TextareaProps) {\n const { theme, focusRing } = useUiKitTheme();\n const componentShadow = getComponentShadow(theme);\n\n const textareaStyle: CSSProperties = {\n border: `1px solid ${error ? theme.colors.negative : theme.colors.textLight}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'text',\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n width: '100%',\n boxSizing: 'border-box',\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n padding: getPadding(controlSize),\n outline: 'none',\n boxShadow: error\n ? `0 0 0 3px ${withAlpha(theme.colors.negative, 0.12)}, ${componentShadow}`\n : `${componentShadow}, 0 0 0 0 ${focusRing}`,\n transition: FIELD_SURFACE_TRANSITION,\n resize: 'vertical',\n ...style,\n };\n\n const textarea = (\n <textarea {...rest} id={id} disabled={disabled} rows={rows} style={textareaStyle} />\n );\n\n return (\n <ControlFrame label={label} hint={hint} error={error} htmlFor={id} required={rest.required}>\n {textarea}\n </ControlFrame>\n );\n}"],"mappings":"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","names":["import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","_a","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","_a","import_jsx_runtime","import_react","import_react","import_jsx_runtime","_a","_b","_c","_d","_e","_f","_g","_h","_i","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","_a","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","_a","import_react","import_jsx_runtime","areUnknownArraysEqual","_a","import_jsx_runtime"]}
|