mywhy-ui 0.3.0 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Spinner/Spinner.tsx","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/Switch/Switch.tsx","../src/components/Badge/Badge.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Alert/Alert.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/FormControl/FormControl.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Toast/Toast.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Link/Link.tsx","../src/components/FileUploader/FileUploader.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/TimePicker/TimePicker.tsx","../src/components/Progress/Progress.tsx","../src/components/Rating/Rating.tsx","../src/components/Slider/Slider.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Table/Table.tsx","../src/components/Pagination/Pagination.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/CodeBlock/CodeBlock.tsx","../src/components/Timeline/Timeline.tsx","../src/components/Kbd/Kbd.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/ConnectionIndicator/ConnectionIndicator.tsx","../src/components/ROS2Diagnostics/DiagnosticsTable.tsx","../src/components/ROS2Diagnostics/DiagnosticsTreeTable.tsx","../src/components/ROS2Diagnostics/roslib/Impl.ts","../src/components/ROS2Diagnostics/roslib/Ros.ts","../src/components/ROS2Diagnostics/roslib/Topic.ts","../src/components/ROS2Diagnostics/RosConnectionManager.tsx","../src/components/ROS2Diagnostics/utils/namespaceUtils.ts","../src/components/ROS2Diagnostics/hooks/useNamespace.ts","../src/components/ROS2Diagnostics/hooks/useWebSocketUrl.ts","../src/components/ROS2Diagnostics/DiagnosticsCapture.tsx","../src/components/ROS2Diagnostics/ManualNamespace.tsx","../src/components/ROS2Diagnostics/HistorySelection.tsx","../src/components/ROS2Diagnostics/hooks/useDiagHistory.ts","../src/components/ROS2Diagnostics/index.tsx","../src/hooks/useDisclosure.ts","../src/hooks/useToast.ts"],"names":["jsxs","jsx","sizeClasses","label","themeClasses","React","useRef","useEffect","variantClasses","placementClasses","useState","colorClasses","Fragment","pages","CheckCircle2","EventEmitter","FoxgloveClient","WebSocket","publisherId","subscriptionId","channel","Ros2MessageReader","parseRos2idl","parse","Ros2MessageWriter","HelpCircle","AlertCircle","AlertTriangle","useCallback","Download","HISTORY_SIZE","Play","Pause"],"mappings":"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","file":"index.cjs","sourcesContent":["import React from 'react'\n\nexport interface SpinnerProps {\n size?: 'xs' | 'sm' | 'md' | 'lg'\n color?: 'brand' | 'white' | 'gray'\n label?: string\n className?: string\n}\n\nconst sizeClasses = {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n}\n\nconst colorClasses = {\n brand: 'text-brand',\n white: 'text-white',\n gray: 'text-ink-faint',\n}\n\nexport function Spinner({ size = 'md', color = 'brand', label = 'Loading...', className = '' }: SpinnerProps) {\n return (\n <span role=\"status\" className={`inline-flex ${className}`}>\n <svg\n className={`animate-spin ${sizeClasses[size]} ${colorClasses[color]}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n <span className=\"sr-only\">{label}</span>\n </span>\n )\n}\n","import React from 'react'\nimport { Spinner } from '../Spinner/Spinner'\n\nexport type ButtonVariant = 'solid' | 'subtle' | 'outline' | 'ghost' | 'link'\nexport type ButtonTheme = 'brand' | 'success' | 'danger' | 'warning' | 'gray'\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n theme?: ButtonTheme\n size?: ButtonSize\n loading?: boolean\n icon?: React.ReactNode\n iconRight?: React.ReactNode\n}\n\nconst base = 'inline-flex items-center justify-center gap-1.5 font-medium rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-1 disabled:opacity-50 disabled:pointer-events-none select-none'\n\nconst sizeClasses: Record<ButtonSize, string> = {\n xs: 'h-6 px-2 text-xs',\n sm: 'h-7 px-2.5 text-sm',\n md: 'h-8 px-3 text-base',\n lg: 'h-9 px-4 text-md',\n}\n\nconst variantThemeClasses: Record<ButtonVariant, Record<ButtonTheme, string>> = {\n solid: {\n brand: 'bg-brand text-white hover:bg-brand-dark active:bg-brand-dark',\n success: 'bg-success-icon text-white hover:bg-green-600 active:bg-green-700',\n danger: 'bg-danger-icon text-white hover:bg-red-600 active:bg-red-700',\n warning: 'bg-warning-icon text-white hover:bg-amber-600 active:bg-amber-700',\n gray: 'bg-ink text-white hover:bg-ink-gray active:bg-ink-gray',\n },\n subtle: {\n brand: 'bg-brand-50 text-brand hover:bg-brand-100 active:bg-brand-200',\n success: 'bg-success-bg text-success-text hover:bg-green-100',\n danger: 'bg-danger-bg text-danger-text hover:bg-red-100',\n warning: 'bg-warning-bg text-warning-text hover:bg-amber-100',\n gray: 'bg-surface-gray text-ink hover:bg-surface-overlay',\n },\n outline: {\n brand: 'border border-brand text-brand hover:bg-brand-50',\n success: 'border border-success-border text-success-text hover:bg-success-bg',\n danger: 'border border-danger-border text-danger-text hover:bg-danger-bg',\n warning: 'border border-warning-border text-warning-text hover:bg-warning-bg',\n gray: 'border border-outline text-ink hover:bg-surface-gray',\n },\n ghost: {\n brand: 'text-brand hover:bg-brand-50',\n success: 'text-success-text hover:bg-success-bg',\n danger: 'text-danger-text hover:bg-danger-bg',\n warning: 'text-warning-text hover:bg-warning-bg',\n gray: 'text-ink-light hover:bg-surface-gray',\n },\n link: {\n brand: 'text-brand hover:underline p-0 h-auto',\n success: 'text-success-text hover:underline p-0 h-auto',\n danger: 'text-danger-text hover:underline p-0 h-auto',\n warning: 'text-warning-text hover:underline p-0 h-auto',\n gray: 'text-ink-light hover:underline p-0 h-auto',\n },\n}\n\nexport function Button({\n variant = 'subtle',\n theme = 'brand',\n size = 'md',\n loading = false,\n icon,\n iconRight,\n disabled,\n children,\n className = '',\n ...props\n}: ButtonProps) {\n const variantClass = variantThemeClasses[variant]?.[theme] ?? variantThemeClasses.subtle.brand\n\n return (\n <button\n className={`${base} ${sizeClasses[size]} ${variantClass} ${className}`}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? (\n <Spinner size=\"xs\" color={variant === 'solid' ? 'white' : 'brand'} />\n ) : (\n icon && <span className=\"shrink-0\">{icon}</span>\n )}\n {children}\n {!loading && iconRight && <span className=\"shrink-0\">{iconRight}</span>}\n </button>\n )\n}\n","import React from 'react'\n\nexport type InputSize = 'sm' | 'md' | 'lg'\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n size?: InputSize\n label?: string\n error?: string\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n}\n\nconst sizeClasses: Record<InputSize, string> = {\n sm: 'h-7 px-2 text-sm',\n md: 'h-8 px-2.5 text-base',\n lg: 'h-9 px-3 text-md',\n}\n\nexport function Input({\n size = 'md',\n label,\n error,\n prefix,\n suffix,\n id,\n className = '',\n ...props\n}: InputProps) {\n const inputId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n const inputClass = [\n 'w-full rounded-md border bg-surface-subtle text-ink placeholder:text-ink-faint',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-0 focus:border-brand',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'transition-colors',\n error ? 'border-danger-border focus:ring-danger-icon' : 'border-outline hover:border-outline-strong',\n sizeClasses[size],\n prefix ? 'pl-8' : '',\n suffix ? 'pr-8' : '',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-ink-gray\">\n {label}\n </label>\n )}\n <div className=\"relative flex items-center\">\n {prefix && (\n <span className=\"absolute left-2.5 flex items-center text-ink-faint pointer-events-none\">\n {prefix}\n </span>\n )}\n <input id={inputId} className={inputClass} {...props} />\n {suffix && (\n <span className=\"absolute right-2.5 flex items-center text-ink-faint pointer-events-none\">\n {suffix}\n </span>\n )}\n </div>\n {error && (\n <p className=\"text-sm text-danger-text\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type SelectSize = 'sm' | 'md' | 'lg'\n\nexport interface SelectOption {\n value: string\n label: string\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: SelectSize\n label?: string\n error?: string\n options: Array<SelectOption | string>\n}\n\nconst sizeClasses: Record<SelectSize, string> = {\n sm: 'h-7 px-2 text-sm',\n md: 'h-8 px-2.5 text-base',\n lg: 'h-9 px-3 text-md',\n}\n\nexport function Select({\n size = 'md',\n label,\n error,\n options,\n id,\n className = '',\n ...props\n}: SelectProps) {\n const selectId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n const selectClass = [\n 'w-full rounded-md border bg-surface-subtle text-ink appearance-none pr-8',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:border-brand',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'transition-colors',\n error ? 'border-danger-border focus:ring-danger-icon' : 'border-outline hover:border-outline-strong',\n sizeClasses[size],\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-ink-gray\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select id={selectId} className={selectClass} {...props}>\n {options.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value\n const label = typeof opt === 'string' ? opt : opt.label\n return (\n <option key={value} value={value}>\n {label}\n </option>\n )\n })}\n </select>\n <span className=\"absolute right-2.5 top-1/2 -translate-y-1/2 pointer-events-none text-ink-faint\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 4l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </span>\n </div>\n {error && (\n <p className=\"text-sm text-danger-text\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode\n description?: string\n error?: string\n}\n\nexport function Switch({\n label,\n description,\n error,\n id,\n className = '',\n checked,\n ...props\n}: SwitchProps) {\n const switchId = id ?? (typeof label === 'string' ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n return (\n <div className={`flex flex-col gap-0.5 ${className}`}>\n <label className=\"flex items-center gap-3 cursor-pointer\" htmlFor={switchId}>\n <input\n id={switchId}\n type=\"checkbox\"\n role=\"switch\"\n aria-checked={checked}\n className={[\n 'peer relative w-10 h-6 appearance-none rounded-full transition-colors',\n 'bg-surface-gray border border-outline',\n 'hover:bg-surface-overlay',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-2',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'checked:bg-brand checked:border-brand checked:hover:bg-brand-dark',\n 'after:content-[\\'\\'] after:absolute after:top-1 after:left-1',\n 'after:w-4 after:h-4 after:bg-white after:rounded-full after:transition-transform',\n 'peer-checked:after:translate-x-4',\n error ? 'border-danger-border' : '',\n ].join(' ')}\n checked={checked}\n {...props}\n />\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className=\"text-base font-medium text-ink leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-sm text-ink-light\">{description}</span>\n )}\n </div>\n )}\n </label>\n {error && (\n <p className=\"text-sm text-danger-text ml-4\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type BadgeTheme =\n | 'brand' | 'success' | 'danger' | 'warning' | 'gray'\n | 'admin' | 'operator' | 'viewer'\n | 'online' | 'offline' | 'error'\n\nexport interface BadgeProps {\n theme?: BadgeTheme\n size?: 'sm' | 'md'\n variant?: 'solid' | 'subtle'\n dot?: boolean\n children: React.ReactNode\n className?: string\n}\n\nconst subtleClasses: Record<BadgeTheme, string> = {\n brand: 'bg-brand-50 text-brand border-brand-200',\n success: 'bg-success-bg text-success-text border-success-border',\n danger: 'bg-danger-bg text-danger-text border-danger-border',\n warning: 'bg-warning-bg text-warning-text border-warning-border',\n gray: 'bg-surface-gray text-ink-light border-outline',\n admin: 'bg-purple-50 text-role-admin border-purple-200',\n operator: 'bg-sky-50 text-role-operator border-sky-200',\n viewer: 'bg-surface-gray text-role-viewer border-outline',\n online: 'bg-green-50 text-status-online border-green-200',\n offline: 'bg-surface-gray text-status-offline border-outline',\n error: 'bg-danger-bg text-status-error border-danger-border',\n}\n\nconst solidClasses: Record<BadgeTheme, string> = {\n brand: 'bg-brand text-white border-brand',\n success: 'bg-success-icon text-white border-success-icon',\n danger: 'bg-danger-icon text-white border-danger-icon',\n warning: 'bg-warning-icon text-white border-warning-icon',\n gray: 'bg-ink-light text-white border-ink-light',\n admin: 'bg-role-admin text-white border-role-admin',\n operator: 'bg-role-operator text-white border-role-operator',\n viewer: 'bg-role-viewer text-white border-role-viewer',\n online: 'bg-status-online text-white border-status-online',\n offline: 'bg-status-offline text-white border-status-offline',\n error: 'bg-status-error text-white border-status-error',\n}\n\nconst dotColorClasses: Record<BadgeTheme, string> = {\n brand: 'bg-brand',\n success: 'bg-success-icon',\n danger: 'bg-danger-icon',\n warning: 'bg-warning-icon',\n gray: 'bg-ink-faint',\n admin: 'bg-role-admin',\n operator: 'bg-role-operator',\n viewer: 'bg-role-viewer',\n online: 'bg-status-online',\n offline: 'bg-status-offline',\n error: 'bg-status-error',\n}\n\nexport function Badge({\n theme = 'gray',\n size = 'sm',\n variant = 'subtle',\n dot = false,\n children,\n className = '',\n}: BadgeProps) {\n const colorClass = variant === 'solid' ? solidClasses[theme] : subtleClasses[theme]\n const sizeClass = size === 'sm' ? 'text-xs px-1.5 py-0.5' : 'text-sm px-2 py-0.5'\n\n return (\n <span\n className={`inline-flex items-center gap-1 rounded font-medium border ${colorClass} ${sizeClass} ${className}`}\n >\n {dot && (\n <span className={`w-1.5 h-1.5 rounded-full shrink-0 ${\n variant === 'solid' ? 'bg-white/70' : dotColorClasses[theme]\n }`} />\n )}\n {children}\n </span>\n )\n}\n","import React from 'react'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type AvatarShape = 'circle' | 'square'\nexport type AvatarTheme = 'brand' | 'admin' | 'operator' | 'viewer' | 'gray'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n initials?: string\n size?: AvatarSize\n shape?: AvatarShape\n theme?: AvatarTheme\n className?: string\n}\n\nconst sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-5 h-5 text-2xs',\n sm: 'w-6 h-6 text-xs',\n md: 'w-8 h-8 text-sm',\n lg: 'w-10 h-10 text-base',\n xl: 'w-12 h-12 text-md',\n}\n\nconst shapeClasses: Record<AvatarShape, string> = {\n circle: 'rounded-full',\n square: 'rounded-md',\n}\n\nconst themeClasses: Record<AvatarTheme, string> = {\n brand: 'bg-brand text-white',\n admin: 'bg-role-admin text-white',\n operator: 'bg-role-operator text-white',\n viewer: 'bg-surface-gray text-ink-light',\n gray: 'bg-surface-overlay text-ink-light',\n}\n\nexport function Avatar({\n src,\n alt = '',\n initials,\n size = 'md',\n shape = 'circle',\n theme = 'brand',\n className = '',\n}: AvatarProps) {\n const baseClass = `inline-flex items-center justify-center shrink-0 font-semibold overflow-hidden ${sizeClasses[size]} ${shapeClasses[shape]}`\n\n if (src) {\n return (\n <img\n src={src}\n alt={alt}\n className={`${baseClass} object-cover ${className}`}\n />\n )\n }\n\n const displayInitials = initials\n ? initials.slice(0, 2).toUpperCase()\n : alt ? alt.slice(0, 2).toUpperCase() : '?'\n\n return (\n <span className={`${baseClass} ${themeClasses[theme]} ${className}`}>\n {displayInitials}\n </span>\n )\n}\n","import React from 'react'\n\nexport interface CardProps {\n padding?: 'none' | 'sm' | 'md' | 'lg'\n shadow?: boolean\n border?: boolean\n as?: React.ElementType\n onClick?: React.MouseEventHandler\n children: React.ReactNode\n className?: string\n}\n\nconst paddingClasses = {\n none: '',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n}\n\nexport function Card({\n padding = 'md',\n shadow = true,\n border = true,\n as: Tag = 'div',\n onClick,\n children,\n className = '',\n}: CardProps) {\n const classes = [\n 'bg-surface rounded-lg',\n paddingClasses[padding],\n shadow ? 'shadow-card' : '',\n border ? 'border border-outline' : '',\n onClick ? 'cursor-pointer hover:shadow-card-hover transition-shadow' : '',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <Tag className={classes} onClick={onClick}>\n {children}\n </Tag>\n )\n}\n","import React from 'react'\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode\n description?: string\n error?: string\n}\n\nexport function Checkbox({\n label,\n description,\n error,\n id,\n className = '',\n ...props\n}: CheckboxProps) {\n const checkboxId = id ?? (typeof label === 'string' ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n return (\n <div className={`flex flex-col gap-0.5 ${className}`}>\n <label className=\"flex items-start gap-2 cursor-pointer\" htmlFor={checkboxId}>\n <input\n id={checkboxId}\n type=\"checkbox\"\n className={[\n 'mt-0.5 w-4 h-4 rounded border text-brand',\n 'focus:ring-2 focus:ring-brand focus:ring-offset-0',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error ? 'border-danger-border' : 'border-outline',\n ].join(' ')}\n {...props}\n />\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className=\"text-base font-medium text-ink leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-sm text-ink-light\">{description}</span>\n )}\n </div>\n )}\n </label>\n {error && (\n <p className=\"text-sm text-danger-text ml-6\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type TextareaSize = 'sm' | 'md' | 'lg'\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n size?: TextareaSize\n label?: string\n error?: string\n resize?: TextareaResize\n}\n\nconst sizeClasses: Record<TextareaSize, string> = {\n sm: 'px-2 py-1.5 text-sm',\n md: 'px-2.5 py-2 text-base',\n lg: 'px-3 py-2.5 text-md',\n}\n\nconst resizeClasses: Record<TextareaResize, string> = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n}\n\nexport function Textarea({\n size = 'md',\n label,\n error,\n resize = 'none',\n id,\n className = '',\n ...props\n}: TextareaProps) {\n const textareaId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n const textareaClass = [\n 'w-full rounded-md border bg-surface-subtle text-ink placeholder:text-ink-faint',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:border-brand',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'transition-colors',\n error ? 'border-danger-border focus:ring-danger-icon' : 'border-outline hover:border-outline-strong',\n sizeClasses[size],\n resizeClasses[resize],\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={textareaId} className=\"text-sm font-medium text-ink-gray\">\n {label}\n </label>\n )}\n <textarea id={textareaId} className={textareaClass} {...props} />\n {error && (\n <p className=\"text-sm text-danger-text\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type AlertTheme = 'info' | 'success' | 'warning' | 'danger'\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n theme?: AlertTheme\n title?: React.ReactNode\n icon?: React.ReactNode\n onClose?: () => void\n isDismissible?: boolean\n}\n\nconst themeClasses: Record<AlertTheme, string> = {\n info: 'bg-brand-50 border-brand-200 text-brand-900',\n success: 'bg-green-50 border-green-200 text-green-900',\n warning: 'bg-amber-50 border-amber-200 text-amber-900',\n danger: 'bg-red-50 border-red-200 text-red-900',\n}\n\nconst iconColors: Record<AlertTheme, string> = {\n info: 'text-brand',\n success: 'text-success-icon',\n warning: 'text-warning-icon',\n danger: 'text-danger-icon',\n}\n\nconst closeButtonColors: Record<AlertTheme, string> = {\n info: 'hover:bg-brand-100 text-brand-600',\n success: 'hover:bg-green-100 text-green-600',\n warning: 'hover:bg-amber-100 text-amber-600',\n danger: 'hover:bg-red-100 text-red-600',\n}\n\nexport function Alert({\n theme = 'info',\n title,\n icon,\n onClose,\n isDismissible = false,\n children,\n className = '',\n ...props\n}: AlertProps) {\n const [isVisible, setIsVisible] = React.useState(true)\n\n const handleClose = () => {\n setIsVisible(false)\n onClose?.()\n }\n\n if (!isVisible) return null\n\n return (\n <div\n className={`flex gap-3 p-3 rounded-md border ${themeClasses[theme]} ${className}`}\n role=\"alert\"\n {...props}\n >\n {icon && (\n <div className={`shrink-0 mt-0.5 ${iconColors[theme]}`}>\n {icon}\n </div>\n )}\n <div className=\"flex-1\">\n {title && (\n <p className=\"font-medium\">{title}</p>\n )}\n {children && (\n <p className={title ? 'text-sm mt-0.5' : 'text-sm'}>\n {children}\n </p>\n )}\n </div>\n {isDismissible && (\n <button\n onClick={handleClose}\n className={`shrink-0 p-1 rounded transition-colors ${closeButtonColors[theme]}`}\n aria-label=\"Dismiss alert\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface MultiSelectOption {\n label: string\n value: string\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface MultiSelectProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n options: MultiSelectOption[]\n value?: string[]\n onChange?: (values: string[]) => void\n placeholder?: string\n label?: string\n description?: string\n error?: string\n disabled?: boolean\n searchable?: boolean\n clearable?: boolean\n size?: 'sm' | 'md' | 'lg'\n}\n\nexport function MultiSelect({\n options,\n value = [],\n onChange,\n placeholder = 'Select items...',\n label,\n description,\n error,\n disabled = false,\n searchable = true,\n clearable = true,\n size = 'md',\n className = '',\n ...props\n}: MultiSelectProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const [searchTerm, setSearchTerm] = React.useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const filteredOptions = searchable\n ? options.filter((opt) =>\n opt.label.toLowerCase().includes(searchTerm.toLowerCase()),\n )\n : options\n\n const handleSelect = (optionValue: string) => {\n const newValues = value.includes(optionValue)\n ? value.filter((v) => v !== optionValue)\n : [...value, optionValue]\n onChange?.(newValues)\n }\n\n const handleRemove = (optionValue: string) => {\n const newValues = value.filter((v) => v !== optionValue)\n onChange?.(newValues)\n }\n\n const handleClear = () => {\n onChange?.([])\n setSearchTerm('')\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const sizeClasses = {\n sm: 'h-7 px-2 text-sm',\n md: 'h-8 px-3 text-base',\n lg: 'h-9 px-4 text-base',\n }\n\n const selectedOptions = options.filter((opt) => value.includes(opt.value))\n\n return (\n <div className={className} {...props}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-1.5\">{description}</p>\n )}\n\n <div className=\"relative\" ref={containerRef}>\n <div\n className={[\n 'flex flex-wrap gap-1 items-center border rounded-md transition-colors',\n 'focus-within:ring-2 focus-within:ring-brand focus-within:ring-offset-1',\n disabled ? 'bg-surface-gray opacity-50 cursor-not-allowed' : 'bg-white',\n error ? 'border-danger-border' : 'border-outline',\n sizeClasses[size],\n ].join(' ')}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n >\n {selectedOptions.map((opt) => (\n <div\n key={opt.value}\n className=\"inline-flex items-center gap-1 bg-brand-50 text-brand px-2 py-0.5 rounded text-xs font-medium\"\n >\n {opt.icon && <span className=\"shrink-0\">{opt.icon}</span>}\n <span>{opt.label}</span>\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleRemove(opt.value)\n }}\n className=\"shrink-0 hover:text-brand-dark\"\n >\n ×\n </button>\n </div>\n ))}\n\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={value.length === 0 ? placeholder : ''}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onFocus={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className=\"flex-1 min-w-[40px] bg-transparent border-0 outline-none text-sm\"\n />\n\n {clearable && value.length > 0 && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleClear()\n }}\n className=\"shrink-0 text-ink-light hover:text-ink\"\n >\n ✕\n </button>\n )}\n </div>\n\n {isOpen && (\n <div className=\"absolute top-full mt-1 left-0 right-0 z-50 bg-white border border-outline rounded-md shadow-lg py-1\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((opt) => (\n <button\n key={opt.value}\n onClick={() => {\n handleSelect(opt.value)\n if (!opt.disabled) {\n inputRef.current?.focus()\n }\n }}\n disabled={opt.disabled}\n className={[\n 'w-full px-3 py-2 text-left text-sm flex items-center gap-2 transition-colors',\n opt.disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-surface-gray',\n value.includes(opt.value)\n ? 'bg-brand-50'\n : '',\n ].join(' ')}\n >\n <input\n type=\"checkbox\"\n checked={value.includes(opt.value)}\n readOnly\n className=\"w-4 h-4\"\n />\n {opt.icon && <span className=\"shrink-0\">{opt.icon}</span>}\n <span>{opt.label}</span>\n </button>\n ))\n ) : (\n <div className=\"px-3 py-2 text-sm text-ink-light\">\n No options found\n </div>\n )}\n </div>\n )}\n </div>\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface FormControlProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: React.ReactNode\n description?: string\n error?: string\n required?: boolean\n helperText?: string\n children: React.ReactNode\n}\n\nexport function FormControl({\n label,\n description,\n error,\n required = false,\n helperText,\n children,\n className = '',\n ...props\n}: FormControlProps) {\n return (\n <div className={`flex flex-col gap-1.5 ${className}`} {...props}>\n {(label || description) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <label className=\"text-sm font-medium text-ink\">\n {label}\n {required && <span className=\"text-danger-icon ml-1\">*</span>}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light\">{description}</p>\n )}\n </div>\n )}\n\n {children}\n\n {error && (\n <p className=\"text-xs text-danger-text flex items-center gap-1\">\n <svg className=\"w-3.5 h-3.5 shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\" clipRule=\"evenodd\" />\n </svg>\n {error}\n </p>\n )}\n\n {helperText && !error && (\n <p className=\"text-xs text-ink-light\">{helperText}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface TabItem {\n label: React.ReactNode\n value: string\n content: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps {\n tabs: TabItem[]\n activeTab?: string\n onTabChange?: (value: string) => void\n variant?: 'underline' | 'soft'\n className?: string\n tabsClassName?: string\n contentClassName?: string\n}\n\nexport function Tabs({\n tabs,\n activeTab,\n onTabChange,\n variant = 'underline',\n className = '',\n tabsClassName = '',\n contentClassName = '',\n}: TabsProps) {\n const [internalActiveTab, setInternalActiveTab] = React.useState(activeTab || tabs[0]?.value || '')\n\n const active = activeTab !== undefined ? activeTab : internalActiveTab\n\n const handleTabChange = (value: string) => {\n setInternalActiveTab(value)\n onTabChange?.(value)\n }\n\n const baseTabClasses = 'px-3 py-2 font-medium text-sm rounded-t-md transition-colors whitespace-nowrap'\n\n const variantClasses = {\n underline: {\n base: 'border-b-2 border-transparent text-ink-light hover:text-ink hover:border-outline',\n active: 'border-brand text-brand',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n soft: {\n base: 'text-ink-light hover:text-ink hover:bg-surface-gray',\n active: 'bg-brand text-white',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n }\n\n const variantStyle = variantClasses[variant]\n\n return (\n <div className={className}>\n <div\n className={`flex gap-0 border-b border-outline ${tabsClassName}`}\n role=\"tablist\"\n >\n {tabs.map((tab) => (\n <button\n key={tab.value}\n role=\"tab\"\n aria-selected={active === tab.value}\n aria-disabled={tab.disabled}\n onClick={() => !tab.disabled && handleTabChange(tab.value)}\n disabled={tab.disabled}\n className={[\n baseTabClasses,\n active === tab.value ? variantStyle.active : variantStyle.base,\n tab.disabled ? variantStyle.disabled : '',\n ].join(' ')}\n >\n {tab.icon && <span className=\"inline-block mr-1\">{tab.icon}</span>}\n {tab.label}\n </button>\n ))}\n </div>\n\n <div className={contentClassName} role=\"tabpanel\">\n {tabs.find((tab) => tab.value === active)?.content}\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface BreadcrumbItem {\n label: React.ReactNode\n href?: string\n onClick?: () => void\n icon?: React.ReactNode\n isActive?: boolean\n}\n\nexport interface BreadcrumbsProps extends React.HTMLAttributes<HTMLDivElement> {\n items: BreadcrumbItem[]\n separator?: React.ReactNode\n className?: string\n}\n\nexport function Breadcrumbs({\n items,\n separator = '/',\n className = '',\n ...props\n}: BreadcrumbsProps) {\n return (\n <nav className={`flex items-center gap-0 text-sm ${className}`} {...props}>\n {items.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <span className=\"text-ink-light px-1.5\">{separator}</span>\n )}\n\n {item.href ? (\n <a\n href={item.href}\n className={[\n 'flex items-center gap-1 rounded px-1.5 py-1 transition-colors',\n item.isActive\n ? 'text-ink font-medium'\n : 'text-brand hover:bg-brand-50 cursor-pointer',\n ].join(' ')}\n >\n {item.icon && <span className=\"shrink-0\">{item.icon}</span>}\n {item.label}\n </a>\n ) : (\n <button\n onClick={item.onClick}\n disabled={!item.onClick && !item.isActive}\n className={[\n 'flex items-center gap-1 rounded px-1.5 py-1 transition-colors',\n item.isActive\n ? 'text-ink font-medium cursor-default'\n : item.onClick\n ? 'text-brand hover:bg-brand-50 cursor-pointer'\n : 'text-ink-light cursor-default',\n ].join(' ')}\n >\n {item.icon && <span className=\"shrink-0\">{item.icon}</span>}\n {item.label}\n </button>\n )}\n </React.Fragment>\n ))}\n </nav>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface DropdownItem {\n label: React.ReactNode\n value?: string\n icon?: React.ReactNode\n onClick?: () => void\n isDanger?: boolean\n disabled?: boolean\n}\n\nexport interface DropdownProps {\n items: DropdownItem[]\n trigger: React.ReactNode\n placement?: 'bottom' | 'top' | 'left' | 'right'\n isOpen?: boolean\n onOpenChange?: (isOpen: boolean) => void\n className?: string\n triggerClassName?: string\n menuClassName?: string\n}\n\nexport function Dropdown({\n items,\n trigger,\n placement = 'bottom',\n isOpen: controlledIsOpen,\n onOpenChange,\n className = '',\n triggerClassName = '',\n menuClassName = '',\n}: DropdownProps) {\n const [internalIsOpen, setInternalIsOpen] = React.useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen\n\n const toggleOpen = () => {\n const newState = !isOpen\n setInternalIsOpen(newState)\n onOpenChange?.(newState)\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setInternalIsOpen(false)\n onOpenChange?.(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, onOpenChange])\n\n const placementClasses: Record<string, string> = {\n bottom: 'top-full mt-1 left-0',\n top: 'bottom-full mb-1 left-0',\n left: 'right-full mr-1 top-0',\n right: 'left-full ml-1 top-0',\n }\n\n return (\n <div className={`relative inline-block ${className}`} ref={containerRef}>\n <button\n onClick={toggleOpen}\n className={`inline-flex items-center gap-1.5 ${triggerClassName}`}\n >\n {trigger}\n </button>\n\n {isOpen && (\n <div\n ref={menuRef}\n className={`absolute ${placementClasses[placement]} z-50 min-w-[160px] bg-surface-default border border-outline rounded-md shadow-lg py-1 ${menuClassName}`}\n >\n {items.map((item, index) => (\n <button\n key={index}\n onClick={() => {\n item.onClick?.()\n setInternalIsOpen(false)\n onOpenChange?.(false)\n }}\n disabled={item.disabled}\n className={[\n 'w-full px-3 py-2 text-left text-sm flex items-center gap-2 transition-colors',\n item.disabled\n ? 'opacity-50 cursor-not-allowed'\n : item.isDanger\n ? 'text-danger-text hover:bg-danger-bg'\n : 'text-ink hover:bg-surface-gray',\n ].join(' ')}\n >\n {item.icon && <span className=\"shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useRef } from 'react'\n\nexport interface DialogProps {\n open: boolean\n onClose: () => void\n title?: string\n size?: 'sm' | 'md' | 'lg' | 'xl'\n children: React.ReactNode\n footer?: React.ReactNode\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n}\n\nexport function Dialog({\n open,\n onClose,\n title,\n size = 'md',\n children,\n footer,\n className = '',\n}: DialogProps) {\n const overlayRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open, onClose])\n\n useEffect(() => {\n document.body.style.overflow = open ? 'hidden' : ''\n return () => { document.body.style.overflow = '' }\n }, [open])\n\n if (!open) return null\n\n return (\n <div\n ref={overlayRef}\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n onClick={(e) => { if (e.target === overlayRef.current) onClose() }}\n >\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-ink/40 backdrop-blur-sm\" aria-hidden=\"true\" />\n\n {/* Panel */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'dialog-title' : undefined}\n className={`relative w-full ${sizeClasses[size]} bg-surface rounded-xl shadow-dialog border border-outline flex flex-col max-h-[90vh] ${className}`}\n >\n {/* Header */}\n {title && (\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-outline shrink-0\">\n <h2 id=\"dialog-title\" className=\"text-md font-semibold text-ink\">\n {title}\n </h2>\n <button\n onClick={onClose}\n className=\"p-1 rounded-md text-ink-faint hover:text-ink hover:bg-surface-gray transition-colors\"\n aria-label=\"Close dialog\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M12 4L4 12M4 4l8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n </button>\n </div>\n )}\n\n {/* Body */}\n <div className=\"px-5 py-4 overflow-y-auto flex-1\">\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"px-5 py-3 border-t border-outline shrink-0 flex items-center justify-end gap-2\">\n {footer}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React, { useEffect } from 'react'\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info'\n\nexport interface ToastProps {\n type?: ToastType\n title: string\n message?: string\n duration?: number\n onClose?: () => void\n className?: string\n}\n\nconst typeConfig: Record<ToastType, { icon: React.ReactNode; classes: string }> = {\n success: {\n classes: 'border-success-border bg-success-bg text-success-text',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-success-icon shrink-0\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M5 8l2 2 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ),\n },\n error: {\n classes: 'border-danger-border bg-danger-bg text-danger-text',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-danger-icon shrink-0\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M10 6L6 10M6 6l4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n ),\n },\n warning: {\n classes: 'border-warning-border bg-warning-bg text-warning-text',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-warning-icon shrink-0\">\n <path d=\"M8 2L14 13H2L8 2z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\"/>\n <path d=\"M8 6v3M8 11v.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n ),\n },\n info: {\n classes: 'border-brand-200 bg-brand-50 text-brand',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-brand shrink-0\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M8 7v4M8 5v.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n ),\n },\n}\n\nexport function Toast({\n type = 'info',\n title,\n message,\n duration = 3000,\n onClose,\n className = '',\n}: ToastProps) {\n useEffect(() => {\n if (!duration || !onClose) return\n const timer = setTimeout(onClose, duration)\n return () => clearTimeout(timer)\n }, [duration, onClose])\n\n const { icon, classes } = typeConfig[type]\n\n return (\n <div\n role=\"alert\"\n className={`flex items-start gap-3 px-4 py-3 rounded-lg border shadow-toast min-w-[260px] max-w-sm ${classes} ${className}`}\n >\n <span className=\"mt-0.5\">{icon}</span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-base font-medium leading-tight\">{title}</p>\n {message && <p className=\"text-sm mt-0.5 opacity-80\">{message}</p>}\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className=\"shrink-0 p-0.5 rounded opacity-60 hover:opacity-100 transition-opacity\"\n aria-label=\"Dismiss\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M11 3L3 11M3 3l8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n </button>\n )}\n </div>\n )\n}\n\nexport interface ToastContainerProps {\n toasts: Array<ToastProps & { id: string }>\n onClose: (id: string) => void\n}\n\nexport function ToastContainer({ toasts, onClose }: ToastContainerProps) {\n if (toasts.length === 0) return null\n return (\n <div className=\"fixed bottom-4 right-4 z-[100] flex flex-col gap-2 items-end\">\n {toasts.map((toast) => (\n <Toast key={toast.id} {...toast} onClose={() => onClose(toast.id)} />\n ))}\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right'\n\nexport interface TooltipProps {\n content: React.ReactNode\n placement?: TooltipPlacement\n delay?: number\n children: React.ReactElement\n className?: string\n}\n\nconst placementClasses: Record<TooltipPlacement, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-1.5',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-1.5',\n left: 'right-full top-1/2 -translate-y-1/2 mr-1.5',\n right: 'left-full top-1/2 -translate-y-1/2 ml-1.5',\n}\n\nexport function Tooltip({\n content,\n placement = 'top',\n delay = 200,\n children,\n className = '',\n}: TooltipProps) {\n const [visible, setVisible] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = () => {\n timerRef.current = setTimeout(() => setVisible(true), delay)\n }\n const hide = () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n setVisible(false)\n }\n\n useEffect(() => () => { if (timerRef.current) clearTimeout(timerRef.current) }, [])\n\n return (\n <span\n className=\"relative inline-flex\"\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n {children}\n {visible && (\n <span\n role=\"tooltip\"\n className={`absolute z-50 px-2 py-1 text-xs font-medium text-white bg-ink rounded-md whitespace-nowrap shadow-toast pointer-events-none ${placementClasses[placement]} ${className}`}\n >\n {content}\n </span>\n )}\n </span>\n )\n}\n","import React from 'react'\n\nexport interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n variant?: 'default' | 'muted' | 'brand'\n external?: boolean\n}\n\nconst variantClasses = {\n default: 'text-ink hover:text-brand hover:underline',\n muted: 'text-ink-light hover:text-ink hover:underline',\n brand: 'text-brand hover:underline',\n}\n\nexport function Link({\n variant = 'default',\n external = false,\n children,\n className = '',\n ...props\n}: LinkProps) {\n const externalProps = external\n ? { target: '_blank', rel: 'noopener noreferrer' }\n : {}\n\n return (\n <a\n className={`transition-colors ${variantClasses[variant]} ${className}`}\n {...externalProps}\n {...props}\n >\n {children}\n </a>\n )\n}\n","import React from 'react'\n\nexport interface FileUploaderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n description?: string\n error?: string\n hint?: string\n onFilesChange?: (files: File[]) => void\n maxSize?: number // in bytes\n accept?: string\n isDragActive?: boolean\n multiple?: boolean\n}\n\nexport function FileUploader({\n label,\n description,\n error,\n hint,\n onFilesChange,\n maxSize,\n accept = '*',\n multiple = false,\n disabled = false,\n className = '',\n ...props\n}: FileUploaderProps) {\n const [dragActive, setDragActive] = React.useState(false)\n const [files, setFiles] = React.useState<File[]>([])\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList) return\n\n let newFiles = Array.from(fileList)\n\n // Filter by max size\n if (maxSize) {\n newFiles = newFiles.filter((file) => file.size <= maxSize)\n }\n\n if (!multiple && newFiles.length > 0) {\n newFiles = [newFiles[0]]\n }\n\n setFiles(newFiles)\n onFilesChange?.(newFiles)\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n }\n\n const handleDrag = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (e.type === 'dragenter' || e.type === 'dragover') {\n setDragActive(true)\n } else if (e.type === 'dragleave') {\n setDragActive(false)\n }\n }\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setDragActive(false)\n handleFiles(e.dataTransfer.files)\n }\n\n const handleRemoveFile = (index: number) => {\n const newFiles = files.filter((_, i) => i !== index)\n setFiles(newFiles)\n onFilesChange?.(newFiles)\n }\n\n const handleClick = () => {\n inputRef.current?.click()\n }\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes'\n const k = 1024\n const sizes = ['Bytes', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]\n }\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-2\">{description}</p>\n )}\n\n <div\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={handleClick}\n className={[\n 'relative px-4 py-6 border-2 border-dashed rounded-md transition-colors cursor-pointer',\n disabled ? 'opacity-50 cursor-not-allowed' : '',\n dragActive ? 'border-brand bg-brand-50' : 'border-outline hover:border-brand',\n error ? 'border-danger-border' : '',\n ].join(' ')}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n {...props}\n />\n\n <div className=\"flex flex-col items-center justify-center gap-2\">\n <svg\n className=\"w-8 h-8 text-brand\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M9 19l3 3m0 0l3-3m-3 3v-6\"\n />\n </svg>\n\n <div className=\"text-center\">\n <p className=\"text-sm font-medium text-ink\">\n Drag files here or click to upload\n </p>\n {hint && (\n <p className=\"text-xs text-ink-light mt-1\">{hint}</p>\n )}\n </div>\n </div>\n </div>\n\n {files.length > 0 && (\n <div className=\"mt-3 space-y-1.5\">\n {files.map((file, index) => (\n <div\n key={`${file.name}-${index}`}\n className=\"flex items-center justify-between p-2 bg-surface-gray rounded border border-outline\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n <svg className=\"w-4 h-4 text-brand shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M8 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM15 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z\" />\n <path d=\"M3 4a1 1 0 00-1 1v10a1 1 0 001 1h1.05a2.5 2.5 0 014.9 0H10a1 1 0 001-1V5a1 1 0 00-1-1H3zM14 7a1 1 0 00-1 1v6.05A2.5 2.5 0 0015.95 16H17a1 1 0 001-1v-5a1 1 0 00-.293-.707l-2-2A1 1 0 0015 7h-1z\" />\n </svg>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-ink truncate\">{file.name}</p>\n <p className=\"text-xs text-ink-light\">{formatFileSize(file.size)}</p>\n </div>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleRemoveFile(index)\n }}\n className=\"p-1 hover:bg-surface-overlay rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-danger-text\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n ))}\n </div>\n )}\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface DatePickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n value?: string\n onChange?: (value: string) => void\n label?: string\n description?: string\n error?: string\n min?: string\n max?: string\n placeholder?: string\n}\n\nexport function DatePicker({\n value = '',\n onChange,\n label,\n description,\n error,\n min,\n max,\n placeholder = 'Select a date',\n disabled = false,\n className = '',\n ...props\n}: DatePickerProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const handleDateChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value)\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const formatDateForDisplay = (dateString: string): string => {\n if (!dateString) return ''\n const date = new Date(dateString)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n }\n\n return (\n <div className={className} ref={containerRef}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-1.5\">{description}</p>\n )}\n\n <div className=\"relative\">\n <div className=\"relative\">\n <input\n type=\"text\"\n value={value ? formatDateForDisplay(value) : ''}\n onChange={handleDateChange}\n placeholder={placeholder}\n disabled={disabled}\n readOnly\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={[\n 'w-full px-3 py-2 border rounded-md text-base transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-1',\n 'cursor-pointer',\n disabled ? 'bg-surface-gray opacity-50 cursor-not-allowed' : 'bg-white',\n error ? 'border-danger-border' : 'border-outline',\n ].join(' ')}\n />\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-ink-light hover:text-ink\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h18M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <input\n type=\"date\"\n value={value}\n onChange={handleDateChange}\n min={min}\n max={max}\n disabled={disabled}\n autoFocus\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer\"\n {...props}\n />\n )}\n </div>\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface TimePickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n value?: string\n onChange?: (value: string) => void\n label?: string\n description?: string\n error?: string\n placeholder?: string\n format?: '12h' | '24h'\n}\n\nexport function TimePicker({\n value = '',\n onChange,\n label,\n description,\n error,\n placeholder = 'Select a time',\n format = '24h',\n disabled = false,\n className = '',\n ...props\n}: TimePickerProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const handleTimeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value)\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const formatTimeForDisplay = (timeString: string): string => {\n if (!timeString) return ''\n const [hours, minutes] = timeString.split(':')\n\n if (format === '12h') {\n const h = parseInt(hours, 10)\n const period = h >= 12 ? 'PM' : 'AM'\n const displayHours = h > 12 ? h - 12 : h === 0 ? 12 : h\n return `${displayHours.toString().padStart(2, '0')}:${minutes} ${period}`\n }\n\n return `${hours}:${minutes}`\n }\n\n return (\n <div className={className} ref={containerRef}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-1.5\">{description}</p>\n )}\n\n <div className=\"relative\">\n <div className=\"relative\">\n <input\n type=\"text\"\n value={value ? formatTimeForDisplay(value) : ''}\n onChange={handleTimeChange}\n placeholder={placeholder}\n disabled={disabled}\n readOnly\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={[\n 'w-full px-3 py-2 border rounded-md text-base transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-1',\n 'cursor-pointer',\n disabled ? 'bg-surface-gray opacity-50 cursor-not-allowed' : 'bg-white',\n error ? 'border-danger-border' : 'border-outline',\n ].join(' ')}\n />\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-ink-light hover:text-ink\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <input\n type=\"time\"\n value={value}\n onChange={handleTimeChange}\n disabled={disabled}\n autoFocus\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer\"\n {...props}\n />\n )}\n </div>\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number // 0-100\n label?: string\n size?: 'sm' | 'md' | 'lg'\n theme?: 'brand' | 'success' | 'warning' | 'danger'\n showLabel?: boolean\n striped?: boolean\n animated?: boolean\n}\n\nconst sizeClasses = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n}\n\nconst themeClasses = {\n brand: 'bg-brand',\n success: 'bg-success-icon',\n warning: 'bg-warning-icon',\n danger: 'bg-danger-icon',\n}\n\nexport function Progress({\n value,\n label,\n size = 'md',\n theme = 'brand',\n showLabel = false,\n striped = false,\n animated = false,\n className = '',\n ...props\n}: ProgressProps) {\n const clampedValue = Math.min(Math.max(value, 0), 100)\n\n return (\n <div className={className} {...props}>\n {(label || showLabel) && (\n <div className=\"flex items-center justify-between mb-1.5\">\n {label && (\n <p className=\"text-sm font-medium text-ink\">{label}</p>\n )}\n {showLabel && (\n <p className=\"text-sm font-medium text-ink-light\">{clampedValue}%</p>\n )}\n </div>\n )}\n\n <div className={`w-full bg-surface-gray rounded-full overflow-hidden ${sizeClasses[size]}`}>\n <div\n className={[\n `${themeClasses[theme]} ${sizeClasses[size]} rounded-full transition-all duration-300`,\n striped ? 'bg-gradient-to-r from-transparent to-white opacity-30' : '',\n animated ? 'animate-pulse' : '',\n ].join(' ')}\n style={{ width: `${clampedValue}%` }}\n />\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: number\n onChange?: (value: number) => void\n count?: number\n size?: 'sm' | 'md' | 'lg'\n readonly?: boolean\n label?: string\n color?: 'yellow' | 'brand' | 'danger'\n}\n\nconst sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n}\n\nconst colorClasses = {\n yellow: 'text-yellow-400',\n brand: 'text-brand',\n danger: 'text-danger-icon',\n}\n\nexport function Rating({\n value = 0,\n onChange,\n count = 5,\n size = 'md',\n readonly = false,\n label,\n color = 'yellow',\n className = '',\n ...props\n}: RatingProps) {\n const [hoverValue, setHoverValue] = React.useState(0)\n\n const displayValue = hoverValue || value\n\n return (\n <div className={className} {...props}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-2\">{label}</label>\n )}\n\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: count }, (_, i) => i + 1).map((starValue) => (\n <button\n key={starValue}\n onClick={() => !readonly && onChange?.(starValue)}\n onMouseEnter={() => !readonly && setHoverValue(starValue)}\n onMouseLeave={() => setHoverValue(0)}\n disabled={readonly}\n className={`transition-transform hover:scale-110 ${readonly ? 'cursor-default' : 'cursor-pointer'}`}\n >\n <svg\n className={`${sizeClasses[size]} ${\n starValue <= displayValue\n ? `fill-current ${colorClasses[color]}`\n : 'text-outline'\n }`}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n </button>\n ))}\n </div>\n\n {displayValue > 0 && (\n <p className=\"text-sm text-ink-light mt-2\">{displayValue} / {count}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n value?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n label?: string\n showValue?: boolean\n theme?: 'brand' | 'success' | 'danger'\n}\n\nconst themeClasses = {\n brand: 'accent-brand',\n success: 'accent-success-icon',\n danger: 'accent-danger-icon',\n}\n\nexport function Slider({\n value = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n theme = 'brand',\n className = '',\n disabled = false,\n ...props\n}: SliderProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(parseFloat(e.target.value))\n }\n\n const percentage = ((Number(value) - Number(min)) / (Number(max) - Number(min))) * 100\n\n return (\n <div className={className}>\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-2\">\n {label && (\n <label className=\"text-sm font-medium text-ink\">{label}</label>\n )}\n {showValue && (\n <span className=\"text-sm font-medium text-ink-light\">{value}</span>\n )}\n </div>\n )}\n\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n className={[\n `w-full h-2 rounded-lg appearance-none cursor-pointer ${themeClasses[theme]}`,\n 'bg-gradient-to-r from-surface-gray to-surface-gray',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-2',\n disabled ? 'opacity-50 cursor-not-allowed' : '',\n ].join(' ')}\n style={{\n background: disabled\n ? undefined\n : `linear-gradient(to right, var(--color-brand) 0%, var(--color-brand) ${percentage}%, var(--color-surface-gray) ${percentage}%, var(--color-surface-gray) 100%)`,\n }}\n {...props}\n />\n </div>\n )\n}\n","import React from 'react'\n\nexport interface SidebarItem {\n label: React.ReactNode\n value: string\n icon?: React.ReactNode\n onClick?: () => void\n isActive?: boolean\n disabled?: boolean\n badge?: React.ReactNode\n}\n\nexport interface SidebarSection {\n title?: string\n items: SidebarItem[]\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n sections: SidebarSection[]\n activeItem?: string\n onItemClick?: (value: string) => void\n collapsible?: boolean\n isCollapsed?: boolean\n onCollapsedChange?: (collapsed: boolean) => void\n width?: string\n className?: string\n}\n\nexport function Sidebar({\n sections,\n activeItem,\n onItemClick,\n collapsible = false,\n isCollapsed = false,\n onCollapsedChange,\n width = 'w-64',\n className = '',\n ...props\n}: SidebarProps) {\n const handleItemClick = (value: string, onClick?: () => void) => {\n onClick?.()\n onItemClick?.(value)\n }\n\n return (\n <aside\n className={[\n `${width} bg-surface-default border-r border-outline transition-all duration-200`,\n isCollapsed ? 'w-16' : '',\n className,\n ].join(' ')}\n {...props}\n >\n {collapsible && (\n <div className=\"flex items-center justify-between p-3 border-b border-outline\">\n {!isCollapsed && (\n <h2 className=\"text-sm font-semibold text-ink\">Menu</h2>\n )}\n <button\n onClick={() => onCollapsedChange?.(!isCollapsed)}\n className=\"p-1 hover:bg-surface-gray rounded transition-colors\"\n title={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n <svg className=\"w-4 h-4 text-ink\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n {isCollapsed ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n )}\n </svg>\n </button>\n </div>\n )}\n\n <nav className=\"py-2\">\n {sections.map((section, sectionIndex) => (\n <div key={sectionIndex}>\n {section.title && !isCollapsed && (\n <p className=\"px-3 py-2 text-xs font-semibold text-ink-light uppercase tracking-wide\">\n {section.title}\n </p>\n )}\n\n {section.items.map((item) => (\n <button\n key={item.value}\n onClick={() => handleItemClick(item.value, item.onClick)}\n disabled={item.disabled}\n title={isCollapsed ? (typeof item.label === 'string' ? item.label : '') : undefined}\n className={[\n 'w-full px-3 py-2 flex items-center gap-2 text-sm transition-colors',\n 'hover:bg-surface-gray focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-0',\n item.disabled ? 'opacity-50 cursor-not-allowed hover:bg-transparent' : '',\n item.isActive || item.value === activeItem\n ? 'bg-brand-50 text-brand font-medium'\n : 'text-ink hover:text-brand',\n isCollapsed ? 'justify-center' : '',\n ].join(' ')}\n >\n {item.icon && (\n <span className=\"shrink-0\">{item.icon}</span>\n )}\n\n {!isCollapsed && (\n <>\n <span className=\"flex-1 text-left\">{item.label}</span>\n {item.badge && (\n <span className=\"text-xs px-1.5 py-0.5 bg-brand rounded-full text-white\">\n {item.badge}\n </span>\n )}\n </>\n )}\n </button>\n ))}\n </div>\n ))}\n </nav>\n </aside>\n )\n}\n","import React from 'react'\n\nexport interface TableColumn {\n key: string\n label: string\n width?: string\n render?: (value: any, row: any) => React.ReactNode\n align?: 'left' | 'center' | 'right'\n}\n\nexport interface TableProps {\n columns: TableColumn[]\n data: any[]\n striped?: boolean\n hoverable?: boolean\n compact?: boolean\n className?: string\n emptyMessage?: string\n}\n\nexport function Table({\n columns,\n data,\n striped = true,\n hoverable = true,\n compact = false,\n className = '',\n emptyMessage = 'No data',\n}: TableProps) {\n if (data.length === 0) {\n return (\n <div className=\"text-center py-8 text-ink-faint text-sm\">\n {emptyMessage}\n </div>\n )\n }\n\n return (\n <div className={`overflow-x-auto border border-outline rounded-lg ${className}`}>\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-surface-gray border-b border-outline\">\n {columns.map((col) => (\n <th\n key={col.key}\n style={{ width: col.width }}\n className={`\n ${compact ? 'px-3 py-2' : 'px-4 py-3'}\n text-left text-xs font-semibold text-ink-faint uppercase tracking-wide\n ${col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left'}\n `}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n className={`\n border-b border-outline last:border-b-0\n ${striped && rowIdx % 2 === 1 ? 'bg-surface-gray/50' : ''}\n ${hoverable ? 'hover:bg-surface-overlay transition-colors' : ''}\n `}\n >\n {columns.map((col) => (\n <td\n key={`${rowIdx}-${col.key}`}\n style={{ width: col.width }}\n className={`\n ${compact ? 'px-3 py-2' : 'px-4 py-3'}\n text-sm text-ink\n ${col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left'}\n `}\n >\n {col.render ? col.render(row[col.key], row) : row[col.key]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface PaginationProps {\n current: number\n total: number\n onChange: (page: number) => void\n size?: 'sm' | 'md'\n showInfo?: boolean\n maxVisible?: number\n className?: string\n}\n\nconst ChevronLeftIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n)\n\nconst ChevronRightIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n)\n\nexport function Pagination({\n current,\n total,\n onChange,\n size = 'md',\n showInfo = true,\n maxVisible = 5,\n className = '',\n}: PaginationProps) {\n const sizeClass = size === 'sm' ? 'text-xs px-2 py-1' : 'text-sm px-3 py-2'\n\n const getPages = () => {\n const pages: (number | string)[] = []\n const halfVisible = Math.floor(maxVisible / 2)\n\n let start = Math.max(1, current - halfVisible)\n let end = Math.min(total, current + halfVisible)\n\n if (start === 1) {\n end = Math.min(total, maxVisible)\n } else if (end === total) {\n start = Math.max(1, total - maxVisible + 1)\n }\n\n if (start > 1) pages.push(1)\n if (start > 2) pages.push('...')\n\n for (let i = start; i <= end; i++) {\n pages.push(i)\n }\n\n if (end < total - 1) pages.push('...')\n if (end < total) pages.push(total)\n\n return pages\n }\n\n const pages = getPages()\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n {showInfo && (\n <span className=\"text-xs text-ink-faint\">\n Page {current} of {total}\n </span>\n )}\n\n <button\n onClick={() => onChange(Math.max(1, current - 1))}\n disabled={current === 1}\n className={`\n flex items-center justify-center rounded border border-outline\n hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed disabled:hover:bg-transparent\n transition-colors ${sizeClass}\n `}\n title=\"Previous page\"\n >\n <ChevronLeftIcon size={size === 'sm' ? 12 : 16} />\n </button>\n\n <div className=\"flex gap-1\">\n {pages.map((page, i) =>\n page === '...' ? (\n <span key={`ellipsis-${i}`} className=\"px-2 text-ink-faint\">\n ...\n </span>\n ) : (\n <button\n key={page}\n onClick={() => onChange(page as number)}\n className={`\n flex items-center justify-center rounded border\n transition-colors ${sizeClass}\n ${current === page\n ? 'bg-brand text-white border-brand'\n : 'border-outline hover:bg-surface-overlay'\n }\n `}\n >\n {page}\n </button>\n )\n )}\n </div>\n\n <button\n onClick={() => onChange(Math.min(total, current + 1))}\n disabled={current === total}\n className={`\n flex items-center justify-center rounded border border-outline\n hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed disabled:hover:bg-transparent\n transition-colors ${sizeClass}\n `}\n title=\"Next page\"\n >\n <ChevronRightIcon size={size === 'sm' ? 12 : 16} />\n </button>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface EmptyStateProps {\n icon?: React.ReactNode\n title: string\n description?: string\n action?: {\n label: string\n onClick: () => void\n }\n className?: string\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`flex flex-col items-center justify-center py-12 px-4 ${className}`}>\n {icon && (\n <div className=\"text-4xl mb-4\">\n {icon}\n </div>\n )}\n <h3 className=\"text-lg font-semibold text-ink mb-2\">\n {title}\n </h3>\n {description && (\n <p className=\"text-sm text-ink-faint mb-6 text-center max-w-sm\">\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className=\"px-4 py-2 bg-brand text-white rounded-md hover:bg-brand-600 transition-colors text-sm font-medium\"\n >\n {action.label}\n </button>\n )}\n </div>\n )\n}\n","import React, { useState } from 'react'\n\nexport type NumberInputSize = 'sm' | 'md' | 'lg'\n\nexport interface NumberInputProps {\n value: number\n onChange: (value: number) => void\n step?: number\n min?: number\n max?: number\n size?: NumberInputSize\n disabled?: boolean\n placeholder?: string\n className?: string\n}\n\nconst ChevronUpIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n)\n\nconst ChevronDownIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n)\n\nconst sizeClasses: Record<NumberInputSize, string> = {\n sm: 'text-xs px-2 py-1 h-8',\n md: 'text-sm px-3 py-2 h-10',\n lg: 'text-base px-4 py-2.5 h-12',\n}\n\nexport function NumberInput({\n value,\n onChange,\n step = 1,\n min,\n max,\n size = 'md',\n disabled = false,\n placeholder,\n className = '',\n}: NumberInputProps) {\n const [isEditing, setIsEditing] = useState(false)\n\n const handleIncrement = () => {\n const newValue = value + step\n if (max === undefined || newValue <= max) {\n onChange(newValue)\n }\n }\n\n const handleDecrement = () => {\n const newValue = value - step\n if (min === undefined || newValue >= min) {\n onChange(newValue)\n }\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value)\n if (!isNaN(newValue)) {\n let val = newValue\n if (min !== undefined && val < min) val = min\n if (max !== undefined && val > max) val = max\n onChange(val)\n }\n }\n\n return (\n <div className={`relative inline-flex items-center border border-outline rounded-md bg-surface ${className}`}>\n <input\n type=\"number\"\n value={value}\n onChange={handleInputChange}\n onFocus={() => setIsEditing(true)}\n onBlur={() => setIsEditing(false)}\n disabled={disabled}\n placeholder={placeholder}\n step={step}\n min={min}\n max={max}\n className={`\n flex-1 bg-transparent outline-none text-ink disabled:text-ink-faint disabled:cursor-not-allowed\n ${sizeClasses[size]}\n `}\n />\n <div className=\"flex flex-col border-l border-outline\">\n <button\n onClick={handleIncrement}\n disabled={disabled || (max !== undefined && value >= max)}\n className=\"flex-1 px-1 hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed transition-colors\"\n title=\"Increment\"\n >\n <ChevronUpIcon size={size === 'sm' ? 12 : size === 'md' ? 14 : 16} />\n </button>\n <button\n onClick={handleDecrement}\n disabled={disabled || (min !== undefined && value <= min)}\n className=\"flex-1 px-1 hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed transition-colors border-t border-outline\"\n title=\"Decrement\"\n >\n <ChevronDownIcon size={size === 'sm' ? 12 : size === 'md' ? 14 : 16} />\n </button>\n </div>\n </div>\n )\n}\n","import React, { useState } from 'react'\n\nexport type CodeBlockLanguage = 'json' | 'javascript' | 'typescript' | 'python' | 'bash' | 'text'\n\nexport interface CodeBlockProps {\n code: string\n language?: CodeBlockLanguage\n copyable?: boolean\n numbered?: boolean\n maxHeight?: string\n className?: string\n}\n\nconst CopyIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"></path>\n <rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\"></rect>\n </svg>\n)\n\nconst CheckIcon = ({ size, className }: { size: number; className?: string }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n)\n\nexport function CodeBlock({\n code,\n language = 'text',\n copyable = true,\n numbered = false,\n maxHeight = 'max-h-96',\n className = '',\n}: CodeBlockProps) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n const lines = code.split('\\n')\n\n return (\n <div className={`relative bg-ink rounded-lg overflow-hidden border border-outline ${className}`}>\n {/* Header */}\n <div className=\"flex items-center justify-between bg-surface-gray px-4 py-2 border-b border-outline\">\n <span className=\"text-xs text-ink-faint font-mono uppercase\">\n {language}\n </span>\n {copyable && (\n <button\n onClick={handleCopy}\n className=\"p-1 rounded hover:bg-surface-overlay transition-colors text-ink-faint hover:text-ink\"\n title=\"Copy to clipboard\"\n >\n {copied ? (\n <span style={{ color: 'currentColor' }} className=\"text-status-online\">\n <CheckIcon size={14} />\n </span>\n ) : (\n <CopyIcon size={14} />\n )}\n </button>\n )}\n </div>\n\n {/* Code */}\n <div className={`overflow-auto ${maxHeight}`}>\n <pre className=\"p-4 text-sm font-mono text-sky-100\">\n {numbered ? (\n <>\n {lines.map((line, i) => (\n <div key={i} className=\"flex gap-4\">\n <span className=\"text-ink-faint select-none\">{String(i + 1).padStart(3, ' ')}</span>\n <span>{line}</span>\n </div>\n ))}\n </>\n ) : (\n code\n )}\n </pre>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport type TimelineStatus = 'completed' | 'pending' | 'error' | 'in-progress'\n\nexport interface TimelineItem {\n id: string | number\n label: string\n description?: string\n status: TimelineStatus\n timestamp?: string | Date\n icon?: React.ReactNode\n}\n\nexport interface TimelineProps {\n items: TimelineItem[]\n orientation?: 'vertical' | 'horizontal'\n className?: string\n}\n\nconst statusColors: Record<TimelineStatus, { dot: string; line: string; text: string }> = {\n completed: {\n dot: 'bg-status-online border-status-online',\n line: 'bg-status-online',\n text: 'text-status-online',\n },\n pending: {\n dot: 'bg-ink-light border-ink-light',\n line: 'bg-ink-faint',\n text: 'text-ink-faint',\n },\n error: {\n dot: 'bg-danger-icon border-danger-icon',\n line: 'bg-danger-icon',\n text: 'text-danger-text',\n },\n 'in-progress': {\n dot: 'bg-brand border-brand',\n line: 'bg-brand',\n text: 'text-brand',\n },\n}\n\nexport function Timeline({\n items,\n orientation = 'vertical',\n className = '',\n}: TimelineProps) {\n if (orientation === 'vertical') {\n return (\n <div className={`space-y-4 ${className}`}>\n {items.map((item, index) => {\n const colors = statusColors[item.status]\n const isLast = index === items.length - 1\n\n return (\n <div key={item.id} className=\"flex gap-4\">\n {/* Timeline dot and line */}\n <div className=\"flex flex-col items-center\">\n <div\n className={`\n w-4 h-4 rounded-full border-2 flex-shrink-0\n flex items-center justify-center bg-white\n ${colors.dot}\n `}\n >\n {item.icon && (\n <span className=\"text-white text-2xs\">\n {item.icon}\n </span>\n )}\n </div>\n {!isLast && (\n <div className={`w-0.5 h-12 ${colors.line}`} />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 py-1\">\n <div className=\"flex items-center gap-2\">\n <h4 className={`font-semibold text-sm ${colors.text}`}>\n {item.label}\n </h4>\n {item.timestamp && (\n <span className=\"text-xs text-ink-faint\">\n {typeof item.timestamp === 'string'\n ? item.timestamp\n : new Date(item.timestamp).toLocaleTimeString('en-GB', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })}\n </span>\n )}\n </div>\n {item.description && (\n <p className=\"text-sm text-ink-faint mt-1\">\n {item.description}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n\n // Horizontal orientation\n return (\n <div className={`flex gap-4 overflow-x-auto pb-2 ${className}`}>\n {items.map((item, index) => {\n const colors = statusColors[item.status]\n const isLast = index === items.length - 1\n\n return (\n <div key={item.id} className=\"flex flex-col items-center flex-shrink-0 gap-2 min-w-fit\">\n <div className=\"flex items-center gap-2\">\n {index > 0 && (\n <div className={`h-0.5 w-6 ${statusColors[items[index - 1].status].line}`} />\n )}\n <div\n className={`\n w-5 h-5 rounded-full border-2 flex items-center justify-center bg-white\n ${colors.dot}\n `}\n >\n {item.icon && (\n <span className=\"text-white text-2xs\">\n {item.icon}\n </span>\n )}\n </div>\n </div>\n <div className=\"text-center\">\n <p className={`text-xs font-semibold ${colors.text}`}>\n {item.label}\n </p>\n {item.timestamp && (\n <p className=\"text-2xs text-ink-faint\">\n {typeof item.timestamp === 'string'\n ? item.timestamp\n : new Date(item.timestamp).toLocaleTimeString('en-GB', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n })}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n","import React from 'react'\n\nexport type KbdSize = 'xs' | 'sm' | 'md'\nexport type KbdTheme = 'gray' | 'dark' | 'brand'\n\nexport interface KbdProps {\n keys: string | string[]\n size?: KbdSize\n theme?: KbdTheme\n className?: string\n}\n\nconst sizeClasses: Record<KbdSize, string> = {\n xs: 'text-xs px-1.5 py-0.5 min-w-5 h-5',\n sm: 'text-xs px-2 py-1 min-w-6 h-6',\n md: 'text-sm px-2.5 py-1.5 min-w-8 h-8',\n}\n\nconst themeClasses: Record<KbdTheme, string> = {\n gray: 'bg-surface-gray border-outline text-ink',\n dark: 'bg-ink text-white border-ink-faint',\n brand: 'bg-brand border-brand text-white',\n}\n\nexport function Kbd({\n keys,\n size = 'sm',\n theme = 'gray',\n className = '',\n}: KbdProps) {\n const keyArray = Array.isArray(keys) ? keys : [keys]\n\n return (\n <span className={`inline-flex items-center gap-1 ${className}`}>\n {keyArray.map((key, i) => (\n <React.Fragment key={key}>\n <kbd\n className={`\n inline-flex items-center justify-center rounded font-mono font-medium\n border border-b-2 shadow-sm\n ${sizeClasses[size]}\n ${themeClasses[theme]}\n `}\n >\n {key}\n </kbd>\n {i < keyArray.length - 1 && (\n <span className=\"text-ink-faint text-xs\">+</span>\n )}\n </React.Fragment>\n ))}\n </span>\n )\n}\n","import React from 'react'\n\nexport type RobotStatus = 'online' | 'offline' | 'error' | 'warning' | 'connecting' | 'unknown'\n\nexport interface StatusBadgeProps {\n status: RobotStatus\n label?: string\n size?: 'sm' | 'md'\n pulse?: boolean\n showDot?: boolean\n className?: string\n}\n\nconst statusConfig: Record<RobotStatus, { label: string; dotClass: string; textClass: string; bgClass: string; borderClass: string }> = {\n online: {\n label: 'Online',\n dotClass: 'bg-status-online',\n textClass: 'text-status-online',\n bgClass: 'bg-green-50',\n borderClass: 'border-green-200',\n },\n offline: {\n label: 'Offline',\n dotClass: 'bg-status-offline',\n textClass: 'text-status-offline',\n bgClass: 'bg-surface-gray',\n borderClass: 'border-outline',\n },\n error: {\n label: 'Error',\n dotClass: 'bg-status-error',\n textClass: 'text-status-error',\n bgClass: 'bg-danger-bg',\n borderClass: 'border-danger-border',\n },\n warning: {\n label: 'Warning',\n dotClass: 'bg-status-warning',\n textClass: 'text-status-warning',\n bgClass: 'bg-warning-bg',\n borderClass: 'border-warning-border',\n },\n connecting: {\n label: 'Connecting',\n dotClass: 'bg-status-info',\n textClass: 'text-status-info',\n bgClass: 'bg-sky-50',\n borderClass: 'border-sky-200',\n },\n unknown: {\n label: 'Unknown',\n dotClass: 'bg-status-offline',\n textClass: 'text-ink-faint',\n bgClass: 'bg-surface-gray',\n borderClass: 'border-outline',\n },\n}\n\nexport function StatusBadge({\n status,\n label,\n size = 'sm',\n pulse = false,\n showDot = true,\n className = '',\n}: StatusBadgeProps) {\n const config = statusConfig[status]\n const displayLabel = label ?? config.label\n const sizeClass = size === 'sm' ? 'text-xs px-1.5 py-0.5' : 'text-sm px-2 py-0.5'\n\n return (\n <span\n className={`inline-flex items-center gap-1 rounded font-medium border ${config.bgClass} ${config.borderClass} ${config.textClass} ${sizeClass} ${className}`}\n >\n {showDot && (\n <span className=\"relative flex shrink-0 w-1.5 h-1.5\">\n {pulse && (status === 'online' || status === 'connecting') && (\n <span\n className={`absolute inline-flex h-full w-full rounded-full opacity-75 animate-ping ${config.dotClass}`}\n />\n )}\n <span className={`relative inline-flex rounded-full w-1.5 h-1.5 ${config.dotClass}`} />\n </span>\n )}\n {displayLabel}\n </span>\n )\n}\n","import React from 'react'\nimport { StatusBadge } from '../StatusBadge/StatusBadge'\nimport type { RobotStatus } from '../StatusBadge/StatusBadge'\n\nexport interface ConnectionIndicatorProps {\n connected: boolean\n rosDistro?: string | null\n size?: 'sm' | 'md' | 'lg'\n showLabel?: boolean\n showDistro?: boolean\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'text-xs gap-1.5',\n md: 'text-sm gap-2',\n lg: 'text-base gap-2',\n}\n\nconst iconSizes = {\n sm: 'w-3.5 h-3.5',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n}\n\nexport function ConnectionIndicator({\n connected,\n rosDistro = null,\n size = 'md',\n showLabel = true,\n showDistro = true,\n className = '',\n}: ConnectionIndicatorProps) {\n const status: RobotStatus = connected ? 'online' : 'offline'\n\n return (\n <div className={`inline-flex items-center ${sizeClasses[size]} ${className}`}>\n <StatusBadge\n status={status}\n pulse={connected}\n size={size === 'lg' ? 'md' : 'sm'}\n label={showLabel ? (connected ? 'Connected' : 'Disconnected') : undefined}\n showDot={!showLabel}\n />\n {showDistro && connected && rosDistro && (\n <span className=\"text-ink-faint font-mono\">\n {rosDistro}\n </span>\n )}\n </div>\n )\n}\n\nexport function ConnectionIcon({ connected, size = 'md', className = '' }: {\n connected: boolean\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n return (\n <svg\n className={`${iconSizes[size]} ${connected ? 'text-status-online' : 'text-status-offline'} ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {connected ? (\n <>\n <path d=\"M8.28 7.22a5.5 5.5 0 017.44 0M5.42 4.36a9.5 9.5 0 0113.16 0M12 17h.01M12 13a2 2 0 110 4 2 2 0 010-4z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </>\n ) : (\n <>\n <path d=\"M3 3l18 18M8.28 7.22a5.5 5.5 0 017.44 0M5.42 4.36a9.5 9.5 0 013.4-1.6M12 17h.01M12 13a2 2 0 110 4 2 2 0 010-4z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </>\n )}\n </svg>\n )\n}\n","import React from 'react';\nimport { Alert, EmptyState } from '../..';\nimport { CheckCircle2 } from 'lucide-react';\nimport { DiagnosticsEntry } from './interfaces';\n\n// Helper function to collect leaf nodes\nconst collectLeafNodes = (entries: DiagnosticsEntry[]): DiagnosticsEntry[] =>\n entries.flatMap(entry =>\n entry.children.length === 0 ? [entry] : collectLeafNodes(entry.children)\n );\n\n// Renders a table of diagnostic messages filtered by severity level\nexport const DiagnosticsTable = ({\n diagnostics,\n setSelectedRawName,\n variant\n}: {\n diagnostics: DiagnosticsEntry[],\n setSelectedRawName: (rawName: string | null) => void,\n variant: \"error\" | \"warning\"\n}) => {\n const levelFilter = (level: number) =>\n variant === \"error\" ? level >= 2 : level === 1;\n\n const filteredDiagnostics = collectLeafNodes(diagnostics).filter(d => levelFilter(d.severity_level));\n\n return (\n <div className=\"space-y-2\">\n <Alert\n theme={variant === \"error\" ? \"danger\" : \"warning\"}\n title={variant === \"error\" ? \"Errors\" : \"Warnings\"}\n />\n\n {filteredDiagnostics.length > 0 ? (\n <div className=\"overflow-x-auto border border-gray-200 rounded\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-gray-50 border-b border-gray-200\">\n <tr>\n <th className=\"px-4 py-2 text-left font-semibold text-gray-700\">Name</th>\n <th className=\"px-4 py-2 text-left font-semibold text-gray-700\">Message</th>\n </tr>\n </thead>\n <tbody>\n {filteredDiagnostics.map((diag, index) => (\n <tr\n key={index}\n className=\"border-b border-gray-200 hover:bg-blue-50 cursor-pointer transition-colors\"\n onClick={() => setSelectedRawName(diag.rawName)}\n >\n <td className=\"px-4 py-2\">\n <div className=\"flex items-start gap-2\">\n {diag.icon}\n <div className=\"flex-1\">\n <div className=\"font-medium text-gray-900\">{diag.name || \"N/A\"}</div>\n <div className=\"text-xs text-gray-500\">{diag.path || \"N/A\"}</div>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-2 text-gray-700\">{diag.message || \"N/A\"}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n <EmptyState\n icon={<CheckCircle2 className=\"w-12 h-12 text-green-500\" />}\n title={variant === \"error\" ? \"No Errors\" : \"No Warnings\"}\n description=\"All diagnostics are healthy\"\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Card } from '../..';\nimport { DiagnosticsEntry } from './interfaces';\n\nexport const DiagnosticsTreeTable = ({\n diagnostics,\n bridgeConnected,\n selectedRawName,\n setSelectedRawName,\n}: {\n diagnostics: DiagnosticsEntry[],\n bridgeConnected: boolean,\n selectedRawName: string | null,\n setSelectedRawName: (rawName: string | null) => void,\n}) => {\n const renderTree = (entries: DiagnosticsEntry[], depth = 0) => {\n return (\n <ul className=\"space-y-1\">\n {entries.map((entry) => (\n <li key={entry.rawName}>\n <div\n className=\"flex items-start gap-2 p-2 hover:bg-gray-100 rounded cursor-pointer transition-colors\"\n style={{ paddingLeft: `${depth * 1.5}rem` }}\n onClick={() => setSelectedRawName(entry.rawName)}\n >\n {entry.icon && <span className=\"flex-shrink-0 mt-0.5\">{entry.icon}</span>}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-gray-900 truncate\">{entry.name}</div>\n {entry.message && <div className=\"text-sm text-gray-600 truncate\">{entry.message}</div>}\n </div>\n </div>\n {entry.children.length > 0 && renderTree(entry.children, depth + 1)}\n </li>\n ))}\n </ul>\n );\n };\n\n return (\n <Card className=\"bg-white\">\n <div className=\"p-4\">\n <h3 className=\"text-lg font-semibold text-gray-900 mb-4\">Diagnostics Tree</h3>\n {diagnostics.length > 0 ? (\n <div className=\"overflow-auto\">\n {renderTree(diagnostics)}\n </div>\n ) : (\n <p className=\"text-gray-500 text-center py-8\">No diagnostics available</p>\n )}\n </div>\n </Card>\n );\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics but was originally sourced from\n * https://github.com/tier4/roslibjs-foxglove under the Apache License 2.0.\n *\n * Modifications made by Hilary Luo 2025.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { parse, parseRos2idl } from '@foxglove/rosmsg';\nimport {\n MessageReader as Ros2MessageReader,\n MessageWriter as Ros2MessageWriter,\n} from '@foxglove/rosmsg2-serialization';\nimport {\n type Channel,\n type ConnectionGraphUpdate,\n FoxgloveClient,\n type MessageData,\n type Parameter,\n type ParameterValue,\n type ParameterValues,\n type Service,\n type ServiceCallResponse,\n} from '@foxglove/ws-protocol';\nimport EventEmitter from 'eventemitter3';\nimport WebSocket from 'isomorphic-ws';\n\nexport interface EventTypes {\n connection: () => void;\n close: (event: CloseEvent) => void;\n error: (error: Error) => void;\n}\n\nexport interface Publisher<T> {\n publish: (message: T) => void;\n unadvertise: () => void;\n}\n\nexport interface Subscription {\n unsubscribe: () => void;\n}\n\nexport class Impl {\n readonly emitter = new EventEmitter<EventTypes>();\n\n #client: FoxgloveClient;\n #connecting: Promise<void>;\n\n // Message Readers / Writers\n #messageReaders = new Map<string, Ros2MessageReader>();\n #messageWriters = new Map<string, Ros2MessageWriter>();\n\n // Channels\n #channelsById = new Map<number, Channel>();\n #channelsByName = new Map<string, Channel>();\n\n // Services\n #servicesById = new Map<number, Service>();\n #servicesByName = new Map<string, Service>();\n\n #publisherIdsWithCount = new Map<string, { id: number; count: number }>();\n #subscriptionIdsWithCount = new Map<string, { id: number; count: number }>();\n\n #callId = 0;\n #paramId = 0;\n\n constructor(url: string) {\n this.#client = new FoxgloveClient({\n // TODO: \"foxglove.sdk.v1\" was added here manually because Foxglove switched the foxglove-bridge\n // package for Jazzy from ros-foxglove-bridge repo (v0.8.5) which used \"foxglove.websocket.v1\"\n // to their new foxglove-sdk version (v3.2.x) which uses \"foxglove.sdk.v1\" around September 2025,\n // but the @foxglove/ws-protocol npm package has not yet been updated to include this new\n // subprotocol. Once that package is updated, or a new alternative is released, \"foxglove.sdk.v1\"\n // may be removed from here and adjusted accordingly. As far as I can tell, it seems that\n // the underlying protocols are compatible for our use case, and is effectively only a name change.\n ws: new WebSocket(url, [\"foxglove.sdk.v1\", FoxgloveClient.SUPPORTED_SUBPROTOCOL]),\n });\n\n const open = new Promise<void>((resolve) => {\n this.#client.on('open', resolve);\n });\n\n this.#client.on('close', (event) => {\n this.emitter.emit('close', event);\n });\n this.#client.on('error', (error?: Error) => {\n this.emitter.emit('error', error ?? new Error('WebSocket error'));\n });\n\n this.#client.on('advertise', (channels) => {\n for (const channel of channels) {\n this.#channelsById.set(channel.id, channel);\n this.#channelsByName.set(channel.topic, channel);\n }\n });\n this.#client.on('unadvertise', (channelIds) => {\n for (const channelId of channelIds) {\n const channel = this.#channelsById.get(channelId);\n if (channel) {\n this.#channelsById.delete(channel.id);\n this.#channelsByName.delete(channel.topic);\n }\n }\n });\n\n this.#client.on('advertiseServices', (services) => {\n for (const service of services) {\n this.#servicesById.set(service.id, service);\n this.#servicesByName.set(service.name, service);\n }\n });\n this.#client.on('unadvertiseServices', (serviceIds) => {\n for (const serviceId of serviceIds) {\n const service = this.#servicesById.get(serviceId);\n if (service) {\n this.#servicesById.delete(service.id);\n this.#servicesByName.delete(service.name);\n }\n }\n });\n\n this.#connecting = new Promise<void>((resolve) => {\n Promise.all([open]).then(() => {\n this.emitter.emit('connection');\n resolve();\n });\n });\n }\n\n close() {\n this.#client.close();\n }\n\n getTopics() {\n return {\n topics: [...this.#channelsByName.keys()],\n types: [...this.#channelsByName.values()].map((x) => x.schemaName),\n };\n }\n\n async getServices() {\n await this.#connecting;\n return new Promise<string[]>((resolve) => {\n const listener = (event: ConnectionGraphUpdate) => {\n this.#client.off('connectionGraphUpdate', listener);\n this.#client.unsubscribeConnectionGraph();\n resolve(event.advertisedServices.map((service) => service.name));\n };\n this.#client.on('connectionGraphUpdate', listener);\n this.#client.subscribeConnectionGraph();\n });\n }\n\n getTopicType(topic: string) {\n return this.#channelsByName.get(topic)?.schemaName;\n }\n\n getServiceType(service: string) {\n return this.#servicesByName.get(service)?.type;\n }\n\n async createPublisher<T>(\n name: string,\n messageType: string,\n ): Promise<Publisher<T>> {\n await this.#connecting;\n const channel = this.#getChannel(name);\n\n const publisherId = (() => {\n const idWithCount = this.#publisherIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count++;\n return idWithCount.id;\n }\n const publisherId = this.#client.advertise({\n topic: name,\n encoding: 'cdr',\n schemaName: messageType,\n });\n this.#publisherIdsWithCount.set(name, { id: publisherId, count: 1 });\n return publisherId;\n })();\n\n const writer = this.#getMessageWriter(await channel);\n\n return {\n publish: (message: T) => {\n this.#client.sendMessage(publisherId, writer.writeMessage(message));\n },\n unadvertise: () => {\n const idWithCount = this.#publisherIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count--;\n if (idWithCount.count === 0) {\n this.#publisherIdsWithCount.delete(name);\n this.#client.unadvertise(publisherId);\n }\n }\n },\n };\n }\n\n async createSubscription<T>(\n name: string,\n callback: (message: T) => void,\n ): Promise<Subscription> {\n await this.#connecting;\n const channel = await this.#getChannel(name);\n\n const subscriptionId = (() => {\n const idWithCount = this.#subscriptionIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count++;\n return idWithCount.id;\n }\n const subscriptionId = this.#client.subscribe(channel.id);\n this.#subscriptionIdsWithCount.set(name, {\n id: subscriptionId,\n count: 1,\n });\n return subscriptionId;\n })();\n\n const reader = this.#getMessageReader(channel);\n\n const listener = (event: MessageData) => {\n if (event.subscriptionId === subscriptionId) {\n callback(reader.readMessage(event.data));\n }\n };\n this.#client.on('message', listener);\n\n return {\n unsubscribe: () => {\n this.#client.off('message', listener);\n const idWithCount = this.#subscriptionIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count--;\n if (idWithCount.count === 0) {\n this.#subscriptionIdsWithCount.delete(name);\n this.#client.unsubscribe(subscriptionId);\n }\n }\n },\n };\n }\n\n async sendServiceRequest<Request, Response>(name: string, request: Request) {\n await this.#connecting;\n const service = await this.#getService(name);\n const writer = this.#getMessageWriter(service);\n const reader = this.#getMessageReader(service);\n\n const callId = this.#callId++;\n return new Promise<Response>((resolve) => {\n const listener = (event: ServiceCallResponse) => {\n if (event.serviceId === service.id && event.callId === callId) {\n this.#client.off('serviceCallResponse', listener);\n resolve(reader.readMessage(event.data));\n }\n };\n this.#client.on('serviceCallResponse', listener);\n this.#client.sendServiceCallRequest({\n serviceId: service.id,\n callId,\n encoding: 'cdr',\n data: new DataView(writer.writeMessage(request).buffer),\n });\n });\n }\n\n async getParameter(name: string) {\n await this.#connecting;\n const paramId = (this.#paramId++).toString();\n return new Promise<ParameterValue>((resolve) => {\n const listener = (event: ParameterValues) => {\n if (event.parameters[0]?.name === name && event.id === paramId) {\n this.#client.off('parameterValues', listener);\n resolve(event.parameters[0].value);\n }\n };\n this.#client.on('parameterValues', listener);\n this.#client.getParameters([name], paramId);\n });\n }\n\n async setParameter(name: string, value: ParameterValue) {\n await this.#connecting;\n const paramId = (this.#paramId++).toString();\n return new Promise<Parameter>((resolve) => {\n const listener = (event: ParameterValues) => {\n if (event.parameters[0]?.name === name && event.id === paramId) {\n this.#client.off('parameterValues', listener);\n resolve(event.parameters[0]);\n }\n };\n this.#client.on('parameterValues', listener);\n this.#client.setParameters([{ name, value }], paramId);\n });\n }\n\n async #getChannel(name: string) {\n await this.#connecting;\n return (\n this.#channelsByName.get(name) ??\n (await new Promise<Channel>((resolve) => {\n const listener = (channels: Channel[]) => {\n const channel = channels.find((channel) => channel.topic === name);\n if (channel) {\n this.#client.off('advertise', listener);\n resolve(channel);\n }\n };\n this.#client.on('advertise', listener);\n }))\n );\n }\n\n async #getService(name: string) {\n await this.#connecting;\n return (\n this.#servicesByName.get(name) ??\n (await new Promise<Service>((resolve) => {\n const listener = (services: Service[]) => {\n const service = services.find((channel) => channel.name === name);\n if (service) {\n this.#client.off('advertiseServices', listener);\n resolve(service);\n }\n };\n this.#client.on('advertiseServices', listener);\n }))\n );\n }\n\n #getMessageReader(channelOrService: Channel | Service) {\n const name =\n 'schemaName' in channelOrService\n ? channelOrService.schemaName\n : channelOrService.type;\n const schemaEncoding =\n 'schemaEncoding' in channelOrService\n ? channelOrService.schemaEncoding\n : undefined;\n const schema =\n 'schema' in channelOrService\n ? channelOrService.schema\n : channelOrService.responseSchema;\n return (\n this.#messageReaders.get(name) ??\n (() => {\n const reader =\n new Ros2MessageReader(\n schemaEncoding === 'ros2idl'\n ? parseRos2idl(schema)\n : parse(schema, { ros2: true }),\n );\n this.#messageReaders.set(name, reader);\n return reader;\n })()\n );\n }\n\n #getMessageWriter(channelOrService: Channel | Service) {\n const name =\n 'schemaName' in channelOrService\n ? channelOrService.schemaName\n : channelOrService.type;\n const schemaEncoding =\n 'schemaEncoding' in channelOrService\n ? channelOrService.schemaEncoding\n : undefined;\n const schema =\n 'schema' in channelOrService\n ? channelOrService.schema\n : channelOrService.requestSchema;\n return (\n this.#messageWriters.get(name) ??\n (() => {\n const writer = new Ros2MessageWriter(\n schemaEncoding === 'ros2idl'\n ? parseRos2idl(schema)\n : parse(schema, { ros2: true }),\n );\n this.#messageWriters.set(name, writer);\n return writer;\n })()\n );\n }\n}\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics but was originally sourced from\n * https://github.com/tier4/roslibjs-foxglove under the Apache License 2.0.\n *\n * Modifications made by Hilary Luo 2025.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport type EventEmitter from 'eventemitter3';\n\nimport { type EventTypes, Impl } from './Impl';\n\nexport class Ros {\n #rosImpl: Impl | undefined;\n\n constructor(readonly options: { readonly url?: string }) {\n if (options.url) {\n this.connect(options.url);\n }\n }\n\n /** @internal */\n get rosImpl() {\n return this.#rosImpl;\n }\n\n on<T extends EventEmitter.EventNames<EventTypes>>(\n event: T,\n fn: EventEmitter.EventListener<EventTypes, T>,\n ): this {\n this.rosImpl?.emitter.on(event, fn);\n return this;\n }\n\n off<T extends EventEmitter.EventNames<EventTypes>>(\n event: T,\n fn: EventEmitter.EventListener<EventTypes, T>,\n ): this {\n this.rosImpl?.emitter.off(event, fn);\n return this;\n }\n\n connect(url: string) {\n this.#rosImpl = new Impl(url);\n }\n\n close() {\n this.rosImpl?.close();\n this.#rosImpl = undefined;\n }\n\n getTopics(\n callback: (result: { topics: string[]; types: string[] }) => void,\n failedCallback?: (error: string) => void,\n ) {\n const topics = this.rosImpl?.getTopics();\n if (topics) {\n callback(topics);\n } else if (failedCallback) {\n failedCallback('Error: getTopics');\n }\n }\n\n getServices(\n callback: (services: string[]) => void,\n failedCallback?: (error: string) => void,\n ) {\n this.rosImpl?.getServices().then(callback)\n .catch(failedCallback);\n }\n\n getTopicType(\n topic: string,\n callback: (type: string) => void,\n failedCallback?: (error: string) => void,\n ) {\n const topicType = this.rosImpl?.getTopicType(topic);\n if (topicType) {\n callback(topicType);\n } else if (failedCallback) {\n failedCallback('Error: getTopicType');\n }\n }\n\n getServiceType(\n service: string,\n callback: (type: string) => void,\n failedCallback?: (error: string) => void,\n ) {\n const serviceType = this.rosImpl?.getServiceType(service);\n if (serviceType) {\n callback(serviceType);\n } else if (failedCallback) {\n failedCallback('Error: getServiceType');\n }\n }\n}\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics but was originally sourced from\n * https://github.com/tier4/roslibjs-foxglove under the Apache License 2.0.\n *\n * Modifications made by Hilary Luo 2025.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport type { Publisher, Subscription } from './Impl';\nimport type { Ros } from './Ros';\n\nexport class Message {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n constructor(readonly values: any) { // eslint-disable-line @typescript-eslint/no-explicit-any\n Object.assign(this, values);\n }\n}\n\nexport class Topic<TMessage = Message> {\n readonly #ros: Ros;\n readonly #name: string;\n readonly #messageType: string;\n\n #publisher?: Promise<Publisher<TMessage>>;\n #subscriptions = new Map<(message: TMessage) => void, Subscription>();\n\n constructor(\n readonly options: {\n readonly ros: Ros;\n readonly name: string;\n readonly messageType: string;\n },\n ) {\n this.#ros = options.ros;\n this.#name = options.name;\n this.#messageType = options.messageType;\n }\n\n get name() {\n return this.#name;\n }\n\n get messageType() {\n return this.#messageType;\n }\n\n publish(message: TMessage) {\n if (!this.#publisher) {\n this.advertise();\n }\n this.#publisher?.then((publisher) => {\n publisher.publish(message);\n });\n }\n\n subscribe(callback: (message: TMessage) => void) {\n this.#ros.rosImpl\n ?.createSubscription(this.name, callback)\n .then((subscription) => {\n this.#subscriptions.set(callback, subscription);\n });\n }\n\n unsubscribe(callback?: (message: TMessage) => void) {\n if (callback) {\n this.#subscriptions.get(callback)?.unsubscribe();\n this.#subscriptions.delete(callback);\n } else {\n for (const subscription of this.#subscriptions.values()) {\n subscription.unsubscribe();\n }\n this.#subscriptions.clear();\n }\n }\n\n advertise() {\n this.#publisher = this.#ros.rosImpl?.createPublisher(\n this.name,\n this.messageType,\n );\n }\n\n unadvertise() {\n this.#publisher?.then((publisher) => {\n publisher.unadvertise();\n this.#publisher = undefined;\n });\n }\n}\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport React, { useEffect, useRef } from \"react\";\nimport {\n CheckCircle2,\n AlertCircle,\n AlertTriangle,\n HelpCircle,\n} from \"lucide-react\";\n\nimport { DiagnosticsEntry, DiagnosticsStatus } from \"./interfaces\";\nimport * as ROSLIB from \"./roslib/index\";\n\ninterface RosConnectionManagerProps {\n namespace: string;\n url: string | null;\n onDiagnosticsUpdate: (diagnosticsStatus: DiagnosticsStatus) => void;\n onConnectionStatusChange: (connected: boolean) => void;\n onClearHistory: () => void;\n}\n\n// Helper function to calculate overall diagnostic level\nconst calculateOverallLevel = (diagnostics: DiagnosticsEntry[]): number => {\n let maxLevel = 0;\n\n const checkEntry = (entry: DiagnosticsEntry) => {\n if (entry.severity_level > maxLevel) {\n maxLevel = entry.severity_level;\n }\n entry.children.forEach(checkEntry);\n };\n\n diagnostics.forEach(checkEntry);\n return maxLevel;\n};\n\n// Helper function to build a nested DiagnosticsEntry tree\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst buildDiagnosticsTree = (diagnostics: any[]): DiagnosticsEntry[] => {\n const root: DiagnosticsEntry[] = [];\n\n diagnostics.forEach(({ name, message, level, hardware_id, values }) => {\n const parts = name.split(\"/\");\n let currentLevel = root;\n\n parts.forEach((part: string, index: number) => {\n if (!part) return; // Skip empty parts\n\n let existingEntry = currentLevel.find(entry => entry.name === part);\n\n if (!existingEntry) {\n const [baseName, suffix] = part.split(\":\");\n const path = parts.slice(0, index + 1).join(\"/\")\n .split(\":\")[0];\n existingEntry = {\n name: index === parts.length - 1 && suffix ? suffix : baseName,\n path,\n rawName: path,\n message: \"\",\n severity_level: -1,\n hardware_id: null,\n values: null,\n children: [],\n icon: null, // Initialize icon as null\n };\n currentLevel.push(existingEntry);\n }\n\n if (index === parts.length - 1) {\n existingEntry.message = message || \"\";\n existingEntry.severity_level = level ?? -1;\n existingEntry.hardware_id = hardware_id || null;\n existingEntry.rawName = name;\n\n existingEntry.values = Array.isArray(values)\n ? values.reduce((acc, { key, value }) => {\n acc[key] = value;\n return acc;\n }, {})\n : values && typeof values === \"object\"\n ? Object.fromEntries(\n Object.entries(values).map(([key, value]) => [key, value])\n )\n : {};\n\n // Populate the icon based on severity level\n existingEntry.icon = level === 3\n ? <HelpCircle className=\"w-4 h-4 text-blue-500\" />\n : level === 2\n ? <AlertCircle className=\"w-4 h-4 text-red-500\" />\n : level === 1\n ? <AlertTriangle className=\"w-4 h-4 text-yellow-500\" />\n : <CheckCircle2 className=\"w-4 h-4 text-green-500\" />;\n }\n\n currentLevel = existingEntry.children;\n });\n });\n\n return root;\n};\n\nexport const RosConnectionManager: React.FC<RosConnectionManagerProps> = ({\n namespace,\n url,\n onDiagnosticsUpdate,\n onConnectionStatusChange,\n onClearHistory\n}) => {\n const staleTimeoutId = useRef(0);\n const retryTimeoutId = useRef(0);\n\n useEffect(() => {\n if (!url) {\n console.warn(\"WebSocket URL is not set correctly. Skipping WebSocket configuration.\");\n return;\n }\n\n console.log(`Creating new connection to ${url} for namespace ${namespace}`);\n const ros = new ROSLIB.Ros({ url });\n\n const diagnosticsTopic = new ROSLIB.Topic({\n ros,\n name: `${namespace}/diagnostics_agg`,\n messageType: \"diagnostic_msgs/DiagnosticArray\",\n });\n\n const retryDelay = 3000; // 3 seconds\n const timeoutDuration = 5000; // 5 seconds\n let retryConnection = true;\n\n const connectToWebSocket = () => {\n clearTimeout(staleTimeoutId.current);\n clearTimeout(retryTimeoutId.current);\n ros.connect(url);\n\n ros.on(\"connection\", () => {\n onClearHistory();\n console.log(\"Connected to Foxglove bridge at \" + url);\n onConnectionStatusChange(true);\n\n diagnosticsTopic.subscribe((message: any) => {\n // Clear the timeout if a new message is received\n clearTimeout(staleTimeoutId.current);\n\n // Process incoming diagnostics messages\n if (Array.isArray(message.status)) {\n const diagnosticsTree = buildDiagnosticsTree(\n message.status.map(({ name, message: msg, level, hardware_id, values }: any) => ({\n name,\n message: msg,\n level: level !== undefined ? level : -1,\n hardware_id,\n values,\n }))\n );\n\n // Calculate overall level from diagnostics tree\n const overallLevel = calculateOverallLevel(diagnosticsTree);\n\n // Extract timestamp from ROS message header\n let timestamp = Date.now(); // Default fallback\n if (message.header && message.header.stamp) {\n // Convert ROS time (sec + nanosec) to JavaScript timestamp (milliseconds)\n const sec = message.header.stamp.sec || 0;\n const nanosec = message.header.stamp.nanosec || 0;\n timestamp = sec * 1000 + Math.round(nanosec / 1000000);\n // console.log(`Extracted timestamp from ROS message: ${new Date(timestamp).toISOString()}`);\n } else {\n console.log(\"No header.stamp found in message, using current time\");\n }\n\n // Create DiagStatus object\n const diagStatus: DiagnosticsStatus = {\n timestamp,\n level: overallLevel,\n diagnostics: diagnosticsTree\n };\n\n onDiagnosticsUpdate(diagStatus);\n } else {\n console.warn(\"Unexpected diagnostics data format:\", message);\n }\n\n // Set a timeout to clear stale diagnostics if no new message is received\n staleTimeoutId.current = setTimeout(() => {\n console.warn(\"No diagnostics message received for 5 seconds. Clearing stale diagnostics.\");\n onClearHistory();\n }, timeoutDuration);\n });\n console.log(`Subscribed to topic: ${diagnosticsTopic.name}`);\n });\n\n ros.on(\"error\", (error) => {\n console.error(\"Error connecting to Foxglove bridge:\", error);\n ros.close();\n });\n\n ros.on(\"close\", () => {\n onConnectionStatusChange(false);\n console.log(\"Connection to Foxglove bridge closed\");\n onClearHistory();\n clearTimeout(staleTimeoutId.current);\n clearTimeout(retryTimeoutId.current);\n if (retryConnection) {\n console.log(\"Retrying WebSocket connection...\");\n retryTimeoutId.current = setTimeout(connectToWebSocket, retryDelay);\n }\n });\n };\n\n connectToWebSocket();\n\n // Cleanup function\n return () => {\n console.log(`Cleaning up connection for namespace ${namespace}`);\n diagnosticsTopic.unsubscribe();\n retryConnection = false;\n clearTimeout(staleTimeoutId.current);\n clearTimeout(retryTimeoutId.current);\n ros.close();\n };\n }, [namespace, url, onDiagnosticsUpdate, onConnectionStatusChange, onClearHistory]);\n\n return null; // This component does not render anything\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\n// Sanitize the namespace to ensure it is valid and formatted correctly\nexport const sanitizeNamespace = (namespace: string): string => {\n let sanitizedNamespace = namespace\n // Remove invalid characters, must happen first\n .replace(/[^a-zA-Z0-9_/]/g, \"\")\n // Address repeated characters after all mid-string removals complete\n .replace(/_+/g, \"_\") // Replace consecutive underscores with a single underscore\n .replace(/\\/+/g, \"/\") // Replace consecutive slashes with a single slash\n // Address leading/trailing issues last, repetition to address edge cases\n .replace(/^\\d+/, \"\") // Drop leading numbers prior to the first letter or underscore\n .replace(/\\/\\d+/g, \"/\") // Drop numbers after slashes prior to the first letter or underscore\n .replace(/\\/+/g, \"/\") // Replace consecutive slashes with a single slash\n .replace(/^\\/|\\/$/g, \"\"); // Trim leading and trailing slashes\n\n // Add a leading slash if the sanitized namespace is not empty\n if (sanitizedNamespace) {\n sanitizedNamespace = \"/\" + sanitizedNamespace;\n }\n\n return sanitizedNamespace;\n};\n\nexport const sameNamespace = (ns1: string, ns2: string): boolean => {\n if (ns1.replace(/^\\/|\\/$/g, \"\") !== ns2.replace(/^\\/|\\/$/g, \"\")) {\n return false;\n }\n return true;\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { sameNamespace, sanitizeNamespace } from \"../utils/namespaceUtils\";\n\nconst NAMESPACE_STORAGE_KEY = \"ros2_diag_namespace\";\n\n/**\n * Custom hook to manage ROS2 namespace\n * @param initialNamespace - Initial namespace to use (e.g., '/robot')\n */\nexport const useNamespace = (initialNamespace: string = '/robot') => {\n const [namespace, setNamespace] = useState(\"\");\n const [invalidNamespaceMessage, setInvalidNamespaceMessage] = useState<string | null>(null);\n const [manualEntryRequired, setManualEntryRequired] = useState(false);\n\n const setManualNamespace = useCallback((ns: string) => {\n const ns_temp = sanitizeNamespace(ns);\n setNamespace(ns_temp);\n localStorage.setItem(NAMESPACE_STORAGE_KEY, ns_temp);\n }, []);\n\n useEffect(() => {\n // Try to get saved namespace from localStorage\n const savedNamespace = localStorage.getItem(NAMESPACE_STORAGE_KEY);\n if (savedNamespace) {\n console.log(\"Using namespace from storage:\", savedNamespace);\n setNamespace(savedNamespace);\n return;\n }\n\n // Use initial namespace provided\n if (initialNamespace) {\n const sanitized = sanitizeNamespace(initialNamespace);\n\n // Warn if sanitization changed the namespace\n if (!sameNamespace(initialNamespace, sanitized)) {\n const message = `Invalid namespace: \"${initialNamespace}\", using: \"${sanitized}\"`;\n console.warn(message);\n setInvalidNamespaceMessage(message);\n } else {\n setInvalidNamespaceMessage(null);\n }\n\n setNamespace(sanitized);\n } else {\n setManualEntryRequired(true);\n }\n }, [initialNamespace]);\n\n return { namespace, setManualNamespace, invalidNamespaceMessage, manualEntryRequired };\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Hook to determine the Foxglove WebSocket URL\n * @param customUrl - Optional custom URL (e.g., from props)\n * @returns The WebSocket URL or null if not yet determined\n */\nexport const useWebSocketUrl = (customUrl?: string): string | null => {\n const [url, setUrl] = useState<string | null>(customUrl || null);\n\n useEffect(() => {\n // If custom URL provided, use it\n if (customUrl) {\n setUrl(customUrl);\n return;\n }\n\n // Try to detect the URL from the current location\n try {\n const host = window.location.hostname;\n if (host) {\n // Default Foxglove bridge port\n setUrl(`ws://${host}:8765`);\n } else {\n console.warn(\"Unable to determine the host IP address.\");\n // Fallback to localhost\n setUrl(`ws://localhost:8765`);\n }\n } catch (error) {\n console.error(\"Failed to determine WebSocket URL:\", error);\n // Fallback to localhost\n setUrl(`ws://localhost:8765`);\n }\n }, [customUrl]);\n\n return url;\n};\n","import React from 'react';\nimport { Button } from '../..';\nimport { Download } from 'lucide-react';\n\nexport const DiagnosticsCapture = ({ namespace }: { namespace: string }) => {\n const downloadDiagnostics = () => {\n console.log('Capture diagnostics for namespace:', namespace);\n };\n\n return (\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"subtle\"\n size=\"sm\"\n icon={<Download className=\"w-4 h-4\" />}\n onClick={downloadDiagnostics}\n >\n Export Diagnostics\n </Button>\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Button, Input, Card, FormControl } from '../..';\nimport { AlertCircle } from 'lucide-react';\nimport { sameNamespace, sanitizeNamespace } from './utils/namespaceUtils';\n\nexport const ManualNamespace = ({\n setManualNamespace,\n namespace\n}: {\n setManualNamespace: (namespace: string) => void,\n namespace: string\n}) => {\n const [value, setValue] = useState(namespace);\n const [unsaved, setUnsaved] = useState(false);\n const [invalidNamespaceMessage, setInvalidNamespaceMessage] = useState('');\n const [isError, setIsError] = useState(false);\n\n // Check if a namespace change has been made\n useEffect(() => {\n const isSame = sameNamespace(namespace, sanitizeNamespace(value));\n setUnsaved(!isSame);\n }, [namespace, value]);\n\n // Validate the namespace entered\n useEffect(() => {\n const sanitizedValue = sanitizeNamespace(value);\n const isSame = sameNamespace(value, sanitizedValue);\n setIsError(!isSame);\n setInvalidNamespaceMessage(!isSame ? `Invalid namespace. Legal namespace would be: ${sanitizedValue}` : '');\n }, [namespace, value]);\n\n return (\n <Card className=\"bg-blue-50 border-l-4 border-blue-500\">\n <div className=\"p-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Namespace Configuration</h2>\n <form onSubmit={(e) => e.preventDefault()}>\n <FormControl\n label=\"ROS 2 Namespace\"\n error={isError ? invalidNamespaceMessage : undefined}\n description=\"Enter the namespace for the diagnostics_agg topic\"\n >\n <Input\n value={value}\n type=\"text\"\n placeholder=\"/robot\"\n onChange={(e) => setValue(e.target.value)}\n aria-label=\"Manual Namespace Entry\"\n className={isError ? 'border-red-500' : ''}\n />\n </FormControl>\n\n {isError && (\n <div className=\"flex items-start gap-2 mt-3 text-red-700 text-sm\">\n <AlertCircle className=\"w-4 h-4 mt-0.5 flex-shrink-0\" />\n <span>{invalidNamespaceMessage}</span>\n </div>\n )}\n\n <div className=\"flex justify-end mt-4\">\n <Button\n disabled={!unsaved}\n onClick={() => {\n const ns = sanitizeNamespace(value);\n setManualNamespace(ns);\n setValue(ns);\n }}\n variant=\"solid\"\n theme=\"brand\"\n >\n {unsaved ? 'Apply' : 'Applied'}\n </Button>\n </div>\n </form>\n </div>\n </Card>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { DiagnosticsStatus } from \"./interfaces\";\n\nconst HISTORY_SIZE = 50;\n\nexport const HistorySelection = ({\n diagHistory,\n setDiagStatusDisplay,\n isPaused,\n setIsPaused\n}: {\n diagHistory: DiagnosticsStatus[],\n setDiagStatusDisplay: React.Dispatch<React.SetStateAction<DiagnosticsStatus | null>>,\n isPaused: boolean,\n setIsPaused: React.Dispatch<React.SetStateAction<boolean>>\n}) => {\n const [negIndex, setNegIndex] = useState(-1);\n\n useEffect(() => {\n // On initial load, set to the latest history entry if available\n if (!isPaused) {\n setNegIndex(-1);\n if (diagHistory.length > 0) {\n setDiagStatusDisplay(diagHistory[diagHistory.length - 1]);\n } else {\n setDiagStatusDisplay(null);\n }\n }\n }, [diagHistory, setDiagStatusDisplay, isPaused]);\n\n const getStatusColor = (level: number) => {\n if (level >= 2) return 'bg-red-500';\n if (level === 1) return 'bg-yellow-500';\n return 'bg-green-500';\n };\n\n const isSelected = (index: number) => (diagHistory.length + negIndex) === index;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-sm font-semibold text-gray-700\">Timeline:</h3>\n <div className=\"flex-1 flex gap-1 overflow-x-auto\">\n {/* Placeholder steps */}\n {Array.from({ length: Math.max(0, HISTORY_SIZE - diagHistory.length) }).map((_, index) => (\n <div\n key={`blank-${index}`}\n className=\"w-2 h-2 rounded-full bg-gray-300 flex-shrink-0\"\n />\n ))}\n\n {/* History steps */}\n {diagHistory.map((diagStatus, index) => (\n <button\n key={`history-${index}`}\n onClick={() => {\n setDiagStatusDisplay(diagStatus);\n setIsPaused(true);\n setNegIndex(index - diagHistory.length);\n }}\n className={`w-2 h-2 rounded-full flex-shrink-0 transition-all ${\n isSelected(index)\n ? 'w-4 h-4 ring-2 ring-blue-500'\n : getStatusColor(diagStatus.level)\n }`}\n title={new Date(diagStatus.timestamp).toLocaleTimeString()}\n aria-label={`Diagnostics snapshot ${index + 1} at ${new Date(diagStatus.timestamp).toLocaleTimeString()}`}\n />\n ))}\n </div>\n </div>\n\n {/* Timestamp info */}\n <div className=\"flex items-center justify-between text-xs text-gray-600 px-2\">\n <span>\n Oldest: {diagHistory.length > 0 ? new Date(diagHistory[0].timestamp).toLocaleTimeString() : 'N/A'}\n </span>\n {isPaused && diagHistory.length > 0 && (\n <span className=\"font-medium text-blue-600\">\n Selected: {new Date(diagHistory[diagHistory.length + negIndex].timestamp).toLocaleTimeString()}\n </span>\n )}\n <span>\n Latest: {diagHistory.length > 0 ? new Date(diagHistory[diagHistory.length - 1].timestamp).toLocaleTimeString() : 'N/A'}\n </span>\n </div>\n </div>\n );\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { useState, useCallback, useRef, useEffect } from \"react\";\n\nimport { DiagnosticsStatus } from \"../interfaces\";\n\nexport const HISTORY_SIZE = 30;\n\nexport const useDiagHistory = (isPaused: boolean) => {\n const [diagHistory, setDiagHistory] = useState<DiagnosticsStatus[]>([]);\n const isPausedRef = useRef<boolean>(isPaused);\n\n useEffect(() => {\n isPausedRef.current = isPaused;\n }, [isPaused]);\n\n const clearDiagHistory = useCallback(() => {\n setDiagHistory([]);\n }, []);\n\n const updateDiagHistory = useCallback((diagStatusLatest: DiagnosticsStatus | null) => {\n // Only add to history if we have actual diagnostics\n if (!isPausedRef.current && diagStatusLatest && diagStatusLatest.diagnostics.length > 0) {\n setDiagHistory(prevItems => {\n const updatedItems = [...prevItems, diagStatusLatest];\n // Keep only the last HISTORY_SIZE entries\n if (updatedItems.length > HISTORY_SIZE) {\n return updatedItems.slice(-HISTORY_SIZE);\n }\n return updatedItems;\n });\n }\n }, [isPausedRef]);\n\n return { diagHistory, updateDiagHistory, clearDiagHistory };\n};\n","/**\n * ROS2Diagnostics Component\n *\n * A production-grade ROS2 diagnostic aggregation and visualization component.\n * Adapted from Cockpit ROS2 Diagnostics plugin for mywhy-ui.\n */\n\nimport React, { useState } from 'react';\nimport { Button, Alert, Spinner, Card } from '../..';\nimport { Pause, Play, ChevronDown } from 'lucide-react';\n\nimport { DiagnosticsStatus } from './interfaces';\nimport { DiagnosticsTable } from './DiagnosticsTable';\nimport { DiagnosticsTreeTable } from './DiagnosticsTreeTable';\nimport { RosConnectionManager } from './RosConnectionManager';\nimport { useNamespace } from './hooks/useNamespace';\nimport { useWebSocketUrl } from './hooks/useWebSocketUrl';\nimport { DiagnosticsCapture } from './DiagnosticsCapture';\nimport { ManualNamespace } from './ManualNamespace';\nimport { HistorySelection } from './HistorySelection';\nimport { useDiagHistory } from './hooks/useDiagHistory';\n\nexport interface ROS2DiagnosticsProps {\n foxgloveUrl?: string;\n namespace?: string;\n onDiagnosticUpdate?: (diagnostics: DiagnosticsStatus) => void;\n}\n\nexport const ROS2Diagnostics: React.FC<ROS2DiagnosticsProps> = ({\n foxgloveUrl,\n namespace: initialNamespace = '/robot',\n onDiagnosticUpdate,\n}) => {\n const {\n namespace,\n setManualNamespace,\n invalidNamespaceMessage,\n manualEntryRequired\n } = useNamespace(initialNamespace);\n\n const wsUrl = useWebSocketUrl(foxgloveUrl);\n const [diagStatusDisplay, setDiagStatusDisplay] = useState<DiagnosticsStatus | null>(null);\n const [bridgeConnected, setBridgeConnected] = useState(false);\n const [selectedRawName, setSelectedRawName] = useState<string | null>(null);\n const [isPaused, setIsPaused] = useState(false);\n\n const {\n diagHistory,\n updateDiagHistory,\n clearDiagHistory\n } = useDiagHistory(isPaused);\n\n const diagnostics = diagStatusDisplay?.diagnostics || [];\n\n const handleDiagnosticsUpdate = (diagStatus: DiagnosticsStatus) => {\n setDiagStatusDisplay(diagStatus);\n updateDiagHistory(diagStatus);\n onDiagnosticUpdate?.(diagStatus);\n };\n\n return (\n <div className=\"flex flex-col h-full gap-4 p-4 bg-white\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <h1 className=\"text-2xl font-bold text-gray-900\">ROS 2 Diagnostics</h1>\n <Button\n variant={isPaused ? 'solid' : 'subtle'}\n theme=\"brand\"\n size=\"sm\"\n onClick={() => {\n if (isPaused) clearDiagHistory();\n setIsPaused(!isPaused);\n }}\n icon={isPaused ? <Play className=\"w-4 h-4\" /> : <Pause className=\"w-4 h-4\" />}\n >\n {isPaused ? 'Resume' : 'Pause'}\n </Button>\n </div>\n\n {/* History Selection */}\n <HistorySelection\n diagHistory={diagHistory}\n setDiagStatusDisplay={setDiagStatusDisplay}\n isPaused={isPaused}\n setIsPaused={setIsPaused}\n />\n\n {/* Error Alert */}\n {invalidNamespaceMessage && (\n <Alert theme=\"danger\" title={invalidNamespaceMessage} />\n )}\n\n {/* Manual Namespace Entry */}\n {manualEntryRequired && (\n <ManualNamespace\n setManualNamespace={setManualNamespace}\n namespace={namespace}\n />\n )}\n\n {/* Capture Controls */}\n <DiagnosticsCapture namespace={namespace} />\n\n {/* Main Content */}\n {!invalidNamespaceMessage && (\n <>\n {/* ROS Connection Manager - invisible component handling WebSocket */}\n <RosConnectionManager\n namespace={namespace}\n url={wsUrl}\n onDiagnosticsUpdate={handleDiagnosticsUpdate}\n onConnectionStatusChange={setBridgeConnected}\n onClearHistory={clearDiagHistory}\n />\n\n {/* Bridge Connection Status */}\n {!bridgeConnected && (\n <Alert\n theme=\"warning\"\n title=\"Waiting for connection...\"\n >\n Attempting to connect to Foxglove bridge at {wsUrl}\n </Alert>\n )}\n\n {/* Error Diagnostics Table */}\n {diagnostics.length > 0 && (\n <DiagnosticsTable\n diagnostics={diagnostics}\n setSelectedRawName={setSelectedRawName}\n variant=\"error\"\n />\n )}\n\n {/* Warning Diagnostics Table */}\n {diagnostics.length > 0 && (\n <DiagnosticsTable\n diagnostics={diagnostics}\n setSelectedRawName={setSelectedRawName}\n variant=\"warning\"\n />\n )}\n\n {/* Full Tree View */}\n <DiagnosticsTreeTable\n diagnostics={diagnostics}\n bridgeConnected={bridgeConnected}\n selectedRawName={selectedRawName}\n setSelectedRawName={setSelectedRawName}\n />\n\n {/* Loading State */}\n {diagnostics.length === 0 && bridgeConnected && (\n <div className=\"flex flex-col items-center justify-center py-12 text-gray-500\">\n <Spinner />\n <p className=\"mt-2\">Waiting for diagnostic data...</p>\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nexport default ROS2Diagnostics;\n\n// Export types and components for advanced usage\nexport { RosConnectionManager } from './RosConnectionManager';\nexport { DiagnosticsTreeTable } from './DiagnosticsTreeTable';\nexport { DiagnosticsTable } from './DiagnosticsTable';\nexport { DiagnosticsCapture } from './DiagnosticsCapture';\nexport { ManualNamespace } from './ManualNamespace';\nexport { HistorySelection } from './HistorySelection';\n\n// Export hooks for advanced integrations\nexport { useWebSocketUrl } from './hooks/useWebSocketUrl';\nexport { useDiagHistory } from './hooks/useDiagHistory';\nexport { useNamespace } from './hooks/useNamespace';\n\n// Export types\nexport type { DiagnosticsEntry, DiagnosticsStatus } from './interfaces';\n","import { useState, useCallback } from 'react'\n\nexport interface UseDisclosureReturn {\n isOpen: boolean\n open: () => void\n close: () => void\n toggle: () => void\n}\n\nexport function useDisclosure(initial = false): UseDisclosureReturn {\n const [isOpen, setIsOpen] = useState(initial)\n\n const open = useCallback(() => setIsOpen(true), [])\n const close = useCallback(() => setIsOpen(false), [])\n const toggle = useCallback(() => setIsOpen((v) => !v), [])\n\n return { isOpen, open, close, toggle }\n}\n","import { useState, useCallback } from 'react'\nimport type { ToastProps } from '../components/Toast/Toast'\n\nexport interface ToastEntry extends Omit<ToastProps, 'onClose'> {\n id: string\n}\n\nlet counter = 0\n\nexport function useToast() {\n const [toasts, setToasts] = useState<ToastEntry[]>([])\n\n const addToast = useCallback((props: Omit<ToastProps, 'onClose'>): string => {\n const id = `toast-${++counter}`\n setToasts((prev) => [...prev, { ...props, id }])\n return id\n }, [])\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n return { toasts, addToast, removeToast }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Spinner/Spinner.tsx","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/Switch/Switch.tsx","../src/components/Badge/Badge.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Alert/Alert.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/FormControl/FormControl.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Toast/Toast.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Link/Link.tsx","../src/components/FileUploader/FileUploader.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/TimePicker/TimePicker.tsx","../src/components/Progress/Progress.tsx","../src/components/Rating/Rating.tsx","../src/components/Slider/Slider.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Table/Table.tsx","../src/components/Pagination/Pagination.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/CodeBlock/CodeBlock.tsx","../src/components/Timeline/Timeline.tsx","../src/components/Kbd/Kbd.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/ConnectionIndicator/ConnectionIndicator.tsx","../src/components/ROS2Diagnostics/DiagnosticsTable.tsx","../src/components/ROS2Diagnostics/DiagnosticsTreeTable.tsx","../src/components/ROS2Diagnostics/roslib/Impl.ts","../src/components/ROS2Diagnostics/roslib/Ros.ts","../src/components/ROS2Diagnostics/roslib/Topic.ts","../src/components/ROS2Diagnostics/RosConnectionManager.tsx","../src/components/ROS2Diagnostics/utils/namespaceUtils.ts","../src/components/ROS2Diagnostics/hooks/useNamespace.ts","../src/components/ROS2Diagnostics/hooks/useWebSocketUrl.ts","../src/components/ROS2Diagnostics/DiagnosticsCapture.tsx","../src/components/ROS2Diagnostics/ManualNamespace.tsx","../src/components/ROS2Diagnostics/HistorySelection.tsx","../src/components/ROS2Diagnostics/hooks/useDiagHistory.ts","../src/components/ROS2Diagnostics/index.tsx","../src/hooks/useDisclosure.ts","../src/hooks/useToast.ts"],"names":["jsxs","jsx","sizeClasses","label","themeClasses","React","useRef","useEffect","variantClasses","placementClasses","useState","colorClasses","Fragment","pages","CheckCircle2","EventEmitter","FoxgloveClient","WebSocket","publisherId","subscriptionId","channel","Ros2MessageReader","parseRos2idl","parse","Ros2MessageWriter","HelpCircle","AlertCircle","AlertTriangle","useCallback","Download","HISTORY_SIZE","Play","Pause"],"mappings":"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","file":"index.cjs","sourcesContent":["import React from 'react'\n\nexport interface SpinnerProps {\n size?: 'xs' | 'sm' | 'md' | 'lg'\n color?: 'brand' | 'white' | 'gray'\n label?: string\n className?: string\n}\n\nconst sizeClasses = {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n}\n\nconst colorClasses = {\n brand: 'text-brand',\n white: 'text-white',\n gray: 'text-ink-faint',\n}\n\nexport function Spinner({ size = 'md', color = 'brand', label = 'Loading...', className = '' }: SpinnerProps) {\n return (\n <span role=\"status\" className={`inline-flex ${className}`}>\n <svg\n className={`animate-spin ${sizeClasses[size]} ${colorClasses[color]}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n <span className=\"sr-only\">{label}</span>\n </span>\n )\n}\n","import React from 'react'\nimport { Spinner } from '../Spinner/Spinner'\n\nexport type ButtonVariant = 'solid' | 'subtle' | 'outline' | 'ghost' | 'link'\nexport type ButtonTheme = 'brand' | 'success' | 'danger' | 'warning' | 'gray'\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n theme?: ButtonTheme\n size?: ButtonSize\n loading?: boolean\n icon?: React.ReactNode\n iconRight?: React.ReactNode\n}\n\nconst base = 'inline-flex items-center justify-center gap-1.5 font-medium rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-1 disabled:opacity-50 disabled:pointer-events-none select-none'\n\nconst sizeClasses: Record<ButtonSize, string> = {\n xs: 'h-6 px-2 text-xs',\n sm: 'h-7 px-2.5 text-sm',\n md: 'h-8 px-3 text-base',\n lg: 'h-9 px-4 text-md',\n}\n\nconst variantThemeClasses: Record<ButtonVariant, Record<ButtonTheme, string>> = {\n solid: {\n brand: 'bg-brand text-white hover:bg-brand-dark active:bg-brand-dark',\n success: 'bg-success-icon text-white hover:bg-green-600 active:bg-green-700',\n danger: 'bg-danger-icon text-white hover:bg-red-600 active:bg-red-700',\n warning: 'bg-warning-icon text-white hover:bg-amber-600 active:bg-amber-700',\n gray: 'bg-ink text-white hover:bg-ink-gray active:bg-ink-gray',\n },\n subtle: {\n brand: 'bg-brand-50 text-brand hover:bg-brand-100 active:bg-brand-200',\n success: 'bg-success-bg text-success-text hover:bg-green-100',\n danger: 'bg-danger-bg text-danger-text hover:bg-red-100',\n warning: 'bg-warning-bg text-warning-text hover:bg-amber-100',\n gray: 'bg-surface-gray text-ink hover:bg-surface-overlay',\n },\n outline: {\n brand: 'border border-brand text-brand hover:bg-brand-50',\n success: 'border border-success-border text-success-text hover:bg-success-bg',\n danger: 'border border-danger-border text-danger-text hover:bg-danger-bg',\n warning: 'border border-warning-border text-warning-text hover:bg-warning-bg',\n gray: 'border border-outline text-ink hover:bg-surface-gray',\n },\n ghost: {\n brand: 'text-brand hover:bg-brand-50',\n success: 'text-success-text hover:bg-success-bg',\n danger: 'text-danger-text hover:bg-danger-bg',\n warning: 'text-warning-text hover:bg-warning-bg',\n gray: 'text-ink-light hover:bg-surface-gray',\n },\n link: {\n brand: 'text-brand hover:underline p-0 h-auto',\n success: 'text-success-text hover:underline p-0 h-auto',\n danger: 'text-danger-text hover:underline p-0 h-auto',\n warning: 'text-warning-text hover:underline p-0 h-auto',\n gray: 'text-ink-light hover:underline p-0 h-auto',\n },\n}\n\nexport function Button({\n variant = 'subtle',\n theme = 'brand',\n size = 'md',\n loading = false,\n icon,\n iconRight,\n disabled,\n children,\n className = '',\n ...props\n}: ButtonProps) {\n const variantClass = variantThemeClasses[variant]?.[theme] ?? variantThemeClasses.subtle.brand\n\n return (\n <button\n className={`${base} ${sizeClasses[size]} ${variantClass} ${className}`}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? (\n <Spinner size=\"xs\" color={variant === 'solid' ? 'white' : 'brand'} />\n ) : (\n icon && <span className=\"shrink-0\">{icon}</span>\n )}\n {children}\n {!loading && iconRight && <span className=\"shrink-0\">{iconRight}</span>}\n </button>\n )\n}\n","import React from 'react'\n\nexport type InputSize = 'sm' | 'md' | 'lg'\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n size?: InputSize\n label?: string\n error?: string\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n}\n\nconst sizeClasses: Record<InputSize, string> = {\n sm: 'h-7 px-2 text-sm',\n md: 'h-8 px-2.5 text-base',\n lg: 'h-9 px-3 text-md',\n}\n\nexport function Input({\n size = 'md',\n label,\n error,\n prefix,\n suffix,\n id,\n className = '',\n ...props\n}: InputProps) {\n const inputId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n const inputClass = [\n 'w-full rounded-md border bg-surface-subtle text-ink placeholder:text-ink-faint',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-0 focus:border-brand',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'transition-colors',\n error ? 'border-danger-border focus:ring-danger-icon' : 'border-outline hover:border-outline-strong',\n sizeClasses[size],\n prefix ? 'pl-8' : '',\n suffix ? 'pr-8' : '',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-ink-gray\">\n {label}\n </label>\n )}\n <div className=\"relative flex items-center\">\n {prefix && (\n <span className=\"absolute left-2.5 flex items-center text-ink-faint pointer-events-none\">\n {prefix}\n </span>\n )}\n <input id={inputId} className={inputClass} {...props} />\n {suffix && (\n <span className=\"absolute right-2.5 flex items-center text-ink-faint pointer-events-none\">\n {suffix}\n </span>\n )}\n </div>\n {error && (\n <p className=\"text-sm text-danger-text\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type SelectSize = 'sm' | 'md' | 'lg'\n\nexport interface SelectOption {\n value: string\n label: string\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: SelectSize\n label?: string\n error?: string\n options: Array<SelectOption | string>\n}\n\nconst sizeClasses: Record<SelectSize, string> = {\n sm: 'h-7 px-2 text-sm',\n md: 'h-8 px-2.5 text-base',\n lg: 'h-9 px-3 text-md',\n}\n\nexport function Select({\n size = 'md',\n label,\n error,\n options,\n id,\n className = '',\n ...props\n}: SelectProps) {\n const selectId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n const selectClass = [\n 'w-full rounded-md border bg-surface-subtle text-ink appearance-none pr-8',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:border-brand',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'transition-colors',\n error ? 'border-danger-border focus:ring-danger-icon' : 'border-outline hover:border-outline-strong',\n sizeClasses[size],\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-ink-gray\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select id={selectId} className={selectClass} {...props}>\n {options.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value\n const label = typeof opt === 'string' ? opt : opt.label\n return (\n <option key={value} value={value}>\n {label}\n </option>\n )\n })}\n </select>\n <span className=\"absolute right-2.5 top-1/2 -translate-y-1/2 pointer-events-none text-ink-faint\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 4l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </span>\n </div>\n {error && (\n <p className=\"text-sm text-danger-text\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode\n description?: string\n error?: string\n}\n\nexport function Switch({\n label,\n description,\n error,\n id,\n className = '',\n checked,\n ...props\n}: SwitchProps) {\n const switchId = id ?? (typeof label === 'string' ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n return (\n <div className={`flex flex-col gap-0.5 ${className}`}>\n <label className=\"flex items-center gap-3 cursor-pointer\" htmlFor={switchId}>\n <input\n id={switchId}\n type=\"checkbox\"\n role=\"switch\"\n aria-checked={checked}\n className={[\n 'peer relative w-10 h-6 appearance-none rounded-full transition-colors',\n 'bg-surface-gray border border-outline',\n 'hover:bg-surface-overlay',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-2',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'checked:bg-brand checked:border-brand checked:hover:bg-brand-dark',\n 'after:content-[\\'\\'] after:absolute after:top-1 after:left-1',\n 'after:w-4 after:h-4 after:bg-white after:rounded-full after:transition-transform',\n 'peer-checked:after:translate-x-4',\n error ? 'border-danger-border' : '',\n ].join(' ')}\n checked={checked}\n {...props}\n />\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className=\"text-base font-medium text-ink leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-sm text-ink-light\">{description}</span>\n )}\n </div>\n )}\n </label>\n {error && (\n <p className=\"text-sm text-danger-text ml-4\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type BadgeTheme =\n | 'brand' | 'success' | 'danger' | 'warning' | 'gray'\n | 'admin' | 'operator' | 'viewer'\n | 'online' | 'offline' | 'error'\n\nexport interface BadgeProps {\n theme?: BadgeTheme\n size?: 'sm' | 'md'\n variant?: 'solid' | 'subtle'\n dot?: boolean\n children: React.ReactNode\n className?: string\n}\n\nconst subtleClasses: Record<BadgeTheme, string> = {\n brand: 'bg-brand-50 text-brand border-brand-200',\n success: 'bg-success-bg text-success-text border-success-border',\n danger: 'bg-danger-bg text-danger-text border-danger-border',\n warning: 'bg-warning-bg text-warning-text border-warning-border',\n gray: 'bg-surface-gray text-ink-light border-outline',\n admin: 'bg-purple-50 text-role-admin border-purple-200',\n operator: 'bg-sky-50 text-role-operator border-sky-200',\n viewer: 'bg-surface-gray text-role-viewer border-outline',\n online: 'bg-green-50 text-status-online border-green-200',\n offline: 'bg-surface-gray text-status-offline border-outline',\n error: 'bg-danger-bg text-status-error border-danger-border',\n}\n\nconst solidClasses: Record<BadgeTheme, string> = {\n brand: 'bg-brand text-white border-brand',\n success: 'bg-success-icon text-white border-success-icon',\n danger: 'bg-danger-icon text-white border-danger-icon',\n warning: 'bg-warning-icon text-white border-warning-icon',\n gray: 'bg-ink-light text-white border-ink-light',\n admin: 'bg-role-admin text-white border-role-admin',\n operator: 'bg-role-operator text-white border-role-operator',\n viewer: 'bg-role-viewer text-white border-role-viewer',\n online: 'bg-status-online text-white border-status-online',\n offline: 'bg-status-offline text-white border-status-offline',\n error: 'bg-status-error text-white border-status-error',\n}\n\nconst dotColorClasses: Record<BadgeTheme, string> = {\n brand: 'bg-brand',\n success: 'bg-success-icon',\n danger: 'bg-danger-icon',\n warning: 'bg-warning-icon',\n gray: 'bg-ink-faint',\n admin: 'bg-role-admin',\n operator: 'bg-role-operator',\n viewer: 'bg-role-viewer',\n online: 'bg-status-online',\n offline: 'bg-status-offline',\n error: 'bg-status-error',\n}\n\nexport function Badge({\n theme = 'gray',\n size = 'sm',\n variant = 'subtle',\n dot = false,\n children,\n className = '',\n}: BadgeProps) {\n const colorClass = variant === 'solid' ? solidClasses[theme] : subtleClasses[theme]\n const sizeClass = size === 'sm' ? 'text-xs px-1.5 py-0.5' : 'text-sm px-2 py-0.5'\n\n return (\n <span\n className={`inline-flex items-center gap-1 rounded font-medium border ${colorClass} ${sizeClass} ${className}`}\n >\n {dot && (\n <span className={`w-1.5 h-1.5 rounded-full shrink-0 ${\n variant === 'solid' ? 'bg-white/70' : dotColorClasses[theme]\n }`} />\n )}\n {children}\n </span>\n )\n}\n","import React from 'react'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type AvatarShape = 'circle' | 'square'\nexport type AvatarTheme = 'brand' | 'admin' | 'operator' | 'viewer' | 'gray'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n initials?: string\n size?: AvatarSize\n shape?: AvatarShape\n theme?: AvatarTheme\n className?: string\n}\n\nconst sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-5 h-5 text-2xs',\n sm: 'w-6 h-6 text-xs',\n md: 'w-8 h-8 text-sm',\n lg: 'w-10 h-10 text-base',\n xl: 'w-12 h-12 text-md',\n}\n\nconst shapeClasses: Record<AvatarShape, string> = {\n circle: 'rounded-full',\n square: 'rounded-md',\n}\n\nconst themeClasses: Record<AvatarTheme, string> = {\n brand: 'bg-brand text-white',\n admin: 'bg-role-admin text-white',\n operator: 'bg-role-operator text-white',\n viewer: 'bg-surface-gray text-ink-light',\n gray: 'bg-surface-overlay text-ink-light',\n}\n\nexport function Avatar({\n src,\n alt = '',\n initials,\n size = 'md',\n shape = 'circle',\n theme = 'brand',\n className = '',\n}: AvatarProps) {\n const baseClass = `inline-flex items-center justify-center shrink-0 font-semibold overflow-hidden ${sizeClasses[size]} ${shapeClasses[shape]}`\n\n if (src) {\n return (\n <img\n src={src}\n alt={alt}\n className={`${baseClass} object-cover ${className}`}\n />\n )\n }\n\n const displayInitials = initials\n ? initials.slice(0, 2).toUpperCase()\n : alt ? alt.slice(0, 2).toUpperCase() : '?'\n\n return (\n <span className={`${baseClass} ${themeClasses[theme]} ${className}`}>\n {displayInitials}\n </span>\n )\n}\n","import React from 'react'\n\nexport interface CardProps {\n padding?: 'none' | 'sm' | 'md' | 'lg'\n shadow?: boolean\n border?: boolean\n as?: React.ElementType\n onClick?: React.MouseEventHandler\n children: React.ReactNode\n className?: string\n}\n\nconst paddingClasses = {\n none: '',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n}\n\nexport function Card({\n padding = 'md',\n shadow = true,\n border = true,\n as: Tag = 'div',\n onClick,\n children,\n className = '',\n}: CardProps) {\n const classes = [\n 'bg-surface rounded-lg',\n paddingClasses[padding],\n shadow ? 'shadow-card' : '',\n border ? 'border border-outline' : '',\n onClick ? 'cursor-pointer hover:shadow-card-hover transition-shadow' : '',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <Tag className={classes} onClick={onClick}>\n {children}\n </Tag>\n )\n}\n","import React from 'react'\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: React.ReactNode\n description?: string\n error?: string\n}\n\nexport function Checkbox({\n label,\n description,\n error,\n id,\n className = '',\n ...props\n}: CheckboxProps) {\n const checkboxId = id ?? (typeof label === 'string' ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n return (\n <div className={`flex flex-col gap-0.5 ${className}`}>\n <label className=\"flex items-start gap-2 cursor-pointer\" htmlFor={checkboxId}>\n <input\n id={checkboxId}\n type=\"checkbox\"\n className={[\n 'mt-0.5 w-4 h-4 rounded border text-brand',\n 'focus:ring-2 focus:ring-brand focus:ring-offset-0',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error ? 'border-danger-border' : 'border-outline',\n ].join(' ')}\n {...props}\n />\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className=\"text-base font-medium text-ink leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-sm text-ink-light\">{description}</span>\n )}\n </div>\n )}\n </label>\n {error && (\n <p className=\"text-sm text-danger-text ml-6\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type TextareaSize = 'sm' | 'md' | 'lg'\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n size?: TextareaSize\n label?: string\n error?: string\n resize?: TextareaResize\n}\n\nconst sizeClasses: Record<TextareaSize, string> = {\n sm: 'px-2 py-1.5 text-sm',\n md: 'px-2.5 py-2 text-base',\n lg: 'px-3 py-2.5 text-md',\n}\n\nconst resizeClasses: Record<TextareaResize, string> = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n}\n\nexport function Textarea({\n size = 'md',\n label,\n error,\n resize = 'none',\n id,\n className = '',\n ...props\n}: TextareaProps) {\n const textareaId = id ?? (label ? label.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n const textareaClass = [\n 'w-full rounded-md border bg-surface-subtle text-ink placeholder:text-ink-faint',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:border-brand',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'transition-colors',\n error ? 'border-danger-border focus:ring-danger-icon' : 'border-outline hover:border-outline-strong',\n sizeClasses[size],\n resizeClasses[resize],\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={textareaId} className=\"text-sm font-medium text-ink-gray\">\n {label}\n </label>\n )}\n <textarea id={textareaId} className={textareaClass} {...props} />\n {error && (\n <p className=\"text-sm text-danger-text\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport type AlertTheme = 'info' | 'success' | 'warning' | 'danger'\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n theme?: AlertTheme\n title?: React.ReactNode\n icon?: React.ReactNode\n onClose?: () => void\n isDismissible?: boolean\n}\n\nconst themeClasses: Record<AlertTheme, string> = {\n info: 'bg-brand-50 border-brand-200 text-brand-900',\n success: 'bg-green-50 border-green-200 text-green-900',\n warning: 'bg-amber-50 border-amber-200 text-amber-900',\n danger: 'bg-red-50 border-red-200 text-red-900',\n}\n\nconst iconColors: Record<AlertTheme, string> = {\n info: 'text-brand',\n success: 'text-success-icon',\n warning: 'text-warning-icon',\n danger: 'text-danger-icon',\n}\n\nconst closeButtonColors: Record<AlertTheme, string> = {\n info: 'hover:bg-brand-100 text-brand-600',\n success: 'hover:bg-green-100 text-green-600',\n warning: 'hover:bg-amber-100 text-amber-600',\n danger: 'hover:bg-red-100 text-red-600',\n}\n\nexport function Alert({\n theme = 'info',\n title,\n icon,\n onClose,\n isDismissible = false,\n children,\n className = '',\n ...props\n}: AlertProps) {\n const [isVisible, setIsVisible] = React.useState(true)\n\n const handleClose = () => {\n setIsVisible(false)\n onClose?.()\n }\n\n if (!isVisible) return null\n\n return (\n <div\n className={`flex gap-3 p-3 rounded-md border ${themeClasses[theme]} ${className}`}\n role=\"alert\"\n {...props}\n >\n {icon && (\n <div className={`shrink-0 mt-0.5 ${iconColors[theme]}`}>\n {icon}\n </div>\n )}\n <div className=\"flex-1\">\n {title && (\n <p className=\"font-medium\">{title}</p>\n )}\n {children && (\n <p className={title ? 'text-sm mt-0.5' : 'text-sm'}>\n {children}\n </p>\n )}\n </div>\n {isDismissible && (\n <button\n onClick={handleClose}\n className={`shrink-0 p-1 rounded transition-colors ${closeButtonColors[theme]}`}\n aria-label=\"Dismiss alert\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface MultiSelectOption {\n label: string\n value: string\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface MultiSelectProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n options: MultiSelectOption[]\n value?: string[]\n onChange?: (values: string[]) => void\n placeholder?: string\n label?: string\n description?: string\n error?: string\n disabled?: boolean\n searchable?: boolean\n clearable?: boolean\n size?: 'sm' | 'md' | 'lg'\n}\n\nexport function MultiSelect({\n options,\n value = [],\n onChange,\n placeholder = 'Select items...',\n label,\n description,\n error,\n disabled = false,\n searchable = true,\n clearable = true,\n size = 'md',\n className = '',\n ...props\n}: MultiSelectProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const [searchTerm, setSearchTerm] = React.useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const filteredOptions = searchable\n ? options.filter((opt) =>\n opt.label.toLowerCase().includes(searchTerm.toLowerCase()),\n )\n : options\n\n const handleSelect = (optionValue: string) => {\n const newValues = value.includes(optionValue)\n ? value.filter((v) => v !== optionValue)\n : [...value, optionValue]\n onChange?.(newValues)\n }\n\n const handleRemove = (optionValue: string) => {\n const newValues = value.filter((v) => v !== optionValue)\n onChange?.(newValues)\n }\n\n const handleClear = () => {\n onChange?.([])\n setSearchTerm('')\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const sizeClasses = {\n sm: 'h-7 px-2 text-sm',\n md: 'h-8 px-3 text-base',\n lg: 'h-9 px-4 text-base',\n }\n\n const selectedOptions = options.filter((opt) => value.includes(opt.value))\n\n return (\n <div className={className} {...props}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-1.5\">{description}</p>\n )}\n\n <div className=\"relative\" ref={containerRef}>\n <div\n className={[\n 'flex flex-wrap gap-1 items-center border rounded-md transition-colors',\n 'focus-within:ring-2 focus-within:ring-brand focus-within:ring-offset-1',\n disabled ? 'bg-surface-gray opacity-50 cursor-not-allowed' : 'bg-white',\n error ? 'border-danger-border' : 'border-outline',\n sizeClasses[size],\n ].join(' ')}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n >\n {selectedOptions.map((opt) => (\n <div\n key={opt.value}\n className=\"inline-flex items-center gap-1 bg-brand-50 text-brand px-2 py-0.5 rounded text-xs font-medium\"\n >\n {opt.icon && <span className=\"shrink-0\">{opt.icon}</span>}\n <span>{opt.label}</span>\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleRemove(opt.value)\n }}\n className=\"shrink-0 hover:text-brand-dark\"\n >\n ×\n </button>\n </div>\n ))}\n\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={value.length === 0 ? placeholder : ''}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onFocus={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className=\"flex-1 min-w-[40px] bg-transparent border-0 outline-none text-sm\"\n />\n\n {clearable && value.length > 0 && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleClear()\n }}\n className=\"shrink-0 text-ink-light hover:text-ink\"\n >\n ✕\n </button>\n )}\n </div>\n\n {isOpen && (\n <div className=\"absolute top-full mt-1 left-0 right-0 z-50 bg-white border border-outline rounded-md shadow-lg py-1\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((opt) => (\n <button\n key={opt.value}\n onClick={() => {\n handleSelect(opt.value)\n if (!opt.disabled) {\n inputRef.current?.focus()\n }\n }}\n disabled={opt.disabled}\n className={[\n 'w-full px-3 py-2 text-left text-sm flex items-center gap-2 transition-colors',\n opt.disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-surface-gray',\n value.includes(opt.value)\n ? 'bg-brand-50'\n : '',\n ].join(' ')}\n >\n <input\n type=\"checkbox\"\n checked={value.includes(opt.value)}\n readOnly\n className=\"w-4 h-4\"\n />\n {opt.icon && <span className=\"shrink-0\">{opt.icon}</span>}\n <span>{opt.label}</span>\n </button>\n ))\n ) : (\n <div className=\"px-3 py-2 text-sm text-ink-light\">\n No options found\n </div>\n )}\n </div>\n )}\n </div>\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface FormControlProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: React.ReactNode\n description?: string\n error?: string\n required?: boolean\n helperText?: string\n children: React.ReactNode\n}\n\nexport function FormControl({\n label,\n description,\n error,\n required = false,\n helperText,\n children,\n className = '',\n ...props\n}: FormControlProps) {\n return (\n <div className={`flex flex-col gap-1.5 ${className}`} {...props}>\n {(label || description) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <label className=\"text-sm font-medium text-ink\">\n {label}\n {required && <span className=\"text-danger-icon ml-1\">*</span>}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light\">{description}</p>\n )}\n </div>\n )}\n\n {children}\n\n {error && (\n <p className=\"text-xs text-danger-text flex items-center gap-1\">\n <svg className=\"w-3.5 h-3.5 shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\" clipRule=\"evenodd\" />\n </svg>\n {error}\n </p>\n )}\n\n {helperText && !error && (\n <p className=\"text-xs text-ink-light\">{helperText}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface TabItem {\n label: React.ReactNode\n value: string\n content: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps {\n tabs: TabItem[]\n activeTab?: string\n onTabChange?: (value: string) => void\n variant?: 'underline' | 'soft'\n className?: string\n tabsClassName?: string\n contentClassName?: string\n}\n\nexport function Tabs({\n tabs,\n activeTab,\n onTabChange,\n variant = 'underline',\n className = '',\n tabsClassName = '',\n contentClassName = '',\n}: TabsProps) {\n const [internalActiveTab, setInternalActiveTab] = React.useState(activeTab || tabs[0]?.value || '')\n\n const active = activeTab !== undefined ? activeTab : internalActiveTab\n\n const handleTabChange = (value: string) => {\n setInternalActiveTab(value)\n onTabChange?.(value)\n }\n\n const baseTabClasses = 'px-3 py-2 font-medium text-sm rounded-t-md transition-colors whitespace-nowrap'\n\n const variantClasses = {\n underline: {\n base: 'border-b-2 border-transparent text-ink-light hover:text-ink hover:border-outline',\n active: 'border-brand text-brand',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n soft: {\n base: 'text-ink-light hover:text-ink hover:bg-surface-gray',\n active: 'bg-brand text-white',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n }\n\n const variantStyle = variantClasses[variant]\n\n return (\n <div className={className}>\n <div\n className={`flex gap-0 border-b border-outline ${tabsClassName}`}\n role=\"tablist\"\n >\n {tabs.map((tab) => (\n <button\n key={tab.value}\n role=\"tab\"\n aria-selected={active === tab.value}\n aria-disabled={tab.disabled}\n onClick={() => !tab.disabled && handleTabChange(tab.value)}\n disabled={tab.disabled}\n className={[\n baseTabClasses,\n active === tab.value ? variantStyle.active : variantStyle.base,\n tab.disabled ? variantStyle.disabled : '',\n ].join(' ')}\n >\n {tab.icon && <span className=\"inline-block mr-1\">{tab.icon}</span>}\n {tab.label}\n </button>\n ))}\n </div>\n\n <div className={contentClassName} role=\"tabpanel\">\n {tabs.find((tab) => tab.value === active)?.content}\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface BreadcrumbItem {\n label: React.ReactNode\n href?: string\n onClick?: () => void\n icon?: React.ReactNode\n isActive?: boolean\n}\n\nexport interface BreadcrumbsProps extends React.HTMLAttributes<HTMLDivElement> {\n items: BreadcrumbItem[]\n separator?: React.ReactNode\n className?: string\n}\n\nexport function Breadcrumbs({\n items,\n separator = '/',\n className = '',\n ...props\n}: BreadcrumbsProps) {\n return (\n <nav className={`flex items-center gap-0 text-sm ${className}`} {...props}>\n {items.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <span className=\"text-ink-light px-1.5\">{separator}</span>\n )}\n\n {item.href ? (\n <a\n href={item.href}\n className={[\n 'flex items-center gap-1 rounded px-1.5 py-1 transition-colors',\n item.isActive\n ? 'text-ink font-medium'\n : 'text-brand hover:bg-brand-50 cursor-pointer',\n ].join(' ')}\n >\n {item.icon && <span className=\"shrink-0\">{item.icon}</span>}\n {item.label}\n </a>\n ) : (\n <button\n onClick={item.onClick}\n disabled={!item.onClick && !item.isActive}\n className={[\n 'flex items-center gap-1 rounded px-1.5 py-1 transition-colors',\n item.isActive\n ? 'text-ink font-medium cursor-default'\n : item.onClick\n ? 'text-brand hover:bg-brand-50 cursor-pointer'\n : 'text-ink-light cursor-default',\n ].join(' ')}\n >\n {item.icon && <span className=\"shrink-0\">{item.icon}</span>}\n {item.label}\n </button>\n )}\n </React.Fragment>\n ))}\n </nav>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface DropdownItem {\n label: React.ReactNode\n value?: string\n icon?: React.ReactNode\n onClick?: () => void\n isDanger?: boolean\n disabled?: boolean\n}\n\nexport interface DropdownProps {\n items: DropdownItem[]\n trigger: React.ReactNode\n placement?: 'bottom' | 'top' | 'left' | 'right'\n isOpen?: boolean\n onOpenChange?: (isOpen: boolean) => void\n className?: string\n triggerClassName?: string\n menuClassName?: string\n}\n\nexport function Dropdown({\n items,\n trigger,\n placement = 'bottom',\n isOpen: controlledIsOpen,\n onOpenChange,\n className = '',\n triggerClassName = '',\n menuClassName = '',\n}: DropdownProps) {\n const [internalIsOpen, setInternalIsOpen] = React.useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen\n\n const toggleOpen = () => {\n const newState = !isOpen\n setInternalIsOpen(newState)\n onOpenChange?.(newState)\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setInternalIsOpen(false)\n onOpenChange?.(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, onOpenChange])\n\n const placementClasses: Record<string, string> = {\n bottom: 'top-full mt-1 left-0',\n top: 'bottom-full mb-1 left-0',\n left: 'right-full mr-1 top-0',\n right: 'left-full ml-1 top-0',\n }\n\n return (\n <div className={`relative inline-block ${className}`} ref={containerRef}>\n <button\n onClick={toggleOpen}\n className={`inline-flex items-center gap-1.5 ${triggerClassName}`}\n >\n {trigger}\n </button>\n\n {isOpen && (\n <div\n ref={menuRef}\n className={`absolute ${placementClasses[placement]} z-50 min-w-[160px] bg-surface-default border border-outline rounded-md shadow-lg py-1 ${menuClassName}`}\n >\n {items.map((item, index) => (\n <button\n key={index}\n onClick={() => {\n item.onClick?.()\n setInternalIsOpen(false)\n onOpenChange?.(false)\n }}\n disabled={item.disabled}\n className={[\n 'w-full px-3 py-2 text-left text-sm flex items-center gap-2 transition-colors',\n item.disabled\n ? 'opacity-50 cursor-not-allowed'\n : item.isDanger\n ? 'text-danger-text hover:bg-danger-bg'\n : 'text-ink hover:bg-surface-gray',\n ].join(' ')}\n >\n {item.icon && <span className=\"shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useRef } from 'react'\n\nexport interface DialogProps {\n open: boolean\n onClose: () => void\n title?: string\n size?: 'sm' | 'md' | 'lg' | 'xl'\n children: React.ReactNode\n footer?: React.ReactNode\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n}\n\nexport function Dialog({\n open,\n onClose,\n title,\n size = 'md',\n children,\n footer,\n className = '',\n}: DialogProps) {\n const overlayRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open, onClose])\n\n useEffect(() => {\n document.body.style.overflow = open ? 'hidden' : ''\n return () => { document.body.style.overflow = '' }\n }, [open])\n\n if (!open) return null\n\n return (\n <div\n ref={overlayRef}\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n onClick={(e) => { if (e.target === overlayRef.current) onClose() }}\n >\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-ink/40 backdrop-blur-sm\" aria-hidden=\"true\" />\n\n {/* Panel */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'dialog-title' : undefined}\n className={`relative w-full ${sizeClasses[size]} bg-surface rounded-xl shadow-dialog border border-outline flex flex-col max-h-[90vh] ${className}`}\n >\n {/* Header */}\n {title && (\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-outline shrink-0\">\n <h2 id=\"dialog-title\" className=\"text-md font-semibold text-ink\">\n {title}\n </h2>\n <button\n onClick={onClose}\n className=\"p-1 rounded-md text-ink-faint hover:text-ink hover:bg-surface-gray transition-colors\"\n aria-label=\"Close dialog\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M12 4L4 12M4 4l8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n </button>\n </div>\n )}\n\n {/* Body */}\n <div className=\"px-5 py-4 overflow-y-auto flex-1\">\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"px-5 py-3 border-t border-outline shrink-0 flex items-center justify-end gap-2\">\n {footer}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import React, { useEffect } from 'react'\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info'\n\nexport interface ToastProps {\n type?: ToastType\n title: string\n message?: string\n duration?: number\n onClose?: () => void\n className?: string\n}\n\nconst typeConfig: Record<ToastType, { icon: React.ReactNode; classes: string }> = {\n success: {\n classes: 'border-success-border bg-success-bg text-success-text',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-success-icon shrink-0\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M5 8l2 2 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ),\n },\n error: {\n classes: 'border-danger-border bg-danger-bg text-danger-text',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-danger-icon shrink-0\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M10 6L6 10M6 6l4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n ),\n },\n warning: {\n classes: 'border-warning-border bg-warning-bg text-warning-text',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-warning-icon shrink-0\">\n <path d=\"M8 2L14 13H2L8 2z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\"/>\n <path d=\"M8 6v3M8 11v.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n ),\n },\n info: {\n classes: 'border-brand-200 bg-brand-50 text-brand',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-brand shrink-0\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M8 7v4M8 5v.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n ),\n },\n}\n\nexport function Toast({\n type = 'info',\n title,\n message,\n duration = 3000,\n onClose,\n className = '',\n}: ToastProps) {\n useEffect(() => {\n if (!duration || !onClose) return\n const timer = setTimeout(onClose, duration)\n return () => clearTimeout(timer)\n }, [duration, onClose])\n\n const { icon, classes } = typeConfig[type]\n\n return (\n <div\n role=\"alert\"\n className={`flex items-start gap-3 px-4 py-3 rounded-lg border shadow-toast min-w-[260px] max-w-sm ${classes} ${className}`}\n >\n <span className=\"mt-0.5\">{icon}</span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-base font-medium leading-tight\">{title}</p>\n {message && <p className=\"text-sm mt-0.5 opacity-80\">{message}</p>}\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className=\"shrink-0 p-0.5 rounded opacity-60 hover:opacity-100 transition-opacity\"\n aria-label=\"Dismiss\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M11 3L3 11M3 3l8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n </button>\n )}\n </div>\n )\n}\n\nexport interface ToastContainerProps {\n toasts: Array<ToastProps & { id: string }>\n onClose: (id: string) => void\n}\n\nexport function ToastContainer({ toasts, onClose }: ToastContainerProps) {\n if (toasts.length === 0) return null\n return (\n <div className=\"fixed bottom-4 right-4 z-[100] flex flex-col gap-2 items-end\">\n {toasts.map((toast) => (\n <Toast key={toast.id} {...toast} onClose={() => onClose(toast.id)} />\n ))}\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right'\n\nexport interface TooltipProps {\n content: React.ReactNode\n placement?: TooltipPlacement\n delay?: number\n children: React.ReactElement\n className?: string\n}\n\nconst placementClasses: Record<TooltipPlacement, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-1.5',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-1.5',\n left: 'right-full top-1/2 -translate-y-1/2 mr-1.5',\n right: 'left-full top-1/2 -translate-y-1/2 ml-1.5',\n}\n\nexport function Tooltip({\n content,\n placement = 'top',\n delay = 200,\n children,\n className = '',\n}: TooltipProps) {\n const [visible, setVisible] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = () => {\n timerRef.current = setTimeout(() => setVisible(true), delay)\n }\n const hide = () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n setVisible(false)\n }\n\n useEffect(() => () => { if (timerRef.current) clearTimeout(timerRef.current) }, [])\n\n return (\n <span\n className=\"relative inline-flex\"\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n {children}\n {visible && (\n <span\n role=\"tooltip\"\n className={`absolute z-50 px-2 py-1 text-xs font-medium text-white bg-ink rounded-md whitespace-nowrap shadow-toast pointer-events-none ${placementClasses[placement]} ${className}`}\n >\n {content}\n </span>\n )}\n </span>\n )\n}\n","import React from 'react'\n\nexport interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n variant?: 'default' | 'muted' | 'brand'\n external?: boolean\n}\n\nconst variantClasses = {\n default: 'text-ink hover:text-brand hover:underline',\n muted: 'text-ink-light hover:text-ink hover:underline',\n brand: 'text-brand hover:underline',\n}\n\nexport function Link({\n variant = 'default',\n external = false,\n children,\n className = '',\n ...props\n}: LinkProps) {\n const externalProps = external\n ? { target: '_blank', rel: 'noopener noreferrer' }\n : {}\n\n return (\n <a\n className={`transition-colors ${variantClasses[variant]} ${className}`}\n {...externalProps}\n {...props}\n >\n {children}\n </a>\n )\n}\n","import React from 'react'\n\nexport interface FileUploaderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n description?: string\n error?: string\n hint?: string\n onFilesChange?: (files: File[]) => void\n maxSize?: number // in bytes\n accept?: string\n isDragActive?: boolean\n multiple?: boolean\n}\n\nexport function FileUploader({\n label,\n description,\n error,\n hint,\n onFilesChange,\n maxSize,\n accept = '*',\n multiple = false,\n disabled = false,\n className = '',\n ...props\n}: FileUploaderProps) {\n const [dragActive, setDragActive] = React.useState(false)\n const [files, setFiles] = React.useState<File[]>([])\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList) return\n\n let newFiles = Array.from(fileList)\n\n // Filter by max size\n if (maxSize) {\n newFiles = newFiles.filter((file) => file.size <= maxSize)\n }\n\n if (!multiple && newFiles.length > 0) {\n newFiles = [newFiles[0]]\n }\n\n setFiles(newFiles)\n onFilesChange?.(newFiles)\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n }\n\n const handleDrag = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (e.type === 'dragenter' || e.type === 'dragover') {\n setDragActive(true)\n } else if (e.type === 'dragleave') {\n setDragActive(false)\n }\n }\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setDragActive(false)\n handleFiles(e.dataTransfer.files)\n }\n\n const handleRemoveFile = (index: number) => {\n const newFiles = files.filter((_, i) => i !== index)\n setFiles(newFiles)\n onFilesChange?.(newFiles)\n }\n\n const handleClick = () => {\n inputRef.current?.click()\n }\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes'\n const k = 1024\n const sizes = ['Bytes', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]\n }\n\n return (\n <div className={className}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-2\">{description}</p>\n )}\n\n <div\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={handleClick}\n className={[\n 'relative px-4 py-6 border-2 border-dashed rounded-md transition-colors cursor-pointer',\n disabled ? 'opacity-50 cursor-not-allowed' : '',\n dragActive ? 'border-brand bg-brand-50' : 'border-outline hover:border-brand',\n error ? 'border-danger-border' : '',\n ].join(' ')}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n {...props}\n />\n\n <div className=\"flex flex-col items-center justify-center gap-2\">\n <svg\n className=\"w-8 h-8 text-brand\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M9 19l3 3m0 0l3-3m-3 3v-6\"\n />\n </svg>\n\n <div className=\"text-center\">\n <p className=\"text-sm font-medium text-ink\">\n Drag files here or click to upload\n </p>\n {hint && (\n <p className=\"text-xs text-ink-light mt-1\">{hint}</p>\n )}\n </div>\n </div>\n </div>\n\n {files.length > 0 && (\n <div className=\"mt-3 space-y-1.5\">\n {files.map((file, index) => (\n <div\n key={`${file.name}-${index}`}\n className=\"flex items-center justify-between p-2 bg-surface-gray rounded border border-outline\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n <svg className=\"w-4 h-4 text-brand shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M8 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM15 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z\" />\n <path d=\"M3 4a1 1 0 00-1 1v10a1 1 0 001 1h1.05a2.5 2.5 0 014.9 0H10a1 1 0 001-1V5a1 1 0 00-1-1H3zM14 7a1 1 0 00-1 1v6.05A2.5 2.5 0 0015.95 16H17a1 1 0 001-1v-5a1 1 0 00-.293-.707l-2-2A1 1 0 0015 7h-1z\" />\n </svg>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-ink truncate\">{file.name}</p>\n <p className=\"text-xs text-ink-light\">{formatFileSize(file.size)}</p>\n </div>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleRemoveFile(index)\n }}\n className=\"p-1 hover:bg-surface-overlay rounded transition-colors\"\n >\n <svg className=\"w-4 h-4 text-danger-text\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n ))}\n </div>\n )}\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface DatePickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n value?: string\n onChange?: (value: string) => void\n label?: string\n description?: string\n error?: string\n min?: string\n max?: string\n placeholder?: string\n}\n\nexport function DatePicker({\n value = '',\n onChange,\n label,\n description,\n error,\n min,\n max,\n placeholder = 'Select a date',\n disabled = false,\n className = '',\n ...props\n}: DatePickerProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const handleDateChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value)\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const formatDateForDisplay = (dateString: string): string => {\n if (!dateString) return ''\n const date = new Date(dateString)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n }\n\n return (\n <div className={className} ref={containerRef}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-1.5\">{description}</p>\n )}\n\n <div className=\"relative\">\n <div className=\"relative\">\n <input\n type=\"text\"\n value={value ? formatDateForDisplay(value) : ''}\n onChange={handleDateChange}\n placeholder={placeholder}\n disabled={disabled}\n readOnly\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={[\n 'w-full px-3 py-2 border rounded-md text-base transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-1',\n 'cursor-pointer',\n disabled ? 'bg-surface-gray opacity-50 cursor-not-allowed' : 'bg-white',\n error ? 'border-danger-border' : 'border-outline',\n ].join(' ')}\n />\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-ink-light hover:text-ink\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h18M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <input\n type=\"date\"\n value={value}\n onChange={handleDateChange}\n min={min}\n max={max}\n disabled={disabled}\n autoFocus\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer\"\n {...props}\n />\n )}\n </div>\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nexport interface TimePickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n value?: string\n onChange?: (value: string) => void\n label?: string\n description?: string\n error?: string\n placeholder?: string\n format?: '12h' | '24h'\n}\n\nexport function TimePicker({\n value = '',\n onChange,\n label,\n description,\n error,\n placeholder = 'Select a time',\n format = '24h',\n disabled = false,\n className = '',\n ...props\n}: TimePickerProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const handleTimeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value)\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const formatTimeForDisplay = (timeString: string): string => {\n if (!timeString) return ''\n const [hours, minutes] = timeString.split(':')\n\n if (format === '12h') {\n const h = parseInt(hours, 10)\n const period = h >= 12 ? 'PM' : 'AM'\n const displayHours = h > 12 ? h - 12 : h === 0 ? 12 : h\n return `${displayHours.toString().padStart(2, '0')}:${minutes} ${period}`\n }\n\n return `${hours}:${minutes}`\n }\n\n return (\n <div className={className} ref={containerRef}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-1\">\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-ink-light mb-1.5\">{description}</p>\n )}\n\n <div className=\"relative\">\n <div className=\"relative\">\n <input\n type=\"text\"\n value={value ? formatTimeForDisplay(value) : ''}\n onChange={handleTimeChange}\n placeholder={placeholder}\n disabled={disabled}\n readOnly\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={[\n 'w-full px-3 py-2 border rounded-md text-base transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-1',\n 'cursor-pointer',\n disabled ? 'bg-surface-gray opacity-50 cursor-not-allowed' : 'bg-white',\n error ? 'border-danger-border' : 'border-outline',\n ].join(' ')}\n />\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-ink-light hover:text-ink\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <input\n type=\"time\"\n value={value}\n onChange={handleTimeChange}\n disabled={disabled}\n autoFocus\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer\"\n {...props}\n />\n )}\n </div>\n\n {error && (\n <p className=\"text-xs text-danger-text mt-1\">{error}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number // 0-100\n label?: string\n size?: 'sm' | 'md' | 'lg'\n theme?: 'brand' | 'success' | 'warning' | 'danger'\n showLabel?: boolean\n striped?: boolean\n animated?: boolean\n}\n\nconst sizeClasses = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n}\n\nconst themeClasses = {\n brand: 'bg-brand',\n success: 'bg-success-icon',\n warning: 'bg-warning-icon',\n danger: 'bg-danger-icon',\n}\n\nexport function Progress({\n value,\n label,\n size = 'md',\n theme = 'brand',\n showLabel = false,\n striped = false,\n animated = false,\n className = '',\n ...props\n}: ProgressProps) {\n const clampedValue = Math.min(Math.max(value, 0), 100)\n\n return (\n <div className={className} {...props}>\n {(label || showLabel) && (\n <div className=\"flex items-center justify-between mb-1.5\">\n {label && (\n <p className=\"text-sm font-medium text-ink\">{label}</p>\n )}\n {showLabel && (\n <p className=\"text-sm font-medium text-ink-light\">{clampedValue}%</p>\n )}\n </div>\n )}\n\n <div className={`w-full bg-surface-gray rounded-full overflow-hidden ${sizeClasses[size]}`}>\n <div\n className={[\n `${themeClasses[theme]} ${sizeClasses[size]} rounded-full transition-all duration-300`,\n striped ? 'bg-gradient-to-r from-transparent to-white opacity-30' : '',\n animated ? 'animate-pulse' : '',\n ].join(' ')}\n style={{ width: `${clampedValue}%` }}\n />\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: number\n onChange?: (value: number) => void\n count?: number\n size?: 'sm' | 'md' | 'lg'\n readonly?: boolean\n label?: string\n color?: 'yellow' | 'brand' | 'danger'\n}\n\nconst sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n}\n\nconst colorClasses = {\n yellow: 'text-yellow-400',\n brand: 'text-brand',\n danger: 'text-danger-icon',\n}\n\nexport function Rating({\n value = 0,\n onChange,\n count = 5,\n size = 'md',\n readonly = false,\n label,\n color = 'yellow',\n className = '',\n ...props\n}: RatingProps) {\n const [hoverValue, setHoverValue] = React.useState(0)\n\n const displayValue = hoverValue || value\n\n return (\n <div className={className} {...props}>\n {label && (\n <label className=\"block text-sm font-medium text-ink mb-2\">{label}</label>\n )}\n\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: count }, (_, i) => i + 1).map((starValue) => (\n <button\n key={starValue}\n onClick={() => !readonly && onChange?.(starValue)}\n onMouseEnter={() => !readonly && setHoverValue(starValue)}\n onMouseLeave={() => setHoverValue(0)}\n disabled={readonly}\n className={`transition-transform hover:scale-110 ${readonly ? 'cursor-default' : 'cursor-pointer'}`}\n >\n <svg\n className={`${sizeClasses[size]} ${\n starValue <= displayValue\n ? `fill-current ${colorClasses[color]}`\n : 'text-outline'\n }`}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n </button>\n ))}\n </div>\n\n {displayValue > 0 && (\n <p className=\"text-sm text-ink-light mt-2\">{displayValue} / {count}</p>\n )}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n value?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n label?: string\n showValue?: boolean\n theme?: 'brand' | 'success' | 'danger'\n}\n\nconst themeClasses = {\n brand: 'accent-brand',\n success: 'accent-success-icon',\n danger: 'accent-danger-icon',\n}\n\nexport function Slider({\n value = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n theme = 'brand',\n className = '',\n disabled = false,\n ...props\n}: SliderProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(parseFloat(e.target.value))\n }\n\n const percentage = ((Number(value) - Number(min)) / (Number(max) - Number(min))) * 100\n\n return (\n <div className={className}>\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-2\">\n {label && (\n <label className=\"text-sm font-medium text-ink\">{label}</label>\n )}\n {showValue && (\n <span className=\"text-sm font-medium text-ink-light\">{value}</span>\n )}\n </div>\n )}\n\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n className={[\n `w-full h-2 rounded-lg appearance-none cursor-pointer ${themeClasses[theme]}`,\n 'bg-gradient-to-r from-surface-gray to-surface-gray',\n 'focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-2',\n disabled ? 'opacity-50 cursor-not-allowed' : '',\n ].join(' ')}\n style={{\n background: disabled\n ? undefined\n : `linear-gradient(to right, var(--color-brand) 0%, var(--color-brand) ${percentage}%, var(--color-surface-gray) ${percentage}%, var(--color-surface-gray) 100%)`,\n }}\n {...props}\n />\n </div>\n )\n}\n","import React from 'react'\n\nexport interface SidebarItem {\n label: React.ReactNode\n value: string\n icon?: React.ReactNode\n onClick?: () => void\n isActive?: boolean\n disabled?: boolean\n badge?: React.ReactNode\n}\n\nexport interface SidebarSection {\n title?: string\n items: SidebarItem[]\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n sections: SidebarSection[]\n activeItem?: string\n onItemClick?: (value: string) => void\n collapsible?: boolean\n isCollapsed?: boolean\n onCollapsedChange?: (collapsed: boolean) => void\n width?: string\n className?: string\n}\n\nexport function Sidebar({\n sections,\n activeItem,\n onItemClick,\n collapsible = false,\n isCollapsed = false,\n onCollapsedChange,\n width = 'w-64',\n className = '',\n ...props\n}: SidebarProps) {\n const handleItemClick = (value: string, onClick?: () => void) => {\n onClick?.()\n onItemClick?.(value)\n }\n\n return (\n <aside\n className={[\n `${width} bg-surface-default border-r border-outline transition-all duration-200`,\n isCollapsed ? 'w-16' : '',\n className,\n ].join(' ')}\n {...props}\n >\n {collapsible && (\n <div className=\"flex items-center justify-between p-3 border-b border-outline\">\n {!isCollapsed && (\n <h2 className=\"text-sm font-semibold text-ink\">Menu</h2>\n )}\n <button\n onClick={() => onCollapsedChange?.(!isCollapsed)}\n className=\"p-1 hover:bg-surface-gray rounded transition-colors\"\n title={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n <svg className=\"w-4 h-4 text-ink\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n {isCollapsed ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n )}\n </svg>\n </button>\n </div>\n )}\n\n <nav className=\"py-2\">\n {sections.map((section, sectionIndex) => (\n <div key={sectionIndex}>\n {section.title && !isCollapsed && (\n <p className=\"px-3 py-2 text-xs font-semibold text-ink-light uppercase tracking-wide\">\n {section.title}\n </p>\n )}\n\n {section.items.map((item) => (\n <button\n key={item.value}\n onClick={() => handleItemClick(item.value, item.onClick)}\n disabled={item.disabled}\n title={isCollapsed ? (typeof item.label === 'string' ? item.label : '') : undefined}\n className={[\n 'w-full px-3 py-2 flex items-center gap-2 text-sm transition-colors',\n 'hover:bg-surface-gray focus:outline-none focus:ring-2 focus:ring-brand focus:ring-offset-0',\n item.disabled ? 'opacity-50 cursor-not-allowed hover:bg-transparent' : '',\n item.isActive || item.value === activeItem\n ? 'bg-brand-50 text-brand font-medium'\n : 'text-ink hover:text-brand',\n isCollapsed ? 'justify-center' : '',\n ].join(' ')}\n >\n {item.icon && (\n <span className=\"shrink-0\">{item.icon}</span>\n )}\n\n {!isCollapsed && (\n <>\n <span className=\"flex-1 text-left\">{item.label}</span>\n {item.badge && (\n <span className=\"text-xs px-1.5 py-0.5 bg-brand rounded-full text-white\">\n {item.badge}\n </span>\n )}\n </>\n )}\n </button>\n ))}\n </div>\n ))}\n </nav>\n </aside>\n )\n}\n","import React from 'react'\n\nexport interface TableColumn {\n key: string\n label: string\n width?: string\n render?: (value: any, row: any) => React.ReactNode\n align?: 'left' | 'center' | 'right'\n}\n\nexport interface TableProps {\n columns: TableColumn[]\n data: any[]\n striped?: boolean\n hoverable?: boolean\n compact?: boolean\n className?: string\n emptyMessage?: string\n}\n\nexport function Table({\n columns,\n data,\n striped = true,\n hoverable = true,\n compact = false,\n className = '',\n emptyMessage = 'No data',\n}: TableProps) {\n if (data.length === 0) {\n return (\n <div className=\"text-center py-8 text-ink-faint text-sm\">\n {emptyMessage}\n </div>\n )\n }\n\n return (\n <div className={`overflow-x-auto border border-outline rounded-lg ${className}`}>\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-surface-gray border-b border-outline\">\n {columns.map((col) => (\n <th\n key={col.key}\n style={{ width: col.width }}\n className={`\n ${compact ? 'px-3 py-2' : 'px-4 py-3'}\n text-left text-xs font-semibold text-ink-faint uppercase tracking-wide\n ${col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left'}\n `}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n className={`\n border-b border-outline last:border-b-0\n ${striped && rowIdx % 2 === 1 ? 'bg-surface-gray/50' : ''}\n ${hoverable ? 'hover:bg-surface-overlay transition-colors' : ''}\n `}\n >\n {columns.map((col) => (\n <td\n key={`${rowIdx}-${col.key}`}\n style={{ width: col.width }}\n className={`\n ${compact ? 'px-3 py-2' : 'px-4 py-3'}\n text-sm text-ink\n ${col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left'}\n `}\n >\n {col.render ? col.render(row[col.key], row) : row[col.key]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface PaginationProps {\n current: number\n total: number\n onChange: (page: number) => void\n size?: 'sm' | 'md'\n showInfo?: boolean\n maxVisible?: number\n className?: string\n}\n\nconst ChevronLeftIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n)\n\nconst ChevronRightIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n)\n\nexport function Pagination({\n current,\n total,\n onChange,\n size = 'md',\n showInfo = true,\n maxVisible = 5,\n className = '',\n}: PaginationProps) {\n const sizeClass = size === 'sm' ? 'text-xs px-2 py-1' : 'text-sm px-3 py-2'\n\n const getPages = () => {\n const pages: (number | string)[] = []\n const halfVisible = Math.floor(maxVisible / 2)\n\n let start = Math.max(1, current - halfVisible)\n let end = Math.min(total, current + halfVisible)\n\n if (start === 1) {\n end = Math.min(total, maxVisible)\n } else if (end === total) {\n start = Math.max(1, total - maxVisible + 1)\n }\n\n if (start > 1) pages.push(1)\n if (start > 2) pages.push('...')\n\n for (let i = start; i <= end; i++) {\n pages.push(i)\n }\n\n if (end < total - 1) pages.push('...')\n if (end < total) pages.push(total)\n\n return pages\n }\n\n const pages = getPages()\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n {showInfo && (\n <span className=\"text-xs text-ink-faint\">\n Page {current} of {total}\n </span>\n )}\n\n <button\n onClick={() => onChange(Math.max(1, current - 1))}\n disabled={current === 1}\n className={`\n flex items-center justify-center rounded border border-outline\n hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed disabled:hover:bg-transparent\n transition-colors ${sizeClass}\n `}\n title=\"Previous page\"\n >\n <ChevronLeftIcon size={size === 'sm' ? 12 : 16} />\n </button>\n\n <div className=\"flex gap-1\">\n {pages.map((page, i) =>\n page === '...' ? (\n <span key={`ellipsis-${i}`} className=\"px-2 text-ink-faint\">\n ...\n </span>\n ) : (\n <button\n key={page}\n onClick={() => onChange(page as number)}\n className={`\n flex items-center justify-center rounded border\n transition-colors ${sizeClass}\n ${current === page\n ? 'bg-brand text-white border-brand'\n : 'border-outline hover:bg-surface-overlay'\n }\n `}\n >\n {page}\n </button>\n )\n )}\n </div>\n\n <button\n onClick={() => onChange(Math.min(total, current + 1))}\n disabled={current === total}\n className={`\n flex items-center justify-center rounded border border-outline\n hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed disabled:hover:bg-transparent\n transition-colors ${sizeClass}\n `}\n title=\"Next page\"\n >\n <ChevronRightIcon size={size === 'sm' ? 12 : 16} />\n </button>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface EmptyStateProps {\n icon?: React.ReactNode\n title: string\n description?: string\n action?: {\n label: string\n onClick: () => void\n }\n className?: string\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`flex flex-col items-center justify-center py-12 px-4 ${className}`}>\n {icon && (\n <div className=\"text-4xl mb-4\">\n {icon}\n </div>\n )}\n <h3 className=\"text-lg font-semibold text-ink mb-2\">\n {title}\n </h3>\n {description && (\n <p className=\"text-sm text-ink-faint mb-6 text-center max-w-sm\">\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className=\"px-4 py-2 bg-brand text-white rounded-md hover:bg-brand-600 transition-colors text-sm font-medium\"\n >\n {action.label}\n </button>\n )}\n </div>\n )\n}\n","import React, { useState } from 'react'\n\nexport type NumberInputSize = 'sm' | 'md' | 'lg'\n\nexport interface NumberInputProps {\n value: number\n onChange: (value: number) => void\n step?: number\n min?: number\n max?: number\n size?: NumberInputSize\n disabled?: boolean\n placeholder?: string\n className?: string\n}\n\nconst ChevronUpIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n)\n\nconst ChevronDownIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n)\n\nconst sizeClasses: Record<NumberInputSize, string> = {\n sm: 'text-xs px-2 py-1 h-8',\n md: 'text-sm px-3 py-2 h-10',\n lg: 'text-base px-4 py-2.5 h-12',\n}\n\nexport function NumberInput({\n value,\n onChange,\n step = 1,\n min,\n max,\n size = 'md',\n disabled = false,\n placeholder,\n className = '',\n}: NumberInputProps) {\n const [isEditing, setIsEditing] = useState(false)\n\n const handleIncrement = () => {\n const newValue = value + step\n if (max === undefined || newValue <= max) {\n onChange(newValue)\n }\n }\n\n const handleDecrement = () => {\n const newValue = value - step\n if (min === undefined || newValue >= min) {\n onChange(newValue)\n }\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value)\n if (!isNaN(newValue)) {\n let val = newValue\n if (min !== undefined && val < min) val = min\n if (max !== undefined && val > max) val = max\n onChange(val)\n }\n }\n\n return (\n <div className={`relative inline-flex items-center border border-outline rounded-md bg-surface ${className}`}>\n <input\n type=\"number\"\n value={value}\n onChange={handleInputChange}\n onFocus={() => setIsEditing(true)}\n onBlur={() => setIsEditing(false)}\n disabled={disabled}\n placeholder={placeholder}\n step={step}\n min={min}\n max={max}\n className={`\n flex-1 bg-transparent outline-none text-ink disabled:text-ink-faint disabled:cursor-not-allowed\n ${sizeClasses[size]}\n `}\n />\n <div className=\"flex flex-col border-l border-outline\">\n <button\n onClick={handleIncrement}\n disabled={disabled || (max !== undefined && value >= max)}\n className=\"flex-1 px-1 hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed transition-colors\"\n title=\"Increment\"\n >\n <ChevronUpIcon size={size === 'sm' ? 12 : size === 'md' ? 14 : 16} />\n </button>\n <button\n onClick={handleDecrement}\n disabled={disabled || (min !== undefined && value <= min)}\n className=\"flex-1 px-1 hover:bg-surface-overlay disabled:text-ink-faint disabled:cursor-not-allowed transition-colors border-t border-outline\"\n title=\"Decrement\"\n >\n <ChevronDownIcon size={size === 'sm' ? 12 : size === 'md' ? 14 : 16} />\n </button>\n </div>\n </div>\n )\n}\n","import React, { useState } from 'react'\n\nexport type CodeBlockLanguage = 'json' | 'javascript' | 'typescript' | 'python' | 'bash' | 'text'\n\nexport interface CodeBlockProps {\n code: string\n language?: CodeBlockLanguage\n copyable?: boolean\n numbered?: boolean\n maxHeight?: string\n className?: string\n}\n\nconst CopyIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"></path>\n <rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\"></rect>\n </svg>\n)\n\nconst CheckIcon = ({ size, className }: { size: number; className?: string }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n)\n\nexport function CodeBlock({\n code,\n language = 'text',\n copyable = true,\n numbered = false,\n maxHeight = 'max-h-96',\n className = '',\n}: CodeBlockProps) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n const lines = code.split('\\n')\n\n return (\n <div className={`relative bg-ink rounded-lg overflow-hidden border border-outline ${className}`}>\n {/* Header */}\n <div className=\"flex items-center justify-between bg-surface-gray px-4 py-2 border-b border-outline\">\n <span className=\"text-xs text-ink-faint font-mono uppercase\">\n {language}\n </span>\n {copyable && (\n <button\n onClick={handleCopy}\n className=\"p-1 rounded hover:bg-surface-overlay transition-colors text-ink-faint hover:text-ink\"\n title=\"Copy to clipboard\"\n >\n {copied ? (\n <span style={{ color: 'currentColor' }} className=\"text-status-online\">\n <CheckIcon size={14} />\n </span>\n ) : (\n <CopyIcon size={14} />\n )}\n </button>\n )}\n </div>\n\n {/* Code */}\n <div className={`overflow-auto ${maxHeight}`}>\n <pre className=\"p-4 text-sm font-mono text-sky-100\">\n {numbered ? (\n <>\n {lines.map((line, i) => (\n <div key={i} className=\"flex gap-4\">\n <span className=\"text-ink-faint select-none\">{String(i + 1).padStart(3, ' ')}</span>\n <span>{line}</span>\n </div>\n ))}\n </>\n ) : (\n code\n )}\n </pre>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport type TimelineStatus = 'completed' | 'pending' | 'error' | 'in-progress'\n\nexport interface TimelineItem {\n id: string | number\n label: string\n description?: string\n status: TimelineStatus\n timestamp?: string | Date\n icon?: React.ReactNode\n}\n\nexport interface TimelineProps {\n items: TimelineItem[]\n orientation?: 'vertical' | 'horizontal'\n className?: string\n}\n\nconst statusColors: Record<TimelineStatus, { dot: string; line: string; text: string }> = {\n completed: {\n dot: 'bg-status-online border-status-online',\n line: 'bg-status-online',\n text: 'text-status-online',\n },\n pending: {\n dot: 'bg-ink-light border-ink-light',\n line: 'bg-ink-faint',\n text: 'text-ink-faint',\n },\n error: {\n dot: 'bg-danger-icon border-danger-icon',\n line: 'bg-danger-icon',\n text: 'text-danger-text',\n },\n 'in-progress': {\n dot: 'bg-brand border-brand',\n line: 'bg-brand',\n text: 'text-brand',\n },\n}\n\nexport function Timeline({\n items,\n orientation = 'vertical',\n className = '',\n}: TimelineProps) {\n if (orientation === 'vertical') {\n return (\n <div className={`space-y-4 ${className}`}>\n {items.map((item, index) => {\n const colors = statusColors[item.status]\n const isLast = index === items.length - 1\n\n return (\n <div key={item.id} className=\"flex gap-4\">\n {/* Timeline dot and line */}\n <div className=\"flex flex-col items-center\">\n <div\n className={`\n w-4 h-4 rounded-full border-2 flex-shrink-0\n flex items-center justify-center bg-white\n ${colors.dot}\n `}\n >\n {item.icon && (\n <span className=\"text-white text-2xs\">\n {item.icon}\n </span>\n )}\n </div>\n {!isLast && (\n <div className={`w-0.5 h-12 ${colors.line}`} />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 py-1\">\n <div className=\"flex items-center gap-2\">\n <h4 className={`font-semibold text-sm ${colors.text}`}>\n {item.label}\n </h4>\n {item.timestamp && (\n <span className=\"text-xs text-ink-faint\">\n {typeof item.timestamp === 'string'\n ? item.timestamp\n : new Date(item.timestamp).toLocaleTimeString('en-GB', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })}\n </span>\n )}\n </div>\n {item.description && (\n <p className=\"text-sm text-ink-faint mt-1\">\n {item.description}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n\n // Horizontal orientation\n return (\n <div className={`flex gap-4 overflow-x-auto pb-2 ${className}`}>\n {items.map((item, index) => {\n const colors = statusColors[item.status]\n const isLast = index === items.length - 1\n\n return (\n <div key={item.id} className=\"flex flex-col items-center flex-shrink-0 gap-2 min-w-fit\">\n <div className=\"flex items-center gap-2\">\n {index > 0 && (\n <div className={`h-0.5 w-6 ${statusColors[items[index - 1].status].line}`} />\n )}\n <div\n className={`\n w-5 h-5 rounded-full border-2 flex items-center justify-center bg-white\n ${colors.dot}\n `}\n >\n {item.icon && (\n <span className=\"text-white text-2xs\">\n {item.icon}\n </span>\n )}\n </div>\n </div>\n <div className=\"text-center\">\n <p className={`text-xs font-semibold ${colors.text}`}>\n {item.label}\n </p>\n {item.timestamp && (\n <p className=\"text-2xs text-ink-faint\">\n {typeof item.timestamp === 'string'\n ? item.timestamp\n : new Date(item.timestamp).toLocaleTimeString('en-GB', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n })}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n","import React from 'react'\n\nexport type KbdSize = 'xs' | 'sm' | 'md'\nexport type KbdTheme = 'gray' | 'dark' | 'brand'\n\nexport interface KbdProps {\n keys: string | string[]\n size?: KbdSize\n theme?: KbdTheme\n className?: string\n}\n\nconst sizeClasses: Record<KbdSize, string> = {\n xs: 'text-xs px-1.5 py-0.5 min-w-5 h-5',\n sm: 'text-xs px-2 py-1 min-w-6 h-6',\n md: 'text-sm px-2.5 py-1.5 min-w-8 h-8',\n}\n\nconst themeClasses: Record<KbdTheme, string> = {\n gray: 'bg-surface-gray border-outline text-ink',\n dark: 'bg-ink text-white border-ink-faint',\n brand: 'bg-brand border-brand text-white',\n}\n\nexport function Kbd({\n keys,\n size = 'sm',\n theme = 'gray',\n className = '',\n}: KbdProps) {\n const keyArray = Array.isArray(keys) ? keys : [keys]\n\n return (\n <span className={`inline-flex items-center gap-1 ${className}`}>\n {keyArray.map((key, i) => (\n <React.Fragment key={key}>\n <kbd\n className={`\n inline-flex items-center justify-center rounded font-mono font-medium\n border border-b-2 shadow-sm\n ${sizeClasses[size]}\n ${themeClasses[theme]}\n `}\n >\n {key}\n </kbd>\n {i < keyArray.length - 1 && (\n <span className=\"text-ink-faint text-xs\">+</span>\n )}\n </React.Fragment>\n ))}\n </span>\n )\n}\n","import React from 'react'\n\nexport type RobotStatus = 'online' | 'offline' | 'error' | 'warning' | 'connecting' | 'unknown'\n\nexport interface StatusBadgeProps {\n status: RobotStatus\n label?: string\n size?: 'sm' | 'md'\n pulse?: boolean\n showDot?: boolean\n className?: string\n}\n\nconst statusConfig: Record<RobotStatus, { label: string; dotClass: string; textClass: string; bgClass: string; borderClass: string }> = {\n online: {\n label: 'Online',\n dotClass: 'bg-status-online',\n textClass: 'text-status-online',\n bgClass: 'bg-green-50',\n borderClass: 'border-green-200',\n },\n offline: {\n label: 'Offline',\n dotClass: 'bg-status-offline',\n textClass: 'text-status-offline',\n bgClass: 'bg-surface-gray',\n borderClass: 'border-outline',\n },\n error: {\n label: 'Error',\n dotClass: 'bg-status-error',\n textClass: 'text-status-error',\n bgClass: 'bg-danger-bg',\n borderClass: 'border-danger-border',\n },\n warning: {\n label: 'Warning',\n dotClass: 'bg-status-warning',\n textClass: 'text-status-warning',\n bgClass: 'bg-warning-bg',\n borderClass: 'border-warning-border',\n },\n connecting: {\n label: 'Connecting',\n dotClass: 'bg-status-info',\n textClass: 'text-status-info',\n bgClass: 'bg-sky-50',\n borderClass: 'border-sky-200',\n },\n unknown: {\n label: 'Unknown',\n dotClass: 'bg-status-offline',\n textClass: 'text-ink-faint',\n bgClass: 'bg-surface-gray',\n borderClass: 'border-outline',\n },\n}\n\nexport function StatusBadge({\n status,\n label,\n size = 'sm',\n pulse = false,\n showDot = true,\n className = '',\n}: StatusBadgeProps) {\n const config = statusConfig[status]\n const displayLabel = label ?? config.label\n const sizeClass = size === 'sm' ? 'text-xs px-1.5 py-0.5' : 'text-sm px-2 py-0.5'\n\n return (\n <span\n className={`inline-flex items-center gap-1 rounded font-medium border ${config.bgClass} ${config.borderClass} ${config.textClass} ${sizeClass} ${className}`}\n >\n {showDot && (\n <span className=\"relative flex shrink-0 w-1.5 h-1.5\">\n {pulse && (status === 'online' || status === 'connecting') && (\n <span\n className={`absolute inline-flex h-full w-full rounded-full opacity-75 animate-ping ${config.dotClass}`}\n />\n )}\n <span className={`relative inline-flex rounded-full w-1.5 h-1.5 ${config.dotClass}`} />\n </span>\n )}\n {displayLabel}\n </span>\n )\n}\n","import React from 'react'\nimport { StatusBadge } from '../StatusBadge/StatusBadge'\nimport type { RobotStatus } from '../StatusBadge/StatusBadge'\n\nexport interface ConnectionIndicatorProps {\n connected: boolean\n rosDistro?: string | null\n size?: 'sm' | 'md' | 'lg'\n showLabel?: boolean\n showDistro?: boolean\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'text-xs gap-1.5',\n md: 'text-sm gap-2',\n lg: 'text-base gap-2',\n}\n\nconst iconSizes = {\n sm: 'w-3.5 h-3.5',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n}\n\nexport function ConnectionIndicator({\n connected,\n rosDistro = null,\n size = 'md',\n showLabel = true,\n showDistro = true,\n className = '',\n}: ConnectionIndicatorProps) {\n const status: RobotStatus = connected ? 'online' : 'offline'\n\n return (\n <div className={`inline-flex items-center ${sizeClasses[size]} ${className}`}>\n <StatusBadge\n status={status}\n pulse={connected}\n size={size === 'lg' ? 'md' : 'sm'}\n label={showLabel ? (connected ? 'Connected' : 'Disconnected') : undefined}\n showDot={!showLabel}\n />\n {showDistro && connected && rosDistro && (\n <span className=\"text-ink-faint font-mono\">\n {rosDistro}\n </span>\n )}\n </div>\n )\n}\n\nexport function ConnectionIcon({ connected, size = 'md', className = '' }: {\n connected: boolean\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n return (\n <svg\n className={`${iconSizes[size]} ${connected ? 'text-status-online' : 'text-status-offline'} ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {connected ? (\n <>\n <path d=\"M8.28 7.22a5.5 5.5 0 017.44 0M5.42 4.36a9.5 9.5 0 0113.16 0M12 17h.01M12 13a2 2 0 110 4 2 2 0 010-4z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </>\n ) : (\n <>\n <path d=\"M3 3l18 18M8.28 7.22a5.5 5.5 0 017.44 0M5.42 4.36a9.5 9.5 0 013.4-1.6M12 17h.01M12 13a2 2 0 110 4 2 2 0 010-4z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </>\n )}\n </svg>\n )\n}\n","import React from 'react';\nimport { Alert, EmptyState } from '../..';\nimport { CheckCircle2 } from 'lucide-react';\nimport { DiagnosticsEntry } from './interfaces';\n\n// Helper function to collect leaf nodes\nconst collectLeafNodes = (entries: DiagnosticsEntry[]): DiagnosticsEntry[] =>\n entries.flatMap(entry =>\n entry.children.length === 0 ? [entry] : collectLeafNodes(entry.children)\n );\n\n// Renders a table of diagnostic messages filtered by severity level\nexport const DiagnosticsTable = ({\n diagnostics,\n setSelectedRawName,\n variant\n}: {\n diagnostics: DiagnosticsEntry[],\n setSelectedRawName: (rawName: string | null) => void,\n variant: \"error\" | \"warning\"\n}) => {\n const levelFilter = (level: number) =>\n variant === \"error\" ? level >= 2 : level === 1;\n\n const filteredDiagnostics = collectLeafNodes(diagnostics).filter(d => levelFilter(d.severity_level));\n\n return (\n <div className=\"space-y-2\">\n <Alert\n theme={variant === \"error\" ? \"danger\" : \"warning\"}\n title={variant === \"error\" ? \"Errors\" : \"Warnings\"}\n />\n\n {filteredDiagnostics.length > 0 ? (\n <div className=\"overflow-x-auto border border-gray-200 rounded\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-gray-50 border-b border-gray-200\">\n <tr>\n <th className=\"px-4 py-2 text-left font-semibold text-gray-700\">Name</th>\n <th className=\"px-4 py-2 text-left font-semibold text-gray-700\">Message</th>\n </tr>\n </thead>\n <tbody>\n {filteredDiagnostics.map((diag, index) => (\n <tr\n key={index}\n className=\"border-b border-gray-200 hover:bg-blue-50 cursor-pointer transition-colors\"\n onClick={() => setSelectedRawName(diag.rawName)}\n >\n <td className=\"px-4 py-2\">\n <div className=\"flex items-start gap-2\">\n {diag.icon}\n <div className=\"flex-1\">\n <div className=\"font-medium text-gray-900\">{diag.name || \"N/A\"}</div>\n <div className=\"text-xs text-gray-500\">{diag.path || \"N/A\"}</div>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-2 text-gray-700\">{diag.message || \"N/A\"}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n <EmptyState\n icon={<CheckCircle2 className=\"w-12 h-12 text-green-500\" />}\n title={variant === \"error\" ? \"No Errors\" : \"No Warnings\"}\n description=\"All diagnostics are healthy\"\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Card } from '../..';\nimport { DiagnosticsEntry } from './interfaces';\n\nexport const DiagnosticsTreeTable = ({\n diagnostics,\n bridgeConnected,\n selectedRawName,\n setSelectedRawName,\n}: {\n diagnostics: DiagnosticsEntry[],\n bridgeConnected: boolean,\n selectedRawName: string | null,\n setSelectedRawName: (rawName: string | null) => void,\n}) => {\n const renderTree = (entries: DiagnosticsEntry[], depth = 0) => {\n return (\n <ul className=\"space-y-1\">\n {entries.map((entry) => (\n <li key={entry.rawName}>\n <div\n className=\"flex items-start gap-2 p-2 hover:bg-gray-100 rounded cursor-pointer transition-colors\"\n style={{ paddingLeft: `${depth * 1.5}rem` }}\n onClick={() => setSelectedRawName(entry.rawName)}\n >\n {entry.icon && <span className=\"flex-shrink-0 mt-0.5\">{entry.icon}</span>}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-gray-900 truncate\">{entry.name}</div>\n {entry.message && <div className=\"text-sm text-gray-600 truncate\">{entry.message}</div>}\n </div>\n </div>\n {entry.children.length > 0 && renderTree(entry.children, depth + 1)}\n </li>\n ))}\n </ul>\n );\n };\n\n return (\n <Card className=\"bg-white\">\n <div className=\"p-4\">\n <h3 className=\"text-lg font-semibold text-gray-900 mb-4\">Diagnostics Tree</h3>\n {diagnostics.length > 0 ? (\n <div className=\"overflow-auto\">\n {renderTree(diagnostics)}\n </div>\n ) : (\n <p className=\"text-gray-500 text-center py-8\">No diagnostics available</p>\n )}\n </div>\n </Card>\n );\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics but was originally sourced from\n * https://github.com/tier4/roslibjs-foxglove under the Apache License 2.0.\n *\n * Modifications made by Hilary Luo 2025.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { parse, parseRos2idl } from '@foxglove/rosmsg';\nimport {\n MessageReader as Ros2MessageReader,\n MessageWriter as Ros2MessageWriter,\n} from '@foxglove/rosmsg2-serialization';\nimport {\n type Channel,\n type ConnectionGraphUpdate,\n FoxgloveClient,\n type MessageData,\n type Parameter,\n type ParameterValue,\n type ParameterValues,\n type Service,\n type ServiceCallResponse,\n} from '@foxglove/ws-protocol';\nimport { EventEmitter } from 'eventemitter3';\nimport WebSocket from 'isomorphic-ws';\n\nexport interface EventTypes {\n connection: () => void;\n close: (event: CloseEvent) => void;\n error: (error: Error) => void;\n}\n\nexport interface Publisher<T> {\n publish: (message: T) => void;\n unadvertise: () => void;\n}\n\nexport interface Subscription {\n unsubscribe: () => void;\n}\n\nexport class Impl {\n readonly emitter = new EventEmitter<EventTypes>();\n\n #client: FoxgloveClient;\n #connecting: Promise<void>;\n\n // Message Readers / Writers\n #messageReaders = new Map<string, Ros2MessageReader>();\n #messageWriters = new Map<string, Ros2MessageWriter>();\n\n // Channels\n #channelsById = new Map<number, Channel>();\n #channelsByName = new Map<string, Channel>();\n\n // Services\n #servicesById = new Map<number, Service>();\n #servicesByName = new Map<string, Service>();\n\n #publisherIdsWithCount = new Map<string, { id: number; count: number }>();\n #subscriptionIdsWithCount = new Map<string, { id: number; count: number }>();\n\n #callId = 0;\n #paramId = 0;\n\n constructor(url: string) {\n this.#client = new FoxgloveClient({\n // TODO: \"foxglove.sdk.v1\" was added here manually because Foxglove switched the foxglove-bridge\n // package for Jazzy from ros-foxglove-bridge repo (v0.8.5) which used \"foxglove.websocket.v1\"\n // to their new foxglove-sdk version (v3.2.x) which uses \"foxglove.sdk.v1\" around September 2025,\n // but the @foxglove/ws-protocol npm package has not yet been updated to include this new\n // subprotocol. Once that package is updated, or a new alternative is released, \"foxglove.sdk.v1\"\n // may be removed from here and adjusted accordingly. As far as I can tell, it seems that\n // the underlying protocols are compatible for our use case, and is effectively only a name change.\n ws: new WebSocket(url, [\"foxglove.sdk.v1\", FoxgloveClient.SUPPORTED_SUBPROTOCOL]),\n });\n\n const open = new Promise<void>((resolve) => {\n this.#client.on('open', resolve);\n });\n\n this.#client.on('close', (event) => {\n this.emitter.emit('close', event);\n });\n this.#client.on('error', (error?: Error) => {\n this.emitter.emit('error', error ?? new Error('WebSocket error'));\n });\n\n this.#client.on('advertise', (channels) => {\n for (const channel of channels) {\n this.#channelsById.set(channel.id, channel);\n this.#channelsByName.set(channel.topic, channel);\n }\n });\n this.#client.on('unadvertise', (channelIds) => {\n for (const channelId of channelIds) {\n const channel = this.#channelsById.get(channelId);\n if (channel) {\n this.#channelsById.delete(channel.id);\n this.#channelsByName.delete(channel.topic);\n }\n }\n });\n\n this.#client.on('advertiseServices', (services) => {\n for (const service of services) {\n this.#servicesById.set(service.id, service);\n this.#servicesByName.set(service.name, service);\n }\n });\n this.#client.on('unadvertiseServices', (serviceIds) => {\n for (const serviceId of serviceIds) {\n const service = this.#servicesById.get(serviceId);\n if (service) {\n this.#servicesById.delete(service.id);\n this.#servicesByName.delete(service.name);\n }\n }\n });\n\n this.#connecting = new Promise<void>((resolve) => {\n Promise.all([open]).then(() => {\n this.emitter.emit('connection');\n resolve();\n });\n });\n }\n\n close() {\n this.#client.close();\n }\n\n getTopics() {\n return {\n topics: [...this.#channelsByName.keys()],\n types: [...this.#channelsByName.values()].map((x) => x.schemaName),\n };\n }\n\n async getServices() {\n await this.#connecting;\n return new Promise<string[]>((resolve) => {\n const listener = (event: ConnectionGraphUpdate) => {\n this.#client.off('connectionGraphUpdate', listener);\n this.#client.unsubscribeConnectionGraph();\n resolve(event.advertisedServices.map((service) => service.name));\n };\n this.#client.on('connectionGraphUpdate', listener);\n this.#client.subscribeConnectionGraph();\n });\n }\n\n getTopicType(topic: string) {\n return this.#channelsByName.get(topic)?.schemaName;\n }\n\n getServiceType(service: string) {\n return this.#servicesByName.get(service)?.type;\n }\n\n async createPublisher<T>(\n name: string,\n messageType: string,\n ): Promise<Publisher<T>> {\n await this.#connecting;\n const channel = this.#getChannel(name);\n\n const publisherId = (() => {\n const idWithCount = this.#publisherIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count++;\n return idWithCount.id;\n }\n const publisherId = this.#client.advertise({\n topic: name,\n encoding: 'cdr',\n schemaName: messageType,\n });\n this.#publisherIdsWithCount.set(name, { id: publisherId, count: 1 });\n return publisherId;\n })();\n\n const writer = this.#getMessageWriter(await channel);\n\n return {\n publish: (message: T) => {\n this.#client.sendMessage(publisherId, writer.writeMessage(message));\n },\n unadvertise: () => {\n const idWithCount = this.#publisherIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count--;\n if (idWithCount.count === 0) {\n this.#publisherIdsWithCount.delete(name);\n this.#client.unadvertise(publisherId);\n }\n }\n },\n };\n }\n\n async createSubscription<T>(\n name: string,\n callback: (message: T) => void,\n ): Promise<Subscription> {\n await this.#connecting;\n const channel = await this.#getChannel(name);\n\n const subscriptionId = (() => {\n const idWithCount = this.#subscriptionIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count++;\n return idWithCount.id;\n }\n const subscriptionId = this.#client.subscribe(channel.id);\n this.#subscriptionIdsWithCount.set(name, {\n id: subscriptionId,\n count: 1,\n });\n return subscriptionId;\n })();\n\n const reader = this.#getMessageReader(channel);\n\n const listener = (event: MessageData) => {\n if (event.subscriptionId === subscriptionId) {\n callback(reader.readMessage(event.data));\n }\n };\n this.#client.on('message', listener);\n\n return {\n unsubscribe: () => {\n this.#client.off('message', listener);\n const idWithCount = this.#subscriptionIdsWithCount.get(name);\n if (idWithCount) {\n idWithCount.count--;\n if (idWithCount.count === 0) {\n this.#subscriptionIdsWithCount.delete(name);\n this.#client.unsubscribe(subscriptionId);\n }\n }\n },\n };\n }\n\n async sendServiceRequest<Request, Response>(name: string, request: Request) {\n await this.#connecting;\n const service = await this.#getService(name);\n const writer = this.#getMessageWriter(service);\n const reader = this.#getMessageReader(service);\n\n const callId = this.#callId++;\n return new Promise<Response>((resolve) => {\n const listener = (event: ServiceCallResponse) => {\n if (event.serviceId === service.id && event.callId === callId) {\n this.#client.off('serviceCallResponse', listener);\n resolve(reader.readMessage(event.data));\n }\n };\n this.#client.on('serviceCallResponse', listener);\n this.#client.sendServiceCallRequest({\n serviceId: service.id,\n callId,\n encoding: 'cdr',\n data: new DataView(writer.writeMessage(request).buffer),\n });\n });\n }\n\n async getParameter(name: string) {\n await this.#connecting;\n const paramId = (this.#paramId++).toString();\n return new Promise<ParameterValue>((resolve) => {\n const listener = (event: ParameterValues) => {\n if (event.parameters[0]?.name === name && event.id === paramId) {\n this.#client.off('parameterValues', listener);\n resolve(event.parameters[0].value);\n }\n };\n this.#client.on('parameterValues', listener);\n this.#client.getParameters([name], paramId);\n });\n }\n\n async setParameter(name: string, value: ParameterValue) {\n await this.#connecting;\n const paramId = (this.#paramId++).toString();\n return new Promise<Parameter>((resolve) => {\n const listener = (event: ParameterValues) => {\n if (event.parameters[0]?.name === name && event.id === paramId) {\n this.#client.off('parameterValues', listener);\n resolve(event.parameters[0]);\n }\n };\n this.#client.on('parameterValues', listener);\n this.#client.setParameters([{ name, value }], paramId);\n });\n }\n\n async #getChannel(name: string) {\n await this.#connecting;\n return (\n this.#channelsByName.get(name) ??\n (await new Promise<Channel>((resolve) => {\n const listener = (channels: Channel[]) => {\n const channel = channels.find((channel) => channel.topic === name);\n if (channel) {\n this.#client.off('advertise', listener);\n resolve(channel);\n }\n };\n this.#client.on('advertise', listener);\n }))\n );\n }\n\n async #getService(name: string) {\n await this.#connecting;\n return (\n this.#servicesByName.get(name) ??\n (await new Promise<Service>((resolve) => {\n const listener = (services: Service[]) => {\n const service = services.find((channel) => channel.name === name);\n if (service) {\n this.#client.off('advertiseServices', listener);\n resolve(service);\n }\n };\n this.#client.on('advertiseServices', listener);\n }))\n );\n }\n\n #getMessageReader(channelOrService: Channel | Service) {\n const name =\n 'schemaName' in channelOrService\n ? channelOrService.schemaName\n : channelOrService.type;\n const schemaEncoding =\n 'schemaEncoding' in channelOrService\n ? channelOrService.schemaEncoding\n : undefined;\n const schema =\n 'schema' in channelOrService\n ? channelOrService.schema\n : channelOrService.responseSchema;\n return (\n this.#messageReaders.get(name) ??\n (() => {\n const reader =\n new Ros2MessageReader(\n schemaEncoding === 'ros2idl'\n ? parseRos2idl(schema)\n : parse(schema, { ros2: true }),\n );\n this.#messageReaders.set(name, reader);\n return reader;\n })()\n );\n }\n\n #getMessageWriter(channelOrService: Channel | Service) {\n const name =\n 'schemaName' in channelOrService\n ? channelOrService.schemaName\n : channelOrService.type;\n const schemaEncoding =\n 'schemaEncoding' in channelOrService\n ? channelOrService.schemaEncoding\n : undefined;\n const schema =\n 'schema' in channelOrService\n ? channelOrService.schema\n : channelOrService.requestSchema;\n return (\n this.#messageWriters.get(name) ??\n (() => {\n const writer = new Ros2MessageWriter(\n schemaEncoding === 'ros2idl'\n ? parseRos2idl(schema)\n : parse(schema, { ros2: true }),\n );\n this.#messageWriters.set(name, writer);\n return writer;\n })()\n );\n }\n}\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics but was originally sourced from\n * https://github.com/tier4/roslibjs-foxglove under the Apache License 2.0.\n *\n * Modifications made by Hilary Luo 2025.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport type { EventEmitter } from 'eventemitter3';\n\nimport { type EventTypes, Impl } from './Impl';\n\nexport class Ros {\n #rosImpl: Impl | undefined;\n\n constructor(readonly options: { readonly url?: string }) {\n if (options.url) {\n this.connect(options.url);\n }\n }\n\n /** @internal */\n get rosImpl() {\n return this.#rosImpl;\n }\n\n on<T extends EventEmitter.EventNames<EventTypes>>(\n event: T,\n fn: EventEmitter.EventListener<EventTypes, T>,\n ): this {\n this.rosImpl?.emitter.on(event, fn);\n return this;\n }\n\n off<T extends EventEmitter.EventNames<EventTypes>>(\n event: T,\n fn: EventEmitter.EventListener<EventTypes, T>,\n ): this {\n this.rosImpl?.emitter.off(event, fn);\n return this;\n }\n\n connect(url: string) {\n this.#rosImpl = new Impl(url);\n }\n\n close() {\n this.rosImpl?.close();\n this.#rosImpl = undefined;\n }\n\n getTopics(\n callback: (result: { topics: string[]; types: string[] }) => void,\n failedCallback?: (error: string) => void,\n ) {\n const topics = this.rosImpl?.getTopics();\n if (topics) {\n callback(topics);\n } else if (failedCallback) {\n failedCallback('Error: getTopics');\n }\n }\n\n getServices(\n callback: (services: string[]) => void,\n failedCallback?: (error: string) => void,\n ) {\n this.rosImpl?.getServices().then(callback)\n .catch(failedCallback);\n }\n\n getTopicType(\n topic: string,\n callback: (type: string) => void,\n failedCallback?: (error: string) => void,\n ) {\n const topicType = this.rosImpl?.getTopicType(topic);\n if (topicType) {\n callback(topicType);\n } else if (failedCallback) {\n failedCallback('Error: getTopicType');\n }\n }\n\n getServiceType(\n service: string,\n callback: (type: string) => void,\n failedCallback?: (error: string) => void,\n ) {\n const serviceType = this.rosImpl?.getServiceType(service);\n if (serviceType) {\n callback(serviceType);\n } else if (failedCallback) {\n failedCallback('Error: getServiceType');\n }\n }\n}\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics but was originally sourced from\n * https://github.com/tier4/roslibjs-foxglove under the Apache License 2.0.\n *\n * Modifications made by Hilary Luo 2025.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport type { Publisher, Subscription } from './Impl';\nimport type { Ros } from './Ros';\n\nexport class Message {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n constructor(readonly values: any) { // eslint-disable-line @typescript-eslint/no-explicit-any\n Object.assign(this, values);\n }\n}\n\nexport class Topic<TMessage = Message> {\n readonly #ros: Ros;\n readonly #name: string;\n readonly #messageType: string;\n\n #publisher?: Promise<Publisher<TMessage>>;\n #subscriptions = new Map<(message: TMessage) => void, Subscription>();\n\n constructor(\n readonly options: {\n readonly ros: Ros;\n readonly name: string;\n readonly messageType: string;\n },\n ) {\n this.#ros = options.ros;\n this.#name = options.name;\n this.#messageType = options.messageType;\n }\n\n get name() {\n return this.#name;\n }\n\n get messageType() {\n return this.#messageType;\n }\n\n publish(message: TMessage) {\n if (!this.#publisher) {\n this.advertise();\n }\n this.#publisher?.then((publisher) => {\n publisher.publish(message);\n });\n }\n\n subscribe(callback: (message: TMessage) => void) {\n this.#ros.rosImpl\n ?.createSubscription(this.name, callback)\n .then((subscription) => {\n this.#subscriptions.set(callback, subscription);\n });\n }\n\n unsubscribe(callback?: (message: TMessage) => void) {\n if (callback) {\n this.#subscriptions.get(callback)?.unsubscribe();\n this.#subscriptions.delete(callback);\n } else {\n for (const subscription of this.#subscriptions.values()) {\n subscription.unsubscribe();\n }\n this.#subscriptions.clear();\n }\n }\n\n advertise() {\n this.#publisher = this.#ros.rosImpl?.createPublisher(\n this.name,\n this.messageType,\n );\n }\n\n unadvertise() {\n this.#publisher?.then((publisher) => {\n publisher.unadvertise();\n this.#publisher = undefined;\n });\n }\n}\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport React, { useEffect, useRef } from \"react\";\nimport {\n CheckCircle2,\n AlertCircle,\n AlertTriangle,\n HelpCircle,\n} from \"lucide-react\";\n\nimport { DiagnosticsEntry, DiagnosticsStatus } from \"./interfaces\";\nimport * as ROSLIB from \"./roslib/index\";\n\ninterface RosConnectionManagerProps {\n namespace: string;\n url: string | null;\n onDiagnosticsUpdate: (diagnosticsStatus: DiagnosticsStatus) => void;\n onConnectionStatusChange: (connected: boolean) => void;\n onClearHistory: () => void;\n}\n\n// Helper function to calculate overall diagnostic level\nconst calculateOverallLevel = (diagnostics: DiagnosticsEntry[]): number => {\n let maxLevel = 0;\n\n const checkEntry = (entry: DiagnosticsEntry) => {\n if (entry.severity_level > maxLevel) {\n maxLevel = entry.severity_level;\n }\n entry.children.forEach(checkEntry);\n };\n\n diagnostics.forEach(checkEntry);\n return maxLevel;\n};\n\n// Helper function to build a nested DiagnosticsEntry tree\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst buildDiagnosticsTree = (diagnostics: any[]): DiagnosticsEntry[] => {\n const root: DiagnosticsEntry[] = [];\n\n diagnostics.forEach(({ name, message, level, hardware_id, values }) => {\n const parts = name.split(\"/\");\n let currentLevel = root;\n\n parts.forEach((part: string, index: number) => {\n if (!part) return; // Skip empty parts\n\n let existingEntry = currentLevel.find(entry => entry.name === part);\n\n if (!existingEntry) {\n const [baseName, suffix] = part.split(\":\");\n const path = parts.slice(0, index + 1).join(\"/\")\n .split(\":\")[0];\n existingEntry = {\n name: index === parts.length - 1 && suffix ? suffix : baseName,\n path,\n rawName: path,\n message: \"\",\n severity_level: -1,\n hardware_id: null,\n values: null,\n children: [],\n icon: null, // Initialize icon as null\n };\n currentLevel.push(existingEntry);\n }\n\n if (index === parts.length - 1) {\n existingEntry.message = message || \"\";\n existingEntry.severity_level = level ?? -1;\n existingEntry.hardware_id = hardware_id || null;\n existingEntry.rawName = name;\n\n existingEntry.values = Array.isArray(values)\n ? values.reduce((acc, { key, value }) => {\n acc[key] = value;\n return acc;\n }, {})\n : values && typeof values === \"object\"\n ? Object.fromEntries(\n Object.entries(values).map(([key, value]) => [key, value])\n )\n : {};\n\n // Populate the icon based on severity level\n existingEntry.icon = level === 3\n ? <HelpCircle className=\"w-4 h-4 text-blue-500\" />\n : level === 2\n ? <AlertCircle className=\"w-4 h-4 text-red-500\" />\n : level === 1\n ? <AlertTriangle className=\"w-4 h-4 text-yellow-500\" />\n : <CheckCircle2 className=\"w-4 h-4 text-green-500\" />;\n }\n\n currentLevel = existingEntry.children;\n });\n });\n\n return root;\n};\n\nexport const RosConnectionManager: React.FC<RosConnectionManagerProps> = ({\n namespace,\n url,\n onDiagnosticsUpdate,\n onConnectionStatusChange,\n onClearHistory\n}) => {\n const staleTimeoutId = useRef(0);\n const retryTimeoutId = useRef(0);\n\n useEffect(() => {\n if (!url) {\n console.warn(\"WebSocket URL is not set correctly. Skipping WebSocket configuration.\");\n return;\n }\n\n console.log(`Creating new connection to ${url} for namespace ${namespace}`);\n const ros = new ROSLIB.Ros({ url });\n\n const diagnosticsTopic = new ROSLIB.Topic({\n ros,\n name: `${namespace}/diagnostics_agg`,\n messageType: \"diagnostic_msgs/DiagnosticArray\",\n });\n\n const retryDelay = 3000; // 3 seconds\n const timeoutDuration = 5000; // 5 seconds\n let retryConnection = true;\n\n const connectToWebSocket = () => {\n clearTimeout(staleTimeoutId.current);\n clearTimeout(retryTimeoutId.current);\n ros.connect(url);\n\n ros.on(\"connection\", () => {\n onClearHistory();\n console.log(\"Connected to Foxglove bridge at \" + url);\n onConnectionStatusChange(true);\n\n diagnosticsTopic.subscribe((message: any) => {\n // Clear the timeout if a new message is received\n clearTimeout(staleTimeoutId.current);\n\n // Process incoming diagnostics messages\n if (Array.isArray(message.status)) {\n const diagnosticsTree = buildDiagnosticsTree(\n message.status.map(({ name, message: msg, level, hardware_id, values }: any) => ({\n name,\n message: msg,\n level: level !== undefined ? level : -1,\n hardware_id,\n values,\n }))\n );\n\n // Calculate overall level from diagnostics tree\n const overallLevel = calculateOverallLevel(diagnosticsTree);\n\n // Extract timestamp from ROS message header\n let timestamp = Date.now(); // Default fallback\n if (message.header && message.header.stamp) {\n // Convert ROS time (sec + nanosec) to JavaScript timestamp (milliseconds)\n const sec = message.header.stamp.sec || 0;\n const nanosec = message.header.stamp.nanosec || 0;\n timestamp = sec * 1000 + Math.round(nanosec / 1000000);\n // console.log(`Extracted timestamp from ROS message: ${new Date(timestamp).toISOString()}`);\n } else {\n console.log(\"No header.stamp found in message, using current time\");\n }\n\n // Create DiagStatus object\n const diagStatus: DiagnosticsStatus = {\n timestamp,\n level: overallLevel,\n diagnostics: diagnosticsTree\n };\n\n onDiagnosticsUpdate(diagStatus);\n } else {\n console.warn(\"Unexpected diagnostics data format:\", message);\n }\n\n // Set a timeout to clear stale diagnostics if no new message is received\n staleTimeoutId.current = setTimeout(() => {\n console.warn(\"No diagnostics message received for 5 seconds. Clearing stale diagnostics.\");\n onClearHistory();\n }, timeoutDuration);\n });\n console.log(`Subscribed to topic: ${diagnosticsTopic.name}`);\n });\n\n ros.on(\"error\", (error) => {\n console.error(\"Error connecting to Foxglove bridge:\", error);\n ros.close();\n });\n\n ros.on(\"close\", () => {\n onConnectionStatusChange(false);\n console.log(\"Connection to Foxglove bridge closed\");\n onClearHistory();\n clearTimeout(staleTimeoutId.current);\n clearTimeout(retryTimeoutId.current);\n if (retryConnection) {\n console.log(\"Retrying WebSocket connection...\");\n retryTimeoutId.current = setTimeout(connectToWebSocket, retryDelay);\n }\n });\n };\n\n connectToWebSocket();\n\n // Cleanup function\n return () => {\n console.log(`Cleaning up connection for namespace ${namespace}`);\n diagnosticsTopic.unsubscribe();\n retryConnection = false;\n clearTimeout(staleTimeoutId.current);\n clearTimeout(retryTimeoutId.current);\n ros.close();\n };\n }, [namespace, url, onDiagnosticsUpdate, onConnectionStatusChange, onClearHistory]);\n\n return null; // This component does not render anything\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\n// Sanitize the namespace to ensure it is valid and formatted correctly\nexport const sanitizeNamespace = (namespace: string): string => {\n let sanitizedNamespace = namespace\n // Remove invalid characters, must happen first\n .replace(/[^a-zA-Z0-9_/]/g, \"\")\n // Address repeated characters after all mid-string removals complete\n .replace(/_+/g, \"_\") // Replace consecutive underscores with a single underscore\n .replace(/\\/+/g, \"/\") // Replace consecutive slashes with a single slash\n // Address leading/trailing issues last, repetition to address edge cases\n .replace(/^\\d+/, \"\") // Drop leading numbers prior to the first letter or underscore\n .replace(/\\/\\d+/g, \"/\") // Drop numbers after slashes prior to the first letter or underscore\n .replace(/\\/+/g, \"/\") // Replace consecutive slashes with a single slash\n .replace(/^\\/|\\/$/g, \"\"); // Trim leading and trailing slashes\n\n // Add a leading slash if the sanitized namespace is not empty\n if (sanitizedNamespace) {\n sanitizedNamespace = \"/\" + sanitizedNamespace;\n }\n\n return sanitizedNamespace;\n};\n\nexport const sameNamespace = (ns1: string, ns2: string): boolean => {\n if (ns1.replace(/^\\/|\\/$/g, \"\") !== ns2.replace(/^\\/|\\/$/g, \"\")) {\n return false;\n }\n return true;\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { sameNamespace, sanitizeNamespace } from \"../utils/namespaceUtils\";\n\nconst NAMESPACE_STORAGE_KEY = \"ros2_diag_namespace\";\n\n/**\n * Custom hook to manage ROS2 namespace\n * @param initialNamespace - Initial namespace to use (e.g., '/robot')\n */\nexport const useNamespace = (initialNamespace: string = '/robot') => {\n const [namespace, setNamespace] = useState(\"\");\n const [invalidNamespaceMessage, setInvalidNamespaceMessage] = useState<string | null>(null);\n const [manualEntryRequired, setManualEntryRequired] = useState(false);\n\n const setManualNamespace = useCallback((ns: string) => {\n const ns_temp = sanitizeNamespace(ns);\n setNamespace(ns_temp);\n localStorage.setItem(NAMESPACE_STORAGE_KEY, ns_temp);\n }, []);\n\n useEffect(() => {\n // Try to get saved namespace from localStorage\n const savedNamespace = localStorage.getItem(NAMESPACE_STORAGE_KEY);\n if (savedNamespace) {\n console.log(\"Using namespace from storage:\", savedNamespace);\n setNamespace(savedNamespace);\n return;\n }\n\n // Use initial namespace provided\n if (initialNamespace) {\n const sanitized = sanitizeNamespace(initialNamespace);\n\n // Warn if sanitization changed the namespace\n if (!sameNamespace(initialNamespace, sanitized)) {\n const message = `Invalid namespace: \"${initialNamespace}\", using: \"${sanitized}\"`;\n console.warn(message);\n setInvalidNamespaceMessage(message);\n } else {\n setInvalidNamespaceMessage(null);\n }\n\n setNamespace(sanitized);\n } else {\n setManualEntryRequired(true);\n }\n }, [initialNamespace]);\n\n return { namespace, setManualNamespace, invalidNamespaceMessage, manualEntryRequired };\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Hook to determine the Foxglove WebSocket URL\n * @param customUrl - Optional custom URL (e.g., from props)\n * @returns The WebSocket URL or null if not yet determined\n */\nexport const useWebSocketUrl = (customUrl?: string): string | null => {\n const [url, setUrl] = useState<string | null>(customUrl || null);\n\n useEffect(() => {\n // If custom URL provided, use it\n if (customUrl) {\n setUrl(customUrl);\n return;\n }\n\n // Try to detect the URL from the current location\n try {\n const host = window.location.hostname;\n if (host) {\n // Default Foxglove bridge port\n setUrl(`ws://${host}:8765`);\n } else {\n console.warn(\"Unable to determine the host IP address.\");\n // Fallback to localhost\n setUrl(`ws://localhost:8765`);\n }\n } catch (error) {\n console.error(\"Failed to determine WebSocket URL:\", error);\n // Fallback to localhost\n setUrl(`ws://localhost:8765`);\n }\n }, [customUrl]);\n\n return url;\n};\n","import React from 'react';\nimport { Button } from '../..';\nimport { Download } from 'lucide-react';\n\nexport const DiagnosticsCapture = ({ namespace }: { namespace: string }) => {\n const downloadDiagnostics = () => {\n console.log('Capture diagnostics for namespace:', namespace);\n };\n\n return (\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"subtle\"\n size=\"sm\"\n icon={<Download className=\"w-4 h-4\" />}\n onClick={downloadDiagnostics}\n >\n Export Diagnostics\n </Button>\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Button, Input, Card, FormControl } from '../..';\nimport { AlertCircle } from 'lucide-react';\nimport { sameNamespace, sanitizeNamespace } from './utils/namespaceUtils';\n\nexport const ManualNamespace = ({\n setManualNamespace,\n namespace\n}: {\n setManualNamespace: (namespace: string) => void,\n namespace: string\n}) => {\n const [value, setValue] = useState(namespace);\n const [unsaved, setUnsaved] = useState(false);\n const [invalidNamespaceMessage, setInvalidNamespaceMessage] = useState('');\n const [isError, setIsError] = useState(false);\n\n // Check if a namespace change has been made\n useEffect(() => {\n const isSame = sameNamespace(namespace, sanitizeNamespace(value));\n setUnsaved(!isSame);\n }, [namespace, value]);\n\n // Validate the namespace entered\n useEffect(() => {\n const sanitizedValue = sanitizeNamespace(value);\n const isSame = sameNamespace(value, sanitizedValue);\n setIsError(!isSame);\n setInvalidNamespaceMessage(!isSame ? `Invalid namespace. Legal namespace would be: ${sanitizedValue}` : '');\n }, [namespace, value]);\n\n return (\n <Card className=\"bg-blue-50 border-l-4 border-blue-500\">\n <div className=\"p-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Namespace Configuration</h2>\n <form onSubmit={(e) => e.preventDefault()}>\n <FormControl\n label=\"ROS 2 Namespace\"\n error={isError ? invalidNamespaceMessage : undefined}\n description=\"Enter the namespace for the diagnostics_agg topic\"\n >\n <Input\n value={value}\n type=\"text\"\n placeholder=\"/robot\"\n onChange={(e) => setValue(e.target.value)}\n aria-label=\"Manual Namespace Entry\"\n className={isError ? 'border-red-500' : ''}\n />\n </FormControl>\n\n {isError && (\n <div className=\"flex items-start gap-2 mt-3 text-red-700 text-sm\">\n <AlertCircle className=\"w-4 h-4 mt-0.5 flex-shrink-0\" />\n <span>{invalidNamespaceMessage}</span>\n </div>\n )}\n\n <div className=\"flex justify-end mt-4\">\n <Button\n disabled={!unsaved}\n onClick={() => {\n const ns = sanitizeNamespace(value);\n setManualNamespace(ns);\n setValue(ns);\n }}\n variant=\"solid\"\n theme=\"brand\"\n >\n {unsaved ? 'Apply' : 'Applied'}\n </Button>\n </div>\n </form>\n </div>\n </Card>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { DiagnosticsStatus } from \"./interfaces\";\n\nconst HISTORY_SIZE = 50;\n\nexport const HistorySelection = ({\n diagHistory,\n setDiagStatusDisplay,\n isPaused,\n setIsPaused\n}: {\n diagHistory: DiagnosticsStatus[],\n setDiagStatusDisplay: React.Dispatch<React.SetStateAction<DiagnosticsStatus | null>>,\n isPaused: boolean,\n setIsPaused: React.Dispatch<React.SetStateAction<boolean>>\n}) => {\n const [negIndex, setNegIndex] = useState(-1);\n\n useEffect(() => {\n // On initial load, set to the latest history entry if available\n if (!isPaused) {\n setNegIndex(-1);\n if (diagHistory.length > 0) {\n setDiagStatusDisplay(diagHistory[diagHistory.length - 1]);\n } else {\n setDiagStatusDisplay(null);\n }\n }\n }, [diagHistory, setDiagStatusDisplay, isPaused]);\n\n const getStatusColor = (level: number) => {\n if (level >= 2) return 'bg-red-500';\n if (level === 1) return 'bg-yellow-500';\n return 'bg-green-500';\n };\n\n const isSelected = (index: number) => (diagHistory.length + negIndex) === index;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-sm font-semibold text-gray-700\">Timeline:</h3>\n <div className=\"flex-1 flex gap-1 overflow-x-auto\">\n {/* Placeholder steps */}\n {Array.from({ length: Math.max(0, HISTORY_SIZE - diagHistory.length) }).map((_, index) => (\n <div\n key={`blank-${index}`}\n className=\"w-2 h-2 rounded-full bg-gray-300 flex-shrink-0\"\n />\n ))}\n\n {/* History steps */}\n {diagHistory.map((diagStatus, index) => (\n <button\n key={`history-${index}`}\n onClick={() => {\n setDiagStatusDisplay(diagStatus);\n setIsPaused(true);\n setNegIndex(index - diagHistory.length);\n }}\n className={`w-2 h-2 rounded-full flex-shrink-0 transition-all ${\n isSelected(index)\n ? 'w-4 h-4 ring-2 ring-blue-500'\n : getStatusColor(diagStatus.level)\n }`}\n title={new Date(diagStatus.timestamp).toLocaleTimeString()}\n aria-label={`Diagnostics snapshot ${index + 1} at ${new Date(diagStatus.timestamp).toLocaleTimeString()}`}\n />\n ))}\n </div>\n </div>\n\n {/* Timestamp info */}\n <div className=\"flex items-center justify-between text-xs text-gray-600 px-2\">\n <span>\n Oldest: {diagHistory.length > 0 ? new Date(diagHistory[0].timestamp).toLocaleTimeString() : 'N/A'}\n </span>\n {isPaused && diagHistory.length > 0 && (\n <span className=\"font-medium text-blue-600\">\n Selected: {new Date(diagHistory[diagHistory.length + negIndex].timestamp).toLocaleTimeString()}\n </span>\n )}\n <span>\n Latest: {diagHistory.length > 0 ? new Date(diagHistory[diagHistory.length - 1].timestamp).toLocaleTimeString() : 'N/A'}\n </span>\n </div>\n </div>\n );\n};\n","/*\n * This file is part of Cockpit ROS 2 Diagnostics.\n *\n * Copyright (C) 2025 Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.\n *\n * Cockpit ROS 2 Diagnostics is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation; either version 2.1 of the License, or\n * (at your option) any later version.\n *\n * Cockpit ROS 2 Diagnostics is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { useState, useCallback, useRef, useEffect } from \"react\";\n\nimport { DiagnosticsStatus } from \"../interfaces\";\n\nexport const HISTORY_SIZE = 30;\n\nexport const useDiagHistory = (isPaused: boolean) => {\n const [diagHistory, setDiagHistory] = useState<DiagnosticsStatus[]>([]);\n const isPausedRef = useRef<boolean>(isPaused);\n\n useEffect(() => {\n isPausedRef.current = isPaused;\n }, [isPaused]);\n\n const clearDiagHistory = useCallback(() => {\n setDiagHistory([]);\n }, []);\n\n const updateDiagHistory = useCallback((diagStatusLatest: DiagnosticsStatus | null) => {\n // Only add to history if we have actual diagnostics\n if (!isPausedRef.current && diagStatusLatest && diagStatusLatest.diagnostics.length > 0) {\n setDiagHistory(prevItems => {\n const updatedItems = [...prevItems, diagStatusLatest];\n // Keep only the last HISTORY_SIZE entries\n if (updatedItems.length > HISTORY_SIZE) {\n return updatedItems.slice(-HISTORY_SIZE);\n }\n return updatedItems;\n });\n }\n }, [isPausedRef]);\n\n return { diagHistory, updateDiagHistory, clearDiagHistory };\n};\n","/**\n * ROS2Diagnostics Component\n *\n * A production-grade ROS2 diagnostic aggregation and visualization component.\n * Adapted from Cockpit ROS2 Diagnostics plugin for mywhy-ui.\n */\n\nimport React, { useState } from 'react';\nimport { Button, Alert, Spinner, Card } from '../..';\nimport { Pause, Play, ChevronDown } from 'lucide-react';\n\nimport { DiagnosticsStatus } from './interfaces';\nimport { DiagnosticsTable } from './DiagnosticsTable';\nimport { DiagnosticsTreeTable } from './DiagnosticsTreeTable';\nimport { RosConnectionManager } from './RosConnectionManager';\nimport { useNamespace } from './hooks/useNamespace';\nimport { useWebSocketUrl } from './hooks/useWebSocketUrl';\nimport { DiagnosticsCapture } from './DiagnosticsCapture';\nimport { ManualNamespace } from './ManualNamespace';\nimport { HistorySelection } from './HistorySelection';\nimport { useDiagHistory } from './hooks/useDiagHistory';\n\nexport interface ROS2DiagnosticsProps {\n foxgloveUrl?: string;\n namespace?: string;\n onDiagnosticUpdate?: (diagnostics: DiagnosticsStatus) => void;\n}\n\nexport const ROS2Diagnostics: React.FC<ROS2DiagnosticsProps> = ({\n foxgloveUrl,\n namespace: initialNamespace = '/robot',\n onDiagnosticUpdate,\n}) => {\n const {\n namespace,\n setManualNamespace,\n invalidNamespaceMessage,\n manualEntryRequired\n } = useNamespace(initialNamespace);\n\n const wsUrl = useWebSocketUrl(foxgloveUrl);\n const [diagStatusDisplay, setDiagStatusDisplay] = useState<DiagnosticsStatus | null>(null);\n const [bridgeConnected, setBridgeConnected] = useState(false);\n const [selectedRawName, setSelectedRawName] = useState<string | null>(null);\n const [isPaused, setIsPaused] = useState(false);\n\n const {\n diagHistory,\n updateDiagHistory,\n clearDiagHistory\n } = useDiagHistory(isPaused);\n\n const diagnostics = diagStatusDisplay?.diagnostics || [];\n\n const handleDiagnosticsUpdate = (diagStatus: DiagnosticsStatus) => {\n setDiagStatusDisplay(diagStatus);\n updateDiagHistory(diagStatus);\n onDiagnosticUpdate?.(diagStatus);\n };\n\n return (\n <div className=\"flex flex-col h-full gap-4 p-4 bg-white\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <h1 className=\"text-2xl font-bold text-gray-900\">ROS 2 Diagnostics</h1>\n <Button\n variant={isPaused ? 'solid' : 'subtle'}\n theme=\"brand\"\n size=\"sm\"\n onClick={() => {\n if (isPaused) clearDiagHistory();\n setIsPaused(!isPaused);\n }}\n icon={isPaused ? <Play className=\"w-4 h-4\" /> : <Pause className=\"w-4 h-4\" />}\n >\n {isPaused ? 'Resume' : 'Pause'}\n </Button>\n </div>\n\n {/* History Selection */}\n <HistorySelection\n diagHistory={diagHistory}\n setDiagStatusDisplay={setDiagStatusDisplay}\n isPaused={isPaused}\n setIsPaused={setIsPaused}\n />\n\n {/* Error Alert */}\n {invalidNamespaceMessage && (\n <Alert theme=\"danger\" title={invalidNamespaceMessage} />\n )}\n\n {/* Manual Namespace Entry */}\n {manualEntryRequired && (\n <ManualNamespace\n setManualNamespace={setManualNamespace}\n namespace={namespace}\n />\n )}\n\n {/* Capture Controls */}\n <DiagnosticsCapture namespace={namespace} />\n\n {/* Main Content */}\n {!invalidNamespaceMessage && (\n <>\n {/* ROS Connection Manager - invisible component handling WebSocket */}\n <RosConnectionManager\n namespace={namespace}\n url={wsUrl}\n onDiagnosticsUpdate={handleDiagnosticsUpdate}\n onConnectionStatusChange={setBridgeConnected}\n onClearHistory={clearDiagHistory}\n />\n\n {/* Bridge Connection Status */}\n {!bridgeConnected && (\n <Alert\n theme=\"warning\"\n title=\"Waiting for connection...\"\n >\n Attempting to connect to Foxglove bridge at {wsUrl}\n </Alert>\n )}\n\n {/* Error Diagnostics Table */}\n {diagnostics.length > 0 && (\n <DiagnosticsTable\n diagnostics={diagnostics}\n setSelectedRawName={setSelectedRawName}\n variant=\"error\"\n />\n )}\n\n {/* Warning Diagnostics Table */}\n {diagnostics.length > 0 && (\n <DiagnosticsTable\n diagnostics={diagnostics}\n setSelectedRawName={setSelectedRawName}\n variant=\"warning\"\n />\n )}\n\n {/* Full Tree View */}\n <DiagnosticsTreeTable\n diagnostics={diagnostics}\n bridgeConnected={bridgeConnected}\n selectedRawName={selectedRawName}\n setSelectedRawName={setSelectedRawName}\n />\n\n {/* Loading State */}\n {diagnostics.length === 0 && bridgeConnected && (\n <div className=\"flex flex-col items-center justify-center py-12 text-gray-500\">\n <Spinner />\n <p className=\"mt-2\">Waiting for diagnostic data...</p>\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nexport default ROS2Diagnostics;\n\n// Export types and components for advanced usage\nexport { RosConnectionManager } from './RosConnectionManager';\nexport { DiagnosticsTreeTable } from './DiagnosticsTreeTable';\nexport { DiagnosticsTable } from './DiagnosticsTable';\nexport { DiagnosticsCapture } from './DiagnosticsCapture';\nexport { ManualNamespace } from './ManualNamespace';\nexport { HistorySelection } from './HistorySelection';\n\n// Export hooks for advanced integrations\nexport { useWebSocketUrl } from './hooks/useWebSocketUrl';\nexport { useDiagHistory } from './hooks/useDiagHistory';\nexport { useNamespace } from './hooks/useNamespace';\n\n// Export types\nexport type { DiagnosticsEntry, DiagnosticsStatus } from './interfaces';\n","import { useState, useCallback } from 'react'\n\nexport interface UseDisclosureReturn {\n isOpen: boolean\n open: () => void\n close: () => void\n toggle: () => void\n}\n\nexport function useDisclosure(initial = false): UseDisclosureReturn {\n const [isOpen, setIsOpen] = useState(initial)\n\n const open = useCallback(() => setIsOpen(true), [])\n const close = useCallback(() => setIsOpen(false), [])\n const toggle = useCallback(() => setIsOpen((v) => !v), [])\n\n return { isOpen, open, close, toggle }\n}\n","import { useState, useCallback } from 'react'\nimport type { ToastProps } from '../components/Toast/Toast'\n\nexport interface ToastEntry extends Omit<ToastProps, 'onClose'> {\n id: string\n}\n\nlet counter = 0\n\nexport function useToast() {\n const [toasts, setToasts] = useState<ToastEntry[]>([])\n\n const addToast = useCallback((props: Omit<ToastProps, 'onClose'>): string => {\n const id = `toast-${++counter}`\n setToasts((prev) => [...prev, { ...props, id }])\n return id\n }, [])\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n return { toasts, addToast, removeToast }\n}\n"]}