@liiift-studio/mac-os9-ui 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ATTRIBUTION.md +99 -99
- package/LICENSE +49 -49
- package/README.md +243 -243
- package/dist/index.cjs.map +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +109 -109
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Button/Button.module.css","../src/components/Button/Button.tsx","../src/components/Icon/Icon.module.css","../src/components/Icon/Icon.tsx","../src/components/IconButton/IconButton.module.css","../src/components/IconButton/IconButton.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.module.css","../src/components/Radio/Radio.tsx","../src/components/TextField/TextField.module.css","../src/components/TextField/TextField.tsx","../src/components/Select/Select.module.css","../src/components/Select/Select.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Window/Window.module.css","../src/components/Window/Window.tsx","../src/components/Dialog/Dialog.module.css","../src/components/Dialog/Dialog.tsx","../src/components/MenuBar/MenuBar.module.css","../src/components/MenuBar/MenuBar.tsx","../src/components/MenuBar/MenuItem.module.css","../src/components/MenuBar/MenuItem.tsx","../src/components/Scrollbar/Scrollbar.module.css","../src/components/Scrollbar/Scrollbar.tsx","../src/components/ListView/ListView.module.css","../src/components/ListView/ListView.tsx","../src/components/FolderList/FolderList.module.css","../src/components/FolderList/FolderList.tsx","../src/components/Icon/icons.tsx","../src/tokens/index.ts"],"names":["forwardRef","jsx","jsxs","Fragment","React","useState","Children","isValidElement","useCallback","useRef","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["/* Button Component Styles - Mac OS 9 */\r\n\r\n.button {\r\n\t/* Base styles */\r\n\tposition: relative;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tgap: var(--spacing-1);\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\ttext-align: center;\r\n\ttext-decoration: none;\r\n\twhite-space: nowrap;\r\n\tuser-select: none;\r\n\tcursor: pointer;\r\n\ttransition: none; /* Mac OS 9 had no transitions */\r\n\r\n\t/* Mac OS 9 button appearance */\r\n\tbackground-color: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tborder-radius: var(--border-radius-none);\r\n\tbox-shadow: var(--shadow-bevel);\r\n\tcolor: var(--color-text);\r\n\r\n\t/* Pixelated corners - authentic Mac OS 9 chamfered effect */\r\n\tclip-path: polygon(\r\n\t\t/* Top edge with corners */\r\n\t\t2px 0,\r\n\t\tcalc(100% - 2px) 0,\r\n\t\t/* Top-right corner */\r\n\t\t100% 2px,\r\n\t\t/* Right edge */\r\n\t\t100% calc(100% - 2px),\r\n\t\t/* Bottom-right corner */\r\n\t\tcalc(100% - 2px) 100%,\r\n\t\t/* Bottom edge */\r\n\t\t2px 100%,\r\n\t\t/* Bottom-left corner */\r\n\t\t0 calc(100% - 2px),\r\n\t\t/* Left edge */\r\n\t\t0 2px\r\n\t);\r\n\r\n\t/* Remove default button styles */\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\tappearance: none;\r\n}\r\n\r\n/* For links styled as buttons */\r\n.button[href] {\r\n\ttext-decoration: none;\r\n}\r\n\r\n.button[href]:visited {\r\n\tcolor: var(--color-text);\r\n}\r\n\r\n/* ========================================\r\n * Size Variants\r\n * ======================================== */\r\n\r\n.button--sm {\r\n\tmin-height: 20px;\r\n\tpadding: var(--spacing-0_5) var(--spacing-2);\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.button--md {\r\n\tmin-height: 24px;\r\n\tpadding: var(--spacing-1) var(--spacing-3);\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.button--lg {\r\n\tmin-height: 32px;\r\n\tpadding: var(--spacing-2) var(--spacing-4);\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n/* ========================================\r\n * Variant Styles\r\n * ======================================== */\r\n\r\n.button--default {\r\n\t/* Uses base styles */\r\n}\r\n\r\n.button--primary {\r\n\t/* Slightly darker background for emphasis */\r\n\tbackground-color: var(--color-gray-300);\r\n\tfont-weight: var(--font-weight-bold);\r\n}\r\n\r\n.button--danger {\r\n\t/* Error state styling */\r\n\tcolor: var(--color-error);\r\n\tborder-color: var(--color-error);\r\n}\r\n\r\n/* ========================================\r\n * Interactive States\r\n * ======================================== */\r\n\r\n/* Hover state - subtle highlight */\r\n.button:hover:not(:disabled) {\r\n\tbackground-color: var(--color-gray-100);\r\n}\r\n\r\n/* Active/Pressed state - inverted bevel */\r\n.button:active:not(:disabled) {\r\n\tbox-shadow: var(--shadow-inset);\r\n\tbackground-color: var(--color-gray-300);\r\n\t/* Subtle visual feedback - button appears pressed */\r\n\ttransform: translate(1px, 1px);\r\n}\r\n\r\n/* Focus state - keyboard navigation */\r\n.button:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: 2px;\r\n}\r\n\r\n/* ========================================\r\n * Disabled State\r\n * ======================================== */\r\n\r\n.button--disabled,\r\n.button:disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n\tpointer-events: none;\r\n}\r\n\r\n/* ========================================\r\n * Layout Modifiers\r\n * ======================================== */\r\n\r\n.button--full-width {\r\n\twidth: 100%;\r\n}\r\n\r\n/* ========================================\r\n * Loading States\r\n * ======================================== */\r\n\r\n.button--loading {\r\n\tposition: relative;\r\n\tpointer-events: none;\r\n}\r\n\r\n.button--loading:not(.button--cursor-loading) {\r\n\tcursor: wait;\r\n}\r\n\r\n/* Mac OS 9 watch cursor during loading */\r\n.button--cursor-loading {\r\n\tcursor: wait;\r\n}\r\n\r\n.button__loading-spinner {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tfont-size: var(--font-size-md);\r\n}\r\n\r\n.button__text {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n/* ========================================\r\n * Icon Support\r\n * ======================================== */\r\n\r\n.button__icon-left,\r\n.button__icon-right {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tflex-shrink: 0;\r\n}\r\n\r\n.button__icon-only {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n/* Icon-only buttons should be square */\r\n.button--icon-only {\r\n\tpadding: var(--spacing-1);\r\n\taspect-ratio: 1;\r\n}\r\n\r\n.button--icon-only.button--sm {\r\n\tpadding: var(--spacing-0_5);\r\n}\r\n\r\n.button--icon-only.button--lg {\r\n\tpadding: var(--spacing-2);\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.button {\r\n\t\tborder-width: var(--border-width-medium);\r\n\t}\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.button {\r\n\t\ttransition: none;\r\n\t}\r\n}\r\n","// Button component - Mac OS 9 style\r\n// Enhanced with polymorphic support, loading states, and icon support\r\n\r\nimport React, { forwardRef, ButtonHTMLAttributes, AnchorHTMLAttributes } from 'react';\r\nimport styles from './Button.module.css';\r\n\r\n// Common props shared by button and link variants\r\ninterface BaseButtonProps {\r\n\t/**\r\n\t * Button variant\r\n\t * @default 'default'\r\n\t */\r\n\tvariant?: 'default' | 'primary' | 'danger';\r\n\r\n\t/**\r\n\t * Button size\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'sm' | 'md' | 'lg';\r\n\r\n\t/**\r\n\t * Whether the button is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n\r\n\t/**\r\n\t * Whether the button should take full width\r\n\t * @default false\r\n\t */\r\n\tfullWidth?: boolean;\r\n\r\n\t/**\r\n\t * Loading state - shows loading indicator and disables interaction\r\n\t * @default false\r\n\t */\r\n\tloading?: boolean;\r\n\r\n\t/**\r\n\t * Text to show when loading (replaces children)\r\n\t */\r\n\tloadingText?: string;\r\n\r\n\t/**\r\n\t * Use Mac OS 9 style watch cursor during loading\r\n\t * @default false\r\n\t */\r\n\tuseCursorLoading?: boolean;\r\n\r\n\t/**\r\n\t * Icon to display before the button text\r\n\t */\r\n\tleftIcon?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Icon to display after the button text\r\n\t */\r\n\trightIcon?: React.ReactNode;\r\n\r\n\t/**\r\n\t * If true, only displays icon (children used as aria-label)\r\n\t */\r\n\ticonOnly?: boolean;\r\n\r\n\t/**\r\n\t * Override aria-label\r\n\t */\r\n\tariaLabel?: string;\r\n\r\n\t/**\r\n\t * ID of element that describes this button\r\n\t */\r\n\tariaDescribedBy?: string;\r\n\r\n\t/**\r\n\t * For toggle buttons - indicates pressed state\r\n\t */\r\n\tariaPressed?: boolean;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Button content\r\n\t */\r\n\tchildren: React.ReactNode;\r\n}\r\n\r\n// Button-specific props\r\ninterface ButtonAsButton extends BaseButtonProps, Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof BaseButtonProps | 'aria-label' | 'aria-describedby' | 'aria-pressed'> {\r\n\t/**\r\n\t * Render as button element\r\n\t * @default 'button'\r\n\t */\r\n\tas?: 'button';\r\n\r\n\t/**\r\n\t * Associate button with a form by ID\r\n\t */\r\n\tform?: string;\r\n\r\n\t/**\r\n\t * Override form action URL\r\n\t */\r\n\tformAction?: string;\r\n\r\n\t/**\r\n\t * Override form method\r\n\t */\r\n\tformMethod?: 'get' | 'post';\r\n\r\n\t/**\r\n\t * Skip form validation\r\n\t */\r\n\tformNoValidate?: boolean;\r\n\r\n\t/**\r\n\t * Where to display form response\r\n\t */\r\n\tformTarget?: string;\r\n}\r\n\r\n// Link-specific props\r\ninterface ButtonAsLink extends BaseButtonProps, Omit<AnchorHTMLAttributes<HTMLAnchorElement>, keyof BaseButtonProps | 'aria-label' | 'aria-describedby' | 'aria-pressed'> {\r\n\t/**\r\n\t * Render as anchor element\r\n\t */\r\n\tas: 'a';\r\n\r\n\t/**\r\n\t * URL for the link\r\n\t */\r\n\thref: string;\r\n\r\n\t/**\r\n\t * Where to open the link\r\n\t */\r\n\ttarget?: '_blank' | '_self' | '_parent' | '_top';\r\n\r\n\t/**\r\n\t * Relationship of linked resource\r\n\t * Auto-fills \"noopener noreferrer\" for external links if not provided\r\n\t */\r\n\trel?: string;\r\n\r\n\t/**\r\n\t * Prompt to download the linked resource\r\n\t */\r\n\tdownload?: boolean | string;\r\n}\r\n\r\nexport type ButtonProps = ButtonAsButton | ButtonAsLink;\r\n\r\n/**\r\n * Mac OS 9 style Button component\r\n * \r\n * Polymorphic component that can render as button or link with consistent styling.\r\n * \r\n * Features:\r\n * - Classic 3-layer bevel effect (highlight, shadow, drop shadow)\r\n * - Polymorphic - renders as <button> or <a> based on `as` prop\r\n * - Loading states with optional Mac OS 9 watch cursor\r\n * - Icon support (left, right, or icon-only)\r\n * - Full accessibility with ARIA support\r\n * - Form integration props\r\n * - Auto-security for external links\r\n * \r\n * @example\r\n * ```tsx\r\n * // Button\r\n * <Button onClick={handleClick}>Click Me</Button>\r\n * <Button variant=\"primary\" size=\"lg\">Primary Action</Button>\r\n * <Button loading loadingText=\"Saving...\">Save</Button>\r\n * \r\n * // Link styled as button\r\n * <Button as=\"a\" href=\"/dashboard\">Go to Dashboard</Button>\r\n * <Button as=\"a\" href=\"https://example.com\" target=\"_blank\">\r\n * External Link\r\n * </Button>\r\n * \r\n * // With icons\r\n * <Button leftIcon={<FolderIcon />}>Open</Button>\r\n * <Button iconOnly aria-label=\"Close\">\r\n * <CloseIcon />\r\n * </Button>\r\n * ```\r\n */\r\nexport const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(\r\n\t(props, ref) => {\r\n\t\tconst {\r\n\t\t\tvariant = 'default',\r\n\t\t\tsize = 'md',\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = false,\r\n\t\t\tloading = false,\r\n\t\t\tloadingText,\r\n\t\t\tuseCursorLoading = false,\r\n\t\t\tleftIcon,\r\n\t\t\trightIcon,\r\n\t\t\ticonOnly = false,\r\n\t\t\tariaLabel,\r\n\t\t\tariaDescribedBy,\r\n\t\t\tariaPressed,\r\n\t\t\tclassName = '',\r\n\t\t\tchildren,\r\n\t\t\t...restProps\r\n\t\t} = props;\r\n\r\n\t\t// Determine if rendering as link\r\n\t\tconst isLink = props.as === 'a';\r\n\t\tconst Component = isLink ? 'a' : 'button';\r\n\r\n\t\t// Build class names\r\n\t\tconst classNames = [\r\n\t\t\tstyles.button,\r\n\t\t\tstyles[`button--${variant}`],\r\n\t\t\tstyles[`button--${size}`],\r\n\t\t\tfullWidth && styles['button--full-width'],\r\n\t\t\tdisabled && styles['button--disabled'],\r\n\t\t\tloading && styles['button--loading'],\r\n\t\t\tloading && useCursorLoading && styles['button--cursor-loading'],\r\n\t\t\ticonOnly && styles['button--icon-only'],\r\n\t\t\t(leftIcon || rightIcon) && styles['button--with-icon'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\t// Prepare ARIA attributes\r\n\t\tconst ariaAttributes: Record<string, any> = {\r\n\t\t\t'aria-label': iconOnly ? (ariaLabel || (typeof children === 'string' ? children : undefined)) : ariaLabel,\r\n\t\t\t'aria-describedby': ariaDescribedBy,\r\n\t\t\t'aria-pressed': ariaPressed,\r\n\t\t\t'aria-disabled': disabled || loading,\r\n\t\t\t'aria-busy': loading,\r\n\t\t};\r\n\r\n\t\t// Handle link-specific props\r\n\t\tif (isLink) {\r\n\t\t\tconst { href, target, rel, download, ...linkProps } = restProps as ButtonAsLink;\r\n\t\t\t\r\n\t\t\t// Auto-add security rel for external links\r\n\t\t\tlet finalRel = rel;\r\n\t\t\tif (target === '_blank' && !rel) {\r\n\t\t\t\tfinalRel = 'noopener noreferrer';\r\n\t\t\t}\r\n\r\n\t\t\t// Links can't be truly disabled, so prevent default\r\n\t\t\tconst handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\r\n\t\t\t\tif (disabled || loading) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tlinkProps.onClick?.(e);\r\n\t\t\t};\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<a\r\n\t\t\t\t\tref={ref as React.Ref<HTMLAnchorElement>}\r\n\t\t\t\t\thref={disabled || loading ? undefined : href}\r\n\t\t\t\t\ttarget={target}\r\n\t\t\t\t\trel={finalRel}\r\n\t\t\t\t\tdownload={download}\r\n\t\t\t\t\tclassName={classNames}\r\n\t\t\t\t\t{...ariaAttributes}\r\n\t\t\t\t\t{...linkProps}\r\n\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t>\r\n\t\t\t\t\t{renderButtonContent()}\r\n\t\t\t\t</a>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Handle button-specific props\r\n\t\tconst {\r\n\t\t\ttype = 'button',\r\n\t\t\tform,\r\n\t\t\tformAction,\r\n\t\t\tformMethod,\r\n\t\t\tformNoValidate,\r\n\t\t\tformTarget,\r\n\t\t\t...buttonProps\r\n\t\t} = restProps as ButtonAsButton;\r\n\r\n\t\treturn (\r\n\t\t\t<button\r\n\t\t\t\tref={ref as React.Ref<HTMLButtonElement>}\r\n\t\t\t\ttype={type}\r\n\t\t\t\tdisabled={disabled || loading}\r\n\t\t\t\tform={form}\r\n\t\t\t\tformAction={formAction}\r\n\t\t\t\tformMethod={formMethod}\r\n\t\t\t\tformNoValidate={formNoValidate}\r\n\t\t\t\tformTarget={formTarget}\r\n\t\t\t\tclassName={classNames}\r\n\t\t\t\t{...ariaAttributes}\r\n\t\t\t\t{...buttonProps}\r\n\t\t\t>\r\n\t\t\t\t{renderButtonContent()}\r\n\t\t\t</button>\r\n\t\t);\r\n\r\n\t\t// Render button content with icons and loading state\r\n\t\tfunction renderButtonContent() {\r\n\t\t\t// Show loading state\r\n\t\t\tif (loading) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{!useCursorLoading && (\r\n\t\t\t\t\t\t\t<span className={styles['button__loading-spinner']} aria-hidden=\"true\">\r\n\t\t\t\t\t\t\t\t⏳\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<span className={styles['button__text']}>\r\n\t\t\t\t\t\t\t{loadingText || children}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\t// Icon-only button\r\n\t\t\tif (iconOnly) {\r\n\t\t\t\treturn <span className={styles['button__icon-only']}>{children}</span>;\r\n\t\t\t}\r\n\r\n\t\t\t// Button with icons\r\n\t\t\treturn (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{leftIcon && (\r\n\t\t\t\t\t\t<span className={styles['button__icon-left']} aria-hidden=\"true\">\r\n\t\t\t\t\t\t\t{leftIcon}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<span className={styles['button__text']}>{children}</span>\r\n\t\t\t\t\t{rightIcon && (\r\n\t\t\t\t\t\t<span className={styles['button__icon-right']} aria-hidden=\"true\">\r\n\t\t\t\t\t\t\t{rightIcon}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</>\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n);\r\n\r\nButton.displayName = 'Button';\r\n\r\nexport default Button;","/* Icon Component Styles - Mac OS 9 */\r\n\r\n.icon {\r\n\t/* Base styles */\r\n\tdisplay: inline-block;\r\n\tflex-shrink: 0;\r\n\tline-height: 1;\r\n\tcolor: currentColor;\r\n\tvertical-align: middle;\r\n}\r\n\r\n/* ========================================\r\n * Size Variants\r\n * ======================================== */\r\n\r\n.icon--xs {\r\n\twidth: 12px;\r\n\theight: 12px;\r\n}\r\n\r\n.icon--sm {\r\n\twidth: 14px;\r\n\theight: 14px;\r\n}\r\n\r\n.icon--md {\r\n\twidth: 16px;\r\n\theight: 16px;\r\n}\r\n\r\n.icon--lg {\r\n\twidth: 20px;\r\n\theight: 20px;\r\n}\r\n\r\n.icon--xl {\r\n\twidth: 24px;\r\n\theight: 24px;\r\n}","// Icon component - Mac OS 9 style\r\n// Simple wrapper for SVG icons with consistent sizing\r\n\r\nimport React, { forwardRef, SVGAttributes } from 'react';\r\nimport styles from './Icon.module.css';\r\n\r\nexport interface IconProps extends SVGAttributes<SVGElement> {\r\n\t/**\r\n\t * Icon size\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n\t/**\r\n\t * Icon content (SVG path or element)\r\n\t */\r\n\tchildren: React.ReactNode;\r\n\r\n\t/**\r\n\t * Optional label for accessibility\r\n\t */\r\n\tlabel?: string;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n}\r\n\r\n/**\r\n * Icon component for Mac OS 9 UI\r\n * \r\n * Wraps SVG content with consistent sizing and styling.\r\n * Use for inline icons in buttons, labels, etc.\r\n * \r\n * @example\r\n * ```tsx\r\n * <Icon size=\"sm\">\r\n * <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/>\r\n * </Icon>\r\n * \r\n * <Icon label=\"Close\" size=\"md\">\r\n * <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n * </Icon>\r\n * ```\r\n */\r\nexport const Icon = forwardRef<SVGSVGElement, IconProps>(\r\n\t({ size = 'md', children, label, className = '', ...props }, ref) => {\r\n\t\tconst classNames = [styles.icon, styles[`icon--${size}`], className]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\treturn (\r\n\t\t\t<svg\r\n\t\t\t\tref={ref}\r\n\t\t\t\tclassName={classNames}\r\n\t\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t\tfill=\"currentColor\"\r\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\t\taria-label={label}\r\n\t\t\t\taria-hidden={!label}\r\n\t\t\t\trole={label ? 'img' : 'presentation'}\r\n\t\t\t\t{...props}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</svg>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nIcon.displayName = 'Icon';\r\n\r\nexport default Icon;","/* IconButton Component Styles - Mac OS 9 */\r\n\r\n/* Import pixelated corners utility */\r\n@import '../../styles/pixelated-corners.css';\r\n\r\n/* ========================================\r\n * Base IconButton Styles\r\n * ======================================== */\r\n\r\n.iconButton {\r\n\t/* Base styling */\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-bold);\r\n\tcolor: var(--color-text);\r\n\t\r\n\t/* Box styling */\r\n\tbackground: var(--color-gray-400);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tborder-radius: var(--border-radius-none);\r\n\tbox-shadow: var(--shadow-raised);\r\n\t\r\n\t/* Layout */\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tgap: var(--spacing-2);\r\n\t\r\n\t/* Cursor */\r\n\tcursor: pointer;\r\n\t\r\n\t/* Remove button defaults */\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\tappearance: none;\r\n\t\r\n\t/* No transitions */\r\n\ttransition: none;\r\n\t\r\n\t/* Text */\r\n\twhite-space: nowrap;\r\n\tuser-select: none;\r\n\t\r\n\t/* Pixelated corners for authentic Mac OS 9 appearance */\r\n\tclip-path: polygon(\r\n\t\t/* Top-left pixelated corner */\r\n\t\t4px 0,\r\n\t\t3px 1px,\r\n\t\t2px 2px,\r\n\t\t1px 3px,\r\n\t\t0 4px,\r\n\t\t/* Left edge down */\r\n\t\t0 calc(100% - 4px),\r\n\t\t/* Bottom-left pixelated corner */\r\n\t\t1px calc(100% - 3px),\r\n\t\t2px calc(100% - 2px),\r\n\t\t3px calc(100% - 1px),\r\n\t\t4px 100%,\r\n\t\t/* Bottom edge right */\r\n\t\tcalc(100% - 4px) 100%,\r\n\t\t/* Bottom-right pixelated corner */\r\n\t\tcalc(100% - 3px) calc(100% - 1px),\r\n\t\tcalc(100% - 2px) calc(100% - 2px),\r\n\t\tcalc(100% - 1px) calc(100% - 3px),\r\n\t\t100% calc(100% - 4px),\r\n\t\t/* Right edge up */\r\n\t\t100% 4px,\r\n\t\t/* Top-right pixelated corner */\r\n\t\tcalc(100% - 1px) 3px,\r\n\t\tcalc(100% - 2px) 2px,\r\n\t\tcalc(100% - 3px) 1px,\r\n\t\tcalc(100% - 4px) 0\r\n\t);\r\n}\r\n\r\n/* ========================================\r\n * Icon and Label Layout\r\n * ======================================== */\r\n\r\n.icon {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tflex-shrink: 0;\r\n}\r\n\r\n.label {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n/* Layout direction variants */\r\n.iconButton--label-top,\r\n.iconButton--label-bottom {\r\n\tflex-direction: column;\r\n}\r\n\r\n.iconButton--label-left {\r\n\tflex-direction: row-reverse;\r\n}\r\n\r\n.iconButton--label-right {\r\n\tflex-direction: row;\r\n}\r\n\r\n/* ========================================\r\n * Size Variants\r\n * ======================================== */\r\n\r\n.iconButton--sm {\r\n\tpadding: var(--spacing-1);\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n\tmin-width: 24px;\r\n\tmin-height: 24px;\r\n}\r\n\r\n.iconButton--sm.iconButton--with-label {\r\n\tpadding: var(--spacing-1) var(--spacing-2);\r\n}\r\n\r\n.iconButton--md {\r\n\tpadding: var(--spacing-1_5);\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n\tmin-width: 32px;\r\n\tmin-height: 32px;\r\n}\r\n\r\n.iconButton--md.iconButton--with-label {\r\n\tpadding: var(--spacing-1_5) var(--spacing-3);\r\n}\r\n\r\n.iconButton--lg {\r\n\tpadding: var(--spacing-2);\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n\tmin-width: 40px;\r\n\tmin-height: 40px;\r\n}\r\n\r\n.iconButton--lg.iconButton--with-label {\r\n\tpadding: var(--spacing-2) var(--spacing-4);\r\n}\r\n\r\n/* ========================================\r\n * Variant Styles\r\n * ======================================== */\r\n\r\n.iconButton--default {\r\n\tbackground: var(--color-gray-400);\r\n}\r\n\r\n.iconButton--primary {\r\n\tbackground: var(--color-gray-300);\r\n}\r\n\r\n.iconButton--danger {\r\n\tbackground: var(--color-gray-400);\r\n\tcolor: var(--color-text);\r\n}\r\n\r\n/* ========================================\r\n * Interactive States\r\n * ======================================== */\r\n\r\n/* Hover state */\r\n.iconButton:hover:not(:disabled) {\r\n\tbackground: var(--color-gray-300);\r\n}\r\n\r\n/* Active/pressed state */\r\n.iconButton:active:not(:disabled) {\r\n\tbox-shadow: var(--shadow-inset);\r\n\tbackground: var(--color-gray-500);\r\n}\r\n\r\n/* Focus state */\r\n.iconButton:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: -3px;\r\n}\r\n\r\n/* Disabled state */\r\n.iconButton--disabled,\r\n.iconButton:disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n\tpointer-events: none;\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.iconButton {\r\n\t\ttransition: none;\r\n\t}\r\n}\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.iconButton {\r\n\t\tborder-width: 2px;\r\n\t}\r\n}\r\n","// IconButton component - Mac OS 9 style button with icon\r\n// Button variant that includes an icon, with optional label\r\n\r\n'use client';\r\n\r\nimport React, { forwardRef, ButtonHTMLAttributes } from 'react';\r\nimport styles from './IconButton.module.css';\r\n\r\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n\t/**\r\n\t * Icon element to display\r\n\t */\r\n\ticon: React.ReactNode;\r\n\r\n\t/**\r\n\t * Optional text label to display alongside icon\r\n\t */\r\n\tlabel?: string;\r\n\r\n\t/**\r\n\t * Label position relative to icon\r\n\t * @default 'right'\r\n\t */\r\n\tlabelPosition?: 'left' | 'right' | 'top' | 'bottom';\r\n\r\n\t/**\r\n\t * Button variant\r\n\t * @default 'default'\r\n\t */\r\n\tvariant?: 'default' | 'primary' | 'danger';\r\n\r\n\t/**\r\n\t * Button size\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'sm' | 'md' | 'lg';\r\n\r\n\t/**\r\n\t * Whether button is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n}\r\n\r\n/**\r\n * IconButton component for Mac OS 9 UI\r\n * \r\n * Button with an icon, optionally with a text label.\r\n * Supports all button variants and sizes.\r\n * \r\n * @example\r\n * ```tsx\r\n * // Icon-only button\r\n * <IconButton icon={<SaveIcon />} />\r\n * \r\n * // Icon with label\r\n * <IconButton \r\n * icon={<FolderIcon />} \r\n * label=\"New Folder\"\r\n * variant=\"primary\"\r\n * />\r\n * \r\n * // Icon with label on different sides\r\n * <IconButton \r\n * icon={<SearchIcon />} \r\n * label=\"Search\"\r\n * labelPosition=\"right\"\r\n * />\r\n * ```\r\n */\r\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\r\n\t(\r\n\t\t{\r\n\t\t\ticon,\r\n\t\t\tlabel,\r\n\t\t\tlabelPosition = 'right',\r\n\t\t\tvariant = 'default',\r\n\t\t\tsize = 'md',\r\n\t\t\tdisabled = false,\r\n\t\t\tclassName = '',\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Build class names\r\n\t\tconst classNames = [\r\n\t\t\tstyles.iconButton,\r\n\t\t\tstyles[`iconButton--${variant}`],\r\n\t\t\tstyles[`iconButton--${size}`],\r\n\t\t\tlabel && styles[`iconButton--with-label`],\r\n\t\t\tlabel && styles[`iconButton--label-${labelPosition}`],\r\n\t\t\tdisabled && styles['iconButton--disabled'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\treturn (\r\n\t\t\t<button\r\n\t\t\t\tref={ref}\r\n\t\t\t\ttype=\"button\"\r\n\t\t\t\tclassName={classNames}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\t{...props}\r\n\t\t\t>\r\n\t\t\t\t{label && (labelPosition === 'left' || labelPosition === 'top') && (\r\n\t\t\t\t\t<span className={styles.label}>{label}</span>\r\n\t\t\t\t)}\r\n\t\t\t\t<span className={styles.icon}>{icon}</span>\r\n\t\t\t\t{label && (labelPosition === 'right' || labelPosition === 'bottom') && (\r\n\t\t\t\t\t<span className={styles.label}>{label}</span>\r\n\t\t\t\t)}\r\n\t\t\t</button>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nIconButton.displayName = 'IconButton';\r\n\r\nexport default IconButton;\r\n","/* Checkbox Component Styles - Mac OS 9 */\r\n\r\n.wrapper {\r\n\t/* Wrapper container for checkbox and label */\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tgap: var(--spacing-2);\r\n\tposition: relative;\r\n\tcursor: pointer;\r\n}\r\n\r\n.wrapper--disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n}\r\n\r\n.wrapper--error {\r\n\t/* Error state styling */\r\n}\r\n\r\n/* ========================================\r\n * Label Positioning\r\n * ======================================== */\r\n\r\n.wrapper--label-left {\r\n\tflex-direction: row-reverse;\r\n}\r\n\r\n.wrapper--label-right {\r\n\tflex-direction: row;\r\n}\r\n\r\n/* ========================================\r\n * Checkbox Input\r\n * ======================================== */\r\n\r\n.checkbox {\r\n\t/* Hide native checkbox */\r\n\tappearance: none;\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\t\r\n\t/* Custom checkbox styling */\r\n\tposition: relative;\r\n\tdisplay: inline-block;\r\n\tflex-shrink: 0;\r\n\tmargin: 0;\r\n\tcursor: pointer;\r\n\t\r\n\t/* Mac OS 9 checkbox appearance */\r\n\tbackground-color: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tborder-radius: var(--border-radius-none);\r\n\tbox-shadow: var(--shadow-inset);\r\n\t\r\n\t/* Transition for smooth state changes */\r\n\ttransition: none; /* Mac OS 9 had no transitions */\r\n}\r\n\r\n.checkbox:disabled {\r\n\tcursor: not-allowed;\r\n}\r\n\r\n/* ========================================\r\n * Size Variants\r\n * ======================================== */\r\n\r\n.checkbox--sm {\r\n\twidth: 14px;\r\n\theight: 14px;\r\n}\r\n\r\n.checkbox--md {\r\n\twidth: 16px;\r\n\theight: 16px;\r\n}\r\n\r\n.checkbox--lg {\r\n\twidth: 20px;\r\n\theight: 20px;\r\n}\r\n\r\n/* ========================================\r\n * Checked State\r\n * ======================================== */\r\n\r\n.checkbox:checked {\r\n\t/* Checked state uses same background */\r\n\tbackground-color: var(--color-surface);\r\n}\r\n\r\n/* Checkmark using pseudo-element */\r\n.checkbox:checked::after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tdisplay: block;\r\n\t\r\n\t/* Mac OS 9 style checkmark */\r\n\tleft: 50%;\r\n\ttop: 50%;\r\n\ttransform: translate(-50%, -50%) rotate(45deg);\r\n\t\r\n\t/* Default size (md) */\r\n\twidth: 4px;\r\n\theight: 8px;\r\n\t\r\n\tborder: solid var(--color-text);\r\n\tborder-width: 0 2px 2px 0;\r\n}\r\n\r\n.checkbox--sm:checked::after {\r\n\twidth: 3px;\r\n\theight: 6px;\r\n\tborder-width: 0 1.5px 1.5px 0;\r\n}\r\n\r\n.checkbox--lg:checked::after {\r\n\twidth: 5px;\r\n\theight: 10px;\r\n\tborder-width: 0 2.5px 2.5px 0;\r\n}\r\n\r\n/* ========================================\r\n * Indeterminate State\r\n * ======================================== */\r\n\r\n.checkbox--indeterminate::after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tdisplay: block;\r\n\t\r\n\t/* Horizontal line for indeterminate */\r\n\tleft: 50%;\r\n\ttop: 50%;\r\n\ttransform: translate(-50%, -50%);\r\n\t\r\n\tbackground-color: var(--color-text);\r\n\t\r\n\t/* Default size (md) */\r\n\twidth: 8px;\r\n\theight: 2px;\r\n}\r\n\r\n.checkbox--sm.checkbox--indeterminate::after {\r\n\twidth: 6px;\r\n\theight: 1.5px;\r\n}\r\n\r\n.checkbox--lg.checkbox--indeterminate::after {\r\n\twidth: 10px;\r\n\theight: 2.5px;\r\n}\r\n\r\n/* ========================================\r\n * Focus State\r\n * ======================================== */\r\n\r\n.checkbox:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: 2px;\r\n}\r\n\r\n/* ========================================\r\n * Error State\r\n * ======================================== */\r\n\r\n.checkbox--error {\r\n\tborder-color: var(--color-error);\r\n}\r\n\r\n/* ========================================\r\n * Label\r\n * ======================================== */\r\n\r\n.label {\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\tcolor: var(--color-text);\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n}\r\n\r\n.wrapper--disabled .label {\r\n\tcursor: not-allowed;\r\n}\r\n\r\n.label--sm {\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.label--md {\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.label--lg {\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n/* ========================================\r\n * Size Variants for Wrapper\r\n * ======================================== */\r\n\r\n.wrapper--sm {\r\n\tgap: var(--spacing-1);\r\n}\r\n\r\n.wrapper--md {\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n.wrapper--lg {\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.checkbox {\r\n\t\tborder-width: var(--border-width-medium);\r\n\t}\r\n\t\r\n\t.checkbox:checked::after,\r\n\t.checkbox--indeterminate::after {\r\n\t\tborder-width: 0 3px 3px 0;\r\n\t}\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.checkbox {\r\n\t\ttransition: none;\r\n\t}\r\n}","// Checkbox component - Mac OS 9 style\r\n// Classic checkbox with label support and full accessibility\r\n\r\nimport React, { forwardRef, InputHTMLAttributes } from 'react';\r\nimport styles from './Checkbox.module.css';\r\n\r\nexport interface CheckboxProps\r\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\r\n\t/**\r\n\t * Whether the checkbox is checked\r\n\t * For controlled component usage\r\n\t */\r\n\tchecked?: boolean;\r\n\r\n\t/**\r\n\t * Default checked state\r\n\t * For uncontrolled component usage\r\n\t */\r\n\tdefaultChecked?: boolean;\r\n\r\n\t/**\r\n\t * Whether the checkbox is in an indeterminate state\r\n\t * (neither checked nor unchecked, typically for \"select all\" scenarios)\r\n\t * @default false\r\n\t */\r\n\tindeterminate?: boolean;\r\n\r\n\t/**\r\n\t * Whether the checkbox is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n\r\n\t/**\r\n\t * Label text for the checkbox\r\n\t */\r\n\tlabel?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Position of the label relative to the checkbox\r\n\t * @default 'right'\r\n\t */\r\n\tlabelPosition?: 'left' | 'right';\r\n\r\n\t/**\r\n\t * Size of the checkbox\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'sm' | 'md' | 'lg';\r\n\r\n\t/**\r\n\t * Error state for form validation\r\n\t * @default false\r\n\t */\r\n\terror?: boolean;\r\n\r\n\t/**\r\n\t * Override aria-label (for checkboxes without visible labels)\r\n\t */\r\n\tariaLabel?: string;\r\n\r\n\t/**\r\n\t * ID of element that describes this checkbox\r\n\t */\r\n\tariaDescribedBy?: string;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Callback when checked state changes\r\n\t */\r\n\tonChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style Checkbox component\r\n * \r\n * Classic checkbox with raised bevel effect and optional label.\r\n * Supports checked, unchecked, indeterminate, and disabled states.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 bevel styling\r\n * - Indeterminate state support\r\n * - Label positioning (left/right)\r\n * - Controlled and uncontrolled modes\r\n * - Full accessibility with ARIA support\r\n * - Keyboard navigation (Space to toggle)\r\n * - Form integration\r\n * \r\n * @example\r\n * ```tsx\r\n * // Uncontrolled\r\n * <Checkbox label=\"Accept terms\" />\r\n * \r\n * // Controlled\r\n * <Checkbox \r\n * checked={isChecked} \r\n * onChange={(e) => setIsChecked(e.target.checked)}\r\n * label=\"Subscribe to newsletter\"\r\n * />\r\n * \r\n * // Indeterminate (for \"select all\")\r\n * <Checkbox \r\n * indeterminate={someSelected && !allSelected}\r\n * checked={allSelected}\r\n * onChange={handleSelectAll}\r\n * label=\"Select all items\"\r\n * />\r\n * ```\r\n */\r\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tchecked,\r\n\t\t\tdefaultChecked,\r\n\t\t\tindeterminate = false,\r\n\t\t\tdisabled = false,\r\n\t\t\tlabel,\r\n\t\t\tlabelPosition = 'right',\r\n\t\t\tsize = 'md',\r\n\t\t\terror = false,\r\n\t\t\tariaLabel,\r\n\t\t\tariaDescribedBy,\r\n\t\t\tclassName = '',\r\n\t\t\tonChange,\r\n\t\t\tid,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst inputRef = React.useRef<HTMLInputElement>(null);\r\n\t\tconst combinedRef = (ref as React.RefObject<HTMLInputElement>) || inputRef;\r\n\r\n\t\t// Set indeterminate property via ref (can't be set via HTML attribute)\r\n\t\tReact.useEffect(() => {\r\n\t\t\tif (combinedRef?.current) {\r\n\t\t\t\tcombinedRef.current.indeterminate = indeterminate;\r\n\t\t\t}\r\n\t\t}, [indeterminate, combinedRef]);\r\n\r\n\t\t// Generate ID if not provided (for label association)\r\n\t\tconst checkboxId = id || React.useId();\r\n\r\n\t\t// Build class names\r\n\t\tconst wrapperClassNames = [\r\n\t\t\tstyles.wrapper,\r\n\t\t\tstyles[`wrapper--${size}`],\r\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\r\n\t\t\tdisabled && styles['wrapper--disabled'],\r\n\t\t\terror && styles['wrapper--error'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst checkboxClassNames = [\r\n\t\t\tstyles.checkbox,\r\n\t\t\tstyles[`checkbox--${size}`],\r\n\t\t\tindeterminate && styles['checkbox--indeterminate'],\r\n\t\t\terror && styles['checkbox--error'],\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\r\n\r\n\t\t// ARIA attributes\r\n\t\tconst ariaAttributes = {\r\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\r\n\t\t\t'aria-describedby': ariaDescribedBy,\r\n\t\t\t'aria-invalid': error,\r\n\t\t\t'aria-checked': indeterminate ? ('mixed' as const) : undefined,\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div className={wrapperClassNames}>\r\n\t\t\t\t{label && labelPosition === 'left' && (\r\n\t\t\t\t\t<label htmlFor={checkboxId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<input\r\n\t\t\t\t\tref={combinedRef}\r\n\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\tid={checkboxId}\r\n\t\t\t\t\tclassName={checkboxClassNames}\r\n\t\t\t\t\tchecked={checked}\r\n\t\t\t\t\tdefaultChecked={defaultChecked}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\t{...ariaAttributes}\r\n\t\t\t\t\t{...props}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{label && labelPosition === 'right' && (\r\n\t\t\t\t\t<label htmlFor={checkboxId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n\r\nexport default Checkbox;","/* Radio Component Styles - Mac OS 9 */\r\n\r\n.wrapper {\r\n\t/* Wrapper container for radio and label */\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tgap: var(--spacing-2);\r\n\tposition: relative;\r\n\tcursor: pointer;\r\n}\r\n\r\n.wrapper--disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n}\r\n\r\n.wrapper--error {\r\n\t/* Error state styling */\r\n}\r\n\r\n/* ========================================\r\n * Label Positioning\r\n * ======================================== */\r\n\r\n.wrapper--label-left {\r\n\tflex-direction: row-reverse;\r\n}\r\n\r\n.wrapper--label-right {\r\n\tflex-direction: row;\r\n}\r\n\r\n/* ========================================\r\n * Radio Input\r\n * ======================================== */\r\n\r\n.radio {\r\n\t/* Hide native radio */\r\n\tappearance: none;\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\t\r\n\t/* Custom radio styling */\r\n\tposition: relative;\r\n\tdisplay: inline-block;\r\n\tflex-shrink: 0;\r\n\tmargin: 0;\r\n\tcursor: pointer;\r\n\t\r\n\t/* Mac OS 9 radio appearance - circular */\r\n\tbackground-color: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tborder-radius: 50%; /* Circular */\r\n\tbox-shadow: var(--shadow-inset);\r\n\t\r\n\t/* Transition for smooth state changes */\r\n\ttransition: none; /* Mac OS 9 had no transitions */\r\n}\r\n\r\n.radio:disabled {\r\n\tcursor: not-allowed;\r\n}\r\n\r\n/* ========================================\r\n * Size Variants\r\n * ======================================== */\r\n\r\n.radio--sm {\r\n\twidth: 14px;\r\n\theight: 14px;\r\n}\r\n\r\n.radio--md {\r\n\twidth: 16px;\r\n\theight: 16px;\r\n}\r\n\r\n.radio--lg {\r\n\twidth: 20px;\r\n\theight: 20px;\r\n}\r\n\r\n/* ========================================\r\n * Checked State\r\n * ======================================== */\r\n\r\n.radio:checked {\r\n\t/* Checked state uses same background */\r\n\tbackground-color: var(--color-surface);\r\n}\r\n\r\n/* Radio dot using pseudo-element */\r\n.radio:checked::after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tdisplay: block;\r\n\t\r\n\t/* Mac OS 9 style filled dot - centered */\r\n\tleft: 50%;\r\n\ttop: 50%;\r\n\ttransform: translate(-50%, -50%);\r\n\t\r\n\tbackground-color: var(--color-text);\r\n\tborder-radius: 50%; /* Circular dot */\r\n\t\r\n\t/* Default size (md) */\r\n\twidth: 8px;\r\n\theight: 8px;\r\n}\r\n\r\n.radio--sm:checked::after {\r\n\twidth: 6px;\r\n\theight: 6px;\r\n}\r\n\r\n.radio--lg:checked::after {\r\n\twidth: 10px;\r\n\theight: 10px;\r\n}\r\n\r\n/* ========================================\r\n * Focus State\r\n * ======================================== */\r\n\r\n.radio:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: 2px;\r\n}\r\n\r\n/* ========================================\r\n * Error State\r\n * ======================================== */\r\n\r\n.radio--error {\r\n\tborder-color: var(--color-error);\r\n}\r\n\r\n/* ========================================\r\n * Label\r\n * ======================================== */\r\n\r\n.label {\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\tcolor: var(--color-text);\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n}\r\n\r\n.wrapper--disabled .label {\r\n\tcursor: not-allowed;\r\n}\r\n\r\n.label--sm {\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.label--md {\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.label--lg {\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n/* ========================================\r\n * Size Variants for Wrapper\r\n * ======================================== */\r\n\r\n.wrapper--sm {\r\n\tgap: var(--spacing-1);\r\n}\r\n\r\n.wrapper--md {\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n.wrapper--lg {\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.radio {\r\n\t\tborder-width: var(--border-width-medium);\r\n\t}\r\n\t\r\n\t.radio:checked::after {\r\n\t\t/* Increase dot size in high contrast */\r\n\t\twidth: 10px;\r\n\t\theight: 10px;\r\n\t}\r\n\t\r\n\t.radio--sm:checked::after {\r\n\t\twidth: 8px;\r\n\t\theight: 8px;\r\n\t}\r\n\t\r\n\t.radio--lg:checked::after {\r\n\t\twidth: 12px;\r\n\t\theight: 12px;\r\n\t}\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.radio {\r\n\t\ttransition: none;\r\n\t}\r\n}","// Radio component - Mac OS 9 style\r\n// Classic radio button with label support and full accessibility\r\n\r\nimport React, { forwardRef, InputHTMLAttributes } from 'react';\r\nimport styles from './Radio.module.css';\r\n\r\nexport interface RadioProps\r\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\r\n\t/**\r\n\t * Whether the radio is checked\r\n\t * For controlled component usage\r\n\t */\r\n\tchecked?: boolean;\r\n\r\n\t/**\r\n\t * Default checked state\r\n\t * For uncontrolled component usage\r\n\t */\r\n\tdefaultChecked?: boolean;\r\n\r\n\t/**\r\n\t * Whether the radio is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n\r\n\t/**\r\n\t * Label text for the radio\r\n\t */\r\n\tlabel?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Position of the label relative to the radio\r\n\t * @default 'right'\r\n\t */\r\n\tlabelPosition?: 'left' | 'right';\r\n\r\n\t/**\r\n\t * Size of the radio\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'sm' | 'md' | 'lg';\r\n\r\n\t/**\r\n\t * Error state for form validation\r\n\t * @default false\r\n\t */\r\n\terror?: boolean;\r\n\r\n\t/**\r\n\t * Override aria-label (for radios without visible labels)\r\n\t */\r\n\tariaLabel?: string;\r\n\r\n\t/**\r\n\t * ID of element that describes this radio\r\n\t */\r\n\tariaDescribedBy?: string;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Value for the radio button (required for radio groups)\r\n\t */\r\n\tvalue?: string | number;\r\n\r\n\t/**\r\n\t * Name for the radio group (all radios in a group should share the same name)\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * Callback when checked state changes\r\n\t */\r\n\tonChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style Radio component\r\n * \r\n * Classic radio button with raised bevel effect and optional label.\r\n * Radio buttons work in groups - only one can be selected at a time.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 circular bevel styling\r\n * - Radio group support via `name` attribute\r\n * - Label positioning (left/right)\r\n * - Controlled and uncontrolled modes\r\n * - Full accessibility with ARIA support\r\n * - Keyboard navigation (Arrow keys to navigate group, Space to select)\r\n * - Form integration\r\n * \r\n * @example\r\n * ```tsx\r\n * // Uncontrolled radio group\r\n * <div>\r\n * <Radio name=\"size\" value=\"small\" label=\"Small\" />\r\n * <Radio name=\"size\" value=\"medium\" label=\"Medium\" defaultChecked />\r\n * <Radio name=\"size\" value=\"large\" label=\"Large\" />\r\n * </div>\r\n * \r\n * // Controlled radio group\r\n * <div>\r\n * <Radio \r\n * name=\"color\" \r\n * value=\"red\" \r\n * checked={color === 'red'}\r\n * onChange={(e) => setColor(e.target.value)}\r\n * label=\"Red\"\r\n * />\r\n * <Radio \r\n * name=\"color\" \r\n * value=\"blue\" \r\n * checked={color === 'blue'}\r\n * onChange={(e) => setColor(e.target.value)}\r\n * label=\"Blue\"\r\n * />\r\n * </div>\r\n * ```\r\n */\r\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tchecked,\r\n\t\t\tdefaultChecked,\r\n\t\t\tdisabled = false,\r\n\t\t\tlabel,\r\n\t\t\tlabelPosition = 'right',\r\n\t\t\tsize = 'md',\r\n\t\t\terror = false,\r\n\t\t\tariaLabel,\r\n\t\t\tariaDescribedBy,\r\n\t\t\tclassName = '',\r\n\t\t\tvalue,\r\n\t\t\tname,\r\n\t\t\tonChange,\r\n\t\t\tid,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Generate ID if not provided (for label association)\r\n\t\tconst radioId = id || React.useId();\r\n\r\n\t\t// Build class names\r\n\t\tconst wrapperClassNames = [\r\n\t\t\tstyles.wrapper,\r\n\t\t\tstyles[`wrapper--${size}`],\r\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\r\n\t\t\tdisabled && styles['wrapper--disabled'],\r\n\t\t\terror && styles['wrapper--error'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst radioClassNames = [\r\n\t\t\tstyles.radio,\r\n\t\t\tstyles[`radio--${size}`],\r\n\t\t\terror && styles['radio--error'],\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\r\n\r\n\t\t// ARIA attributes\r\n\t\tconst ariaAttributes = {\r\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\r\n\t\t\t'aria-describedby': ariaDescribedBy,\r\n\t\t\t'aria-invalid': error,\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div className={wrapperClassNames}>\r\n\t\t\t\t{label && labelPosition === 'left' && (\r\n\t\t\t\t\t<label htmlFor={radioId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<input\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\ttype=\"radio\"\r\n\t\t\t\t\tid={radioId}\r\n\t\t\t\t\tclassName={radioClassNames}\r\n\t\t\t\t\tchecked={checked}\r\n\t\t\t\t\tdefaultChecked={defaultChecked}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\t{...ariaAttributes}\r\n\t\t\t\t\t{...props}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{label && labelPosition === 'right' && (\r\n\t\t\t\t\t<label htmlFor={radioId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nRadio.displayName = 'Radio';\r\n\r\nexport default Radio;","/* TextField Component Styles - Mac OS 9 */\r\n\r\n.wrapper {\r\n\t/* Wrapper container for text field, label, and helper text */\r\n\tdisplay: inline-flex;\r\n\tflex-direction: column;\r\n\tgap: var(--spacing-1);\r\n\tposition: relative;\r\n}\r\n\r\n.wrapper--full-width {\r\n\twidth: 100%;\r\n}\r\n\r\n.wrapper--disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n}\r\n\r\n/* ========================================\r\n * Label Positioning\r\n * ======================================== */\r\n\r\n.wrapper--label-top {\r\n\tflex-direction: column;\r\n}\r\n\r\n.wrapper--label-left {\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n.wrapper--label-right {\r\n\tflex-direction: row-reverse;\r\n\talign-items: center;\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n/* ========================================\r\n * Label\r\n * ======================================== */\r\n\r\n.label {\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\tcolor: var(--color-text);\r\n\tuser-select: none;\r\n}\r\n\r\n.wrapper--disabled .label {\r\n\tcursor: not-allowed;\r\n}\r\n\r\n.label--sm {\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.label--md {\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.label--lg {\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n/* ========================================\r\n * Input Wrapper (for icon positioning)\r\n * ======================================== */\r\n\r\n.input-wrapper {\r\n\tposition: relative;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n}\r\n\r\n.wrapper--full-width .input-wrapper {\r\n\twidth: 100%;\r\n}\r\n\r\n/* ========================================\r\n * Input Field\r\n * ======================================== */\r\n\r\n.input {\r\n\t/* Base styling */\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\tcolor: var(--color-text);\r\n\t\r\n\t/* Mac OS 9 text field appearance - inset */\r\n\tbackground-color: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tborder-radius: var(--border-radius-none);\r\n\tbox-shadow: var(--shadow-inset);\r\n\t\r\n\t/* Remove default input styles */\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\tappearance: none;\r\n\t\r\n\t/* Transition */\r\n\ttransition: none; /* Mac OS 9 had no transitions */\r\n}\r\n\r\n.input::placeholder {\r\n\tcolor: var(--color-gray-600);\r\n\topacity: 1;\r\n}\r\n\r\n.input:disabled {\r\n\tcursor: not-allowed;\r\n\tbackground-color: var(--color-gray-200);\r\n}\r\n\r\n/* ========================================\r\n * Size Variants\r\n * ======================================== */\r\n\r\n.input--sm {\r\n\tmin-height: 20px;\r\n\tpadding: var(--spacing-0_5) var(--spacing-2);\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.input--md {\r\n\tmin-height: 24px;\r\n\tpadding: var(--spacing-1) var(--spacing-2);\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.input--lg {\r\n\tmin-height: 32px;\r\n\tpadding: var(--spacing-2) var(--spacing-3);\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n.input--full-width {\r\n\twidth: 100%;\r\n}\r\n\r\n/* ========================================\r\n * Icon Support\r\n * ======================================== */\r\n\r\n.input-icon-left,\r\n.input-icon-right {\r\n\tposition: absolute;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tpointer-events: none;\r\n\tcolor: var(--color-gray-700);\r\n}\r\n\r\n.input-icon-left {\r\n\tleft: var(--spacing-2);\r\n}\r\n\r\n.input-icon-right {\r\n\tright: var(--spacing-2);\r\n}\r\n\r\n/* Adjust input padding when icons are present */\r\n.input-wrapper--with-left-icon .input {\r\n\tpadding-left: calc(var(--spacing-6) + var(--spacing-2));\r\n}\r\n\r\n.input-wrapper--with-right-icon .input {\r\n\tpadding-right: calc(var(--spacing-6) + var(--spacing-2));\r\n}\r\n\r\n/* ========================================\r\n * Focus State\r\n * ======================================== */\r\n\r\n.input:focus {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: 2px;\r\n}\r\n\r\n/* ========================================\r\n * Error State\r\n * ======================================== */\r\n\r\n.input--error {\r\n\tborder-color: var(--color-error);\r\n}\r\n\r\n.input--error:focus {\r\n\toutline-color: var(--color-error);\r\n}\r\n\r\n/* ========================================\r\n * Helper Text & Error Message\r\n * ======================================== */\r\n\r\n.helper-text,\r\n.error-message {\r\n\tmargin: 0;\r\n\tfont-family: var(--font-system);\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.helper-text {\r\n\tcolor: var(--color-gray-700);\r\n}\r\n\r\n.error-message {\r\n\tcolor: var(--color-error);\r\n}\r\n\r\n/* ========================================\r\n * Wrapper Size Variants\r\n * ======================================== */\r\n\r\n.wrapper--sm {\r\n\tgap: var(--spacing-0_5);\r\n}\r\n\r\n.wrapper--md {\r\n\tgap: var(--spacing-1);\r\n}\r\n\r\n.wrapper--lg {\r\n\tgap: var(--spacing-1);\r\n}\r\n\r\n/* ========================================\r\n * Input Types - Special Styling\r\n * ======================================== */\r\n\r\n/* Number input - remove spinner */\r\n.input[type='number']::-webkit-inner-spin-button,\r\n.input[type='number']::-webkit-outer-spin-button {\r\n\t-webkit-appearance: none;\r\n\tmargin: 0;\r\n}\r\n\r\n.input[type='number'] {\r\n\t-moz-appearance: textfield;\r\n}\r\n\r\n/* Search input */\r\n.input[type='search']::-webkit-search-decoration,\r\n.input[type='search']::-webkit-search-cancel-button,\r\n.input[type='search']::-webkit-search-results-button,\r\n.input[type='search']::-webkit-search-results-decoration {\r\n\t-webkit-appearance: none;\r\n}\r\n\r\n/* Password input */\r\n.input[type='password'] {\r\n\tfont-family: monospace;\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.input {\r\n\t\tborder-width: var(--border-width-medium);\r\n\t}\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.input {\r\n\t\ttransition: none;\r\n\t}\r\n}","// TextField component - Mac OS 9 style\r\n// Classic text input with label support and full accessibility\r\n\r\nimport React, { forwardRef, InputHTMLAttributes } from 'react';\r\nimport styles from './TextField.module.css';\r\n\r\nexport interface TextFieldProps\r\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\r\n\t/**\r\n\t * Label text for the text field\r\n\t */\r\n\tlabel?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Position of the label relative to the text field\r\n\t * @default 'top'\r\n\t */\r\n\tlabelPosition?: 'top' | 'left' | 'right';\r\n\r\n\t/**\r\n\t * Size of the text field\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'sm' | 'md' | 'lg';\r\n\r\n\t/**\r\n\t * Whether the text field takes full width of its container\r\n\t * @default false\r\n\t */\r\n\tfullWidth?: boolean;\r\n\r\n\t/**\r\n\t * Error state for form validation\r\n\t * @default false\r\n\t */\r\n\terror?: boolean;\r\n\r\n\t/**\r\n\t * Error message to display below the field\r\n\t */\r\n\terrorMessage?: string;\r\n\r\n\t/**\r\n\t * Helper text to display below the field\r\n\t */\r\n\thelperText?: string;\r\n\r\n\t/**\r\n\t * Icon to display before the input (left side)\r\n\t */\r\n\tleftIcon?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Icon to display after the input (right side)\r\n\t */\r\n\trightIcon?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Override aria-label\r\n\t */\r\n\tariaLabel?: string;\r\n\r\n\t/**\r\n\t * ID of element that describes this text field\r\n\t */\r\n\tariaDescribedBy?: string;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Custom wrapper class name\r\n\t */\r\n\twrapperClassName?: string;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style TextField component\r\n * \r\n * Classic text input with inset bevel effect and optional label.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 inset bevel styling\r\n * - Label positioning (top/left/right)\r\n * - Size variants (sm/md/lg)\r\n * - Error states with messages\r\n * - Helper text support\r\n * - Icon support (left/right)\r\n * - Full accessibility with ARIA support\r\n * - Keyboard navigation\r\n * - Form integration\r\n * \r\n * @example\r\n * ```tsx\r\n * // Basic text field\r\n * <TextField placeholder=\"Enter text...\" />\r\n * \r\n * // With label\r\n * <TextField label=\"Username\" placeholder=\"Enter username\" />\r\n * \r\n * // With error\r\n * <TextField \r\n * label=\"Email\" \r\n * error \r\n * errorMessage=\"Invalid email address\"\r\n * value={email}\r\n * onChange={(e) => setEmail(e.target.value)}\r\n * />\r\n * \r\n * // With icons\r\n * <TextField \r\n * leftIcon={<SearchIcon />}\r\n * placeholder=\"Search...\"\r\n * />\r\n * ```\r\n */\r\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tlabel,\r\n\t\t\tlabelPosition = 'top',\r\n\t\t\tsize = 'md',\r\n\t\t\tfullWidth = false,\r\n\t\t\terror = false,\r\n\t\t\terrorMessage,\r\n\t\t\thelperText,\r\n\t\t\tleftIcon,\r\n\t\t\trightIcon,\r\n\t\t\tariaLabel,\r\n\t\t\tariaDescribedBy,\r\n\t\t\tclassName = '',\r\n\t\t\twrapperClassName = '',\r\n\t\t\ttype = 'text',\r\n\t\t\tid,\r\n\t\t\tdisabled,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Generate ID if not provided (for label association)\r\n\t\tconst inputId = id || React.useId();\r\n\r\n\t\t// Generate helper/error text ID for aria-describedby\r\n\t\tconst helperId = `${inputId}-helper`;\r\n\t\tconst errorId = `${inputId}-error`;\r\n\r\n\t\t// Combine aria-describedby\r\n\t\tconst describedByIds = [\r\n\t\t\thelperText && helperId,\r\n\t\t\terror && errorMessage && errorId,\r\n\t\t\tariaDescribedBy,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\t// Build class names\r\n\t\tconst wrapperClassNames = [\r\n\t\t\tstyles.wrapper,\r\n\t\t\tstyles[`wrapper--${size}`],\r\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\r\n\t\t\tfullWidth && styles['wrapper--full-width'],\r\n\t\t\tdisabled && styles['wrapper--disabled'],\r\n\t\t\twrapperClassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst inputWrapperClassNames = [\r\n\t\t\tstyles['input-wrapper'],\r\n\t\t\t(leftIcon || rightIcon) && styles['input-wrapper--with-icon'],\r\n\t\t\tleftIcon && styles['input-wrapper--with-left-icon'],\r\n\t\t\trightIcon && styles['input-wrapper--with-right-icon'],\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst inputClassNames = [\r\n\t\t\tstyles.input,\r\n\t\t\tstyles[`input--${size}`],\r\n\t\t\terror && styles['input--error'],\r\n\t\t\tfullWidth && styles['input--full-width'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\r\n\r\n\t\t// ARIA attributes\r\n\t\tconst ariaAttributes = {\r\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\r\n\t\t\t'aria-describedby': describedByIds || undefined,\r\n\t\t\t'aria-invalid': error,\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div className={wrapperClassNames}>\r\n\t\t\t\t{label && (labelPosition === 'top' || labelPosition === 'left') && (\r\n\t\t\t\t\t<label htmlFor={inputId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<div className={inputWrapperClassNames}>\r\n\t\t\t\t\t{leftIcon && (\r\n\t\t\t\t\t\t<span className={styles['input-icon-left']} aria-hidden=\"true\">\r\n\t\t\t\t\t\t\t{leftIcon}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\ttype={type}\r\n\t\t\t\t\t\tid={inputId}\r\n\t\t\t\t\t\tclassName={inputClassNames}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t{...ariaAttributes}\r\n\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{rightIcon && (\r\n\t\t\t\t\t\t<span className={styles['input-icon-right']} aria-hidden=\"true\">\r\n\t\t\t\t\t\t\t{rightIcon}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{label && labelPosition === 'right' && (\r\n\t\t\t\t\t<label htmlFor={inputId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{helperText && !error && (\r\n\t\t\t\t\t<p id={helperId} className={styles['helper-text']}>\r\n\t\t\t\t\t\t{helperText}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{error && errorMessage && (\r\n\t\t\t\t\t<p id={errorId} className={styles['error-message']}>\r\n\t\t\t\t\t\t{errorMessage}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nTextField.displayName = 'TextField';\r\n\r\nexport default TextField;","/* Select Component Styles - Mac OS 9 */\r\n\r\n.wrapper {\r\n\t/* Wrapper container for select, label, and helper text */\r\n\tdisplay: inline-flex;\r\n\tflex-direction: column;\r\n\tgap: var(--spacing-1);\r\n\tposition: relative;\r\n}\r\n\r\n.wrapper--full-width {\r\n\twidth: 100%;\r\n}\r\n\r\n.wrapper--disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n}\r\n\r\n/* ========================================\r\n * Label Positioning\r\n * ======================================== */\r\n\r\n.wrapper--label-top {\r\n\tflex-direction: column;\r\n}\r\n\r\n.wrapper--label-left {\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n.wrapper--label-right {\r\n\tflex-direction: row-reverse;\r\n\talign-items: center;\r\n\tgap: var(--spacing-2);\r\n}\r\n\r\n/* ========================================\r\n * Label\r\n * ======================================== */\r\n\r\n.label {\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\tcolor: var(--color-text);\r\n\tuser-select: none;\r\n}\r\n\r\n.wrapper--disabled .label {\r\n\tcursor: not-allowed;\r\n}\r\n\r\n.label--sm {\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.label--md {\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.label--lg {\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n/* ========================================\r\n * Select Field\r\n * ======================================== */\r\n\r\n.select {\r\n\t/* Base styling */\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\tcolor: var(--color-text);\r\n\t\r\n\t/* Mac OS 9 popup menu appearance - raised bevel with dropdown arrow */\r\n\tbackground-color: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tborder-radius: var(--border-radius-none);\r\n\tbox-shadow: var(--shadow-bevel);\r\n\t\r\n\t/* Add arrow indicator */\r\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23000000' d='M2 4l4 4 4-4z'/%3E%3C/svg%3E\");\r\n\tbackground-repeat: no-repeat;\r\n\tbackground-position: right var(--spacing-1) center;\r\n\t\r\n\t/* Remove default select styles */\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\tappearance: none;\r\n\t\r\n\t/* Cursor */\r\n\tcursor: pointer;\r\n\t\r\n\t/* Transition */\r\n\ttransition: none; /* Mac OS 9 had no transitions */\r\n}\r\n\r\n.select:disabled {\r\n\tcursor: not-allowed;\r\n\tbackground-color: var(--color-gray-200);\r\n}\r\n\r\n/* ========================================\r\n * Size Variants\r\n * ======================================== */\r\n\r\n.select--sm {\r\n\tmin-height: 20px;\r\n\tpadding: var(--spacing-0_5) var(--spacing-6) var(--spacing-0_5) var(--spacing-2);\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.select--md {\r\n\tmin-height: 24px;\r\n\tpadding: var(--spacing-1) var(--spacing-6) var(--spacing-1) var(--spacing-2);\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.select--lg {\r\n\tmin-height: 32px;\r\n\tpadding: var(--spacing-2) var(--spacing-8) var(--spacing-2) var(--spacing-3);\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n.select--full-width {\r\n\twidth: 100%;\r\n}\r\n\r\n/* ========================================\r\n * Focus State\r\n * ======================================== */\r\n\r\n.select:focus {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: 2px;\r\n}\r\n\r\n/* ========================================\r\n * Error State\r\n * ======================================== */\r\n\r\n.select--error {\r\n\tborder-color: var(--color-error);\r\n}\r\n\r\n.select--error:focus {\r\n\toutline-color: var(--color-error);\r\n}\r\n\r\n/* ========================================\r\n * Helper Text & Error Message\r\n * ======================================== */\r\n\r\n.helper-text,\r\n.error-message {\r\n\tmargin: 0;\r\n\tfont-family: var(--font-system);\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.helper-text {\r\n\tcolor: var(--color-gray-700);\r\n}\r\n\r\n.error-message {\r\n\tcolor: var(--color-error);\r\n}\r\n\r\n/* ========================================\r\n * Wrapper Size Variants\r\n * ======================================== */\r\n\r\n.wrapper--sm {\r\n\tgap: var(--spacing-0_5);\r\n}\r\n\r\n.wrapper--md {\r\n\tgap: var(--spacing-1);\r\n}\r\n\r\n.wrapper--lg {\r\n\tgap: var(--spacing-1);\r\n}\r\n\r\n/* ========================================\r\n * Option Styling (in dropdown)\r\n * ======================================== */\r\n\r\n.select option {\r\n\tfont-family: var(--font-system);\r\n\tpadding: var(--spacing-1);\r\n\tbackground-color: var(--color-surface);\r\n\tcolor: var(--color-text);\r\n}\r\n\r\n.select option:disabled {\r\n\tcolor: var(--color-gray-600);\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.select {\r\n\t\tborder-width: var(--border-width-medium);\r\n\t}\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.select {\r\n\t\ttransition: none;\r\n\t}\r\n}","// Select component - Mac OS 9 style\r\n// Classic dropdown select with label support and full accessibility\r\n\r\nimport React, { forwardRef, SelectHTMLAttributes } from 'react';\r\nimport styles from './Select.module.css';\r\n\r\nexport interface SelectOption {\r\n\tvalue: string | number;\r\n\tlabel: string;\r\n\tdisabled?: boolean;\r\n}\r\n\r\nexport interface SelectProps\r\n\textends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\r\n\t/**\r\n\t * Label text for the select\r\n\t */\r\n\tlabel?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Position of the label relative to the select\r\n\t * @default 'top'\r\n\t */\r\n\tlabelPosition?: 'top' | 'left' | 'right';\r\n\r\n\t/**\r\n\t * Size of the select\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'sm' | 'md' | 'lg';\r\n\r\n\t/**\r\n\t * Whether the select takes full width of its container\r\n\t * @default false\r\n\t */\r\n\tfullWidth?: boolean;\r\n\r\n\t/**\r\n\t * Error state for form validation\r\n\t * @default false\r\n\t */\r\n\terror?: boolean;\r\n\r\n\t/**\r\n\t * Error message to display below the field\r\n\t */\r\n\terrorMessage?: string;\r\n\r\n\t/**\r\n\t * Helper text to display below the field\r\n\t */\r\n\thelperText?: string;\r\n\r\n\t/**\r\n\t * Options for the select dropdown\r\n\t * Alternative to providing option elements as children\r\n\t */\r\n\toptions?: SelectOption[];\r\n\r\n\t/**\r\n\t * Placeholder text (creates a disabled first option)\r\n\t */\r\n\tplaceholder?: string;\r\n\r\n\t/**\r\n\t * Override aria-label\r\n\t */\r\n\tariaLabel?: string;\r\n\r\n\t/**\r\n\t * ID of element that describes this select\r\n\t */\r\n\tariaDescribedBy?: string;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Custom wrapper class name\r\n\t */\r\n\twrapperClassName?: string;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style Select component\r\n * \r\n * Classic dropdown select with raised bevel effect and optional label.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 popup menu styling\r\n * - Label positioning (top/left/right)\r\n * - Size variants (sm/md/lg)\r\n * - Error states with messages\r\n * - Helper text support\r\n * - Option groups support\r\n * - Full accessibility with ARIA support\r\n * - Keyboard navigation\r\n * - Form integration\r\n * \r\n * @example\r\n * ```tsx\r\n * // With options prop\r\n * <Select\r\n * label=\"Choose a color\"\r\n * options={[\r\n * { value: 'red', label: 'Red' },\r\n * { value: 'blue', label: 'Blue' },\r\n * { value: 'green', label: 'Green' }\r\n * ]}\r\n * placeholder=\"Select a color...\"\r\n * />\r\n * \r\n * // With children\r\n * <Select label=\"Country\">\r\n * <option value=\"us\">United States</option>\r\n * <option value=\"ca\">Canada</option>\r\n * <option value=\"mx\">Mexico</option>\r\n * </Select>\r\n * ```\r\n */\r\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tlabel,\r\n\t\t\tlabelPosition = 'top',\r\n\t\t\tsize = 'md',\r\n\t\t\tfullWidth = false,\r\n\t\t\terror = false,\r\n\t\t\terrorMessage,\r\n\t\t\thelperText,\r\n\t\t\toptions,\r\n\t\t\tplaceholder,\r\n\t\t\tariaLabel,\r\n\t\t\tariaDescribedBy,\r\n\t\t\tclassName = '',\r\n\t\t\twrapperClassName = '',\r\n\t\t\tid,\r\n\t\t\tdisabled,\r\n\t\t\tchildren,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Generate ID if not provided (for label association)\r\n\t\tconst selectId = id || React.useId();\r\n\r\n\t\t// Generate helper/error text ID for aria-describedby\r\n\t\tconst helperId = `${selectId}-helper`;\r\n\t\tconst errorId = `${selectId}-error`;\r\n\r\n\t\t// Combine aria-describedby\r\n\t\tconst describedByIds = [\r\n\t\t\thelperText && helperId,\r\n\t\t\terror && errorMessage && errorId,\r\n\t\t\tariaDescribedBy,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\t// Build class names\r\n\t\tconst wrapperClassNames = [\r\n\t\t\tstyles.wrapper,\r\n\t\t\tstyles[`wrapper--${size}`],\r\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\r\n\t\t\tfullWidth && styles['wrapper--full-width'],\r\n\t\t\tdisabled && styles['wrapper--disabled'],\r\n\t\t\twrapperClassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst selectClassNames = [\r\n\t\t\tstyles.select,\r\n\t\t\tstyles[`select--${size}`],\r\n\t\t\terror && styles['select--error'],\r\n\t\t\tfullWidth && styles['select--full-width'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\r\n\r\n\t\t// ARIA attributes\r\n\t\tconst ariaAttributes = {\r\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\r\n\t\t\t'aria-describedby': describedByIds || undefined,\r\n\t\t\t'aria-invalid': error,\r\n\t\t};\r\n\r\n\t\t// Render options from options prop\r\n\t\tconst renderOptions = () => {\r\n\t\t\tif (options) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{placeholder && (\r\n\t\t\t\t\t\t\t<option value=\"\" disabled>\r\n\t\t\t\t\t\t\t\t{placeholder}\r\n\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{options.map((option) => (\r\n\t\t\t\t\t\t\t<option key={option.value} value={option.value} disabled={option.disabled}>\r\n\t\t\t\t\t\t\t\t{option.label}\r\n\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\treturn children;\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div className={wrapperClassNames}>\r\n\t\t\t\t{label && (labelPosition === 'top' || labelPosition === 'left') && (\r\n\t\t\t\t\t<label htmlFor={selectId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<select\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tid={selectId}\r\n\t\t\t\t\tclassName={selectClassNames}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t{...ariaAttributes}\r\n\t\t\t\t\t{...props}\r\n\t\t\t\t>\r\n\t\t\t\t\t{renderOptions()}\r\n\t\t\t\t</select>\r\n\r\n\t\t\t\t{label && labelPosition === 'right' && (\r\n\t\t\t\t\t<label htmlFor={selectId} className={labelClassNames}>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{helperText && !error && (\r\n\t\t\t\t\t<p id={helperId} className={styles['helper-text']}>\r\n\t\t\t\t\t\t{helperText}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{error && errorMessage && (\r\n\t\t\t\t\t<p id={errorId} className={styles['error-message']}>\r\n\t\t\t\t\t\t{errorMessage}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n\r\nexport default Select;","/* Tabs Component Styles - Mac OS 9 */\r\n\r\n/* Import pixelated corners utility */\r\n@import '../../styles/pixelated-corners.css';\r\n\r\n.container {\r\n\t/* Container for tabs and panels */\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\twidth: 100%;\r\n}\r\n\r\n/* ========================================\r\n * Tab List (Row of tabs)\r\n * ======================================== */\r\n\r\n.tabList {\r\n\tdisplay: flex;\r\n\tgap: var(--spacing-1);\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\tlist-style: none;\r\n\tmargin-bottom: -1px; /* Overlap with panel border */\r\n}\r\n\r\n.tabList--full-width {\r\n\twidth: 100%;\r\n}\r\n\r\n/* ========================================\r\n * Individual Tab\r\n * ======================================== */\r\n\r\n.tab {\r\n\t/* Base styling */\r\n\tfont-family: var(--font-system);\r\n\tfont-weight: var(--font-weight-normal);\r\n\tcolor: var(--color-text);\r\n\t\r\n\t/* Box styling */\r\n\tbackground: var(--color-gray-400);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tborder-radius: var(--border-radius-none);\r\n\tbox-shadow: var(--shadow-raised);\r\n\t\r\n\t/* Padding */\r\n\tpadding: var(--spacing-1_5) var(--spacing-4);\r\n\t\r\n\t/* Positioning */\r\n\tposition: relative;\r\n\t\r\n\t/* Cursor */\r\n\tcursor: pointer;\r\n\t\r\n\t/* Remove button defaults */\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\tappearance: none;\r\n\t\r\n\t/* No transitions */\r\n\ttransition: none;\r\n\t\r\n\t/* Text */\r\n\twhite-space: nowrap;\r\n\tuser-select: none;\r\n\t\r\n\t/* Pixelated top corners for authentic Mac OS 9 tab appearance */\r\n\tclip-path: polygon(\r\n\t\t/* Top-left pixelated corner */\r\n\t\t3px 0,\r\n\t\t2px 1px,\r\n\t\t1px 2px,\r\n\t\t0 3px,\r\n\t\t/* Left edge down */\r\n\t\t0 100%,\r\n\t\t/* Bottom edge (flat) */\r\n\t\t100% 100%,\r\n\t\t/* Right edge up */\r\n\t\t100% 3px,\r\n\t\t/* Top-right pixelated corner */\r\n\t\tcalc(100% - 1px) 2px,\r\n\t\tcalc(100% - 2px) 1px,\r\n\t\tcalc(100% - 3px) 0\r\n\t);\r\n}\r\n\r\n/* Active tab - raised above panel */\r\n.tab--active {\r\n\tbackground: var(--color-surface);\r\n\tz-index: 1;\r\n\tborder-bottom-color: var(--color-surface); /* Hide bottom border */\r\n}\r\n\r\n/* Disabled tab */\r\n.tab--disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n\tpointer-events: none;\r\n}\r\n\r\n/* ========================================\r\n * Tab Size Variants\r\n * ======================================== */\r\n\r\n.tab--sm {\r\n\tpadding: var(--spacing-1) var(--spacing-3);\r\n\tfont-size: var(--font-size-xs);\r\n\tline-height: var(--line-height-tight);\r\n}\r\n\r\n.tab--md {\r\n\tpadding: var(--spacing-1_5) var(--spacing-4);\r\n\tfont-size: var(--font-size-md);\r\n\tline-height: var(--line-height-snug);\r\n}\r\n\r\n.tab--lg {\r\n\tpadding: var(--spacing-2) var(--spacing-5);\r\n\tfont-size: var(--font-size-lg);\r\n\tline-height: var(--line-height-normal);\r\n}\r\n\r\n.tab--full-width {\r\n\tflex: 1;\r\n}\r\n\r\n/* ========================================\r\n * Tab Icon\r\n * ======================================== */\r\n\r\n.tabIcon {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tmargin-right: var(--spacing-1);\r\n}\r\n\r\n/* ========================================\r\n * Tab Focus State\r\n * ======================================== */\r\n\r\n.tab:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: -3px;\r\n}\r\n\r\n/* ========================================\r\n * Tab Hover State (subtle)\r\n * ======================================== */\r\n\r\n.tab:not(.tab--active):not(.tab--disabled):hover {\r\n\tbackground: var(--color-gray-300);\r\n}\r\n\r\n/* ========================================\r\n * Panel Container\r\n * ======================================== */\r\n\r\n.panelContainer {\r\n\t/* Mac OS 9 inset panel appearance */\r\n\tbackground-color: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tbox-shadow: var(--shadow-inset);\r\n\t\r\n\t/* Layout */\r\n\tposition: relative;\r\n\twidth: 100%;\r\n}\r\n\r\n.panelContainer--sm {\r\n\tpadding: var(--spacing-3);\r\n}\r\n\r\n.panelContainer--md {\r\n\tpadding: var(--spacing-4);\r\n}\r\n\r\n.panelContainer--lg {\r\n\tpadding: var(--spacing-5);\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.tab {\r\n\t\ttransition: none;\r\n\t}\r\n}\r\n","// Tabs component - Mac OS 9 style\r\n// Classic tabbed navigation with raised tab appearance\r\n\r\nimport React, { useState, useCallback, Children, isValidElement, ReactElement } from 'react';\r\nimport styles from './Tabs.module.css';\r\n\r\nexport interface TabPanelProps {\r\n\t/**\r\n\t * Label for the tab\r\n\t */\r\n\tlabel: string;\r\n\r\n\t/**\r\n\t * Content of the tab panel\r\n\t */\r\n\tchildren: React.ReactNode;\r\n\r\n\t/**\r\n\t * Optional icon to display in the tab\r\n\t */\r\n\ticon?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Whether this tab is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n\r\n\t/**\r\n\t * Value identifier for controlled tabs\r\n\t */\r\n\tvalue?: string;\r\n}\r\n\r\n/**\r\n * TabPanel component - Individual tab content\r\n * Must be used as a child of Tabs component\r\n */\r\nexport const TabPanel: React.FC<TabPanelProps> = ({ children }) => {\r\n\treturn <>{children}</>;\r\n};\r\n\r\nTabPanel.displayName = 'TabPanel';\r\n\r\nexport interface TabsProps {\r\n\t/**\r\n\t * Tab panels as children\r\n\t */\r\n\tchildren: ReactElement<TabPanelProps> | ReactElement<TabPanelProps>[];\r\n\r\n\t/**\r\n\t * Index of the default active tab (uncontrolled)\r\n\t * @default 0\r\n\t */\r\n\tdefaultActiveTab?: number;\r\n\r\n\t/**\r\n\t * Index of the active tab (controlled)\r\n\t */\r\n\tactiveTab?: number;\r\n\r\n\t/**\r\n\t * Callback when tab changes\r\n\t */\r\n\tonChange?: (index: number, value?: string) => void;\r\n\r\n\t/**\r\n\t * Size of the tabs\r\n\t * @default 'md'\r\n\t */\r\n\tsize?: 'sm' | 'md' | 'lg';\r\n\r\n\t/**\r\n\t * Whether tabs take full width\r\n\t * @default false\r\n\t */\r\n\tfullWidth?: boolean;\r\n\r\n\t/**\r\n\t * Custom class name for the container\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Custom class name for the tab list\r\n\t */\r\n\ttabListClassName?: string;\r\n\r\n\t/**\r\n\t * Custom class name for the tab panel container\r\n\t */\r\n\tpanelClassName?: string;\r\n\r\n\t/**\r\n\t * ARIA label for the tab list\r\n\t */\r\n\tariaLabel?: string;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style Tabs component\r\n * \r\n * Classic tabbed navigation with raised tab appearance and inset panel.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 tab styling\r\n * - Controlled and uncontrolled modes\r\n * - Keyboard navigation (Arrow keys, Home, End)\r\n * - Full accessibility with ARIA\r\n * - Optional icons in tabs\r\n * - Disabled tab states\r\n * \r\n * @example\r\n * ```tsx\r\n * // Uncontrolled\r\n * <Tabs>\r\n * <TabPanel label=\"General\">\r\n * <p>General settings content</p>\r\n * </TabPanel>\r\n * <TabPanel label=\"Advanced\">\r\n * <p>Advanced settings content</p>\r\n * </TabPanel>\r\n * </Tabs>\r\n * \r\n * // Controlled\r\n * <Tabs activeTab={activeIndex} onChange={setActiveIndex}>\r\n * <TabPanel label=\"Tab 1\">Content 1</TabPanel>\r\n * <TabPanel label=\"Tab 2\">Content 2</TabPanel>\r\n * </Tabs>\r\n * ```\r\n */\r\nexport const Tabs: React.FC<TabsProps> = ({\r\n\tchildren,\r\n\tdefaultActiveTab = 0,\r\n\tactiveTab: controlledActiveTab,\r\n\tonChange,\r\n\tsize = 'md',\r\n\tfullWidth = false,\r\n\tclassName = '',\r\n\ttabListClassName = '',\r\n\tpanelClassName = '',\r\n\tariaLabel = 'Tabs',\r\n}) => {\r\n\t// Controlled vs uncontrolled state\r\n\tconst [uncontrolledActiveTab, setUncontrolledActiveTab] = useState(defaultActiveTab);\r\n\tconst isControlled = controlledActiveTab !== undefined;\r\n\tconst activeTabIndex = isControlled ? controlledActiveTab : uncontrolledActiveTab;\r\n\r\n\t// Extract tab information from children\r\n\tconst tabs = Children.toArray(children).filter(\r\n\t\t(child): child is ReactElement<TabPanelProps> => isValidElement(child)\r\n\t);\r\n\r\n\t// Handle tab change\r\n\tconst handleTabChange = useCallback(\r\n\t\t(index: number) => {\r\n\t\t\tconst tab = tabs[index];\r\n\t\t\tif (!tab || tab.props.disabled) return;\r\n\r\n\t\t\tif (!isControlled) {\r\n\t\t\t\tsetUncontrolledActiveTab(index);\r\n\t\t\t}\r\n\t\t\tonChange?.(index, tab.props.value);\r\n\t\t},\r\n\t\t[tabs, isControlled, onChange]\r\n\t);\r\n\r\n\t// Keyboard navigation\r\n\tconst handleKeyDown = useCallback(\r\n\t\t(event: React.KeyboardEvent, currentIndex: number) => {\r\n\t\t\tlet newIndex = currentIndex;\r\n\r\n\t\t\tswitch (event.key) {\r\n\t\t\t\tcase 'ArrowLeft':\r\n\t\t\t\tcase 'ArrowUp':\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tnewIndex = currentIndex - 1;\r\n\t\t\t\t\tif (newIndex < 0) newIndex = tabs.length - 1;\r\n\t\t\t\t\t// Skip disabled tabs\r\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex !== currentIndex) {\r\n\t\t\t\t\t\tnewIndex--;\r\n\t\t\t\t\t\tif (newIndex < 0) newIndex = tabs.length - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'ArrowRight':\r\n\t\t\t\tcase 'ArrowDown':\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tnewIndex = currentIndex + 1;\r\n\t\t\t\t\tif (newIndex >= tabs.length) newIndex = 0;\r\n\t\t\t\t\t// Skip disabled tabs\r\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex !== currentIndex) {\r\n\t\t\t\t\t\tnewIndex++;\r\n\t\t\t\t\t\tif (newIndex >= tabs.length) newIndex = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Home':\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tnewIndex = 0;\r\n\t\t\t\t\t// Skip disabled tabs\r\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex < tabs.length - 1) {\r\n\t\t\t\t\t\tnewIndex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'End':\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tnewIndex = tabs.length - 1;\r\n\t\t\t\t\t// Skip disabled tabs\r\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex > 0) {\r\n\t\t\t\t\t\tnewIndex--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\thandleTabChange(newIndex);\r\n\t\t},\r\n\t\t[tabs, handleTabChange]\r\n\t);\r\n\r\n\t// Class names\r\n\tconst containerClassNames = [styles.container, className].filter(Boolean).join(' ');\r\n\r\n\tconst tabListClassNames = [\r\n\t\tstyles.tabList,\r\n\t\tstyles[`tabList--${size}`],\r\n\t\tfullWidth && styles['tabList--full-width'],\r\n\t\ttabListClassName,\r\n\t]\r\n\t\t.filter(Boolean)\r\n\t\t.join(' ');\r\n\r\n\tconst panelContainerClassNames = [\r\n\t\tstyles.panelContainer,\r\n\t\tstyles[`panelContainer--${size}`],\r\n\t\tpanelClassName,\r\n\t]\r\n\t\t.filter(Boolean)\r\n\t\t.join(' ');\r\n\r\n\treturn (\r\n\t\t<div className={containerClassNames}>\r\n\t\t\t<div role=\"tablist\" aria-label={ariaLabel} className={tabListClassNames}>\r\n\t\t\t\t{tabs.map((tab, index) => {\r\n\t\t\t\t\tconst isActive = index === activeTabIndex;\r\n\t\t\t\t\tconst isDisabled = tab.props.disabled;\r\n\r\n\t\t\t\t\tconst tabClassNames = [\r\n\t\t\t\t\t\tstyles.tab,\r\n\t\t\t\t\t\tstyles[`tab--${size}`],\r\n\t\t\t\t\t\tisActive && styles['tab--active'],\r\n\t\t\t\t\t\tisDisabled && styles['tab--disabled'],\r\n\t\t\t\t\t\tfullWidth && styles['tab--full-width'],\r\n\t\t\t\t\t]\r\n\t\t\t\t\t\t.filter(Boolean)\r\n\t\t\t\t\t\t.join(' ');\r\n\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\trole=\"tab\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\taria-selected={isActive}\r\n\t\t\t\t\t\t\taria-controls={`panel-${index}`}\r\n\t\t\t\t\t\t\tid={`tab-${index}`}\r\n\t\t\t\t\t\t\ttabIndex={isActive ? 0 : -1}\r\n\t\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\t\tclassName={tabClassNames}\r\n\t\t\t\t\t\t\tonClick={() => handleTabChange(index)}\r\n\t\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(e, index)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{tab.props.icon && <span className={styles.tabIcon}>{tab.props.icon}</span>}\r\n\t\t\t\t\t\t\t{tab.props.label}\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</div>\r\n\r\n\t\t\t{tabs.map((tab, index) => {\r\n\t\t\t\tconst isActive = index === activeTabIndex;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\trole=\"tabpanel\"\r\n\t\t\t\t\t\tid={`panel-${index}`}\r\n\t\t\t\t\t\taria-labelledby={`tab-${index}`}\r\n\t\t\t\t\t\thidden={!isActive}\r\n\t\t\t\t\t\tclassName={panelContainerClassNames}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{isActive && tab.props.children}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nTabs.displayName = 'Tabs';\r\n\r\nexport default Tabs;\r\n","/* Window Component Styles - Mac OS 9 */\r\n\r\n/* Import pixelated corners utility */\r\n@import '../../styles/pixelated-corners.css';\r\n\r\n.window {\r\n\t/* Base window styling */\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\t\r\n\t/* Mac OS 9 window appearance */\r\n\tbackground-color: var(--color-gray-300); /* #DDDDDD - authentic window background */\r\n\tborder: var(--border-width-thin) solid var(--color-black);\r\n\t\r\n\t/* Authentic Mac OS 9 drop shadow: sharp 2px offset, no blur */\r\n\tfilter: drop-shadow(2px 2px 0px rgba(0, 0, 0, 0.5));\r\n\t\r\n\t/* Layout */\r\n\tposition: relative;\r\n\toverflow: hidden;\r\n\t\r\n\t/* Default dimensions */\r\n\twidth: auto;\r\n\theight: auto;\r\n\tmin-width: 200px;\r\n\tmin-height: 100px;\r\n\t\r\n}\r\n\r\n/* ========================================\r\n * Window States\r\n * ======================================== */\r\n\r\n.window--active {\r\n\t/* Active window - standard appearance */\r\n\tz-index: 10;\r\n}\r\n\r\n.window--inactive {\r\n\t/* Inactive window - slightly dimmed */\r\n\topacity: 0.92;\r\n\tz-index: 1;\r\n}\r\n\r\n/* ========================================\r\n * Title Bar\r\n * ======================================== */\r\n\r\n.titleBar {\r\n\t/* Title bar container */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\t\r\n\t/* Styling - authentic Mac OS 9 header color */\r\n\tbackground-color: #CBCBCB;\r\n\tborder-bottom: var(--border-width-thin) solid var(--color-black);\r\n\t\r\n\t/* Padding */\r\n\tpadding: var(--spacing-1_5) var(--spacing-2);\r\n\t\r\n\t/* Height */\r\n\tmin-height: 22px;\r\n\t\r\n\t/* Prevent selection */\r\n\tuser-select: none;\r\n\t\r\n\t/* Position for pseudo-elements */\r\n\tposition: relative;\r\n\r\n}\r\n.titleBar[data-numControls=\"3\"] .titleCenter > :first-child{\r\n\twidth: calc(100% - (48px + var(--spacing-2)));\r\n\tmargin-left: calc(48px + var(--spacing-2));\r\n}\r\n.titleBar[data-numControls=\"2\"] .titleCenter> :first-child {\r\n\twidth: calc(100% - (36px + var(--spacing-2)));\r\n\tmargin-left: calc(36px + var(--spacing-2));\r\n}\r\n.titleBar[data-numControls=\"1\"] .titleCenter> :first-child {\r\n\twidth: calc(100% - (24px));\r\n\tmargin-left: calc(24px);\r\n\t}\r\n\r\n.titleCenter{\t\r\n\tdisplay: grid;\r\n\talign-items: center;\r\n\twidth: 100%;\r\n\tgrid-template-columns: 1fr max-content 1fr;\r\n}\r\n.titleCenter svg{\r\n\twidth: 100%;\r\n}\r\n/* Header striped lines - left side */\r\n.titleBar::before {\r\n\tcontent: '';\r\n\tleft: 60px;\r\n\ttop: 50%;\r\n\tflex-grow: 1;\t\r\n\t/* Responsive width - fills from after controls to center, with padding for title */\r\n\theight: 12px;\r\n\t/* 6 horizontal lines pattern */\r\n\t/* background: repeating-linear-gradient(\r\n\t\tto bottom,\r\n\t\ttransparent 0px,\r\n\t\ttransparent 1px,\r\n\t\tvar(--color-gray-500) 1px,\r\n\t\tvar(--color-gray-500) 2px,\r\n\t\ttransparent 2px,\r\n\t\ttransparent 3px\r\n\t); */\r\n\t\r\n\t/* Prevent interaction */\r\n\tpointer-events: none;\r\n}\r\n\r\n/* Header striped lines - right side */\r\n.titleBar::after {\r\n\tcontent: '';\r\n\tright: 8px;\r\n\ttop: 50%;\t\r\n\tflex-grow: 1;\r\n\t/* Responsive width - extends from right edge to center, with padding for title */\r\n\tflex: 1;\r\n\t/* max-width: 100px; */\r\n\theight: 12px;\r\n\t\r\n\t/* 6 horizontal lines pattern */\r\n\t/* background: repeating-linear-gradient(\r\n\t\tto bottom,\r\n\t\ttransparent 0px,\r\n\t\ttransparent 1px,\r\n\t\tvar(--color-gray-500) 1px,\r\n\t\tvar(--color-gray-500) 2px,\r\n\t\ttransparent 2px,\r\n\t\ttransparent 3px\r\n\t);\r\n\t */\r\n\t/* Prevent interaction */\r\n\tpointer-events: none;\r\n}\r\n\r\n/* ========================================\r\n * Window Controls\r\n * ======================================== */\r\n\r\n.controls {\r\n\t/* Control buttons container */\r\n\tdisplay: flex;\r\n\tgap: var(--spacing-1);\r\n\talign-items: center;\r\n\t\r\n\t/* Ensure controls are above pseudo-elements */\r\n\tposition: absolute;\r\n\tleft: 12px;\r\n\tz-index: 1;\r\n}\r\n\r\n.controlButton {\r\n\t/* Base control button */\r\n\twidth: 12px;\r\n\theight: 12px;\r\n\tpadding: 0;\r\n\tmargin: 0;\r\n\t\r\n\t/* Remove button defaults */\r\n\tbackground: transparent;\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tcursor: pointer;\r\n\t\r\n\t/* Box shadow for depth */\r\n\tbox-shadow: var(--shadow-inset);\r\n\t\r\n\t/* Transitions */\r\n\ttransition: none;\r\n\t\r\n\t/* Ensure controls are clickable */\r\n\tposition: relative;\r\n\tz-index: 2;\r\n}\r\n\r\n.controlButton:hover {\r\n\tbackground-color: var(--color-gray-300);\r\n}\r\n\r\n.controlButton:active {\r\n\tbox-shadow: var(--shadow-pressed);\r\n}\r\n\r\n.controlButton:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: 1px;\r\n}\r\n\r\n/* Control button visual indicators */\r\n.closeBox,\r\n.minimizeBox,\r\n.maximizeBox {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tposition: relative;\r\n}\r\n\r\n/* Close button: X pattern */\r\n.closeBox::before,\r\n.closeBox::after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\ttop: 50%;\r\n\tleft: 50%;\r\n\twidth: 6px;\r\n\t/* height: 1px;\r\n\tbackground-color: var(--color-border); */\r\n}\r\n\r\n/* .closeBox::before {\r\n\ttransform: translate(-50%, -50%) rotate(45deg);\r\n}\r\n\r\n.closeBox::after {\r\n\ttransform: translate(-50%, -50%) rotate(-45deg);\r\n} */\r\n\r\n/* Minimize button: dash */\r\n.minimizeBox::before {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\ttop: 50%;\r\n\tleft: 50%;\r\n\ttransform: translate(-50%, -50%);\r\n\twidth: 6px;\r\n\theight: 1px;\r\n\tbackground-color: var(--color-border);\r\n}\r\n\r\n/* Maximize button: small square */\r\n.maximizeBox::before {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\ttop: 50%;\r\n\tleft: 50%;\r\n\ttransform: translate(-50%, -50%);\r\n\twidth: 4px;\r\n\theight: 4px;\r\n\tborder: 1px solid var(--color-border);\r\n}\r\n\r\n/* ========================================\r\n * Title Text\r\n * ======================================== */\r\n\r\n.titleText {\r\n\t/* Title text styling */\r\n\tfont-family: var(--font-system);\r\n\tfont-size: var(--font-size-md);\r\n\tfont-weight: var(--font-weight-bold);\r\n\tline-height: var(--line-height-snug);\r\n\tcolor: var(--color-text);\r\n\t\r\n\t/* Absolute positioning for true centering regardless of controls */\r\n\t\r\n\t/* Max width to prevent overlap with lines - centered with padding */\r\n\t/* max-width: calc(100% - 160px); */\r\n\tpadding: 0 var(--spacing-2);\r\n\t\r\n\t/* Truncate long titles */\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\twhite-space: nowrap;\r\n\t\r\n\t/* Ensure text is above pseudo-elements */\r\n\tz-index: 1;\r\n}\r\n\r\n/* ========================================\r\n * Content Area\r\n * ======================================== */\r\n\r\n.content {\r\n\t/* Content area */\r\n\tflex: 1;\r\n\toverflow: auto;\r\n\t\r\n\t/* Background - white content area like authentic Mac OS 9 */\r\n\tbackground-color: var(--color-gray-100);\r\n\t\r\n\t/* Padding */\r\n\tpadding: var(--spacing-4);\r\n\t\r\n\t/* Position for scrolling */\r\n\tposition: relative;\r\n\t\r\n\t/* Authentic inset border */\r\n\tmargin: var(--spacing-2);\r\n\tborder: var(--border-width-thin) solid #555555;\r\n}\r\n\r\n/* ========================================\r\n * Resize Handle\r\n * ======================================== */\r\n\r\n.resizeHandle {\r\n\t/* Resize handle in bottom-right corner */\r\n\tposition: absolute;\r\n\tbottom: 0;\r\n\tright: 0;\r\n\twidth: 12px;\r\n\theight: 12px;\r\n\t\r\n\t/* Visual indicator (diagonal lines) */\r\n\tbackground-image: linear-gradient(\r\n\t\t135deg,\r\n\t\ttransparent 0%,\r\n\t\ttransparent 40%,\r\n\t\tvar(--color-border) 40%,\r\n\t\tvar(--color-border) 45%,\r\n\t\ttransparent 45%,\r\n\t\ttransparent 55%,\r\n\t\tvar(--color-border) 55%,\r\n\t\tvar(--color-border) 60%,\r\n\t\ttransparent 60%\r\n\t);\r\n\t\r\n\t/* Cursor */\r\n\tcursor: nwse-resize;\r\n\t\r\n\t/* Layering */\r\n\tz-index: 5;\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode */\r\n@media (prefers-contrast: high) {\r\n\t.window {\r\n\t\tborder-width: 2px;\r\n\t}\r\n\t\r\n\t.controlButton {\r\n\t\tborder-width: 2px;\r\n\t}\r\n}\r\n\r\n/* Reduced motion */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.controlButton {\r\n\t\ttransition: none;\r\n\t}\r\n}\r\n","// Window component - Mac OS 9 style\r\n// Classic window container with optional title bar\r\n\r\nimport React, { forwardRef } from 'react';\r\nimport styles from './Window.module.css';\r\n\r\nexport interface WindowProps {\r\n\t/**\r\n\t * Window content\r\n\t */\r\n\tchildren: React.ReactNode;\r\n\r\n\t/**\r\n\t * Window title (displays in title bar if no titleBar prop provided)\r\n\t */\r\n\ttitle?: string;\r\n\r\n\t/**\r\n\t * Custom title bar component\r\n\t * If provided, overrides the default title bar\r\n\t */\r\n\ttitleBar?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Whether window is active/focused\r\n\t * @default true\r\n\t */\r\n\tactive?: boolean;\r\n\r\n\t/**\r\n\t * Width of the window\r\n\t * @default 'auto'\r\n\t */\r\n\twidth?: number | string;\r\n\r\n\t/**\r\n\t * Height of the window\r\n\t * @default 'auto'\r\n\t */\r\n\theight?: number | string;\r\n\r\n\t/**\r\n\t * Custom class name for the window container\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Custom class name for the content area\r\n\t */\r\n\tcontentClassName?: string;\r\n\r\n\t/**\r\n\t * Whether to show window controls (close, minimize, maximize)\r\n\t * @default true\r\n\t */\r\n\tshowControls?: boolean;\r\n\r\n\t/**\r\n\t * Callback when close button is clicked\r\n\t */\r\n\tonClose?: () => void;\r\n\r\n\t/**\r\n\t * Callback when minimize button is clicked\r\n\t */\r\n\tonMinimize?: () => void;\r\n\r\n\t/**\r\n\t * Callback when maximize button is clicked\r\n\t */\r\n\tonMaximize?: () => void;\r\n\r\n\t/**\r\n\t * Whether the window has a resize handle\r\n\t * @default false\r\n\t */\r\n\tresizable?: boolean;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style Window component\r\n * \r\n * Classic window container with title bar and content area.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 window styling with beveled edges\r\n * - Optional title bar with window controls\r\n * - Active/inactive states\r\n * - Composable with custom TitleBar component\r\n * - Flexible sizing\r\n * \r\n * @example\r\n * ```tsx\r\n * // Simple window with title\r\n * <Window title=\"My Window\">\r\n * <p>Window content goes here</p>\r\n * </Window>\r\n * \r\n * // Window with custom title bar\r\n * <Window titleBar={<TitleBar title=\"Custom\" />}>\r\n * <p>Content</p>\r\n * </Window>\r\n * \r\n * // Window with controls and callbacks\r\n * <Window \r\n * title=\"Document\"\r\n * onClose={() => console.log('Close')}\r\n * onMinimize={() => console.log('Minimize')}\r\n * >\r\n * <p>Content</p>\r\n * </Window>\r\n * ```\r\n */\r\nexport const Window = forwardRef<HTMLDivElement, WindowProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tchildren,\r\n\t\t\ttitle,\r\n\t\t\ttitleBar,\r\n\t\t\tactive = true,\r\n\t\t\twidth = 'auto',\r\n\t\t\theight = 'auto',\r\n\t\t\tclassName = '',\r\n\t\t\tcontentClassName = '',\r\n\t\t\tshowControls = true,\r\n\t\t\tonClose,\r\n\t\t\tonMinimize,\r\n\t\t\tonMaximize,\r\n\t\t\tresizable = false,\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Class names\r\n\t\tconst windowClassNames = [\r\n\t\t\tstyles.window,\r\n\t\t\tactive ? styles['window--active'] : styles['window--inactive'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\tconst contentClassNames = [styles.content, contentClassName].filter(Boolean).join(' ');\r\n\r\n\t\t// Window style\r\n\t\tconst windowStyle: React.CSSProperties = {};\r\n\t\tif (width !== 'auto') {\r\n\t\t\twindowStyle.width = typeof width === 'number' ? `${width}px` : width;\r\n\t\t}\r\n\t\tif (height !== 'auto') {\r\n\t\t\twindowStyle.height = typeof height === 'number' ? `${height}px` : height;\r\n\t\t}\r\n\r\n\t\t// Render title bar if title provided and no custom titleBar\r\n\t\tconst renderTitleBar = () => {\r\n\t\t\tif (titleBar) {\r\n\t\t\t\treturn titleBar;\r\n\t\t\t}\r\n\r\n\t\t\tif (title) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<div className={styles.titleBar} data-numControls={\r\n\t\t\t\t\t\t[onClose, onMinimize, onMaximize].filter(Boolean).length\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t\t{showControls && (\r\n\t\t\t\t\t\t\t<div className={styles.controls}>\r\n\t\t\t\t\t\t\t\t{onClose && (\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName={styles.controlButton}\r\n\t\t\t\t\t\t\t\t\tonClick={onClose}\r\n\t\t\t\t\t\t\t\t\taria-label=\"Close\"\r\n\t\t\t\t\t\t\t\t\ttitle=\"Close\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<div className={styles.closeBox} />\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{onMinimize && (\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName={styles.controlButton}\r\n\t\t\t\t\t\t\t\t\t\tonClick={onMinimize}\r\n\t\t\t\t\t\t\t\t\t\taria-label=\"Minimize\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"Minimize\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<div className={styles.minimizeBox} />\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{onMaximize && (\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName={styles.controlButton}\r\n\t\t\t\t\t\t\t\t\t\tonClick={onMaximize}\r\n\t\t\t\t\t\t\t\t\t\taria-label=\"Maximize\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"Maximize\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<div className={styles.maximizeBox} />\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<div className={styles.titleCenter}>\r\n\t\t\t\t\t\t<svg width=\"132\" height=\"13\" viewBox=\"0 0 132 13\" fill=\"none\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t\t\t\t\t\t<rect width=\"130.517\" height=\"13\" fill=\"#DDDDDD\"/>\r\n\t\t\t\t\t\t\t<rect width=\"1\" height=\"13\" fill=\"#EEEEEE\"/>\r\n\t\t\t\t\t\t\t<rect x=\"130\" width=\"1\" height=\"13\" fill=\"#C5C5C5\"/>\r\n\t\t\t\t\t\t\t<rect y=\"1\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"5\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"9\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"3\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"7\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"11\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t<div className={styles.titleText}>{title}</div>\r\n\t\t\t\t\t\t<svg width=\"132\" height=\"13\" viewBox=\"0 0 132 13\" fill=\"none\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t\t\t\t\t\t<rect width=\"130.517\" height=\"13\" fill=\"#DDDDDD\"/>\r\n\t\t\t\t\t\t\t<rect width=\"1\" height=\"13\" fill=\"#EEEEEE\"/>\r\n\t\t\t\t\t\t\t<rect x=\"130\" width=\"1\" height=\"13\" fill=\"#C5C5C5\"/>\r\n\t\t\t\t\t\t\t<rect y=\"1\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"5\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"9\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"3\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"7\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t\t<rect y=\"11\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\r\n\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t</div>\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div ref={ref} className={windowClassNames} style={windowStyle}>\r\n\t\t\t\t{renderTitleBar()}\r\n\t\t\t\t<div className={contentClassNames}>{children}</div>\r\n\t\t\t\t{resizable && <div className={styles.resizeHandle} aria-hidden=\"true\" />}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nWindow.displayName = 'Window';\r\n\r\nexport default Window;\r\n","/* Dialog Component Styles - Mac OS 9 */\r\n\r\n.backdrop {\r\n\t/* Full screen backdrop */\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\tz-index: 1000;\r\n\t\r\n\t/* Background overlay */\r\n\tbackground-color: rgba(0, 0, 0, 0.3);\r\n\t\r\n\t/* Center dialog */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\t\r\n\t/* Prevent interaction with content behind */\r\n\tbackdrop-filter: none;\r\n}\r\n\r\n.dialogContainer {\r\n\t/* Container for the window */\r\n\tposition: relative;\r\n\t\r\n\t/* Prevent backdrop click from closing when clicking dialog */\r\n\tpointer-events: auto;\r\n\t\r\n\t/* Animation */\r\n\tanimation: dialogFadeIn 0.15s ease-out;\r\n}\r\n\r\n/* ========================================\r\n * Animations\r\n * ======================================== */\r\n\r\n@keyframes dialogFadeIn {\r\n\tfrom {\r\n\t\topacity: 0;\r\n\t\ttransform: scale(0.95);\r\n\t}\r\n\tto {\r\n\t\topacity: 1;\r\n\t\ttransform: scale(1);\r\n\t}\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* Reduced motion */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.dialogContainer {\r\n\t\tanimation: none;\r\n\t}\r\n}\r\n","// Dialog component - Mac OS 9 style\r\n// Modal dialog with backdrop and focus trapping\r\n\r\nimport React, { forwardRef, useEffect, useRef, useCallback } from 'react';\r\nimport { Window, type WindowProps } from '../Window/Window';\r\nimport styles from './Dialog.module.css';\r\n\r\nexport interface DialogProps extends Omit<WindowProps, 'active'> {\r\n\t/**\r\n\t * Whether the dialog is open\r\n\t * @default false\r\n\t */\r\n\topen?: boolean;\r\n\r\n\t/**\r\n\t * Callback when dialog should close\r\n\t * Called when backdrop is clicked or Escape is pressed\r\n\t */\r\n\tonClose?: () => void;\r\n\r\n\t/**\r\n\t * Whether clicking the backdrop closes the dialog\r\n\t * @default true\r\n\t */\r\n\tcloseOnBackdropClick?: boolean;\r\n\r\n\t/**\r\n\t * Whether pressing Escape closes the dialog\r\n\t * @default true\r\n\t */\r\n\tcloseOnEscape?: boolean;\r\n\r\n\t/**\r\n\t * Custom backdrop className\r\n\t */\r\n\tbackdropClassName?: string;\r\n\r\n\t/**\r\n\t * Whether to trap focus within the dialog\r\n\t * @default true\r\n\t */\r\n\ttrapFocus?: boolean;\r\n\r\n\t/**\r\n\t * Initial focus element selector or ref\r\n\t */\r\n\tinitialFocus?: string | React.RefObject<HTMLElement>;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style Dialog component\r\n * \r\n * Modal dialog with backdrop, focus trapping, and keyboard handling.\r\n * Built on top of the Window component.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 dialog styling\r\n * - Modal backdrop with click-to-close\r\n * - Escape key to close\r\n * - Focus trapping within dialog\r\n * - Centered on screen\r\n * - Prevents body scroll when open\r\n * \r\n * @example\r\n * ```tsx\r\n * const [open, setOpen] = useState(false);\r\n * \r\n * <Dialog\r\n * open={open}\r\n * onClose={() => setOpen(false)}\r\n * title=\"Confirm\"\r\n * width={350}\r\n * >\r\n * <p>Are you sure?</p>\r\n * <div>\r\n * <Button onClick={() => setOpen(false)}>Cancel</Button>\r\n * <Button variant=\"primary\">OK</Button>\r\n * </div>\r\n * </Dialog>\r\n * ```\r\n */\r\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\r\n\t(\r\n\t\t{\r\n\t\t\topen = false,\r\n\t\t\tonClose,\r\n\t\t\tcloseOnBackdropClick = true,\r\n\t\t\tcloseOnEscape = true,\r\n\t\t\tbackdropClassName = '',\r\n\t\t\ttrapFocus = true,\r\n\t\t\tinitialFocus,\r\n\t\t\tchildren,\r\n\t\t\t...windowProps\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst dialogRef = useRef<HTMLDivElement>(null);\r\n\t\tconst previousActiveElement = useRef<HTMLElement | null>(null);\r\n\r\n\t\t// Handle Escape key\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!open || !closeOnEscape) return;\r\n\r\n\t\t\tconst handleEscape = (event: KeyboardEvent) => {\r\n\t\t\t\tif (event.key === 'Escape') {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\tonClose?.();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener('keydown', handleEscape);\r\n\t\t\treturn () => document.removeEventListener('keydown', handleEscape);\r\n\t\t}, [open, closeOnEscape, onClose]);\r\n\r\n\t\t// Store previous active element and restore on close\r\n\t\tuseEffect(() => {\r\n\t\t\tif (open) {\r\n\t\t\t\tpreviousActiveElement.current = document.activeElement as HTMLElement;\r\n\t\t\t} else if (previousActiveElement.current) {\r\n\t\t\t\tpreviousActiveElement.current.focus();\r\n\t\t\t}\r\n\t\t}, [open]);\r\n\r\n\t\t// Set initial focus\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!open || !initialFocus) return;\r\n\r\n\t\t\tconst focusElement = () => {\r\n\t\t\t\tif (typeof initialFocus === 'string') {\r\n\t\t\t\t\tconst element = dialogRef.current?.querySelector(initialFocus) as HTMLElement;\r\n\t\t\t\t\telement?.focus();\r\n\t\t\t\t} else if (initialFocus.current) {\r\n\t\t\t\t\tinitialFocus.current.focus();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Small delay to ensure dialog is rendered\r\n\t\t\tsetTimeout(focusElement, 10);\r\n\t\t}, [open, initialFocus]);\r\n\r\n\t\t// Focus trapping\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!open || !trapFocus) return;\r\n\r\n\t\t\tconst handleTabKey = (event: KeyboardEvent) => {\r\n\t\t\t\tif (event.key !== 'Tab' || !dialogRef.current) return;\r\n\r\n\t\t\t\tconst focusableElements = dialogRef.current.querySelectorAll(\r\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n\t\t\t\t);\r\n\r\n\t\t\t\tconst firstElement = focusableElements[0] as HTMLElement;\r\n\t\t\t\tconst lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\r\n\r\n\t\t\t\tif (event.shiftKey) {\r\n\t\t\t\t\t// Shift + Tab\r\n\t\t\t\t\tif (document.activeElement === firstElement) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tlastElement?.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Tab\r\n\t\t\t\t\tif (document.activeElement === lastElement) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tfirstElement?.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener('keydown', handleTabKey);\r\n\t\t\treturn () => document.removeEventListener('keydown', handleTabKey);\r\n\t\t}, [open, trapFocus]);\r\n\r\n\t\t// Prevent body scroll when dialog is open\r\n\t\tuseEffect(() => {\r\n\t\t\tif (open) {\r\n\t\t\t\tdocument.body.style.overflow = 'hidden';\r\n\t\t\t} else {\r\n\t\t\t\tdocument.body.style.overflow = '';\r\n\t\t\t}\r\n\r\n\t\t\treturn () => {\r\n\t\t\t\tdocument.body.style.overflow = '';\r\n\t\t\t};\r\n\t\t}, [open]);\r\n\r\n\t\t// Handle backdrop click\r\n\t\tconst handleBackdropClick = useCallback(\r\n\t\t\t(event: React.MouseEvent<HTMLDivElement>) => {\r\n\t\t\t\tif (closeOnBackdropClick && event.target === event.currentTarget) {\r\n\t\t\t\t\tonClose?.();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[closeOnBackdropClick, onClose]\r\n\t\t);\r\n\r\n\t\tif (!open) return null;\r\n\r\n\t\tconst backdropClassNames = [styles.backdrop, backdropClassName].filter(Boolean).join(' ');\r\n\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tclassName={backdropClassNames}\r\n\t\t\t\tonClick={handleBackdropClick}\r\n\t\t\t\trole=\"presentation\"\r\n\t\t\t\taria-modal=\"true\"\r\n\t\t\t>\r\n\t\t\t\t<div className={styles.dialogContainer} ref={dialogRef} role=\"dialog\" aria-modal=\"true\">\r\n\t\t\t\t\t<Window {...windowProps} ref={ref} active={true} onClose={onClose}>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Window>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nDialog.displayName = 'Dialog';\r\n\r\nexport default Dialog;\r\n","/* MenuBar Component Styles - Mac OS 9 */\r\n\r\n/* ========================================\r\n * Menu Bar Container\r\n * ======================================== */\r\n\r\n.menuBar {\r\n\t/* Base menu bar styling */\r\n\tdisplay: flex;\r\n\talign-items: stretch;\r\n\t\r\n\t/* Mac OS 9 menu bar appearance */\r\n\tbackground-color: var(--color-gray-100); /* Light gray like Mac OS 9 */\r\n\tborder-bottom: var(--border-width-thin) solid var(--color-black);\r\n\t\r\n\t/* Layout */\r\n\twidth: 100%;\r\n\tmin-height: 24px;\r\n\t\r\n\t/* Position */\r\n\tposition: relative;\r\n\t\r\n\t/* Prevent selection */\r\n\tuser-select: none;\r\n}\r\n\r\n/* ========================================\r\n * Menu Container\r\n * ======================================== */\r\n\r\n.menuContainer {\r\n\t/* Container for each menu button and dropdown */\r\n\tposition: relative;\r\n\tdisplay: flex;\r\n\talign-items: stretch;\r\n}\r\n\r\n/* ========================================\r\n * Menu Button\r\n * ======================================== */\r\n\r\n.menuButton {\r\n\t/* Base menu button styling */\r\n\tpadding: var(--spacing-1) var(--spacing-3);\r\n\t\r\n\t/* Text styling */\r\n\tfont-family: var(--font-system);\r\n\tfont-size: var(--font-size-md);\r\n\tfont-weight: var(--font-weight-bold);\r\n\tline-height: var(--line-height-snug);\r\n\tcolor: var(--color-text);\r\n\ttext-align: center;\r\n\twhite-space: nowrap;\r\n\t\r\n\t/* Remove button defaults */\r\n\tbackground-color: transparent;\r\n\tborder: none;\r\n\tcursor: pointer;\r\n\t\r\n\t/* Transitions */\r\n\ttransition: background-color 50ms ease;\r\n\t\r\n\t/* Prevent text selection */\r\n\tuser-select: none;\r\n}\r\n\r\n/* ========================================\r\n * Menu Button States\r\n * ======================================== */\r\n\r\n.menuButton:hover:not(.menuButton--disabled) {\r\n\t/* Hover state - blue highlight like Mac OS 9 */\r\n\tbackground-color: #0000BB;\r\n\tcolor: var(--color-white);\r\n}\r\n\r\n.menuButton:focus-visible {\r\n\t/* Focus state */\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: -1px;\r\n}\r\n\r\n.menuButton--open {\r\n\t/* Open state - highlighted */\r\n\tbackground-color: #0000BB;\r\n\tcolor: var(--color-white);\r\n}\r\n\r\n.menuButton--disabled {\r\n\t/* Disabled state */\r\n\tcolor: var(--color-gray-500);\r\n\tcursor: not-allowed;\r\n}\r\n\r\n/* ========================================\r\n * Dropdown Menu\r\n * ======================================== */\r\n\r\n.dropdown {\r\n\t/* Dropdown container */\r\n\tposition: absolute;\r\n\ttop: 100%;\r\n\tleft: 0;\r\n\tz-index: 1000;\r\n\t\r\n\t/* Mac OS 9 menu appearance */\r\n\tbackground-color: var(--color-gray-100);\r\n\tborder: var(--border-width-thin) solid var(--color-black);\r\n\t\r\n\t/* Drop shadow */\r\n\tbox-shadow: 2px 2px 0px rgba(0, 0, 0, 0.5);\r\n\t\r\n\t/* Sizing */\r\n\tmin-width: 200px;\r\n\t\r\n\t/* Padding */\r\n\tpadding: var(--spacing-1) 0;\r\n\t\r\n\t/* Animation */\r\n\tanimation: menuFadeIn 100ms ease-out;\r\n}\r\n\r\n@keyframes menuFadeIn {\r\n\tfrom {\r\n\t\topacity: 0;\r\n\t\ttransform: translateY(-4px);\r\n\t}\r\n\tto {\r\n\t\topacity: 1;\r\n\t\ttransform: translateY(0);\r\n\t}\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode */\r\n@media (prefers-contrast: high) {\r\n\t.menuBar {\r\n\t\tborder-width: 2px;\r\n\t}\r\n\t\r\n\t.menuButton:hover:not(.menuButton--disabled),\r\n\t.menuButton--open {\r\n\t\toutline: 2px solid currentColor;\r\n\t\toutline-offset: -2px;\r\n\t}\r\n\t\r\n\t.dropdown {\r\n\t\tborder-width: 2px;\r\n\t}\r\n}\r\n\r\n/* Reduced motion */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.menuButton {\r\n\t\ttransition: none;\r\n\t}\r\n\t\r\n\t.dropdown {\r\n\t\tanimation: none;\r\n\t}\r\n}","// MenuBar component - Mac OS 9 style\r\n// Horizontal menu bar with dropdown menus\r\n\r\nimport React, { forwardRef, useRef, useState, useEffect, useCallback } from 'react';\r\nimport styles from './MenuBar.module.css';\r\n\r\nexport interface Menu {\r\n\t/**\r\n\t * Menu label (displayed in the menu bar)\r\n\t */\r\n\tlabel: string;\r\n\r\n\t/**\r\n\t * Menu items (content of the dropdown)\r\n\t */\r\n\titems: React.ReactNode;\r\n\r\n\t/**\r\n\t * Whether the menu is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n}\r\n\r\nexport interface MenuBarProps {\r\n\t/**\r\n\t * Array of menus to display\r\n\t */\r\n\tmenus: Menu[];\r\n\r\n\t/**\r\n\t * Index of the currently open menu (controlled)\r\n\t */\r\n\topenMenuIndex?: number;\r\n\r\n\t/**\r\n\t * Callback when a menu is opened\r\n\t */\r\n\tonMenuOpen?: (index: number) => void;\r\n\r\n\t/**\r\n\t * Callback when menus are closed\r\n\t */\r\n\tonMenuClose?: () => void;\r\n\r\n\t/**\r\n\t * Custom class name for the menu bar\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Custom class name for menu dropdowns\r\n\t */\r\n\tdropdownClassName?: string;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style MenuBar component\r\n * \r\n * Horizontal menu bar with dropdown menus.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 menu bar styling\r\n * - Horizontal menu layout\r\n * - Dropdown menus on click\r\n * - Keyboard navigation (Left/Right for menus, Up/Down for items)\r\n * - Click outside to close\r\n * - Escape key to close\r\n * - Controlled state (consumers manage open/closed)\r\n * - Disabled menu support\r\n * \r\n * @example\r\n * ```tsx\r\n * const [openMenu, setOpenMenu] = useState<number | undefined>();\r\n * \r\n * <MenuBar\r\n * openMenuIndex={openMenu}\r\n * onMenuOpen={setOpenMenu}\r\n * onMenuClose={() => setOpenMenu(undefined)}\r\n * menus={[\r\n * {\r\n * label: 'File',\r\n * items: (\r\n * <>\r\n * <MenuItem label=\"Open...\" shortcut=\"⌘O\" onClick={() => {}} />\r\n * <MenuItem label=\"Save\" shortcut=\"⌘S\" onClick={() => {}} />\r\n * </>\r\n * ),\r\n * },\r\n * {\r\n * label: 'Edit',\r\n * items: (\r\n * <>\r\n * <MenuItem label=\"Undo\" shortcut=\"⌘Z\" onClick={() => {}} />\r\n * <MenuItem label=\"Redo\" shortcut=\"⇧⌘Z\" onClick={() => {}} />\r\n * </>\r\n * ),\r\n * },\r\n * ]}\r\n * />\r\n * ```\r\n */\r\nexport const MenuBar = forwardRef<HTMLDivElement, MenuBarProps>(\r\n\t({ menus, openMenuIndex, onMenuOpen, onMenuClose, className = '', dropdownClassName = '' }, ref) => {\r\n\t\tconst [menuBarElement, setMenuBarElement] = useState<HTMLDivElement | null>(null);\r\n\t\tconst [focusedIndex, setFocusedIndex] = useState<number>(-1);\r\n\r\n\t\t// Handle click outside to close menu\r\n\t\tuseEffect(() => {\r\n\t\t\tif (openMenuIndex === undefined || !menuBarElement) return;\r\n\r\n\t\t\tconst handleClickOutside = (event: MouseEvent) => {\r\n\t\t\t\tif (menuBarElement && !menuBarElement.contains(event.target as Node)) {\r\n\t\t\t\t\tonMenuClose?.();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener('mousedown', handleClickOutside);\r\n\t\t\treturn () => document.removeEventListener('mousedown', handleClickOutside);\r\n\t\t}, [openMenuIndex, onMenuClose, menuBarElement]);\r\n\r\n\t\t// Handle Escape key to close menu\r\n\t\tuseEffect(() => {\r\n\t\t\tif (openMenuIndex === undefined) return;\r\n\r\n\t\t\tconst handleEscape = (event: KeyboardEvent) => {\r\n\t\t\t\tif (event.key === 'Escape') {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tonMenuClose?.();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener('keydown', handleEscape);\r\n\t\t\treturn () => document.removeEventListener('keydown', handleEscape);\r\n\t\t}, [openMenuIndex, onMenuClose]);\r\n\r\n\t\t// Handle keyboard navigation\r\n\t\tconst handleKeyDown = useCallback(\r\n\t\t\t(event: React.KeyboardEvent) => {\r\n\t\t\t\tswitch (event.key) {\r\n\t\t\t\t\tcase 'ArrowLeft':\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tif (openMenuIndex !== undefined) {\r\n\t\t\t\t\t\t\t// Move to previous menu\r\n\t\t\t\t\t\t\tconst prevIndex = openMenuIndex > 0 ? openMenuIndex - 1 : menus.length - 1;\r\n\t\t\t\t\t\t\tif (!menus[prevIndex]?.disabled) {\r\n\t\t\t\t\t\t\t\tonMenuOpen?.(prevIndex);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if (focusedIndex > 0) {\r\n\t\t\t\t\t\t\tsetFocusedIndex(focusedIndex - 1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'ArrowRight':\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tif (openMenuIndex !== undefined) {\r\n\t\t\t\t\t\t\t// Move to next menu\r\n\t\t\t\t\t\t\tconst nextIndex = openMenuIndex < menus.length - 1 ? openMenuIndex + 1 : 0;\r\n\t\t\t\t\t\t\tif (!menus[nextIndex]?.disabled) {\r\n\t\t\t\t\t\t\t\tonMenuOpen?.(nextIndex);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if (focusedIndex < menus.length - 1) {\r\n\t\t\t\t\t\t\tsetFocusedIndex(focusedIndex + 1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'ArrowDown':\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tif (openMenuIndex === undefined && focusedIndex >= 0) {\r\n\t\t\t\t\t\t\t// Open the focused menu\r\n\t\t\t\t\t\t\tif (!menus[focusedIndex]?.disabled) {\r\n\t\t\t\t\t\t\t\tonMenuOpen?.(focusedIndex);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'Enter':\r\n\t\t\t\t\tcase ' ':\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tif (openMenuIndex === undefined && focusedIndex >= 0) {\r\n\t\t\t\t\t\t\t// Open the focused menu\r\n\t\t\t\t\t\t\tif (!menus[focusedIndex]?.disabled) {\r\n\t\t\t\t\t\t\t\tonMenuOpen?.(focusedIndex);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[openMenuIndex, focusedIndex, menus, onMenuOpen, onMenuClose]\r\n\t\t);\r\n\r\n\t\t// Handle menu button click\r\n\t\tconst handleMenuClick = (index: number) => {\r\n\t\t\tif (menus[index]?.disabled) return;\r\n\r\n\t\t\tif (openMenuIndex === index) {\r\n\t\t\t\t// Clicking the same menu closes it\r\n\t\t\t\tonMenuClose?.();\r\n\t\t\t} else {\r\n\t\t\t\t// Open the clicked menu\r\n\t\t\t\tonMenuOpen?.(index);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Class names\r\n\t\tconst menuBarClassNames = [styles.menuBar, className].filter(Boolean).join(' ');\r\n\r\n\t\tconst dropdownClassNames = [styles.dropdown, dropdownClassName].filter(Boolean).join(' ');\r\n\r\n\t// Callback ref to handle both internal state and forwarded ref\r\n\tconst handleRef = useCallback(\r\n\t\t(node: HTMLDivElement | null) => {\r\n\t\t\tsetMenuBarElement(node);\r\n\t\t\tif (typeof ref === 'function') {\r\n\t\t\t\tref(node);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[ref]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div ref={handleRef} className={menuBarClassNames} role=\"menubar\" onKeyDown={handleKeyDown}>\r\n\t\t\t\t{menus.map((menu, index) => {\r\n\t\t\t\t\tconst isOpen = openMenuIndex === index;\r\n\t\t\t\t\tconst isFocused = focusedIndex === index;\r\n\r\n\t\t\t\t\tconst menuButtonClassNames = [\r\n\t\t\t\t\t\tstyles.menuButton,\r\n\t\t\t\t\t\tisOpen ? styles['menuButton--open'] : '',\r\n\t\t\t\t\t\tmenu.disabled ? styles['menuButton--disabled'] : '',\r\n\t\t\t\t\t]\r\n\t\t\t\t\t\t.filter(Boolean)\r\n\t\t\t\t\t\t.join(' ');\r\n\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<div key={index} className={styles.menuContainer}>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName={menuButtonClassNames}\r\n\t\t\t\t\t\t\t\tonClick={() => handleMenuClick(index)}\r\n\t\t\t\t\t\t\t\tonFocus={() => setFocusedIndex(index)}\r\n\t\t\t\t\t\t\t\tonBlur={() => setFocusedIndex(-1)}\r\n\t\t\t\t\t\t\t\tdisabled={menu.disabled}\r\n\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\taria-expanded={isOpen}\r\n\t\t\t\t\t\t\t\taria-disabled={menu.disabled}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{menu.label}\r\n\t\t\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t\t\t{isOpen && (\r\n\t\t\t\t\t\t\t\t<div className={dropdownClassNames} role=\"menu\">\r\n\t\t\t\t\t\t\t\t\t{menu.items}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nMenuBar.displayName = 'MenuBar';\r\n\r\nexport default MenuBar;\r\n","/* MenuItem Component Styles - Mac OS 9 */\r\n\r\n/* ========================================\r\n * Menu Item\r\n * ======================================== */\r\n\r\n.menuItem {\r\n\t/* Base menu item styling */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--spacing-2);\r\n\t\r\n\t/* Layout */\r\n\twidth: 100%;\r\n\tpadding: var(--spacing-1) var(--spacing-3);\r\n\tmin-height: 20px;\r\n\t\r\n\t/* Text styling */\r\n\tfont-family: var(--font-system);\r\n\tfont-size: var(--font-size-md);\r\n\tfont-weight: var(--font-weight-bold);\r\n\tline-height: var(--line-height-snug);\r\n\ttext-align: left;\r\n\tcolor: var(--color-text);\r\n\t\r\n\t/* Remove button defaults */\r\n\tbackground-color: transparent;\r\n\tborder: none;\r\n\tcursor: pointer;\r\n\t\r\n\t/* Transitions */\r\n\ttransition: background-color 50ms ease;\r\n\t\r\n\t/* Prevent text selection */\r\n\tuser-select: none;\r\n}\r\n\r\n/* ========================================\r\n * Menu Item States\r\n * ======================================== */\r\n\r\n.menuItem:hover:not(.menuItem--disabled) {\r\n\t/* Hover state - blue highlight like Mac OS 9 */\r\n\tbackground-color: #0000BB;\r\n\tcolor: var(--color-white);\r\n}\r\n\r\n.menuItem:focus-visible {\r\n\t/* Focus state */\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: -1px;\r\n}\r\n\r\n.menuItem--selected {\r\n\t/* Selected/active state */\r\n\tbackground-color: #0000BB;\r\n\tcolor: var(--color-white);\r\n}\r\n\r\n.menuItem--disabled {\r\n\t/* Disabled state */\r\n\tcolor: var(--color-gray-500);\r\n\tcursor: not-allowed;\r\n}\r\n\r\n.menuItem--separator {\r\n\t/* Item with separator - no additional styling needed */\r\n}\r\n\r\n/* ========================================\r\n * Menu Item Elements\r\n * ======================================== */\r\n\r\n.checkmark {\r\n\t/* Checkmark area (for toggle items) */\r\n\twidth: 16px;\r\n\tmin-width: 16px;\r\n\ttext-align: center;\r\n\tfont-size: var(--font-size-md);\r\n}\r\n\r\n.icon {\r\n\t/* Icon area */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\twidth: 16px;\r\n\tmin-width: 16px;\r\n\theight: 16px;\r\n}\r\n\r\n.label {\r\n\t/* Label text */\r\n\tflex: 1;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\twhite-space: nowrap;\r\n}\r\n\r\n.shortcut {\r\n\t/* Keyboard shortcut */\r\n\tmargin-left: auto;\r\n\tfont-size: var(--font-size-sm);\r\n\topacity: 0.8;\r\n\twhite-space: nowrap;\r\n}\r\n\r\n.submenuArrow {\r\n\t/* Submenu indicator */\r\n\tfont-size: 8px;\r\n\tmargin-left: var(--spacing-1);\r\n}\r\n\r\n/* ========================================\r\n * Separator Line\r\n * ======================================== */\r\n\r\n.separatorLine {\r\n\t/* Separator line after menu item */\r\n\theight: 1px;\r\n\tbackground-color: var(--color-gray-500);\r\n\tmargin: var(--spacing-1) var(--spacing-2);\r\n}\r\n\r\n/* ========================================\r\n * Hover State Color Override\r\n * ======================================== */\r\n\r\n/* When menu item is hovered, change text color of all children */\r\n.menuItem:hover:not(.menuItem--disabled) .checkmark,\r\n.menuItem:hover:not(.menuItem--disabled) .icon,\r\n.menuItem:hover:not(.menuItem--disabled) .label,\r\n.menuItem:hover:not(.menuItem--disabled) .shortcut,\r\n.menuItem:hover:not(.menuItem--disabled) .submenuArrow {\r\n\tcolor: var(--color-white);\r\n}\r\n\r\n/* When menu item is selected, change text color of all children */\r\n.menuItem--selected .checkmark,\r\n.menuItem--selected .icon,\r\n.menuItem--selected .label,\r\n.menuItem--selected .shortcut,\r\n.menuItem--selected .submenuArrow {\r\n\tcolor: var(--color-white);\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* High contrast mode */\r\n@media (prefers-contrast: high) {\r\n\t.menuItem:hover:not(.menuItem--disabled) {\r\n\t\toutline: 2px solid currentColor;\r\n\t\toutline-offset: -2px;\r\n\t}\r\n}\r\n\r\n/* Reduced motion */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.menuItem {\r\n\t\ttransition: none;\r\n\t}\r\n}","// MenuItem component - Mac OS 9 style\r\n// Individual menu item for use within MenuBar\r\n\r\nimport React, { forwardRef } from 'react';\r\nimport styles from './MenuItem.module.css';\r\n\r\nexport interface MenuItemProps {\r\n\t/**\r\n\t * Menu item label text\r\n\t */\r\n\tlabel: string;\r\n\r\n\t/**\r\n\t * Optional keyboard shortcut to display (e.g., \"⌘S\", \"Ctrl+O\")\r\n\t */\r\n\tshortcut?: string;\r\n\r\n\t/**\r\n\t * Whether the menu item is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n\r\n\t/**\r\n\t * Whether the menu item is selected/active\r\n\t * @default false\r\n\t */\r\n\tselected?: boolean;\r\n\r\n\t/**\r\n\t * Whether the menu item has a separator after it\r\n\t * @default false\r\n\t */\r\n\tseparator?: boolean;\r\n\r\n\t/**\r\n\t * Whether the menu item has a checkmark (for toggle items)\r\n\t * @default false\r\n\t */\r\n\tchecked?: boolean;\r\n\r\n\t/**\r\n\t * Optional icon to display before the label\r\n\t */\r\n\ticon?: React.ReactNode;\r\n\r\n\t/**\r\n\t * Callback when menu item is clicked\r\n\t */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\r\n\t/**\r\n\t * Callback when menu item is focused\r\n\t */\r\n\tonFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void;\r\n\r\n\t/**\r\n\t * Callback when menu item loses focus\r\n\t */\r\n\tonBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void;\r\n\r\n\t/**\r\n\t * Custom class name for the menu item\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Whether the item has a submenu indicator (arrow)\r\n\t * @default false\r\n\t */\r\n\thasSubmenu?: boolean;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style MenuItem component\r\n * \r\n * Individual menu item for use within MenuBar or dropdown menus.\r\n * \r\n * Features:\r\n * - Classic Mac OS 9 menu item styling\r\n * - Disabled state support\r\n * - Keyboard shortcut display\r\n * - Checkmark support for toggle items\r\n * - Separator support\r\n * - Selected/active state\r\n * - Icon support\r\n * - Submenu indicator\r\n * - Full keyboard and mouse support\r\n * \r\n * @example\r\n * ```tsx\r\n * // Basic menu item\r\n * <MenuItem label=\"Open...\" onClick={() => console.log('Open')} />\r\n * \r\n * // With keyboard shortcut\r\n * <MenuItem label=\"Save\" shortcut=\"⌘S\" onClick={() => console.log('Save')} />\r\n * \r\n * // Disabled item\r\n * <MenuItem label=\"Undo\" disabled />\r\n * \r\n * // Checked item (toggle)\r\n * <MenuItem label=\"Show Grid\" checked onClick={() => console.log('Toggle')} />\r\n * \r\n * // With separator\r\n * <MenuItem label=\"Preferences...\" separator onClick={() => console.log('Prefs')} />\r\n * \r\n * // With submenu indicator\r\n * <MenuItem label=\"Recent Files\" hasSubmenu />\r\n * ```\r\n */\r\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tlabel,\r\n\t\t\tshortcut,\r\n\t\t\tdisabled = false,\r\n\t\t\tselected = false,\r\n\t\t\tseparator = false,\r\n\t\t\tchecked = false,\r\n\t\t\ticon,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\tclassName = '',\r\n\t\t\thasSubmenu = false,\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Class names\r\n\t\tconst menuItemClassNames = [\r\n\t\t\tstyles.menuItem,\r\n\t\t\tselected ? styles['menuItem--selected'] : '',\r\n\t\t\tdisabled ? styles['menuItem--disabled'] : '',\r\n\t\t\tseparator ? styles['menuItem--separator'] : '',\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\t// Handle click\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (disabled) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tonClick?.(event);\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<button\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclassName={menuItemClassNames}\r\n\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trole=\"menuitem\"\r\n\t\t\t\t\taria-disabled={disabled}\r\n\t\t\t\t\taria-checked={checked ? 'true' : undefined}\r\n\t\t\t\t>\r\n\t\t\t\t\t{/* Checkmark area */}\r\n\t\t\t\t\t<span className={styles.checkmark}>{checked && '✓'}</span>\r\n\r\n\t\t\t\t\t{/* Icon area */}\r\n\t\t\t\t\t{icon && <span className={styles.icon}>{icon}</span>}\r\n\r\n\t\t\t\t\t{/* Label */}\r\n\t\t\t\t\t<span className={styles.label}>{label}</span>\r\n\r\n\t\t\t\t\t{/* Shortcut */}\r\n\t\t\t\t\t{shortcut && <span className={styles.shortcut}>{shortcut}</span>}\r\n\r\n\t\t\t\t\t{/* Submenu indicator */}\r\n\t\t\t\t\t{hasSubmenu && <span className={styles.submenuArrow}>▶</span>}\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t{/* Separator line if needed */}\r\n\t\t\t\t{separator && <div className={styles.separatorLine} role=\"separator\" />}\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nMenuItem.displayName = 'MenuItem';\r\n\r\nexport default MenuItem;","/* Scrollbar Component Styles - Mac OS 9 */\r\n\r\n/* ========================================\r\n * Base Scrollbar Container\r\n * ======================================== */\r\n\r\n.scrollbar {\r\n\t/* Base styling */\r\n\tdisplay: flex;\r\n\tbackground: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\t\r\n\t/* Position */\r\n\tposition: relative;\r\n\t\r\n\t/* No user select */\r\n\tuser-select: none;\r\n}\r\n\r\n.scrollbar--vertical {\r\n\tflex-direction: column;\r\n\twidth: 16px;\r\n\tmin-height: 60px;\r\n}\r\n\r\n.scrollbar--horizontal {\r\n\tflex-direction: row;\r\n\theight: 16px;\r\n\tmin-width: 60px;\r\n}\r\n\r\n/* Disabled state */\r\n.scrollbar--disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n}\r\n\r\n/* ========================================\r\n * Arrow Buttons\r\n * ======================================== */\r\n\r\n.arrow {\r\n\t/* Base styling */\r\n\tbackground: var(--color-gray-400);\r\n\tborder: none;\r\n\tbox-shadow: var(--shadow-raised);\r\n\t\r\n\t/* Size */\r\n\tflex-shrink: 0;\r\n\twidth: 16px;\r\n\theight: 16px;\r\n\t\r\n\t/* Layout */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\t\r\n\t/* Cursor */\r\n\tcursor: pointer;\r\n\t\r\n\t/* Remove button defaults */\r\n\t-webkit-appearance: none;\r\n\t-moz-appearance: none;\r\n\tappearance: none;\r\n\t\r\n\t/* No transitions */\r\n\ttransition: none;\r\n\t\r\n\t/* Position */\r\n\tposition: relative;\r\n}\r\n\r\n/* Arrow states */\r\n.arrow:hover:not(:disabled) {\r\n\tbackground: var(--color-gray-300);\r\n}\r\n\r\n.arrow:active:not(:disabled) {\r\n\tbox-shadow: var(--shadow-inset);\r\n\tbackground: var(--color-gray-500);\r\n}\r\n\r\n.arrow:disabled {\r\n\topacity: 0.5;\r\n\tcursor: not-allowed;\r\n}\r\n\r\n/* Arrow icons */\r\n.arrowIcon {\r\n\twidth: 0;\r\n\theight: 0;\r\n\tborder-style: solid;\r\n}\r\n\r\n/* Vertical scrollbar arrows */\r\n.scrollbar--vertical .arrow--start .arrowIcon {\r\n\t/* Up arrow */\r\n\tborder-width: 0 3px 4px 3px;\r\n\tborder-color: transparent transparent var(--color-text) transparent;\r\n}\r\n\r\n.scrollbar--vertical .arrow--end .arrowIcon {\r\n\t/* Down arrow */\r\n\tborder-width: 4px 3px 0 3px;\r\n\tborder-color: var(--color-text) transparent transparent transparent;\r\n}\r\n\r\n/* Horizontal scrollbar arrows */\r\n.scrollbar--horizontal .arrow--start .arrowIcon {\r\n\t/* Left arrow */\r\n\tborder-width: 3px 4px 3px 0;\r\n\tborder-color: transparent var(--color-text) transparent transparent;\r\n}\r\n\r\n.scrollbar--horizontal .arrow--end .arrowIcon {\r\n\t/* Right arrow */\r\n\tborder-width: 3px 0 3px 4px;\r\n\tborder-color: transparent transparent transparent var(--color-text);\r\n}\r\n\r\n/* ========================================\r\n * Track (scrollable area)\r\n * ======================================== */\r\n\r\n.track {\r\n\t/* Base styling */\r\n\tbackground: var(--color-gray-200);\r\n\t\r\n\t/* Layout */\r\n\tflex: 1;\r\n\tposition: relative;\r\n\t\r\n\t/* Cursor */\r\n\tcursor: pointer;\r\n\t\r\n\t/* Pattern background for Mac OS 9 look */\r\n\tbackground-image: repeating-linear-gradient(\r\n\t\t0deg,\r\n\t\ttransparent,\r\n\t\ttransparent 1px,\r\n\t\trgba(0, 0, 0, 0.03) 1px,\r\n\t\trgba(0, 0, 0, 0.03) 2px\r\n\t);\r\n}\r\n\r\n/* ========================================\r\n * Thumb (draggable handle)\r\n * ======================================== */\r\n\r\n.thumb {\r\n\t/* Base styling */\r\n\tbackground: var(--color-gray-400);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\tbox-shadow: var(--shadow-raised);\r\n\t\r\n\t/* Position */\r\n\tposition: absolute;\r\n\t\r\n\t/* Cursor */\r\n\tcursor: grab;\r\n\t\r\n\t/* No transitions for instant response */\r\n\ttransition: none;\r\n}\r\n\r\n.thumb:active {\r\n\tcursor: grabbing;\r\n\tbackground: var(--color-gray-300);\r\n}\r\n\r\n/* Vertical thumb */\r\n.scrollbar--vertical .thumb {\r\n\tleft: 0;\r\n\tright: 0;\r\n\tmin-height: 16px;\r\n}\r\n\r\n/* Horizontal thumb */\r\n.scrollbar--horizontal .thumb {\r\n\ttop: 0;\r\n\tbottom: 0;\r\n\tmin-width: 16px;\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* Keyboard focus */\r\n.arrow:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: -2px;\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.thumb {\r\n\t\ttransition: none;\r\n\t}\r\n}\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.scrollbar {\r\n\t\tborder-width: 2px;\r\n\t}\r\n\t\r\n\t.thumb {\r\n\t\tborder-width: 2px;\r\n\t}\r\n}\r\n","// Scrollbar component - Mac OS 9 style\r\n// Classic scrollbar with arrows and draggable thumb\r\n\r\n'use client';\r\n\r\nimport React, { forwardRef, useRef, useState, useEffect, useCallback } from 'react';\r\nimport styles from './Scrollbar.module.css';\r\n\r\nexport interface ScrollbarProps {\r\n\t/**\r\n\t * Scrollbar orientation\r\n\t * @default 'vertical'\r\n\t */\r\n\torientation?: 'vertical' | 'horizontal';\r\n\r\n\t/**\r\n\t * Current scroll position (0-1)\r\n\t */\r\n\tvalue?: number;\r\n\r\n\t/**\r\n\t * Viewport size relative to content size (0-1)\r\n\t * Used to calculate thumb size\r\n\t */\r\n\tviewportRatio?: number;\r\n\r\n\t/**\r\n\t * Callback when scroll position changes\r\n\t */\r\n\tonChange?: (value: number) => void;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Whether scrollbar is disabled\r\n\t * @default false\r\n\t */\r\n\tdisabled?: boolean;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style Scrollbar component\r\n * \r\n * Classic scrollbar with arrow buttons and draggable thumb.\r\n * Can be used standalone or integrated with scrollable content.\r\n * \r\n * @example\r\n * ```tsx\r\n * <Scrollbar\r\n * orientation=\"vertical\"\r\n * value={0.5}\r\n * viewportRatio={0.3}\r\n * onChange={(value) => console.log('Scroll position:', value)}\r\n * />\r\n * ```\r\n */\r\nexport const Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>(\r\n\t(\r\n\t\t{\r\n\t\t\torientation = 'vertical',\r\n\t\t\tvalue = 0,\r\n\t\t\tviewportRatio = 0.2,\r\n\t\t\tonChange,\r\n\t\t\tclassName = '',\r\n\t\t\tdisabled = false,\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst trackRef = useRef<HTMLDivElement>(null);\r\n\t\tconst [isDragging, setIsDragging] = useState(false);\r\n\t\tconst [dragStartPos, setDragStartPos] = useState(0);\r\n\t\tconst [dragStartValue, setDragStartValue] = useState(0);\r\n\r\n\t\tconst isVertical = orientation === 'vertical';\r\n\r\n\t\t// Calculate thumb size based on viewport ratio\r\n\t\tconst thumbSize = Math.max(viewportRatio * 100, 10); // Minimum 10% size\r\n\r\n\t\t// Calculate thumb position\r\n\t\tconst maxThumbPos = 100 - thumbSize;\r\n\t\tconst thumbPos = value * maxThumbPos;\r\n\r\n\t\t// Class names\r\n\t\tconst classNames = [\r\n\t\t\tstyles.scrollbar,\r\n\t\t\tstyles[`scrollbar--${orientation}`],\r\n\t\t\tdisabled && styles['scrollbar--disabled'],\r\n\t\t\tclassName,\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(' ');\r\n\r\n\t\t// Handle arrow clicks\r\n\t\tconst handleDecrement = useCallback(() => {\r\n\t\t\tif (disabled || !onChange) return;\r\n\t\t\tconst newValue = Math.max(0, value - 0.1);\r\n\t\t\tonChange(newValue);\r\n\t\t}, [disabled, onChange, value]);\r\n\r\n\t\tconst handleIncrement = useCallback(() => {\r\n\t\t\tif (disabled || !onChange) return;\r\n\t\t\tconst newValue = Math.min(1, value + 0.1);\r\n\t\t\tonChange(newValue);\r\n\t\t}, [disabled, onChange, value]);\r\n\r\n\t\t// Handle track clicks\r\n\t\tconst handleTrackClick = useCallback(\r\n\t\t\t(event: React.MouseEvent<HTMLDivElement>) => {\r\n\t\t\t\tif (disabled || !onChange || !trackRef.current) return;\r\n\r\n\t\t\t\tconst rect = trackRef.current.getBoundingClientRect();\r\n\t\t\t\tconst clickPos = isVertical\r\n\t\t\t\t\t? event.clientY - rect.top\r\n\t\t\t\t\t: event.clientX - rect.left;\r\n\t\t\t\tconst trackSize = isVertical ? rect.height : rect.width;\r\n\r\n\t\t\t\t// Convert click position to scroll value (0-1)\r\n\t\t\t\tconst clickRatio = clickPos / trackSize;\r\n\t\t\t\tconst newValue = Math.max(0, Math.min(1, clickRatio));\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t},\r\n\t\t\t[disabled, onChange, isVertical]\r\n\t\t);\r\n\r\n\t\t// Handle thumb drag start\r\n\t\tconst handleThumbMouseDown = useCallback(\r\n\t\t\t(event: React.MouseEvent) => {\r\n\t\t\t\tif (disabled) return;\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tsetIsDragging(true);\r\n\t\t\t\tsetDragStartPos(isVertical ? event.clientY : event.clientX);\r\n\t\t\t\tsetDragStartValue(value);\r\n\t\t\t},\r\n\t\t\t[disabled, isVertical, value]\r\n\t\t);\r\n\r\n\t\t// Handle drag move\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!isDragging || !onChange || !trackRef.current) return;\r\n\r\n\t\t\tconst handleMouseMove = (event: MouseEvent) => {\r\n\t\t\t\tconst currentPos = isVertical ? event.clientY : event.clientX;\r\n\t\t\t\tconst delta = currentPos - dragStartPos;\r\n\r\n\t\t\t\tconst rect = trackRef.current!.getBoundingClientRect();\r\n\t\t\t\tconst trackSize = isVertical ? rect.height : rect.width;\r\n\t\t\t\tconst deltaRatio = delta / trackSize;\r\n\r\n\t\t\t\tconst newValue = Math.max(0, Math.min(1, dragStartValue + deltaRatio));\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t};\r\n\r\n\t\t\tconst handleMouseUp = () => {\r\n\t\t\t\tsetIsDragging(false);\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener('mousemove', handleMouseMove);\r\n\t\t\tdocument.addEventListener('mouseup', handleMouseUp);\r\n\r\n\t\t\treturn () => {\r\n\t\t\t\tdocument.removeEventListener('mousemove', handleMouseMove);\r\n\t\t\t\tdocument.removeEventListener('mouseup', handleMouseUp);\r\n\t\t\t};\r\n\t\t}, [isDragging, dragStartPos, dragStartValue, onChange, isVertical]);\r\n\r\n\t\treturn (\r\n\t\t\t<div ref={ref} className={classNames}>\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclassName={`${styles.arrow} ${styles['arrow--start']}`}\r\n\t\t\t\t\tonClick={handleDecrement}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\taria-label={isVertical ? 'Scroll up' : 'Scroll left'}\r\n\t\t\t\t>\r\n\t\t\t\t\t<div className={styles.arrowIcon} />\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={trackRef}\r\n\t\t\t\t\tclassName={styles.track}\r\n\t\t\t\t\tonClick={handleTrackClick}\r\n\t\t\t\t\trole=\"scrollbar\"\r\n\t\t\t\t\taria-valuenow={Math.round(value * 100)}\r\n\t\t\t\t\taria-valuemin={0}\r\n\t\t\t\t\taria-valuemax={100}\r\n\t\t\t\t\taria-orientation={orientation}\r\n\t\t\t\t>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName={styles.thumb}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t[isVertical ? 'height' : 'width']: `${thumbSize}%`,\r\n\t\t\t\t\t\t\t[isVertical ? 'top' : 'left']: `${thumbPos}%`,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMouseDown={handleThumbMouseDown}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclassName={`${styles.arrow} ${styles['arrow--end']}`}\r\n\t\t\t\t\tonClick={handleIncrement}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\taria-label={isVertical ? 'Scroll down' : 'Scroll right'}\r\n\t\t\t\t>\r\n\t\t\t\t\t<div className={styles.arrowIcon} />\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nScrollbar.displayName = 'Scrollbar';\r\n\r\nexport default Scrollbar;\r\n","/* ListView Component Styles - Mac OS 9 */\r\n\r\n/* ========================================\r\n * Base ListView Container\r\n * ======================================== */\r\n\r\n.listView {\r\n\t/* Base styling */\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tbackground: var(--color-surface);\r\n\tborder: var(--border-width-thin) solid var(--color-border);\r\n\t\r\n\t/* Mac OS 9 inset appearance */\r\n\tbox-shadow: var(--shadow-inset);\r\n\t\r\n\t/* Font */\r\n\tfont-family: var(--font-system);\r\n\tfont-size: var(--font-size-md);\r\n\t\r\n\t/* No user select on structure */\r\n\tuser-select: none;\r\n\t\r\n\t/* Overflow */\r\n\toverflow: auto;\r\n}\r\n\r\n/* ========================================\r\n * Header (Column Headers)\r\n * ======================================== */\r\n\r\n.header {\r\n\t/* Layout */\r\n\tdisplay: flex;\r\n\tflex-shrink: 0;\r\n\t\r\n\t/* Styling */\r\n\tbackground: var(--color-gray-400);\r\n\tborder-bottom: var(--border-width-thin) solid var(--color-border);\r\n\tbox-shadow: var(--shadow-raised);\r\n\t\r\n\t/* Position */\r\n\tposition: sticky;\r\n\ttop: 0;\r\n\tz-index: 1;\r\n}\r\n\r\n.headerCell {\r\n\t/* Base styling */\r\n\tpadding: var(--spacing-1) var(--spacing-2);\r\n\t\r\n\t/* Text */\r\n\tfont-weight: var(--font-weight-bold);\r\n\tcolor: var(--color-text);\r\n\t\r\n\t/* Layout */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--spacing-1);\r\n\t\r\n\t/* Border */\r\n\tborder-right: var(--border-width-thin) solid var(--color-border);\r\n\t\r\n\t/* Prevent text wrap */\r\n\twhite-space: nowrap;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n}\r\n\r\n.headerCell:last-child {\r\n\tborder-right: none;\r\n\tflex: 1; /* Last column takes remaining space */\r\n}\r\n\r\n.headerCell.sortable {\r\n\tcursor: pointer;\r\n}\r\n\r\n.headerCell.sortable:hover {\r\n\tbackground: var(--color-gray-300);\r\n}\r\n\r\n.sortIndicator {\r\n\tfont-size: var(--font-size-xs);\r\n\tcolor: var(--color-text);\r\n}\r\n\r\n/* ========================================\r\n * Body (List Items)\r\n * ======================================== */\r\n\r\n.body {\r\n\t/* Layout */\r\n\tflex: 1;\r\n\toverflow-y: auto;\r\n\t\r\n\t/* Background */\r\n\tbackground: var(--color-surface);\r\n}\r\n\r\n.row {\r\n\t/* Layout */\r\n\tdisplay: flex;\r\n\t\r\n\t/* Styling */\r\n\tborder-bottom: var(--border-width-thin) solid var(--color-border);\r\n\t\r\n\t/* Cursor */\r\n\tcursor: pointer;\r\n\t\r\n\t/* No transitions */\r\n\ttransition: none;\r\n}\r\n\r\n.row:hover {\r\n\tbackground: var(--color-gray-300);\r\n}\r\n\r\n.row.selected {\r\n\tbackground: var(--color-gray-400);\r\n\tcolor: var(--color-text);\r\n}\r\n\r\n.row.selected:hover {\r\n\tbackground: var(--color-gray-500);\r\n}\r\n\r\n.cell {\r\n\t/* Base styling */\r\n\tpadding: var(--spacing-1) var(--spacing-2);\r\n\t\r\n\t/* Layout */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--spacing-1);\r\n\t\r\n\t/* Border */\r\n\tborder-right: var(--border-width-thin) solid var(--color-border);\r\n\t\r\n\t/* Prevent text wrap */\r\n\twhite-space: nowrap;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n}\r\n\r\n.cell:last-child {\r\n\tborder-right: none;\r\n\tflex: 1; /* Last cell takes remaining space */\r\n}\r\n\r\n.icon {\r\n\t/* Layout */\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tflex-shrink: 0;\r\n\t\r\n\t/* Size */\r\n\twidth: 16px;\r\n\theight: 16px;\r\n}\r\n\r\n/* ========================================\r\n * Accessibility\r\n * ======================================== */\r\n\r\n/* Keyboard focus */\r\n.row:focus-visible {\r\n\toutline: 1px dotted var(--color-focus);\r\n\toutline-offset: -1px;\r\n}\r\n\r\n/* Reduced motion support */\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.row {\r\n\t\ttransition: none;\r\n\t}\r\n}\r\n\r\n/* High contrast mode support */\r\n@media (prefers-contrast: high) {\r\n\t.listView {\r\n\t\tborder-width: 2px;\r\n\t}\r\n\t\r\n\t.row.selected {\r\n\t\toutline: 2px solid var(--color-text);\r\n\t}\r\n}\r\n","// ListView component - Mac OS 9 style multi-column list\r\n// List view with sortable columns and row selection\r\n\r\n'use client';\r\n\r\nimport React, { forwardRef, useState, useCallback } from 'react';\r\nimport styles from './ListView.module.css';\r\n\r\nexport interface ListColumn {\r\n\t/**\r\n\t * Column key/identifier\r\n\t */\r\n\tkey: string;\r\n\r\n\t/**\r\n\t * Column header label\r\n\t */\r\n\tlabel: string;\r\n\r\n\t/**\r\n\t * Column width (px or percentage)\r\n\t * @default 'auto'\r\n\t */\r\n\twidth?: number | string;\r\n\r\n\t/**\r\n\t * Whether column is sortable\r\n\t * @default true\r\n\t */\r\n\tsortable?: boolean;\r\n}\r\n\r\nexport interface ListItem {\r\n\t/**\r\n\t * Unique item ID\r\n\t */\r\n\tid: string;\r\n\r\n\t/**\r\n\t * Item data - keys should match column keys\r\n\t */\r\n\t[key: string]: any;\r\n\r\n\t/**\r\n\t * Optional icon to display\r\n\t */\r\n\ticon?: React.ReactNode;\r\n}\r\n\r\nexport interface ListViewProps {\r\n\t/**\r\n\t * Column definitions\r\n\t */\r\n\tcolumns: ListColumn[];\r\n\r\n\t/**\r\n\t * List items\r\n\t */\r\n\titems: ListItem[];\r\n\r\n\t/**\r\n\t * Selected item IDs\r\n\t */\r\n\tselectedIds?: string[];\r\n\r\n\t/**\r\n\t * Callback when selection changes\r\n\t */\r\n\tonSelectionChange?: (selectedIds: string[]) => void;\r\n\r\n\t/**\r\n\t * Callback when item is double-clicked\r\n\t */\r\n\tonItemOpen?: (item: ListItem) => void;\r\n\r\n\t/**\r\n\t * Callback when column is clicked for sorting\r\n\t */\r\n\tonSort?: (columnKey: string, direction: 'asc' | 'desc') => void;\r\n\r\n\t/**\r\n\t * Additional CSS class names\r\n\t */\r\n\tclassName?: string;\r\n\r\n\t/**\r\n\t * Height of the list view\r\n\t */\r\n\theight?: number | string;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style ListView component\r\n * \r\n * Multi-column list with sortable headers and row selection.\r\n * Similar to Finder list view.\r\n * \r\n * @example\r\n * ```tsx\r\n * <ListView\r\n * columns={[\r\n * { key: 'name', label: 'Name' },\r\n * { key: 'modified', label: 'Date Modified' },\r\n * { key: 'size', label: 'Size' }\r\n * ]}\r\n * items={[\r\n * { id: '1', name: 'Document.txt', modified: 'Today', size: '2 KB' },\r\n * { id: '2', name: 'Images', modified: 'Yesterday', size: '--' }\r\n * ]}\r\n * selectedIds={['1']}\r\n * onSelectionChange={(ids) => console.log('Selected:', ids)}\r\n * />\r\n * ```\r\n */\r\nexport const ListView = forwardRef<HTMLDivElement, ListViewProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tcolumns,\r\n\t\t\titems,\r\n\t\t\tselectedIds = [],\r\n\t\t\tonSelectionChange,\r\n\t\t\tonItemOpen,\r\n\t\t\tonSort,\r\n\t\t\tclassName = '',\r\n\t\t\theight = 'auto',\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst [sortColumn, setSortColumn] = useState<string | null>(null);\r\n\t\tconst [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc');\r\n\r\n\t\t// Class names\r\n\t\tconst classNames = [styles.listView, className].filter(Boolean).join(' ');\r\n\r\n\t\t// Handle column header click\r\n\t\tconst handleColumnClick = useCallback(\r\n\t\t\t(columnKey: string, sortable: boolean = true) => {\r\n\t\t\t\tif (!sortable || !onSort) return;\r\n\r\n\t\t\t\tconst newDirection =\r\n\t\t\t\t\tsortColumn === columnKey && sortDirection === 'asc' ? 'desc' : 'asc';\r\n\t\t\t\tsetSortColumn(columnKey);\r\n\t\t\t\tsetSortDirection(newDirection);\r\n\t\t\t\tonSort(columnKey, newDirection);\r\n\t\t\t},\r\n\t\t\t[sortColumn, sortDirection, onSort]\r\n\t\t);\r\n\r\n\t\t// Handle row click\r\n\t\tconst handleRowClick = useCallback(\r\n\t\t\t(itemId: string, event: React.MouseEvent) => {\r\n\t\t\t\tif (!onSelectionChange) return;\r\n\r\n\t\t\t\tif (event.metaKey || event.ctrlKey) {\r\n\t\t\t\t\t// Multi-select with Cmd/Ctrl\r\n\t\t\t\t\tif (selectedIds.includes(itemId)) {\r\n\t\t\t\t\t\tonSelectionChange(selectedIds.filter((id) => id !== itemId));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tonSelectionChange([...selectedIds, itemId]);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (event.shiftKey && selectedIds.length > 0) {\r\n\t\t\t\t\t// Range select with Shift\r\n\t\t\t\t\tconst lastSelectedId = selectedIds[selectedIds.length - 1];\r\n\t\t\t\t\tconst lastIndex = items.findIndex((item) => item.id === lastSelectedId);\r\n\t\t\t\t\tconst currentIndex = items.findIndex((item) => item.id === itemId);\r\n\r\n\t\t\t\t\tconst start = Math.min(lastIndex, currentIndex);\r\n\t\t\t\t\tconst end = Math.max(lastIndex, currentIndex);\r\n\t\t\t\t\tconst rangeIds = items.slice(start, end + 1).map((item) => item.id);\r\n\r\n\t\t\t\t\tonSelectionChange(rangeIds);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Single select\r\n\t\t\t\t\tonSelectionChange([itemId]);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[selectedIds, items, onSelectionChange]\r\n\t\t);\r\n\r\n\t\t// Handle row double-click\r\n\t\tconst handleRowDoubleClick = useCallback(\r\n\t\t\t(item: ListItem) => {\r\n\t\t\t\tif (onItemOpen) {\r\n\t\t\t\t\tonItemOpen(item);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[onItemOpen]\r\n\t\t);\r\n\r\n\t\t// Container style\r\n\t\tconst containerStyle: React.CSSProperties = {};\r\n\t\tif (height !== 'auto') {\r\n\t\t\tcontainerStyle.height = typeof height === 'number' ? `${height}px` : height;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div ref={ref} className={classNames} style={containerStyle}>\r\n\t\t\t\t{/* Column headers */}\r\n\t\t\t\t<div className={styles.header}>\r\n\t\t\t\t\t{columns.map((column) => (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tkey={column.key}\r\n\t\t\t\t\t\t\tclassName={`${styles.headerCell} ${\r\n\t\t\t\t\t\t\t\tcolumn.sortable !== false ? styles.sortable : ''\r\n\t\t\t\t\t\t\t}`}\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\twidth:\r\n\t\t\t\t\t\t\t\t\ttypeof column.width === 'number'\r\n\t\t\t\t\t\t\t\t\t\t? `${column.width}px`\r\n\t\t\t\t\t\t\t\t\t\t: column.width,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonClick={() => handleColumnClick(column.key, column.sortable)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{column.label}\r\n\t\t\t\t\t\t\t{sortColumn === column.key && (\r\n\t\t\t\t\t\t\t\t<span className={styles.sortIndicator}>\r\n\t\t\t\t\t\t\t\t\t{sortDirection === 'asc' ? '▲' : '▼'}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{/* List items */}\r\n\t\t\t\t<div className={styles.body}>\r\n\t\t\t\t\t{items.map((item) => {\r\n\t\t\t\t\t\tconst isSelected = selectedIds.includes(item.id);\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tkey={item.id}\r\n\t\t\t\t\t\t\t\tclassName={`${styles.row} ${isSelected ? styles.selected : ''}`}\r\n\t\t\t\t\t\t\t\tonClick={(e) => handleRowClick(item.id, e)}\r\n\t\t\t\t\t\t\t\tonDoubleClick={() => handleRowDoubleClick(item)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{columns.map((column, index) => (\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tkey={column.key}\r\n\t\t\t\t\t\t\t\t\t\tclassName={styles.cell}\r\n\t\t\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth:\r\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof column.width === 'number'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `${column.width}px`\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: column.width,\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{index === 0 && item.icon && (\r\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.icon}>{item.icon}</span>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t{item[column.key]}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nListView.displayName = 'ListView';\r\n\r\nexport default ListView;\r\n","/* FolderList Component Styles - Mac OS 9 */\r\n\r\n/* ========================================\r\n * FolderList Content Area\r\n * ======================================== */\r\n\r\n.folderListContent {\r\n\t/* Remove default padding from Window content */\r\n\tpadding: 0;\r\n\t\r\n\t/* Ensure ListView fills the content area */\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow: hidden;\r\n}\r\n\r\n.listView {\r\n\t/* Fill the entire content area */\r\n\tflex: 1;\r\n\t\r\n\t/* Remove extra borders (Window already has a border) */\r\n\tborder: none;\r\n\t\r\n\t/* Remove shadow (already inset in Window) */\r\n\tbox-shadow: none;\r\n}\r\n","// FolderList component - Mac OS 9 style folder/file list window\r\n// Window component with integrated ListView for file browsing\r\n\r\n'use client';\r\n\r\nimport React, { forwardRef, useState } from 'react';\r\nimport { Window, WindowProps } from '../Window/Window';\r\nimport { ListView, ListColumn, ListItem } from '../ListView/ListView';\r\nimport styles from './FolderList.module.css';\r\n\r\nexport interface FolderListProps extends Omit<WindowProps, 'children'> {\r\n\t/**\r\n\t * Column definitions for the list\r\n\t * @default [{ key: 'name', label: 'Name' }, { key: 'modified', label: 'Date Modified' }, { key: 'size', label: 'Size' }]\r\n\t */\r\n\tcolumns?: ListColumn[];\r\n\r\n\t/**\r\n\t * Items to display in the list\r\n\t */\r\n\titems: ListItem[];\r\n\r\n\t/**\r\n\t * Selected item IDs\r\n\t */\r\n\tselectedIds?: string[];\r\n\r\n\t/**\r\n\t * Callback when selection changes\r\n\t */\r\n\tonSelectionChange?: (selectedIds: string[]) => void;\r\n\r\n\t/**\r\n\t * Callback when item is double-clicked (opened)\r\n\t */\r\n\tonItemOpen?: (item: ListItem) => void;\r\n\r\n\t/**\r\n\t * Callback when column header is clicked for sorting\r\n\t */\r\n\tonSort?: (columnKey: string, direction: 'asc' | 'desc') => void;\r\n\r\n\t/**\r\n\t * Height of the list view area\r\n\t * @default 400\r\n\t */\r\n\tlistHeight?: number | string;\r\n}\r\n\r\n/**\r\n * Mac OS 9 style FolderList component\r\n * \r\n * Window with integrated ListView for browsing files and folders.\r\n * Similar to Finder list view in Mac OS 9.\r\n * \r\n * @example\r\n * ```tsx\r\n * <FolderList\r\n * title=\"My Documents\"\r\n * items={[\r\n * { id: '1', name: 'Document.txt', modified: 'Today', size: '2 KB', icon: <FileIcon /> },\r\n * { id: '2', name: 'Images', modified: 'Yesterday', size: '--', icon: <FolderIcon /> }\r\n * ]}\r\n * selectedIds={['1']}\r\n * onSelectionChange={(ids) => console.log('Selected:', ids)}\r\n * onItemOpen={(item) => console.log('Open:', item.name)}\r\n * />\r\n * ```\r\n */\r\nexport const FolderList = forwardRef<HTMLDivElement, FolderListProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tcolumns = [\r\n\t\t\t\t{ key: 'name', label: 'Name', width: '40%' },\r\n\t\t\t\t{ key: 'modified', label: 'Date Modified', width: '30%' },\r\n\t\t\t\t{ key: 'size', label: 'Size', width: '30%' },\r\n\t\t\t],\r\n\t\t\titems,\r\n\t\t\tselectedIds,\r\n\t\t\tonSelectionChange,\r\n\t\t\tonItemOpen,\r\n\t\t\tonSort,\r\n\t\t\tlistHeight = 400,\r\n\t\t\t...windowProps\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\t// Window content with ListView\r\n\t\treturn (\r\n\t\t\t<Window ref={ref} contentClassName={styles.folderListContent} {...windowProps}>\r\n\t\t\t\t<ListView\r\n\t\t\t\t\tcolumns={columns}\r\n\t\t\t\t\titems={items}\r\n\t\t\t\t\tselectedIds={selectedIds}\r\n\t\t\t\t\tonSelectionChange={onSelectionChange}\r\n\t\t\t\t\tonItemOpen={onItemOpen}\r\n\t\t\t\t\tonSort={onSort}\r\n\t\t\t\t\theight={listHeight}\r\n\t\t\t\t\tclassName={styles.listView}\r\n\t\t\t\t/>\r\n\t\t\t</Window>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFolderList.displayName = 'FolderList';\r\n\r\nexport default FolderList;\r\n","// Sample Icons for Demo Purposes\r\n// Simple SVG icons in Mac OS 9 style\r\n\r\nimport React from 'react';\r\nimport { Icon } from './Icon';\r\n\r\nexport const SaveIcon: React.FC = () => (\r\n\t<Icon label=\"Save\" size=\"sm\">\r\n\t\t<path d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const FolderIcon: React.FC = () => (\r\n\t<Icon label=\"Folder\" size=\"sm\">\r\n\t\t<path d=\"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const CloseIcon: React.FC = () => (\r\n\t<Icon label=\"Close\" size=\"sm\">\r\n\t\t<path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const ArrowRightIcon: React.FC = () => (\r\n\t<Icon label=\"Arrow Right\" size=\"sm\">\r\n\t\t<path d=\"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const ArrowLeftIcon: React.FC = () => (\r\n\t<Icon label=\"Arrow Left\" size=\"sm\">\r\n\t\t<path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const DownloadIcon: React.FC = () => (\r\n\t<Icon label=\"Download\" size=\"sm\">\r\n\t\t<path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const LinkIcon: React.FC = () => (\r\n\t<Icon label=\"Link\" size=\"sm\">\r\n\t\t<path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const MailIcon: React.FC = () => (\r\n\t<Icon label=\"Mail\" size=\"sm\">\r\n\t\t<path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const PrintIcon: React.FC = () => (\r\n\t<Icon label=\"Print\" size=\"sm\">\r\n\t\t<path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const TrashIcon: React.FC = () => (\r\n\t<Icon label=\"Delete\" size=\"sm\">\r\n\t\t<path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const SearchIcon: React.FC = () => (\r\n\t<Icon label=\"Search\" size=\"sm\">\r\n\t\t<path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const UserIcon: React.FC = () => (\r\n\t<Icon label=\"User\" size=\"sm\">\r\n\t\t<path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const LockIcon: React.FC = () => (\r\n\t<Icon label=\"Lock\" size=\"sm\">\r\n\t\t<path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const CalendarIcon: React.FC = () => (\r\n\t<Icon label=\"Calendar\" size=\"sm\">\r\n\t\t<path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const DocumentIcon: React.FC = () => (\r\n\t<Icon label=\"Document\" size=\"sm\">\r\n\t\t<path d=\"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const FileIcon: React.FC = () => (\r\n\t<Icon label=\"File\" size=\"sm\">\r\n\t\t<path d=\"M8 16h8v2H8zm0-4h8v2H8zm6-10H6c-1.1 0-2 .9-2 2v16c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const ImageIcon: React.FC = () => (\r\n\t<Icon label=\"Image\" size=\"sm\">\r\n\t\t<path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const MusicIcon: React.FC = () => (\r\n\t<Icon label=\"Music\" size=\"sm\">\r\n\t\t<path d=\"M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const VideoIcon: React.FC = () => (\r\n\t<Icon label=\"Video\" size=\"sm\">\r\n\t\t<path d=\"M18 4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l2 4H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4h-4z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const SettingsIcon: React.FC = () => (\r\n\t<Icon label=\"Settings\" size=\"sm\">\r\n\t\t<path d=\"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94L14.4 2.81c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const HomeIcon: React.FC = () => (\r\n\t<Icon label=\"Home\" size=\"sm\">\r\n\t\t<path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const StarIcon: React.FC = () => (\r\n\t<Icon label=\"Star\" size=\"sm\">\r\n\t\t<path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const HeartIcon: React.FC = () => (\r\n\t<Icon label=\"Heart\" size=\"sm\">\r\n\t\t<path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const InfoIcon: React.FC = () => (\r\n\t<Icon label=\"Info\" size=\"sm\">\r\n\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const WarningIcon: React.FC = () => (\r\n\t<Icon label=\"Warning\" size=\"sm\">\r\n\t\t<path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const ErrorIcon: React.FC = () => (\r\n\t<Icon label=\"Error\" size=\"sm\">\r\n\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const CheckIcon: React.FC = () => (\r\n\t<Icon label=\"Check\" size=\"sm\">\r\n\t\t<path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const PlusIcon: React.FC = () => (\r\n\t<Icon label=\"Plus\" size=\"sm\">\r\n\t\t<path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const MinusIcon: React.FC = () => (\r\n\t<Icon label=\"Minus\" size=\"sm\">\r\n\t\t<path d=\"M19 13H5v-2h14v2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const RefreshIcon: React.FC = () => (\r\n\t<Icon label=\"Refresh\" size=\"sm\">\r\n\t\t<path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const MenuIcon: React.FC = () => (\r\n\t<Icon label=\"Menu\" size=\"sm\">\r\n\t\t<path d=\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const MoreIcon: React.FC = () => (\r\n\t<Icon label=\"More\" size=\"sm\">\r\n\t\t<path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const ChevronUpIcon: React.FC = () => (\r\n\t<Icon label=\"Chevron Up\" size=\"sm\">\r\n\t\t<path d=\"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const ChevronDownIcon: React.FC = () => (\r\n\t<Icon label=\"Chevron Down\" size=\"sm\">\r\n\t\t<path d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\" />\r\n\t</Icon>\r\n);\r\n\r\nexport const EyeIcon: React.FC = () => (\r\n\t<Icon label=\"Eye\" size=\"sm\">\r\n\t\t<path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\r\n\t</Icon>\r\n);\r\n","// Mac OS 9 Design Tokens\r\n// Extracted from Figma file: vy2T5MCXFz7QWf4Ba86eqN\r\n// Reference: docs/figma-map.md\r\n\r\n/**\r\n * Color tokens based on Mac OS 9 grayscale palette\r\n * Extracted from Figma styles and component analysis\r\n */\r\nexport const colors = {\r\n\t// Grayscale palette (Figma style IDs included for reference)\r\n\tgray100: '#FFFFFF', // 18:47 - White\r\n\tgray200: '#EEEEEE', // 19:2507 - Base UI background\r\n\tgray300: '#DDDDDD', // 18:60 - Inferred mid-tone\r\n\tgray400: '#CCCCCC', // 18:1970 - Inferred mid-tone\r\n\tgray500: '#999999', // 20:7306 - Inferred mid-tone\r\n\tgray600: '#666666', // 18:52 - Inferred dark tone\r\n\tgray700: '#4D4D4D', // 18:46 - Inferred dark tone\r\n\tgray800: '#333333', // 45:184845 - Inferred very dark\r\n\tgray900: '#262626', // 18:48 - Black (strokes, borders, text)\r\n\r\n\t// Accent colors\r\n\tlavender: '#CCCCFF', // 60:134029 - Cover background\r\n\tazul: '#0066CC', // 49:36229 - Accent (inferred)\r\n\tlinkRed: '#CC0000', // 102:398, 102:3935 - Link color (inferred)\r\n\r\n\t// Semantic mappings\r\n\tbackground: '#EEEEEE', // Gray 200\r\n\tforeground: '#262626', // Gray 900\r\n\tborder: '#262626', // Gray 900\r\n\ttext: '#262626', // Gray 900\r\n\ttextInverse: '#FFFFFF', // Gray 100\r\n\tsurface: '#EEEEEE', // Gray 200\r\n\tsurfaceInset: '#FFFFFF', // Gray 100 (for inset areas)\r\n\r\n\t// Legacy names for compatibility\r\n\tblack: '#262626',\r\n\twhite: '#FFFFFF',\r\n\r\n\t// Status colors (Mac OS 9 style)\r\n\tfocus: '#000080',\r\n\terror: '#CC0000',\r\n\tsuccess: '#008000',\r\n\twarning: '#FF8C00',\r\n} as const;\r\n\r\n/**\r\n * Typography tokens\r\n * Based on Figma text styles and authentic Mac OS 9 system fonts\r\n * \r\n * Mac OS 9 Typography:\r\n * - Charcoal: Primary system UI font (menus, buttons, dialogs)\r\n * - Geneva: Body text and secondary UI elements\r\n * - Chicago: Classic Mac system font (menu bar, earlier versions)\r\n * - Apple Garamond: Headlines and editorial content\r\n */\r\nexport const typography = {\r\n\tfontFamily: {\r\n\t\t// Charcoal - Primary system UI font used throughout Mac OS 9\r\n\t\t// Fallback chain: Try Charcoal variants, then Chicago, then modern system fonts\r\n\t\tsystem: 'Charcoal, \"Charcoal CY\", Chicago, \"Chicago Classic\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif',\r\n\t\t\r\n\t\t// Geneva - Used for dialog text and body content in Mac OS 9\r\n\t\t// More readable for longer text than Charcoal\r\n\t\tbody: 'Geneva, \"Geneva CY\", \"Lucida Grande\", \"Lucida Sans Unicode\", sans-serif',\r\n\t\t\r\n\t\t// Apple Garamond Light - Used for headlines in Figma\r\n\t\tdisplay: '\"Apple Garamond Light\", \"Apple Garamond\", Garamond, Georgia, serif',\r\n\t\t\r\n\t\t// Chicago - Classic Mac OS system font (menu bar, classic UI)\r\n\t\tchicago: 'Chicago, \"Chicago Classic\", \"Charcoal CY\", Charcoal, monospace',\r\n\t\t\r\n\t\t// Monaco - Mac OS 9 monospace font\r\n\t\tmono: 'Monaco, \"Monaco CY\", \"SF Mono\", \"Courier New\", Courier, monospace',\r\n\t},\r\n\tfontSize: {\r\n\t\txs: '9px', // Smallest UI text (9pt Chicago/Charcoal)\r\n\t\tsm: '10px', // Small labels (10pt)\r\n\t\tmd: '12px', // Standard UI text - Mac OS 9 default (12pt)\r\n\t\tlg: '13px', // Slightly larger UI text\r\n\t\txl: '14px', // Large UI text\r\n\t\t'2xl': '16px', // Headings\r\n\t\t'3xl': '18px', // Large headings\r\n\t\t'4xl': '20px', // Major headings\r\n\t\t'5xl': '24px', // Display text\r\n\t},\r\n\tfontWeight: {\r\n\t\tnormal: 700, // Charcoal Bold is the Mac OS 9 default\r\n\t\tmedium: 700, // Medium (same as bold for Charcoal)\r\n\t\tsemibold: 700, // Semibold (same as bold)\r\n\t\tbold: 700, // Bold weight\r\n\t\tlight: 400, // Light weight (regular Charcoal)\r\n\t},\r\n\tlineHeight: {\r\n\t\ttight: 1.2, // Tight leading (Mac OS 9 style)\r\n\t\tsnug: 1.3, // Snug\r\n\t\tnormal: 1.4, // Normal (Mac OS 9 used tighter line heights)\r\n\t\trelaxed: 1.5, // Relaxed\r\n\t\tloose: 1.6, // Loose\r\n\t},\r\n\tletterSpacing: {\r\n\t\ttighter: '-0.02em', // Slightly tighter\r\n\t\ttight: '-0.01em', // Tight\r\n\t\tnormal: '0', // Normal - Mac OS 9 default\r\n\t\twide: '0.01em', // Wide\r\n\t\twider: '0.02em', // Wider\r\n\t},\r\n} as const;\r\n\r\n/**\r\n * Spacing tokens based on Mac OS 9 measurements\r\n * Mac OS 9 used tight spacing; using 2px as base unit\r\n */\r\nexport const spacing = {\r\n\t'0': '0',\r\n\tpx: '1px',\r\n\t'0.5': '2px', // Minimal spacing\r\n\t'1': '4px', // Base grid unit\r\n\t'1.5': '6px',\r\n\t'2': '8px',\r\n\t'2.5': '10px',\r\n\t'3': '12px',\r\n\t'4': '16px',\r\n\t'5': '20px',\r\n\t'6': '24px',\r\n\t'8': '32px',\r\n\t'10': '40px',\r\n\t'12': '48px',\r\n\t'16': '64px',\r\n\r\n\t// Legacy names\r\n\txs: '2px',\r\n\tsm: '4px',\r\n\tmd: '8px',\r\n\tlg: '12px',\r\n\txl: '16px',\r\n\t'2xl': '24px',\r\n\t'3xl': '32px',\r\n} as const;\r\n\r\n/**\r\n * Shadow tokens for Mac OS 9 bevel effects\r\n * Exact values from Figma Window Shadow effect (67:95038)\r\n * \r\n * Classic 3-layer bevel:\r\n * 1. Hard drop shadow (2px, 2px, 0 blur) - creates depth\r\n * 2. Top-left highlight (light inner shadow)\r\n * 3. Bottom-right shadow (dark inner shadow)\r\n */\r\nexport const shadows = {\r\n\t// Standard raised bevel (default button state)\r\n\tbevel:\r\n\t\t'inset 2px 2px 0 rgba(255, 255, 255, 0.6), inset -2px -2px 0 rgba(38, 38, 38, 0.4), 2px 2px 0 rgba(38, 38, 38, 1)',\r\n\r\n\t// Inverted bevel for pressed/inset states\r\n\tinset:\r\n\t\t'inset -2px -2px 0 rgba(255, 255, 255, 0.6), inset 2px 2px 0 rgba(38, 38, 38, 0.4), 2px 2px 0 rgba(38, 38, 38, 1)',\r\n\r\n\t// Individual layers for custom composition\r\n\tdropShadow: '2px 2px 0 rgba(38, 38, 38, 1)',\r\n\tinnerHighlight: 'inset 2px 2px 0 rgba(255, 255, 255, 0.6)',\r\n\tinnerShadow: 'inset -2px -2px 0 rgba(38, 38, 38, 0.4)',\r\n\r\n\t// Legacy format for compatibility\r\n\traised: {\r\n\t\thighlight: 'inset 2px 2px 0 rgba(255, 255, 255, 0.6)',\r\n\t\tshadow: 'inset -2px -2px 0 rgba(38, 38, 38, 0.4)',\r\n\t\tfull: 'inset 2px 2px 0 rgba(255, 255, 255, 0.6), inset -2px -2px 0 rgba(38, 38, 38, 0.4), 2px 2px 0 rgba(38, 38, 38, 1)',\r\n\t},\r\n\r\n\t// No shadow (flat)\r\n\tnone: 'none',\r\n} as const;\r\n\r\n/**\r\n * Border tokens\r\n * Mac OS 9 used consistent 1px borders with sharp corners\r\n */\r\nexport const borders = {\r\n\twidth: {\r\n\t\tnone: '0',\r\n\t\tthin: '1px',\r\n\t\tmedium: '2px',\r\n\t\tthick: '3px',\r\n\t},\r\n\tstyle: {\r\n\t\tsolid: 'solid',\r\n\t\tdashed: 'dashed',\r\n\t\tdotted: 'dotted',\r\n\t\tnone: 'none',\r\n\t},\r\n\tradius: {\r\n\t\tnone: '0', // Mac OS 9 always used square corners\r\n\t\tsm: '0', // Kept for API consistency\r\n\t\tmd: '0',\r\n\t\tlg: '0',\r\n\t\tfull: '0',\r\n\t},\r\n} as const;\r\n\r\n/**\r\n * Z-index scale for layering\r\n */\r\nexport const zIndex = {\r\n\tbase: 0,\r\n\tdropdown: 1000,\r\n\tsticky: 1100,\r\n\tmodal: 1200,\r\n\tpopover: 1300,\r\n\ttooltip: 1400,\r\n} as const;\r\n\r\n/**\r\n * Transition/Animation tokens\r\n * Mac OS 9 had minimal animations, but we add subtle ones for modern feel\r\n */\r\nexport const transitions = {\r\n\tduration: {\r\n\t\tinstant: '0ms',\r\n\t\tfast: '100ms',\r\n\t\tnormal: '200ms',\r\n\t\tslow: '300ms',\r\n\t},\r\n\ttiming: {\r\n\t\tlinear: 'linear',\r\n\t\teaseIn: 'cubic-bezier(0.4, 0, 1, 1)',\r\n\t\teaseOut: 'cubic-bezier(0, 0, 0.2, 1)',\r\n\t\teaseInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\r\n\t},\r\n} as const;\r\n\r\n// Export all tokens as a single object\r\nexport const tokens = {\r\n\tcolors,\r\n\ttypography,\r\n\tspacing,\r\n\tborders,\r\n\tshadows,\r\n\tzIndex,\r\n\ttransitions,\r\n} as const;\r\n\r\nexport default tokens;"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Button/Button.module.css","../src/components/Button/Button.tsx","../src/components/Icon/Icon.module.css","../src/components/Icon/Icon.tsx","../src/components/IconButton/IconButton.module.css","../src/components/IconButton/IconButton.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.module.css","../src/components/Radio/Radio.tsx","../src/components/TextField/TextField.module.css","../src/components/TextField/TextField.tsx","../src/components/Select/Select.module.css","../src/components/Select/Select.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Window/Window.module.css","../src/components/Window/Window.tsx","../src/components/Dialog/Dialog.module.css","../src/components/Dialog/Dialog.tsx","../src/components/MenuBar/MenuBar.module.css","../src/components/MenuBar/MenuBar.tsx","../src/components/MenuBar/MenuItem.module.css","../src/components/MenuBar/MenuItem.tsx","../src/components/Scrollbar/Scrollbar.module.css","../src/components/Scrollbar/Scrollbar.tsx","../src/components/ListView/ListView.module.css","../src/components/ListView/ListView.tsx","../src/components/FolderList/FolderList.module.css","../src/components/FolderList/FolderList.tsx","../src/components/Icon/icons.tsx","../src/tokens/index.ts"],"names":["forwardRef","jsx","jsxs","Fragment","React","useState","Children","isValidElement","useCallback","useRef","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["/* Button Component Styles - Mac OS 9 */\n\n.button {\n\t/* Base styles */\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: var(--spacing-1);\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\ttext-align: center;\n\ttext-decoration: none;\n\twhite-space: nowrap;\n\tuser-select: none;\n\tcursor: pointer;\n\ttransition: none; /* Mac OS 9 had no transitions */\n\n\t/* Mac OS 9 button appearance */\n\tbackground-color: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tborder-radius: var(--border-radius-none);\n\tbox-shadow: var(--shadow-bevel);\n\tcolor: var(--color-text);\n\n\t/* Pixelated corners - authentic Mac OS 9 chamfered effect */\n\tclip-path: polygon(\n\t\t/* Top edge with corners */\n\t\t2px 0,\n\t\tcalc(100% - 2px) 0,\n\t\t/* Top-right corner */\n\t\t100% 2px,\n\t\t/* Right edge */\n\t\t100% calc(100% - 2px),\n\t\t/* Bottom-right corner */\n\t\tcalc(100% - 2px) 100%,\n\t\t/* Bottom edge */\n\t\t2px 100%,\n\t\t/* Bottom-left corner */\n\t\t0 calc(100% - 2px),\n\t\t/* Left edge */\n\t\t0 2px\n\t);\n\n\t/* Remove default button styles */\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n}\n\n/* For links styled as buttons */\n.button[href] {\n\ttext-decoration: none;\n}\n\n.button[href]:visited {\n\tcolor: var(--color-text);\n}\n\n/* ========================================\n * Size Variants\n * ======================================== */\n\n.button--sm {\n\tmin-height: 20px;\n\tpadding: var(--spacing-0_5) var(--spacing-2);\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.button--md {\n\tmin-height: 24px;\n\tpadding: var(--spacing-1) var(--spacing-3);\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.button--lg {\n\tmin-height: 32px;\n\tpadding: var(--spacing-2) var(--spacing-4);\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n/* ========================================\n * Variant Styles\n * ======================================== */\n\n.button--default {\n\t/* Uses base styles */\n}\n\n.button--primary {\n\t/* Slightly darker background for emphasis */\n\tbackground-color: var(--color-gray-300);\n\tfont-weight: var(--font-weight-bold);\n}\n\n.button--danger {\n\t/* Error state styling */\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n}\n\n/* ========================================\n * Interactive States\n * ======================================== */\n\n/* Hover state - subtle highlight */\n.button:hover:not(:disabled) {\n\tbackground-color: var(--color-gray-100);\n}\n\n/* Active/Pressed state - inverted bevel */\n.button:active:not(:disabled) {\n\tbox-shadow: var(--shadow-inset);\n\tbackground-color: var(--color-gray-300);\n\t/* Subtle visual feedback - button appears pressed */\n\ttransform: translate(1px, 1px);\n}\n\n/* Focus state - keyboard navigation */\n.button:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: 2px;\n}\n\n/* ========================================\n * Disabled State\n * ======================================== */\n\n.button--disabled,\n.button:disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n\tpointer-events: none;\n}\n\n/* ========================================\n * Layout Modifiers\n * ======================================== */\n\n.button--full-width {\n\twidth: 100%;\n}\n\n/* ========================================\n * Loading States\n * ======================================== */\n\n.button--loading {\n\tposition: relative;\n\tpointer-events: none;\n}\n\n.button--loading:not(.button--cursor-loading) {\n\tcursor: wait;\n}\n\n/* Mac OS 9 watch cursor during loading */\n.button--cursor-loading {\n\tcursor: wait;\n}\n\n.button__loading-spinner {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: var(--font-size-md);\n}\n\n.button__text {\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n/* ========================================\n * Icon Support\n * ======================================== */\n\n.button__icon-left,\n.button__icon-right {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n}\n\n.button__icon-only {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Icon-only buttons should be square */\n.button--icon-only {\n\tpadding: var(--spacing-1);\n\taspect-ratio: 1;\n}\n\n.button--icon-only.button--sm {\n\tpadding: var(--spacing-0_5);\n}\n\n.button--icon-only.button--lg {\n\tpadding: var(--spacing-2);\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.button {\n\t\tborder-width: var(--border-width-medium);\n\t}\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.button {\n\t\ttransition: none;\n\t}\n}\n","// Button component - Mac OS 9 style\n// Enhanced with polymorphic support, loading states, and icon support\n\nimport React, { forwardRef, ButtonHTMLAttributes, AnchorHTMLAttributes } from 'react';\nimport styles from './Button.module.css';\n\n// Common props shared by button and link variants\ninterface BaseButtonProps {\n\t/**\n\t * Button variant\n\t * @default 'default'\n\t */\n\tvariant?: 'default' | 'primary' | 'danger';\n\n\t/**\n\t * Button size\n\t * @default 'md'\n\t */\n\tsize?: 'sm' | 'md' | 'lg';\n\n\t/**\n\t * Whether the button is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Whether the button should take full width\n\t * @default false\n\t */\n\tfullWidth?: boolean;\n\n\t/**\n\t * Loading state - shows loading indicator and disables interaction\n\t * @default false\n\t */\n\tloading?: boolean;\n\n\t/**\n\t * Text to show when loading (replaces children)\n\t */\n\tloadingText?: string;\n\n\t/**\n\t * Use Mac OS 9 style watch cursor during loading\n\t * @default false\n\t */\n\tuseCursorLoading?: boolean;\n\n\t/**\n\t * Icon to display before the button text\n\t */\n\tleftIcon?: React.ReactNode;\n\n\t/**\n\t * Icon to display after the button text\n\t */\n\trightIcon?: React.ReactNode;\n\n\t/**\n\t * If true, only displays icon (children used as aria-label)\n\t */\n\ticonOnly?: boolean;\n\n\t/**\n\t * Override aria-label\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * ID of element that describes this button\n\t */\n\tariaDescribedBy?: string;\n\n\t/**\n\t * For toggle buttons - indicates pressed state\n\t */\n\tariaPressed?: boolean;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Button content\n\t */\n\tchildren: React.ReactNode;\n}\n\n// Button-specific props\ninterface ButtonAsButton extends BaseButtonProps, Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof BaseButtonProps | 'aria-label' | 'aria-describedby' | 'aria-pressed'> {\n\t/**\n\t * Render as button element\n\t * @default 'button'\n\t */\n\tas?: 'button';\n\n\t/**\n\t * Associate button with a form by ID\n\t */\n\tform?: string;\n\n\t/**\n\t * Override form action URL\n\t */\n\tformAction?: string;\n\n\t/**\n\t * Override form method\n\t */\n\tformMethod?: 'get' | 'post';\n\n\t/**\n\t * Skip form validation\n\t */\n\tformNoValidate?: boolean;\n\n\t/**\n\t * Where to display form response\n\t */\n\tformTarget?: string;\n}\n\n// Link-specific props\ninterface ButtonAsLink extends BaseButtonProps, Omit<AnchorHTMLAttributes<HTMLAnchorElement>, keyof BaseButtonProps | 'aria-label' | 'aria-describedby' | 'aria-pressed'> {\n\t/**\n\t * Render as anchor element\n\t */\n\tas: 'a';\n\n\t/**\n\t * URL for the link\n\t */\n\thref: string;\n\n\t/**\n\t * Where to open the link\n\t */\n\ttarget?: '_blank' | '_self' | '_parent' | '_top';\n\n\t/**\n\t * Relationship of linked resource\n\t * Auto-fills \"noopener noreferrer\" for external links if not provided\n\t */\n\trel?: string;\n\n\t/**\n\t * Prompt to download the linked resource\n\t */\n\tdownload?: boolean | string;\n}\n\nexport type ButtonProps = ButtonAsButton | ButtonAsLink;\n\n/**\n * Mac OS 9 style Button component\n * \n * Polymorphic component that can render as button or link with consistent styling.\n * \n * Features:\n * - Classic 3-layer bevel effect (highlight, shadow, drop shadow)\n * - Polymorphic - renders as <button> or <a> based on `as` prop\n * - Loading states with optional Mac OS 9 watch cursor\n * - Icon support (left, right, or icon-only)\n * - Full accessibility with ARIA support\n * - Form integration props\n * - Auto-security for external links\n * \n * @example\n * ```tsx\n * // Button\n * <Button onClick={handleClick}>Click Me</Button>\n * <Button variant=\"primary\" size=\"lg\">Primary Action</Button>\n * <Button loading loadingText=\"Saving...\">Save</Button>\n * \n * // Link styled as button\n * <Button as=\"a\" href=\"/dashboard\">Go to Dashboard</Button>\n * <Button as=\"a\" href=\"https://example.com\" target=\"_blank\">\n * External Link\n * </Button>\n * \n * // With icons\n * <Button leftIcon={<FolderIcon />}>Open</Button>\n * <Button iconOnly aria-label=\"Close\">\n * <CloseIcon />\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(\n\t(props, ref) => {\n\t\tconst {\n\t\t\tvariant = 'default',\n\t\t\tsize = 'md',\n\t\t\tdisabled = false,\n\t\t\tfullWidth = false,\n\t\t\tloading = false,\n\t\t\tloadingText,\n\t\t\tuseCursorLoading = false,\n\t\t\tleftIcon,\n\t\t\trightIcon,\n\t\t\ticonOnly = false,\n\t\t\tariaLabel,\n\t\t\tariaDescribedBy,\n\t\t\tariaPressed,\n\t\t\tclassName = '',\n\t\t\tchildren,\n\t\t\t...restProps\n\t\t} = props;\n\n\t\t// Determine if rendering as link\n\t\tconst isLink = props.as === 'a';\n\t\tconst Component = isLink ? 'a' : 'button';\n\n\t\t// Build class names\n\t\tconst classNames = [\n\t\t\tstyles.button,\n\t\t\tstyles[`button--${variant}`],\n\t\t\tstyles[`button--${size}`],\n\t\t\tfullWidth && styles['button--full-width'],\n\t\t\tdisabled && styles['button--disabled'],\n\t\t\tloading && styles['button--loading'],\n\t\t\tloading && useCursorLoading && styles['button--cursor-loading'],\n\t\t\ticonOnly && styles['button--icon-only'],\n\t\t\t(leftIcon || rightIcon) && styles['button--with-icon'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\t// Prepare ARIA attributes\n\t\tconst ariaAttributes: Record<string, any> = {\n\t\t\t'aria-label': iconOnly ? (ariaLabel || (typeof children === 'string' ? children : undefined)) : ariaLabel,\n\t\t\t'aria-describedby': ariaDescribedBy,\n\t\t\t'aria-pressed': ariaPressed,\n\t\t\t'aria-disabled': disabled || loading,\n\t\t\t'aria-busy': loading,\n\t\t};\n\n\t\t// Handle link-specific props\n\t\tif (isLink) {\n\t\t\tconst { href, target, rel, download, ...linkProps } = restProps as ButtonAsLink;\n\t\t\t\n\t\t\t// Auto-add security rel for external links\n\t\t\tlet finalRel = rel;\n\t\t\tif (target === '_blank' && !rel) {\n\t\t\t\tfinalRel = 'noopener noreferrer';\n\t\t\t}\n\n\t\t\t// Links can't be truly disabled, so prevent default\n\t\t\tconst handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n\t\t\t\tif (disabled || loading) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlinkProps.onClick?.(e);\n\t\t\t};\n\n\t\t\treturn (\n\t\t\t\t<a\n\t\t\t\t\tref={ref as React.Ref<HTMLAnchorElement>}\n\t\t\t\t\thref={disabled || loading ? undefined : href}\n\t\t\t\t\ttarget={target}\n\t\t\t\t\trel={finalRel}\n\t\t\t\t\tdownload={download}\n\t\t\t\t\tclassName={classNames}\n\t\t\t\t\t{...ariaAttributes}\n\t\t\t\t\t{...linkProps}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t>\n\t\t\t\t\t{renderButtonContent()}\n\t\t\t\t</a>\n\t\t\t);\n\t\t}\n\n\t\t// Handle button-specific props\n\t\tconst {\n\t\t\ttype = 'button',\n\t\t\tform,\n\t\t\tformAction,\n\t\t\tformMethod,\n\t\t\tformNoValidate,\n\t\t\tformTarget,\n\t\t\t...buttonProps\n\t\t} = restProps as ButtonAsButton;\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\tref={ref as React.Ref<HTMLButtonElement>}\n\t\t\t\ttype={type}\n\t\t\t\tdisabled={disabled || loading}\n\t\t\t\tform={form}\n\t\t\t\tformAction={formAction}\n\t\t\t\tformMethod={formMethod}\n\t\t\t\tformNoValidate={formNoValidate}\n\t\t\t\tformTarget={formTarget}\n\t\t\t\tclassName={classNames}\n\t\t\t\t{...ariaAttributes}\n\t\t\t\t{...buttonProps}\n\t\t\t>\n\t\t\t\t{renderButtonContent()}\n\t\t\t</button>\n\t\t);\n\n\t\t// Render button content with icons and loading state\n\t\tfunction renderButtonContent() {\n\t\t\t// Show loading state\n\t\t\tif (loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!useCursorLoading && (\n\t\t\t\t\t\t\t<span className={styles['button__loading-spinner']} aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t⏳\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<span className={styles['button__text']}>\n\t\t\t\t\t\t\t{loadingText || children}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Icon-only button\n\t\t\tif (iconOnly) {\n\t\t\t\treturn <span className={styles['button__icon-only']}>{children}</span>;\n\t\t\t}\n\n\t\t\t// Button with icons\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t{leftIcon && (\n\t\t\t\t\t\t<span className={styles['button__icon-left']} aria-hidden=\"true\">\n\t\t\t\t\t\t\t{leftIcon}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t\t<span className={styles['button__text']}>{children}</span>\n\t\t\t\t\t{rightIcon && (\n\t\t\t\t\t\t<span className={styles['button__icon-right']} aria-hidden=\"true\">\n\t\t\t\t\t\t\t{rightIcon}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t);\n\t\t}\n\t}\n);\n\nButton.displayName = 'Button';\n\nexport default Button;","/* Icon Component Styles - Mac OS 9 */\n\n.icon {\n\t/* Base styles */\n\tdisplay: inline-block;\n\tflex-shrink: 0;\n\tline-height: 1;\n\tcolor: currentColor;\n\tvertical-align: middle;\n}\n\n/* ========================================\n * Size Variants\n * ======================================== */\n\n.icon--xs {\n\twidth: 12px;\n\theight: 12px;\n}\n\n.icon--sm {\n\twidth: 14px;\n\theight: 14px;\n}\n\n.icon--md {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.icon--lg {\n\twidth: 20px;\n\theight: 20px;\n}\n\n.icon--xl {\n\twidth: 24px;\n\theight: 24px;\n}","// Icon component - Mac OS 9 style\n// Simple wrapper for SVG icons with consistent sizing\n\nimport React, { forwardRef, SVGAttributes } from 'react';\nimport styles from './Icon.module.css';\n\nexport interface IconProps extends SVGAttributes<SVGElement> {\n\t/**\n\t * Icon size\n\t * @default 'md'\n\t */\n\tsize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n\t/**\n\t * Icon content (SVG path or element)\n\t */\n\tchildren: React.ReactNode;\n\n\t/**\n\t * Optional label for accessibility\n\t */\n\tlabel?: string;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n}\n\n/**\n * Icon component for Mac OS 9 UI\n * \n * Wraps SVG content with consistent sizing and styling.\n * Use for inline icons in buttons, labels, etc.\n * \n * @example\n * ```tsx\n * <Icon size=\"sm\">\n * <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/>\n * </Icon>\n * \n * <Icon label=\"Close\" size=\"md\">\n * <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n * </Icon>\n * ```\n */\nexport const Icon = forwardRef<SVGSVGElement, IconProps>(\n\t({ size = 'md', children, label, className = '', ...props }, ref) => {\n\t\tconst classNames = [styles.icon, styles[`icon--${size}`], className]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\treturn (\n\t\t\t<svg\n\t\t\t\tref={ref}\n\t\t\t\tclassName={classNames}\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\taria-label={label}\n\t\t\t\taria-hidden={!label}\n\t\t\t\trole={label ? 'img' : 'presentation'}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</svg>\n\t\t);\n\t}\n);\n\nIcon.displayName = 'Icon';\n\nexport default Icon;","/* IconButton Component Styles - Mac OS 9 */\n\n/* Import pixelated corners utility */\n@import '../../styles/pixelated-corners.css';\n\n/* ========================================\n * Base IconButton Styles\n * ======================================== */\n\n.iconButton {\n\t/* Base styling */\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-bold);\n\tcolor: var(--color-text);\n\t\n\t/* Box styling */\n\tbackground: var(--color-gray-400);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tborder-radius: var(--border-radius-none);\n\tbox-shadow: var(--shadow-raised);\n\t\n\t/* Layout */\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: var(--spacing-2);\n\t\n\t/* Cursor */\n\tcursor: pointer;\n\t\n\t/* Remove button defaults */\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\t\n\t/* No transitions */\n\ttransition: none;\n\t\n\t/* Text */\n\twhite-space: nowrap;\n\tuser-select: none;\n\t\n\t/* Pixelated corners for authentic Mac OS 9 appearance */\n\tclip-path: polygon(\n\t\t/* Top-left pixelated corner */\n\t\t4px 0,\n\t\t3px 1px,\n\t\t2px 2px,\n\t\t1px 3px,\n\t\t0 4px,\n\t\t/* Left edge down */\n\t\t0 calc(100% - 4px),\n\t\t/* Bottom-left pixelated corner */\n\t\t1px calc(100% - 3px),\n\t\t2px calc(100% - 2px),\n\t\t3px calc(100% - 1px),\n\t\t4px 100%,\n\t\t/* Bottom edge right */\n\t\tcalc(100% - 4px) 100%,\n\t\t/* Bottom-right pixelated corner */\n\t\tcalc(100% - 3px) calc(100% - 1px),\n\t\tcalc(100% - 2px) calc(100% - 2px),\n\t\tcalc(100% - 1px) calc(100% - 3px),\n\t\t100% calc(100% - 4px),\n\t\t/* Right edge up */\n\t\t100% 4px,\n\t\t/* Top-right pixelated corner */\n\t\tcalc(100% - 1px) 3px,\n\t\tcalc(100% - 2px) 2px,\n\t\tcalc(100% - 3px) 1px,\n\t\tcalc(100% - 4px) 0\n\t);\n}\n\n/* ========================================\n * Icon and Label Layout\n * ======================================== */\n\n.icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n}\n\n.label {\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n/* Layout direction variants */\n.iconButton--label-top,\n.iconButton--label-bottom {\n\tflex-direction: column;\n}\n\n.iconButton--label-left {\n\tflex-direction: row-reverse;\n}\n\n.iconButton--label-right {\n\tflex-direction: row;\n}\n\n/* ========================================\n * Size Variants\n * ======================================== */\n\n.iconButton--sm {\n\tpadding: var(--spacing-1);\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n\tmin-width: 24px;\n\tmin-height: 24px;\n}\n\n.iconButton--sm.iconButton--with-label {\n\tpadding: var(--spacing-1) var(--spacing-2);\n}\n\n.iconButton--md {\n\tpadding: var(--spacing-1_5);\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n\tmin-width: 32px;\n\tmin-height: 32px;\n}\n\n.iconButton--md.iconButton--with-label {\n\tpadding: var(--spacing-1_5) var(--spacing-3);\n}\n\n.iconButton--lg {\n\tpadding: var(--spacing-2);\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n\tmin-width: 40px;\n\tmin-height: 40px;\n}\n\n.iconButton--lg.iconButton--with-label {\n\tpadding: var(--spacing-2) var(--spacing-4);\n}\n\n/* ========================================\n * Variant Styles\n * ======================================== */\n\n.iconButton--default {\n\tbackground: var(--color-gray-400);\n}\n\n.iconButton--primary {\n\tbackground: var(--color-gray-300);\n}\n\n.iconButton--danger {\n\tbackground: var(--color-gray-400);\n\tcolor: var(--color-text);\n}\n\n/* ========================================\n * Interactive States\n * ======================================== */\n\n/* Hover state */\n.iconButton:hover:not(:disabled) {\n\tbackground: var(--color-gray-300);\n}\n\n/* Active/pressed state */\n.iconButton:active:not(:disabled) {\n\tbox-shadow: var(--shadow-inset);\n\tbackground: var(--color-gray-500);\n}\n\n/* Focus state */\n.iconButton:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: -3px;\n}\n\n/* Disabled state */\n.iconButton--disabled,\n.iconButton:disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n\tpointer-events: none;\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.iconButton {\n\t\ttransition: none;\n\t}\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.iconButton {\n\t\tborder-width: 2px;\n\t}\n}\n","// IconButton component - Mac OS 9 style button with icon\n// Button variant that includes an icon, with optional label\n\n'use client';\n\nimport React, { forwardRef, ButtonHTMLAttributes } from 'react';\nimport styles from './IconButton.module.css';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\t/**\n\t * Icon element to display\n\t */\n\ticon: React.ReactNode;\n\n\t/**\n\t * Optional text label to display alongside icon\n\t */\n\tlabel?: string;\n\n\t/**\n\t * Label position relative to icon\n\t * @default 'right'\n\t */\n\tlabelPosition?: 'left' | 'right' | 'top' | 'bottom';\n\n\t/**\n\t * Button variant\n\t * @default 'default'\n\t */\n\tvariant?: 'default' | 'primary' | 'danger';\n\n\t/**\n\t * Button size\n\t * @default 'md'\n\t */\n\tsize?: 'sm' | 'md' | 'lg';\n\n\t/**\n\t * Whether button is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n}\n\n/**\n * IconButton component for Mac OS 9 UI\n * \n * Button with an icon, optionally with a text label.\n * Supports all button variants and sizes.\n * \n * @example\n * ```tsx\n * // Icon-only button\n * <IconButton icon={<SaveIcon />} />\n * \n * // Icon with label\n * <IconButton \n * icon={<FolderIcon />} \n * label=\"New Folder\"\n * variant=\"primary\"\n * />\n * \n * // Icon with label on different sides\n * <IconButton \n * icon={<SearchIcon />} \n * label=\"Search\"\n * labelPosition=\"right\"\n * />\n * ```\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n\t(\n\t\t{\n\t\t\ticon,\n\t\t\tlabel,\n\t\t\tlabelPosition = 'right',\n\t\t\tvariant = 'default',\n\t\t\tsize = 'md',\n\t\t\tdisabled = false,\n\t\t\tclassName = '',\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\t// Build class names\n\t\tconst classNames = [\n\t\t\tstyles.iconButton,\n\t\t\tstyles[`iconButton--${variant}`],\n\t\t\tstyles[`iconButton--${size}`],\n\t\t\tlabel && styles[`iconButton--with-label`],\n\t\t\tlabel && styles[`iconButton--label-${labelPosition}`],\n\t\t\tdisabled && styles['iconButton--disabled'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={classNames}\n\t\t\t\tdisabled={disabled}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{label && (labelPosition === 'left' || labelPosition === 'top') && (\n\t\t\t\t\t<span className={styles.label}>{label}</span>\n\t\t\t\t)}\n\t\t\t\t<span className={styles.icon}>{icon}</span>\n\t\t\t\t{label && (labelPosition === 'right' || labelPosition === 'bottom') && (\n\t\t\t\t\t<span className={styles.label}>{label}</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t);\n\t}\n);\n\nIconButton.displayName = 'IconButton';\n\nexport default IconButton;\n","/* Checkbox Component Styles - Mac OS 9 */\n\n.wrapper {\n\t/* Wrapper container for checkbox and label */\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--spacing-2);\n\tposition: relative;\n\tcursor: pointer;\n}\n\n.wrapper--disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n.wrapper--error {\n\t/* Error state styling */\n}\n\n/* ========================================\n * Label Positioning\n * ======================================== */\n\n.wrapper--label-left {\n\tflex-direction: row-reverse;\n}\n\n.wrapper--label-right {\n\tflex-direction: row;\n}\n\n/* ========================================\n * Checkbox Input\n * ======================================== */\n\n.checkbox {\n\t/* Hide native checkbox */\n\tappearance: none;\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\t\n\t/* Custom checkbox styling */\n\tposition: relative;\n\tdisplay: inline-block;\n\tflex-shrink: 0;\n\tmargin: 0;\n\tcursor: pointer;\n\t\n\t/* Mac OS 9 checkbox appearance */\n\tbackground-color: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tborder-radius: var(--border-radius-none);\n\tbox-shadow: var(--shadow-inset);\n\t\n\t/* Transition for smooth state changes */\n\ttransition: none; /* Mac OS 9 had no transitions */\n}\n\n.checkbox:disabled {\n\tcursor: not-allowed;\n}\n\n/* ========================================\n * Size Variants\n * ======================================== */\n\n.checkbox--sm {\n\twidth: 14px;\n\theight: 14px;\n}\n\n.checkbox--md {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.checkbox--lg {\n\twidth: 20px;\n\theight: 20px;\n}\n\n/* ========================================\n * Checked State\n * ======================================== */\n\n.checkbox:checked {\n\t/* Checked state uses same background */\n\tbackground-color: var(--color-surface);\n}\n\n/* Checkmark using pseudo-element */\n.checkbox:checked::after {\n\tcontent: '';\n\tposition: absolute;\n\tdisplay: block;\n\t\n\t/* Mac OS 9 style checkmark */\n\tleft: 50%;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%) rotate(45deg);\n\t\n\t/* Default size (md) */\n\twidth: 4px;\n\theight: 8px;\n\t\n\tborder: solid var(--color-text);\n\tborder-width: 0 2px 2px 0;\n}\n\n.checkbox--sm:checked::after {\n\twidth: 3px;\n\theight: 6px;\n\tborder-width: 0 1.5px 1.5px 0;\n}\n\n.checkbox--lg:checked::after {\n\twidth: 5px;\n\theight: 10px;\n\tborder-width: 0 2.5px 2.5px 0;\n}\n\n/* ========================================\n * Indeterminate State\n * ======================================== */\n\n.checkbox--indeterminate::after {\n\tcontent: '';\n\tposition: absolute;\n\tdisplay: block;\n\t\n\t/* Horizontal line for indeterminate */\n\tleft: 50%;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%);\n\t\n\tbackground-color: var(--color-text);\n\t\n\t/* Default size (md) */\n\twidth: 8px;\n\theight: 2px;\n}\n\n.checkbox--sm.checkbox--indeterminate::after {\n\twidth: 6px;\n\theight: 1.5px;\n}\n\n.checkbox--lg.checkbox--indeterminate::after {\n\twidth: 10px;\n\theight: 2.5px;\n}\n\n/* ========================================\n * Focus State\n * ======================================== */\n\n.checkbox:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: 2px;\n}\n\n/* ========================================\n * Error State\n * ======================================== */\n\n.checkbox--error {\n\tborder-color: var(--color-error);\n}\n\n/* ========================================\n * Label\n * ======================================== */\n\n.label {\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\tcolor: var(--color-text);\n\tcursor: pointer;\n\tuser-select: none;\n}\n\n.wrapper--disabled .label {\n\tcursor: not-allowed;\n}\n\n.label--sm {\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.label--md {\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.label--lg {\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n/* ========================================\n * Size Variants for Wrapper\n * ======================================== */\n\n.wrapper--sm {\n\tgap: var(--spacing-1);\n}\n\n.wrapper--md {\n\tgap: var(--spacing-2);\n}\n\n.wrapper--lg {\n\tgap: var(--spacing-2);\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.checkbox {\n\t\tborder-width: var(--border-width-medium);\n\t}\n\t\n\t.checkbox:checked::after,\n\t.checkbox--indeterminate::after {\n\t\tborder-width: 0 3px 3px 0;\n\t}\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.checkbox {\n\t\ttransition: none;\n\t}\n}","// Checkbox component - Mac OS 9 style\n// Classic checkbox with label support and full accessibility\n\nimport React, { forwardRef, InputHTMLAttributes } from 'react';\nimport styles from './Checkbox.module.css';\n\nexport interface CheckboxProps\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n\t/**\n\t * Whether the checkbox is checked\n\t * For controlled component usage\n\t */\n\tchecked?: boolean;\n\n\t/**\n\t * Default checked state\n\t * For uncontrolled component usage\n\t */\n\tdefaultChecked?: boolean;\n\n\t/**\n\t * Whether the checkbox is in an indeterminate state\n\t * (neither checked nor unchecked, typically for \"select all\" scenarios)\n\t * @default false\n\t */\n\tindeterminate?: boolean;\n\n\t/**\n\t * Whether the checkbox is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Label text for the checkbox\n\t */\n\tlabel?: React.ReactNode;\n\n\t/**\n\t * Position of the label relative to the checkbox\n\t * @default 'right'\n\t */\n\tlabelPosition?: 'left' | 'right';\n\n\t/**\n\t * Size of the checkbox\n\t * @default 'md'\n\t */\n\tsize?: 'sm' | 'md' | 'lg';\n\n\t/**\n\t * Error state for form validation\n\t * @default false\n\t */\n\terror?: boolean;\n\n\t/**\n\t * Override aria-label (for checkboxes without visible labels)\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * ID of element that describes this checkbox\n\t */\n\tariaDescribedBy?: string;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Callback when checked state changes\n\t */\n\tonChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Mac OS 9 style Checkbox component\n * \n * Classic checkbox with raised bevel effect and optional label.\n * Supports checked, unchecked, indeterminate, and disabled states.\n * \n * Features:\n * - Classic Mac OS 9 bevel styling\n * - Indeterminate state support\n * - Label positioning (left/right)\n * - Controlled and uncontrolled modes\n * - Full accessibility with ARIA support\n * - Keyboard navigation (Space to toggle)\n * - Form integration\n * \n * @example\n * ```tsx\n * // Uncontrolled\n * <Checkbox label=\"Accept terms\" />\n * \n * // Controlled\n * <Checkbox \n * checked={isChecked} \n * onChange={(e) => setIsChecked(e.target.checked)}\n * label=\"Subscribe to newsletter\"\n * />\n * \n * // Indeterminate (for \"select all\")\n * <Checkbox \n * indeterminate={someSelected && !allSelected}\n * checked={allSelected}\n * onChange={handleSelectAll}\n * label=\"Select all items\"\n * />\n * ```\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n\t(\n\t\t{\n\t\t\tchecked,\n\t\t\tdefaultChecked,\n\t\t\tindeterminate = false,\n\t\t\tdisabled = false,\n\t\t\tlabel,\n\t\t\tlabelPosition = 'right',\n\t\t\tsize = 'md',\n\t\t\terror = false,\n\t\t\tariaLabel,\n\t\t\tariaDescribedBy,\n\t\t\tclassName = '',\n\t\t\tonChange,\n\t\t\tid,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\t\tconst combinedRef = (ref as React.RefObject<HTMLInputElement>) || inputRef;\n\n\t\t// Set indeterminate property via ref (can't be set via HTML attribute)\n\t\tReact.useEffect(() => {\n\t\t\tif (combinedRef?.current) {\n\t\t\t\tcombinedRef.current.indeterminate = indeterminate;\n\t\t\t}\n\t\t}, [indeterminate, combinedRef]);\n\n\t\t// Generate ID if not provided (for label association)\n\t\tconst checkboxId = id || React.useId();\n\n\t\t// Build class names\n\t\tconst wrapperClassNames = [\n\t\t\tstyles.wrapper,\n\t\t\tstyles[`wrapper--${size}`],\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\n\t\t\tdisabled && styles['wrapper--disabled'],\n\t\t\terror && styles['wrapper--error'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst checkboxClassNames = [\n\t\t\tstyles.checkbox,\n\t\t\tstyles[`checkbox--${size}`],\n\t\t\tindeterminate && styles['checkbox--indeterminate'],\n\t\t\terror && styles['checkbox--error'],\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\n\n\t\t// ARIA attributes\n\t\tconst ariaAttributes = {\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\n\t\t\t'aria-describedby': ariaDescribedBy,\n\t\t\t'aria-invalid': error,\n\t\t\t'aria-checked': indeterminate ? ('mixed' as const) : undefined,\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={wrapperClassNames}>\n\t\t\t\t{label && labelPosition === 'left' && (\n\t\t\t\t\t<label htmlFor={checkboxId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tref={combinedRef}\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tid={checkboxId}\n\t\t\t\t\tclassName={checkboxClassNames}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\tdefaultChecked={defaultChecked}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t{...ariaAttributes}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\n\t\t\t\t{label && labelPosition === 'right' && (\n\t\t\t\t\t<label htmlFor={checkboxId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;","/* Radio Component Styles - Mac OS 9 */\n\n.wrapper {\n\t/* Wrapper container for radio and label */\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--spacing-2);\n\tposition: relative;\n\tcursor: pointer;\n}\n\n.wrapper--disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n.wrapper--error {\n\t/* Error state styling */\n}\n\n/* ========================================\n * Label Positioning\n * ======================================== */\n\n.wrapper--label-left {\n\tflex-direction: row-reverse;\n}\n\n.wrapper--label-right {\n\tflex-direction: row;\n}\n\n/* ========================================\n * Radio Input\n * ======================================== */\n\n.radio {\n\t/* Hide native radio */\n\tappearance: none;\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\t\n\t/* Custom radio styling */\n\tposition: relative;\n\tdisplay: inline-block;\n\tflex-shrink: 0;\n\tmargin: 0;\n\tcursor: pointer;\n\t\n\t/* Mac OS 9 radio appearance - circular */\n\tbackground-color: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tborder-radius: 50%; /* Circular */\n\tbox-shadow: var(--shadow-inset);\n\t\n\t/* Transition for smooth state changes */\n\ttransition: none; /* Mac OS 9 had no transitions */\n}\n\n.radio:disabled {\n\tcursor: not-allowed;\n}\n\n/* ========================================\n * Size Variants\n * ======================================== */\n\n.radio--sm {\n\twidth: 14px;\n\theight: 14px;\n}\n\n.radio--md {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.radio--lg {\n\twidth: 20px;\n\theight: 20px;\n}\n\n/* ========================================\n * Checked State\n * ======================================== */\n\n.radio:checked {\n\t/* Checked state uses same background */\n\tbackground-color: var(--color-surface);\n}\n\n/* Radio dot using pseudo-element */\n.radio:checked::after {\n\tcontent: '';\n\tposition: absolute;\n\tdisplay: block;\n\t\n\t/* Mac OS 9 style filled dot - centered */\n\tleft: 50%;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%);\n\t\n\tbackground-color: var(--color-text);\n\tborder-radius: 50%; /* Circular dot */\n\t\n\t/* Default size (md) */\n\twidth: 8px;\n\theight: 8px;\n}\n\n.radio--sm:checked::after {\n\twidth: 6px;\n\theight: 6px;\n}\n\n.radio--lg:checked::after {\n\twidth: 10px;\n\theight: 10px;\n}\n\n/* ========================================\n * Focus State\n * ======================================== */\n\n.radio:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: 2px;\n}\n\n/* ========================================\n * Error State\n * ======================================== */\n\n.radio--error {\n\tborder-color: var(--color-error);\n}\n\n/* ========================================\n * Label\n * ======================================== */\n\n.label {\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\tcolor: var(--color-text);\n\tcursor: pointer;\n\tuser-select: none;\n}\n\n.wrapper--disabled .label {\n\tcursor: not-allowed;\n}\n\n.label--sm {\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.label--md {\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.label--lg {\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n/* ========================================\n * Size Variants for Wrapper\n * ======================================== */\n\n.wrapper--sm {\n\tgap: var(--spacing-1);\n}\n\n.wrapper--md {\n\tgap: var(--spacing-2);\n}\n\n.wrapper--lg {\n\tgap: var(--spacing-2);\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.radio {\n\t\tborder-width: var(--border-width-medium);\n\t}\n\t\n\t.radio:checked::after {\n\t\t/* Increase dot size in high contrast */\n\t\twidth: 10px;\n\t\theight: 10px;\n\t}\n\t\n\t.radio--sm:checked::after {\n\t\twidth: 8px;\n\t\theight: 8px;\n\t}\n\t\n\t.radio--lg:checked::after {\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.radio {\n\t\ttransition: none;\n\t}\n}","// Radio component - Mac OS 9 style\n// Classic radio button with label support and full accessibility\n\nimport React, { forwardRef, InputHTMLAttributes } from 'react';\nimport styles from './Radio.module.css';\n\nexport interface RadioProps\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n\t/**\n\t * Whether the radio is checked\n\t * For controlled component usage\n\t */\n\tchecked?: boolean;\n\n\t/**\n\t * Default checked state\n\t * For uncontrolled component usage\n\t */\n\tdefaultChecked?: boolean;\n\n\t/**\n\t * Whether the radio is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Label text for the radio\n\t */\n\tlabel?: React.ReactNode;\n\n\t/**\n\t * Position of the label relative to the radio\n\t * @default 'right'\n\t */\n\tlabelPosition?: 'left' | 'right';\n\n\t/**\n\t * Size of the radio\n\t * @default 'md'\n\t */\n\tsize?: 'sm' | 'md' | 'lg';\n\n\t/**\n\t * Error state for form validation\n\t * @default false\n\t */\n\terror?: boolean;\n\n\t/**\n\t * Override aria-label (for radios without visible labels)\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * ID of element that describes this radio\n\t */\n\tariaDescribedBy?: string;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Value for the radio button (required for radio groups)\n\t */\n\tvalue?: string | number;\n\n\t/**\n\t * Name for the radio group (all radios in a group should share the same name)\n\t */\n\tname?: string;\n\n\t/**\n\t * Callback when checked state changes\n\t */\n\tonChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Mac OS 9 style Radio component\n * \n * Classic radio button with raised bevel effect and optional label.\n * Radio buttons work in groups - only one can be selected at a time.\n * \n * Features:\n * - Classic Mac OS 9 circular bevel styling\n * - Radio group support via `name` attribute\n * - Label positioning (left/right)\n * - Controlled and uncontrolled modes\n * - Full accessibility with ARIA support\n * - Keyboard navigation (Arrow keys to navigate group, Space to select)\n * - Form integration\n * \n * @example\n * ```tsx\n * // Uncontrolled radio group\n * <div>\n * <Radio name=\"size\" value=\"small\" label=\"Small\" />\n * <Radio name=\"size\" value=\"medium\" label=\"Medium\" defaultChecked />\n * <Radio name=\"size\" value=\"large\" label=\"Large\" />\n * </div>\n * \n * // Controlled radio group\n * <div>\n * <Radio \n * name=\"color\" \n * value=\"red\" \n * checked={color === 'red'}\n * onChange={(e) => setColor(e.target.value)}\n * label=\"Red\"\n * />\n * <Radio \n * name=\"color\" \n * value=\"blue\" \n * checked={color === 'blue'}\n * onChange={(e) => setColor(e.target.value)}\n * label=\"Blue\"\n * />\n * </div>\n * ```\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n\t(\n\t\t{\n\t\t\tchecked,\n\t\t\tdefaultChecked,\n\t\t\tdisabled = false,\n\t\t\tlabel,\n\t\t\tlabelPosition = 'right',\n\t\t\tsize = 'md',\n\t\t\terror = false,\n\t\t\tariaLabel,\n\t\t\tariaDescribedBy,\n\t\t\tclassName = '',\n\t\t\tvalue,\n\t\t\tname,\n\t\t\tonChange,\n\t\t\tid,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\t// Generate ID if not provided (for label association)\n\t\tconst radioId = id || React.useId();\n\n\t\t// Build class names\n\t\tconst wrapperClassNames = [\n\t\t\tstyles.wrapper,\n\t\t\tstyles[`wrapper--${size}`],\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\n\t\t\tdisabled && styles['wrapper--disabled'],\n\t\t\terror && styles['wrapper--error'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst radioClassNames = [\n\t\t\tstyles.radio,\n\t\t\tstyles[`radio--${size}`],\n\t\t\terror && styles['radio--error'],\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\n\n\t\t// ARIA attributes\n\t\tconst ariaAttributes = {\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\n\t\t\t'aria-describedby': ariaDescribedBy,\n\t\t\t'aria-invalid': error,\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={wrapperClassNames}>\n\t\t\t\t{label && labelPosition === 'left' && (\n\t\t\t\t\t<label htmlFor={radioId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tid={radioId}\n\t\t\t\t\tclassName={radioClassNames}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\tdefaultChecked={defaultChecked}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tname={name}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t{...ariaAttributes}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\n\t\t\t\t{label && labelPosition === 'right' && (\n\t\t\t\t\t<label htmlFor={radioId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nRadio.displayName = 'Radio';\n\nexport default Radio;","/* TextField Component Styles - Mac OS 9 */\n\n.wrapper {\n\t/* Wrapper container for text field, label, and helper text */\n\tdisplay: inline-flex;\n\tflex-direction: column;\n\tgap: var(--spacing-1);\n\tposition: relative;\n}\n\n.wrapper--full-width {\n\twidth: 100%;\n}\n\n.wrapper--disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n/* ========================================\n * Label Positioning\n * ======================================== */\n\n.wrapper--label-top {\n\tflex-direction: column;\n}\n\n.wrapper--label-left {\n\tflex-direction: row;\n\talign-items: center;\n\tgap: var(--spacing-2);\n}\n\n.wrapper--label-right {\n\tflex-direction: row-reverse;\n\talign-items: center;\n\tgap: var(--spacing-2);\n}\n\n/* ========================================\n * Label\n * ======================================== */\n\n.label {\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\tcolor: var(--color-text);\n\tuser-select: none;\n}\n\n.wrapper--disabled .label {\n\tcursor: not-allowed;\n}\n\n.label--sm {\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.label--md {\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.label--lg {\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n/* ========================================\n * Input Wrapper (for icon positioning)\n * ======================================== */\n\n.input-wrapper {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.wrapper--full-width .input-wrapper {\n\twidth: 100%;\n}\n\n/* ========================================\n * Input Field\n * ======================================== */\n\n.input {\n\t/* Base styling */\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\tcolor: var(--color-text);\n\t\n\t/* Mac OS 9 text field appearance - inset */\n\tbackground-color: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tborder-radius: var(--border-radius-none);\n\tbox-shadow: var(--shadow-inset);\n\t\n\t/* Remove default input styles */\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\t\n\t/* Transition */\n\ttransition: none; /* Mac OS 9 had no transitions */\n}\n\n.input::placeholder {\n\tcolor: var(--color-gray-600);\n\topacity: 1;\n}\n\n.input:disabled {\n\tcursor: not-allowed;\n\tbackground-color: var(--color-gray-200);\n}\n\n/* ========================================\n * Size Variants\n * ======================================== */\n\n.input--sm {\n\tmin-height: 20px;\n\tpadding: var(--spacing-0_5) var(--spacing-2);\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.input--md {\n\tmin-height: 24px;\n\tpadding: var(--spacing-1) var(--spacing-2);\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.input--lg {\n\tmin-height: 32px;\n\tpadding: var(--spacing-2) var(--spacing-3);\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n.input--full-width {\n\twidth: 100%;\n}\n\n/* ========================================\n * Icon Support\n * ======================================== */\n\n.input-icon-left,\n.input-icon-right {\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpointer-events: none;\n\tcolor: var(--color-gray-700);\n}\n\n.input-icon-left {\n\tleft: var(--spacing-2);\n}\n\n.input-icon-right {\n\tright: var(--spacing-2);\n}\n\n/* Adjust input padding when icons are present */\n.input-wrapper--with-left-icon .input {\n\tpadding-left: calc(var(--spacing-6) + var(--spacing-2));\n}\n\n.input-wrapper--with-right-icon .input {\n\tpadding-right: calc(var(--spacing-6) + var(--spacing-2));\n}\n\n/* ========================================\n * Focus State\n * ======================================== */\n\n.input:focus {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: 2px;\n}\n\n/* ========================================\n * Error State\n * ======================================== */\n\n.input--error {\n\tborder-color: var(--color-error);\n}\n\n.input--error:focus {\n\toutline-color: var(--color-error);\n}\n\n/* ========================================\n * Helper Text & Error Message\n * ======================================== */\n\n.helper-text,\n.error-message {\n\tmargin: 0;\n\tfont-family: var(--font-system);\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.helper-text {\n\tcolor: var(--color-gray-700);\n}\n\n.error-message {\n\tcolor: var(--color-error);\n}\n\n/* ========================================\n * Wrapper Size Variants\n * ======================================== */\n\n.wrapper--sm {\n\tgap: var(--spacing-0_5);\n}\n\n.wrapper--md {\n\tgap: var(--spacing-1);\n}\n\n.wrapper--lg {\n\tgap: var(--spacing-1);\n}\n\n/* ========================================\n * Input Types - Special Styling\n * ======================================== */\n\n/* Number input - remove spinner */\n.input[type='number']::-webkit-inner-spin-button,\n.input[type='number']::-webkit-outer-spin-button {\n\t-webkit-appearance: none;\n\tmargin: 0;\n}\n\n.input[type='number'] {\n\t-moz-appearance: textfield;\n}\n\n/* Search input */\n.input[type='search']::-webkit-search-decoration,\n.input[type='search']::-webkit-search-cancel-button,\n.input[type='search']::-webkit-search-results-button,\n.input[type='search']::-webkit-search-results-decoration {\n\t-webkit-appearance: none;\n}\n\n/* Password input */\n.input[type='password'] {\n\tfont-family: monospace;\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.input {\n\t\tborder-width: var(--border-width-medium);\n\t}\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.input {\n\t\ttransition: none;\n\t}\n}","// TextField component - Mac OS 9 style\n// Classic text input with label support and full accessibility\n\nimport React, { forwardRef, InputHTMLAttributes } from 'react';\nimport styles from './TextField.module.css';\n\nexport interface TextFieldProps\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n\t/**\n\t * Label text for the text field\n\t */\n\tlabel?: React.ReactNode;\n\n\t/**\n\t * Position of the label relative to the text field\n\t * @default 'top'\n\t */\n\tlabelPosition?: 'top' | 'left' | 'right';\n\n\t/**\n\t * Size of the text field\n\t * @default 'md'\n\t */\n\tsize?: 'sm' | 'md' | 'lg';\n\n\t/**\n\t * Whether the text field takes full width of its container\n\t * @default false\n\t */\n\tfullWidth?: boolean;\n\n\t/**\n\t * Error state for form validation\n\t * @default false\n\t */\n\terror?: boolean;\n\n\t/**\n\t * Error message to display below the field\n\t */\n\terrorMessage?: string;\n\n\t/**\n\t * Helper text to display below the field\n\t */\n\thelperText?: string;\n\n\t/**\n\t * Icon to display before the input (left side)\n\t */\n\tleftIcon?: React.ReactNode;\n\n\t/**\n\t * Icon to display after the input (right side)\n\t */\n\trightIcon?: React.ReactNode;\n\n\t/**\n\t * Override aria-label\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * ID of element that describes this text field\n\t */\n\tariaDescribedBy?: string;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Custom wrapper class name\n\t */\n\twrapperClassName?: string;\n}\n\n/**\n * Mac OS 9 style TextField component\n * \n * Classic text input with inset bevel effect and optional label.\n * \n * Features:\n * - Classic Mac OS 9 inset bevel styling\n * - Label positioning (top/left/right)\n * - Size variants (sm/md/lg)\n * - Error states with messages\n * - Helper text support\n * - Icon support (left/right)\n * - Full accessibility with ARIA support\n * - Keyboard navigation\n * - Form integration\n * \n * @example\n * ```tsx\n * // Basic text field\n * <TextField placeholder=\"Enter text...\" />\n * \n * // With label\n * <TextField label=\"Username\" placeholder=\"Enter username\" />\n * \n * // With error\n * <TextField \n * label=\"Email\" \n * error \n * errorMessage=\"Invalid email address\"\n * value={email}\n * onChange={(e) => setEmail(e.target.value)}\n * />\n * \n * // With icons\n * <TextField \n * leftIcon={<SearchIcon />}\n * placeholder=\"Search...\"\n * />\n * ```\n */\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n\t(\n\t\t{\n\t\t\tlabel,\n\t\t\tlabelPosition = 'top',\n\t\t\tsize = 'md',\n\t\t\tfullWidth = false,\n\t\t\terror = false,\n\t\t\terrorMessage,\n\t\t\thelperText,\n\t\t\tleftIcon,\n\t\t\trightIcon,\n\t\t\tariaLabel,\n\t\t\tariaDescribedBy,\n\t\t\tclassName = '',\n\t\t\twrapperClassName = '',\n\t\t\ttype = 'text',\n\t\t\tid,\n\t\t\tdisabled,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\t// Generate ID if not provided (for label association)\n\t\tconst inputId = id || React.useId();\n\n\t\t// Generate helper/error text ID for aria-describedby\n\t\tconst helperId = `${inputId}-helper`;\n\t\tconst errorId = `${inputId}-error`;\n\n\t\t// Combine aria-describedby\n\t\tconst describedByIds = [\n\t\t\thelperText && helperId,\n\t\t\terror && errorMessage && errorId,\n\t\t\tariaDescribedBy,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\t// Build class names\n\t\tconst wrapperClassNames = [\n\t\t\tstyles.wrapper,\n\t\t\tstyles[`wrapper--${size}`],\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\n\t\t\tfullWidth && styles['wrapper--full-width'],\n\t\t\tdisabled && styles['wrapper--disabled'],\n\t\t\twrapperClassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst inputWrapperClassNames = [\n\t\t\tstyles['input-wrapper'],\n\t\t\t(leftIcon || rightIcon) && styles['input-wrapper--with-icon'],\n\t\t\tleftIcon && styles['input-wrapper--with-left-icon'],\n\t\t\trightIcon && styles['input-wrapper--with-right-icon'],\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst inputClassNames = [\n\t\t\tstyles.input,\n\t\t\tstyles[`input--${size}`],\n\t\t\terror && styles['input--error'],\n\t\t\tfullWidth && styles['input--full-width'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\n\n\t\t// ARIA attributes\n\t\tconst ariaAttributes = {\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\n\t\t\t'aria-describedby': describedByIds || undefined,\n\t\t\t'aria-invalid': error,\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={wrapperClassNames}>\n\t\t\t\t{label && (labelPosition === 'top' || labelPosition === 'left') && (\n\t\t\t\t\t<label htmlFor={inputId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t<div className={inputWrapperClassNames}>\n\t\t\t\t\t{leftIcon && (\n\t\t\t\t\t\t<span className={styles['input-icon-left']} aria-hidden=\"true\">\n\t\t\t\t\t\t\t{leftIcon}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<input\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\tclassName={inputClassNames}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t{...ariaAttributes}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{rightIcon && (\n\t\t\t\t\t\t<span className={styles['input-icon-right']} aria-hidden=\"true\">\n\t\t\t\t\t\t\t{rightIcon}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{label && labelPosition === 'right' && (\n\t\t\t\t\t<label htmlFor={inputId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t{helperText && !error && (\n\t\t\t\t\t<p id={helperId} className={styles['helper-text']}>\n\t\t\t\t\t\t{helperText}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\n\t\t\t\t{error && errorMessage && (\n\t\t\t\t\t<p id={errorId} className={styles['error-message']}>\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nTextField.displayName = 'TextField';\n\nexport default TextField;","/* Select Component Styles - Mac OS 9 */\n\n.wrapper {\n\t/* Wrapper container for select, label, and helper text */\n\tdisplay: inline-flex;\n\tflex-direction: column;\n\tgap: var(--spacing-1);\n\tposition: relative;\n}\n\n.wrapper--full-width {\n\twidth: 100%;\n}\n\n.wrapper--disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n/* ========================================\n * Label Positioning\n * ======================================== */\n\n.wrapper--label-top {\n\tflex-direction: column;\n}\n\n.wrapper--label-left {\n\tflex-direction: row;\n\talign-items: center;\n\tgap: var(--spacing-2);\n}\n\n.wrapper--label-right {\n\tflex-direction: row-reverse;\n\talign-items: center;\n\tgap: var(--spacing-2);\n}\n\n/* ========================================\n * Label\n * ======================================== */\n\n.label {\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\tcolor: var(--color-text);\n\tuser-select: none;\n}\n\n.wrapper--disabled .label {\n\tcursor: not-allowed;\n}\n\n.label--sm {\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.label--md {\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.label--lg {\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n/* ========================================\n * Select Field\n * ======================================== */\n\n.select {\n\t/* Base styling */\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\tcolor: var(--color-text);\n\t\n\t/* Mac OS 9 popup menu appearance - raised bevel with dropdown arrow */\n\tbackground-color: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tborder-radius: var(--border-radius-none);\n\tbox-shadow: var(--shadow-bevel);\n\t\n\t/* Add arrow indicator */\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23000000' d='M2 4l4 4 4-4z'/%3E%3C/svg%3E\");\n\tbackground-repeat: no-repeat;\n\tbackground-position: right var(--spacing-1) center;\n\t\n\t/* Remove default select styles */\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\t\n\t/* Cursor */\n\tcursor: pointer;\n\t\n\t/* Transition */\n\ttransition: none; /* Mac OS 9 had no transitions */\n}\n\n.select:disabled {\n\tcursor: not-allowed;\n\tbackground-color: var(--color-gray-200);\n}\n\n/* ========================================\n * Size Variants\n * ======================================== */\n\n.select--sm {\n\tmin-height: 20px;\n\tpadding: var(--spacing-0_5) var(--spacing-6) var(--spacing-0_5) var(--spacing-2);\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.select--md {\n\tmin-height: 24px;\n\tpadding: var(--spacing-1) var(--spacing-6) var(--spacing-1) var(--spacing-2);\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.select--lg {\n\tmin-height: 32px;\n\tpadding: var(--spacing-2) var(--spacing-8) var(--spacing-2) var(--spacing-3);\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n.select--full-width {\n\twidth: 100%;\n}\n\n/* ========================================\n * Focus State\n * ======================================== */\n\n.select:focus {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: 2px;\n}\n\n/* ========================================\n * Error State\n * ======================================== */\n\n.select--error {\n\tborder-color: var(--color-error);\n}\n\n.select--error:focus {\n\toutline-color: var(--color-error);\n}\n\n/* ========================================\n * Helper Text & Error Message\n * ======================================== */\n\n.helper-text,\n.error-message {\n\tmargin: 0;\n\tfont-family: var(--font-system);\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.helper-text {\n\tcolor: var(--color-gray-700);\n}\n\n.error-message {\n\tcolor: var(--color-error);\n}\n\n/* ========================================\n * Wrapper Size Variants\n * ======================================== */\n\n.wrapper--sm {\n\tgap: var(--spacing-0_5);\n}\n\n.wrapper--md {\n\tgap: var(--spacing-1);\n}\n\n.wrapper--lg {\n\tgap: var(--spacing-1);\n}\n\n/* ========================================\n * Option Styling (in dropdown)\n * ======================================== */\n\n.select option {\n\tfont-family: var(--font-system);\n\tpadding: var(--spacing-1);\n\tbackground-color: var(--color-surface);\n\tcolor: var(--color-text);\n}\n\n.select option:disabled {\n\tcolor: var(--color-gray-600);\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.select {\n\t\tborder-width: var(--border-width-medium);\n\t}\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.select {\n\t\ttransition: none;\n\t}\n}","// Select component - Mac OS 9 style\n// Classic dropdown select with label support and full accessibility\n\nimport React, { forwardRef, SelectHTMLAttributes } from 'react';\nimport styles from './Select.module.css';\n\nexport interface SelectOption {\n\tvalue: string | number;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SelectProps\n\textends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n\t/**\n\t * Label text for the select\n\t */\n\tlabel?: React.ReactNode;\n\n\t/**\n\t * Position of the label relative to the select\n\t * @default 'top'\n\t */\n\tlabelPosition?: 'top' | 'left' | 'right';\n\n\t/**\n\t * Size of the select\n\t * @default 'md'\n\t */\n\tsize?: 'sm' | 'md' | 'lg';\n\n\t/**\n\t * Whether the select takes full width of its container\n\t * @default false\n\t */\n\tfullWidth?: boolean;\n\n\t/**\n\t * Error state for form validation\n\t * @default false\n\t */\n\terror?: boolean;\n\n\t/**\n\t * Error message to display below the field\n\t */\n\terrorMessage?: string;\n\n\t/**\n\t * Helper text to display below the field\n\t */\n\thelperText?: string;\n\n\t/**\n\t * Options for the select dropdown\n\t * Alternative to providing option elements as children\n\t */\n\toptions?: SelectOption[];\n\n\t/**\n\t * Placeholder text (creates a disabled first option)\n\t */\n\tplaceholder?: string;\n\n\t/**\n\t * Override aria-label\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * ID of element that describes this select\n\t */\n\tariaDescribedBy?: string;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Custom wrapper class name\n\t */\n\twrapperClassName?: string;\n}\n\n/**\n * Mac OS 9 style Select component\n * \n * Classic dropdown select with raised bevel effect and optional label.\n * \n * Features:\n * - Classic Mac OS 9 popup menu styling\n * - Label positioning (top/left/right)\n * - Size variants (sm/md/lg)\n * - Error states with messages\n * - Helper text support\n * - Option groups support\n * - Full accessibility with ARIA support\n * - Keyboard navigation\n * - Form integration\n * \n * @example\n * ```tsx\n * // With options prop\n * <Select\n * label=\"Choose a color\"\n * options={[\n * { value: 'red', label: 'Red' },\n * { value: 'blue', label: 'Blue' },\n * { value: 'green', label: 'Green' }\n * ]}\n * placeholder=\"Select a color...\"\n * />\n * \n * // With children\n * <Select label=\"Country\">\n * <option value=\"us\">United States</option>\n * <option value=\"ca\">Canada</option>\n * <option value=\"mx\">Mexico</option>\n * </Select>\n * ```\n */\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n\t(\n\t\t{\n\t\t\tlabel,\n\t\t\tlabelPosition = 'top',\n\t\t\tsize = 'md',\n\t\t\tfullWidth = false,\n\t\t\terror = false,\n\t\t\terrorMessage,\n\t\t\thelperText,\n\t\t\toptions,\n\t\t\tplaceholder,\n\t\t\tariaLabel,\n\t\t\tariaDescribedBy,\n\t\t\tclassName = '',\n\t\t\twrapperClassName = '',\n\t\t\tid,\n\t\t\tdisabled,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\t// Generate ID if not provided (for label association)\n\t\tconst selectId = id || React.useId();\n\n\t\t// Generate helper/error text ID for aria-describedby\n\t\tconst helperId = `${selectId}-helper`;\n\t\tconst errorId = `${selectId}-error`;\n\n\t\t// Combine aria-describedby\n\t\tconst describedByIds = [\n\t\t\thelperText && helperId,\n\t\t\terror && errorMessage && errorId,\n\t\t\tariaDescribedBy,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\t// Build class names\n\t\tconst wrapperClassNames = [\n\t\t\tstyles.wrapper,\n\t\t\tstyles[`wrapper--${size}`],\n\t\t\tstyles[`wrapper--label-${labelPosition}`],\n\t\t\tfullWidth && styles['wrapper--full-width'],\n\t\t\tdisabled && styles['wrapper--disabled'],\n\t\t\twrapperClassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst selectClassNames = [\n\t\t\tstyles.select,\n\t\t\tstyles[`select--${size}`],\n\t\t\terror && styles['select--error'],\n\t\t\tfullWidth && styles['select--full-width'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst labelClassNames = [styles.label, styles[`label--${size}`]].filter(Boolean).join(' ');\n\n\t\t// ARIA attributes\n\t\tconst ariaAttributes = {\n\t\t\t'aria-label': !label ? ariaLabel : undefined,\n\t\t\t'aria-describedby': describedByIds || undefined,\n\t\t\t'aria-invalid': error,\n\t\t};\n\n\t\t// Render options from options prop\n\t\tconst renderOptions = () => {\n\t\t\tif (options) {\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{placeholder && (\n\t\t\t\t\t\t\t<option value=\"\" disabled>\n\t\t\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<option key={option.value} value={option.value} disabled={option.disabled}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn children;\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={wrapperClassNames}>\n\t\t\t\t{label && (labelPosition === 'top' || labelPosition === 'left') && (\n\t\t\t\t\t<label htmlFor={selectId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t<select\n\t\t\t\t\tref={ref}\n\t\t\t\t\tid={selectId}\n\t\t\t\t\tclassName={selectClassNames}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t{...ariaAttributes}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{renderOptions()}\n\t\t\t\t</select>\n\n\t\t\t\t{label && labelPosition === 'right' && (\n\t\t\t\t\t<label htmlFor={selectId} className={labelClassNames}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t{helperText && !error && (\n\t\t\t\t\t<p id={helperId} className={styles['helper-text']}>\n\t\t\t\t\t\t{helperText}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\n\t\t\t\t{error && errorMessage && (\n\t\t\t\t\t<p id={errorId} className={styles['error-message']}>\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSelect.displayName = 'Select';\n\nexport default Select;","/* Tabs Component Styles - Mac OS 9 */\n\n/* Import pixelated corners utility */\n@import '../../styles/pixelated-corners.css';\n\n.container {\n\t/* Container for tabs and panels */\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n}\n\n/* ========================================\n * Tab List (Row of tabs)\n * ======================================== */\n\n.tabList {\n\tdisplay: flex;\n\tgap: var(--spacing-1);\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n\tmargin-bottom: -1px; /* Overlap with panel border */\n}\n\n.tabList--full-width {\n\twidth: 100%;\n}\n\n/* ========================================\n * Individual Tab\n * ======================================== */\n\n.tab {\n\t/* Base styling */\n\tfont-family: var(--font-system);\n\tfont-weight: var(--font-weight-normal);\n\tcolor: var(--color-text);\n\t\n\t/* Box styling */\n\tbackground: var(--color-gray-400);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tborder-radius: var(--border-radius-none);\n\tbox-shadow: var(--shadow-raised);\n\t\n\t/* Padding */\n\tpadding: var(--spacing-1_5) var(--spacing-4);\n\t\n\t/* Positioning */\n\tposition: relative;\n\t\n\t/* Cursor */\n\tcursor: pointer;\n\t\n\t/* Remove button defaults */\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\t\n\t/* No transitions */\n\ttransition: none;\n\t\n\t/* Text */\n\twhite-space: nowrap;\n\tuser-select: none;\n\t\n\t/* Pixelated top corners for authentic Mac OS 9 tab appearance */\n\tclip-path: polygon(\n\t\t/* Top-left pixelated corner */\n\t\t3px 0,\n\t\t2px 1px,\n\t\t1px 2px,\n\t\t0 3px,\n\t\t/* Left edge down */\n\t\t0 100%,\n\t\t/* Bottom edge (flat) */\n\t\t100% 100%,\n\t\t/* Right edge up */\n\t\t100% 3px,\n\t\t/* Top-right pixelated corner */\n\t\tcalc(100% - 1px) 2px,\n\t\tcalc(100% - 2px) 1px,\n\t\tcalc(100% - 3px) 0\n\t);\n}\n\n/* Active tab - raised above panel */\n.tab--active {\n\tbackground: var(--color-surface);\n\tz-index: 1;\n\tborder-bottom-color: var(--color-surface); /* Hide bottom border */\n}\n\n/* Disabled tab */\n.tab--disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n\tpointer-events: none;\n}\n\n/* ========================================\n * Tab Size Variants\n * ======================================== */\n\n.tab--sm {\n\tpadding: var(--spacing-1) var(--spacing-3);\n\tfont-size: var(--font-size-xs);\n\tline-height: var(--line-height-tight);\n}\n\n.tab--md {\n\tpadding: var(--spacing-1_5) var(--spacing-4);\n\tfont-size: var(--font-size-md);\n\tline-height: var(--line-height-snug);\n}\n\n.tab--lg {\n\tpadding: var(--spacing-2) var(--spacing-5);\n\tfont-size: var(--font-size-lg);\n\tline-height: var(--line-height-normal);\n}\n\n.tab--full-width {\n\tflex: 1;\n}\n\n/* ========================================\n * Tab Icon\n * ======================================== */\n\n.tabIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: var(--spacing-1);\n}\n\n/* ========================================\n * Tab Focus State\n * ======================================== */\n\n.tab:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: -3px;\n}\n\n/* ========================================\n * Tab Hover State (subtle)\n * ======================================== */\n\n.tab:not(.tab--active):not(.tab--disabled):hover {\n\tbackground: var(--color-gray-300);\n}\n\n/* ========================================\n * Panel Container\n * ======================================== */\n\n.panelContainer {\n\t/* Mac OS 9 inset panel appearance */\n\tbackground-color: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tbox-shadow: var(--shadow-inset);\n\t\n\t/* Layout */\n\tposition: relative;\n\twidth: 100%;\n}\n\n.panelContainer--sm {\n\tpadding: var(--spacing-3);\n}\n\n.panelContainer--md {\n\tpadding: var(--spacing-4);\n}\n\n.panelContainer--lg {\n\tpadding: var(--spacing-5);\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.tab {\n\t\ttransition: none;\n\t}\n}\n","// Tabs component - Mac OS 9 style\n// Classic tabbed navigation with raised tab appearance\n\nimport React, { useState, useCallback, Children, isValidElement, ReactElement } from 'react';\nimport styles from './Tabs.module.css';\n\nexport interface TabPanelProps {\n\t/**\n\t * Label for the tab\n\t */\n\tlabel: string;\n\n\t/**\n\t * Content of the tab panel\n\t */\n\tchildren: React.ReactNode;\n\n\t/**\n\t * Optional icon to display in the tab\n\t */\n\ticon?: React.ReactNode;\n\n\t/**\n\t * Whether this tab is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Value identifier for controlled tabs\n\t */\n\tvalue?: string;\n}\n\n/**\n * TabPanel component - Individual tab content\n * Must be used as a child of Tabs component\n */\nexport const TabPanel: React.FC<TabPanelProps> = ({ children }) => {\n\treturn <>{children}</>;\n};\n\nTabPanel.displayName = 'TabPanel';\n\nexport interface TabsProps {\n\t/**\n\t * Tab panels as children\n\t */\n\tchildren: ReactElement<TabPanelProps> | ReactElement<TabPanelProps>[];\n\n\t/**\n\t * Index of the default active tab (uncontrolled)\n\t * @default 0\n\t */\n\tdefaultActiveTab?: number;\n\n\t/**\n\t * Index of the active tab (controlled)\n\t */\n\tactiveTab?: number;\n\n\t/**\n\t * Callback when tab changes\n\t */\n\tonChange?: (index: number, value?: string) => void;\n\n\t/**\n\t * Size of the tabs\n\t * @default 'md'\n\t */\n\tsize?: 'sm' | 'md' | 'lg';\n\n\t/**\n\t * Whether tabs take full width\n\t * @default false\n\t */\n\tfullWidth?: boolean;\n\n\t/**\n\t * Custom class name for the container\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Custom class name for the tab list\n\t */\n\ttabListClassName?: string;\n\n\t/**\n\t * Custom class name for the tab panel container\n\t */\n\tpanelClassName?: string;\n\n\t/**\n\t * ARIA label for the tab list\n\t */\n\tariaLabel?: string;\n}\n\n/**\n * Mac OS 9 style Tabs component\n * \n * Classic tabbed navigation with raised tab appearance and inset panel.\n * \n * Features:\n * - Classic Mac OS 9 tab styling\n * - Controlled and uncontrolled modes\n * - Keyboard navigation (Arrow keys, Home, End)\n * - Full accessibility with ARIA\n * - Optional icons in tabs\n * - Disabled tab states\n * \n * @example\n * ```tsx\n * // Uncontrolled\n * <Tabs>\n * <TabPanel label=\"General\">\n * <p>General settings content</p>\n * </TabPanel>\n * <TabPanel label=\"Advanced\">\n * <p>Advanced settings content</p>\n * </TabPanel>\n * </Tabs>\n * \n * // Controlled\n * <Tabs activeTab={activeIndex} onChange={setActiveIndex}>\n * <TabPanel label=\"Tab 1\">Content 1</TabPanel>\n * <TabPanel label=\"Tab 2\">Content 2</TabPanel>\n * </Tabs>\n * ```\n */\nexport const Tabs: React.FC<TabsProps> = ({\n\tchildren,\n\tdefaultActiveTab = 0,\n\tactiveTab: controlledActiveTab,\n\tonChange,\n\tsize = 'md',\n\tfullWidth = false,\n\tclassName = '',\n\ttabListClassName = '',\n\tpanelClassName = '',\n\tariaLabel = 'Tabs',\n}) => {\n\t// Controlled vs uncontrolled state\n\tconst [uncontrolledActiveTab, setUncontrolledActiveTab] = useState(defaultActiveTab);\n\tconst isControlled = controlledActiveTab !== undefined;\n\tconst activeTabIndex = isControlled ? controlledActiveTab : uncontrolledActiveTab;\n\n\t// Extract tab information from children\n\tconst tabs = Children.toArray(children).filter(\n\t\t(child): child is ReactElement<TabPanelProps> => isValidElement(child)\n\t);\n\n\t// Handle tab change\n\tconst handleTabChange = useCallback(\n\t\t(index: number) => {\n\t\t\tconst tab = tabs[index];\n\t\t\tif (!tab || tab.props.disabled) return;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledActiveTab(index);\n\t\t\t}\n\t\t\tonChange?.(index, tab.props.value);\n\t\t},\n\t\t[tabs, isControlled, onChange]\n\t);\n\n\t// Keyboard navigation\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent, currentIndex: number) => {\n\t\t\tlet newIndex = currentIndex;\n\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnewIndex = currentIndex - 1;\n\t\t\t\t\tif (newIndex < 0) newIndex = tabs.length - 1;\n\t\t\t\t\t// Skip disabled tabs\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex !== currentIndex) {\n\t\t\t\t\t\tnewIndex--;\n\t\t\t\t\t\tif (newIndex < 0) newIndex = tabs.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnewIndex = currentIndex + 1;\n\t\t\t\t\tif (newIndex >= tabs.length) newIndex = 0;\n\t\t\t\t\t// Skip disabled tabs\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex !== currentIndex) {\n\t\t\t\t\t\tnewIndex++;\n\t\t\t\t\t\tif (newIndex >= tabs.length) newIndex = 0;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Home':\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnewIndex = 0;\n\t\t\t\t\t// Skip disabled tabs\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex < tabs.length - 1) {\n\t\t\t\t\t\tnewIndex++;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'End':\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnewIndex = tabs.length - 1;\n\t\t\t\t\t// Skip disabled tabs\n\t\t\t\t\twhile (tabs[newIndex]?.props.disabled && newIndex > 0) {\n\t\t\t\t\t\tnewIndex--;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\n\t\t\thandleTabChange(newIndex);\n\t\t},\n\t\t[tabs, handleTabChange]\n\t);\n\n\t// Class names\n\tconst containerClassNames = [styles.container, className].filter(Boolean).join(' ');\n\n\tconst tabListClassNames = [\n\t\tstyles.tabList,\n\t\tstyles[`tabList--${size}`],\n\t\tfullWidth && styles['tabList--full-width'],\n\t\ttabListClassName,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst panelContainerClassNames = [\n\t\tstyles.panelContainer,\n\t\tstyles[`panelContainer--${size}`],\n\t\tpanelClassName,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn (\n\t\t<div className={containerClassNames}>\n\t\t\t<div role=\"tablist\" aria-label={ariaLabel} className={tabListClassNames}>\n\t\t\t\t{tabs.map((tab, index) => {\n\t\t\t\t\tconst isActive = index === activeTabIndex;\n\t\t\t\t\tconst isDisabled = tab.props.disabled;\n\n\t\t\t\t\tconst tabClassNames = [\n\t\t\t\t\t\tstyles.tab,\n\t\t\t\t\t\tstyles[`tab--${size}`],\n\t\t\t\t\t\tisActive && styles['tab--active'],\n\t\t\t\t\t\tisDisabled && styles['tab--disabled'],\n\t\t\t\t\t\tfullWidth && styles['tab--full-width'],\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(' ');\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-selected={isActive}\n\t\t\t\t\t\t\taria-controls={`panel-${index}`}\n\t\t\t\t\t\t\tid={`tab-${index}`}\n\t\t\t\t\t\t\ttabIndex={isActive ? 0 : -1}\n\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\tclassName={tabClassNames}\n\t\t\t\t\t\t\tonClick={() => handleTabChange(index)}\n\t\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(e, index)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{tab.props.icon && <span className={styles.tabIcon}>{tab.props.icon}</span>}\n\t\t\t\t\t\t\t{tab.props.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{tabs.map((tab, index) => {\n\t\t\t\tconst isActive = index === activeTabIndex;\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\trole=\"tabpanel\"\n\t\t\t\t\t\tid={`panel-${index}`}\n\t\t\t\t\t\taria-labelledby={`tab-${index}`}\n\t\t\t\t\t\thidden={!isActive}\n\t\t\t\t\t\tclassName={panelContainerClassNames}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isActive && tab.props.children}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nTabs.displayName = 'Tabs';\n\nexport default Tabs;\n","/* Window Component Styles - Mac OS 9 */\n\n/* Import pixelated corners utility */\n@import '../../styles/pixelated-corners.css';\n\n.window {\n\t/* Base window styling */\n\tdisplay: flex;\n\tflex-direction: column;\n\t\n\t/* Mac OS 9 window appearance */\n\tbackground-color: var(--color-gray-300); /* #DDDDDD - authentic window background */\n\tborder: var(--border-width-thin) solid var(--color-black);\n\t\n\t/* Authentic Mac OS 9 drop shadow: sharp 2px offset, no blur */\n\tfilter: drop-shadow(2px 2px 0px rgba(0, 0, 0, 0.5));\n\t\n\t/* Layout */\n\tposition: relative;\n\toverflow: hidden;\n\t\n\t/* Default dimensions */\n\twidth: auto;\n\theight: auto;\n\tmin-width: 200px;\n\tmin-height: 100px;\n\t\n}\n\n/* ========================================\n * Window States\n * ======================================== */\n\n.window--active {\n\t/* Active window - standard appearance */\n\tz-index: 10;\n}\n\n.window--inactive {\n\t/* Inactive window - slightly dimmed */\n\topacity: 0.92;\n\tz-index: 1;\n}\n\n/* ========================================\n * Title Bar\n * ======================================== */\n\n.titleBar {\n\t/* Title bar container */\n\tdisplay: flex;\n\talign-items: center;\n\t\n\t/* Styling - authentic Mac OS 9 header color */\n\tbackground-color: #CBCBCB;\n\tborder-bottom: var(--border-width-thin) solid var(--color-black);\n\t\n\t/* Padding */\n\tpadding: var(--spacing-1_5) var(--spacing-2);\n\t\n\t/* Height */\n\tmin-height: 22px;\n\t\n\t/* Prevent selection */\n\tuser-select: none;\n\t\n\t/* Position for pseudo-elements */\n\tposition: relative;\n\n}\n.titleBar[data-numControls=\"3\"] .titleCenter > :first-child{\n\twidth: calc(100% - (48px + var(--spacing-2)));\n\tmargin-left: calc(48px + var(--spacing-2));\n}\n.titleBar[data-numControls=\"2\"] .titleCenter> :first-child {\n\twidth: calc(100% - (36px + var(--spacing-2)));\n\tmargin-left: calc(36px + var(--spacing-2));\n}\n.titleBar[data-numControls=\"1\"] .titleCenter> :first-child {\n\twidth: calc(100% - (24px));\n\tmargin-left: calc(24px);\n\t}\n\n.titleCenter{\t\n\tdisplay: grid;\n\talign-items: center;\n\twidth: 100%;\n\tgrid-template-columns: 1fr max-content 1fr;\n}\n.titleCenter svg{\n\twidth: 100%;\n}\n/* Header striped lines - left side */\n.titleBar::before {\n\tcontent: '';\n\tleft: 60px;\n\ttop: 50%;\n\tflex-grow: 1;\t\n\t/* Responsive width - fills from after controls to center, with padding for title */\n\theight: 12px;\n\t/* 6 horizontal lines pattern */\n\t/* background: repeating-linear-gradient(\n\t\tto bottom,\n\t\ttransparent 0px,\n\t\ttransparent 1px,\n\t\tvar(--color-gray-500) 1px,\n\t\tvar(--color-gray-500) 2px,\n\t\ttransparent 2px,\n\t\ttransparent 3px\n\t); */\n\t\n\t/* Prevent interaction */\n\tpointer-events: none;\n}\n\n/* Header striped lines - right side */\n.titleBar::after {\n\tcontent: '';\n\tright: 8px;\n\ttop: 50%;\t\n\tflex-grow: 1;\n\t/* Responsive width - extends from right edge to center, with padding for title */\n\tflex: 1;\n\t/* max-width: 100px; */\n\theight: 12px;\n\t\n\t/* 6 horizontal lines pattern */\n\t/* background: repeating-linear-gradient(\n\t\tto bottom,\n\t\ttransparent 0px,\n\t\ttransparent 1px,\n\t\tvar(--color-gray-500) 1px,\n\t\tvar(--color-gray-500) 2px,\n\t\ttransparent 2px,\n\t\ttransparent 3px\n\t);\n\t */\n\t/* Prevent interaction */\n\tpointer-events: none;\n}\n\n/* ========================================\n * Window Controls\n * ======================================== */\n\n.controls {\n\t/* Control buttons container */\n\tdisplay: flex;\n\tgap: var(--spacing-1);\n\talign-items: center;\n\t\n\t/* Ensure controls are above pseudo-elements */\n\tposition: absolute;\n\tleft: 12px;\n\tz-index: 1;\n}\n\n.controlButton {\n\t/* Base control button */\n\twidth: 12px;\n\theight: 12px;\n\tpadding: 0;\n\tmargin: 0;\n\t\n\t/* Remove button defaults */\n\tbackground: transparent;\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tcursor: pointer;\n\t\n\t/* Box shadow for depth */\n\tbox-shadow: var(--shadow-inset);\n\t\n\t/* Transitions */\n\ttransition: none;\n\t\n\t/* Ensure controls are clickable */\n\tposition: relative;\n\tz-index: 2;\n}\n\n.controlButton:hover {\n\tbackground-color: var(--color-gray-300);\n}\n\n.controlButton:active {\n\tbox-shadow: var(--shadow-pressed);\n}\n\n.controlButton:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: 1px;\n}\n\n/* Control button visual indicators */\n.closeBox,\n.minimizeBox,\n.maximizeBox {\n\twidth: 100%;\n\theight: 100%;\n\tposition: relative;\n}\n\n/* Close button: X pattern */\n.closeBox::before,\n.closeBox::after {\n\tcontent: '';\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\twidth: 6px;\n\t/* height: 1px;\n\tbackground-color: var(--color-border); */\n}\n\n/* .closeBox::before {\n\ttransform: translate(-50%, -50%) rotate(45deg);\n}\n\n.closeBox::after {\n\ttransform: translate(-50%, -50%) rotate(-45deg);\n} */\n\n/* Minimize button: dash */\n.minimizeBox::before {\n\tcontent: '';\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\twidth: 6px;\n\theight: 1px;\n\tbackground-color: var(--color-border);\n}\n\n/* Maximize button: small square */\n.maximizeBox::before {\n\tcontent: '';\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\twidth: 4px;\n\theight: 4px;\n\tborder: 1px solid var(--color-border);\n}\n\n/* ========================================\n * Title Text\n * ======================================== */\n\n.titleText {\n\t/* Title text styling */\n\tfont-family: var(--font-system);\n\tfont-size: var(--font-size-md);\n\tfont-weight: var(--font-weight-bold);\n\tline-height: var(--line-height-snug);\n\tcolor: var(--color-text);\n\t\n\t/* Absolute positioning for true centering regardless of controls */\n\t\n\t/* Max width to prevent overlap with lines - centered with padding */\n\t/* max-width: calc(100% - 160px); */\n\tpadding: 0 var(--spacing-2);\n\t\n\t/* Truncate long titles */\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\t\n\t/* Ensure text is above pseudo-elements */\n\tz-index: 1;\n}\n\n/* ========================================\n * Content Area\n * ======================================== */\n\n.content {\n\t/* Content area */\n\tflex: 1;\n\toverflow: auto;\n\t\n\t/* Background - white content area like authentic Mac OS 9 */\n\tbackground-color: var(--color-gray-100);\n\t\n\t/* Padding */\n\tpadding: var(--spacing-4);\n\t\n\t/* Position for scrolling */\n\tposition: relative;\n\t\n\t/* Authentic inset border */\n\tmargin: var(--spacing-2);\n\tborder: var(--border-width-thin) solid #555555;\n}\n\n/* ========================================\n * Resize Handle\n * ======================================== */\n\n.resizeHandle {\n\t/* Resize handle in bottom-right corner */\n\tposition: absolute;\n\tbottom: 0;\n\tright: 0;\n\twidth: 12px;\n\theight: 12px;\n\t\n\t/* Visual indicator (diagonal lines) */\n\tbackground-image: linear-gradient(\n\t\t135deg,\n\t\ttransparent 0%,\n\t\ttransparent 40%,\n\t\tvar(--color-border) 40%,\n\t\tvar(--color-border) 45%,\n\t\ttransparent 45%,\n\t\ttransparent 55%,\n\t\tvar(--color-border) 55%,\n\t\tvar(--color-border) 60%,\n\t\ttransparent 60%\n\t);\n\t\n\t/* Cursor */\n\tcursor: nwse-resize;\n\t\n\t/* Layering */\n\tz-index: 5;\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode */\n@media (prefers-contrast: high) {\n\t.window {\n\t\tborder-width: 2px;\n\t}\n\t\n\t.controlButton {\n\t\tborder-width: 2px;\n\t}\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n\t.controlButton {\n\t\ttransition: none;\n\t}\n}\n","// Window component - Mac OS 9 style\n// Classic window container with optional title bar\n\nimport React, { forwardRef } from 'react';\nimport styles from './Window.module.css';\n\nexport interface WindowProps {\n\t/**\n\t * Window content\n\t */\n\tchildren: React.ReactNode;\n\n\t/**\n\t * Window title (displays in title bar if no titleBar prop provided)\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Custom title bar component\n\t * If provided, overrides the default title bar\n\t */\n\ttitleBar?: React.ReactNode;\n\n\t/**\n\t * Whether window is active/focused\n\t * @default true\n\t */\n\tactive?: boolean;\n\n\t/**\n\t * Width of the window\n\t * @default 'auto'\n\t */\n\twidth?: number | string;\n\n\t/**\n\t * Height of the window\n\t * @default 'auto'\n\t */\n\theight?: number | string;\n\n\t/**\n\t * Custom class name for the window container\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Custom class name for the content area\n\t */\n\tcontentClassName?: string;\n\n\t/**\n\t * Whether to show window controls (close, minimize, maximize)\n\t * @default true\n\t */\n\tshowControls?: boolean;\n\n\t/**\n\t * Callback when close button is clicked\n\t */\n\tonClose?: () => void;\n\n\t/**\n\t * Callback when minimize button is clicked\n\t */\n\tonMinimize?: () => void;\n\n\t/**\n\t * Callback when maximize button is clicked\n\t */\n\tonMaximize?: () => void;\n\n\t/**\n\t * Whether the window has a resize handle\n\t * @default false\n\t */\n\tresizable?: boolean;\n}\n\n/**\n * Mac OS 9 style Window component\n * \n * Classic window container with title bar and content area.\n * \n * Features:\n * - Classic Mac OS 9 window styling with beveled edges\n * - Optional title bar with window controls\n * - Active/inactive states\n * - Composable with custom TitleBar component\n * - Flexible sizing\n * \n * @example\n * ```tsx\n * // Simple window with title\n * <Window title=\"My Window\">\n * <p>Window content goes here</p>\n * </Window>\n * \n * // Window with custom title bar\n * <Window titleBar={<TitleBar title=\"Custom\" />}>\n * <p>Content</p>\n * </Window>\n * \n * // Window with controls and callbacks\n * <Window \n * title=\"Document\"\n * onClose={() => console.log('Close')}\n * onMinimize={() => console.log('Minimize')}\n * >\n * <p>Content</p>\n * </Window>\n * ```\n */\nexport const Window = forwardRef<HTMLDivElement, WindowProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\ttitle,\n\t\t\ttitleBar,\n\t\t\tactive = true,\n\t\t\twidth = 'auto',\n\t\t\theight = 'auto',\n\t\t\tclassName = '',\n\t\t\tcontentClassName = '',\n\t\t\tshowControls = true,\n\t\t\tonClose,\n\t\t\tonMinimize,\n\t\t\tonMaximize,\n\t\t\tresizable = false,\n\t\t},\n\t\tref\n\t) => {\n\t\t// Class names\n\t\tconst windowClassNames = [\n\t\t\tstyles.window,\n\t\t\tactive ? styles['window--active'] : styles['window--inactive'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\tconst contentClassNames = [styles.content, contentClassName].filter(Boolean).join(' ');\n\n\t\t// Window style\n\t\tconst windowStyle: React.CSSProperties = {};\n\t\tif (width !== 'auto') {\n\t\t\twindowStyle.width = typeof width === 'number' ? `${width}px` : width;\n\t\t}\n\t\tif (height !== 'auto') {\n\t\t\twindowStyle.height = typeof height === 'number' ? `${height}px` : height;\n\t\t}\n\n\t\t// Render title bar if title provided and no custom titleBar\n\t\tconst renderTitleBar = () => {\n\t\t\tif (titleBar) {\n\t\t\t\treturn titleBar;\n\t\t\t}\n\n\t\t\tif (title) {\n\t\t\t\treturn (\n\t\t\t\t\t<div className={styles.titleBar} data-numControls={\n\t\t\t\t\t\t[onClose, onMinimize, onMaximize].filter(Boolean).length\n\t\t\t\t\t}>\n\t\t\t\t\t\t{showControls && (\n\t\t\t\t\t\t\t<div className={styles.controls}>\n\t\t\t\t\t\t\t\t{onClose && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={styles.controlButton}\n\t\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\t\t\ttitle=\"Close\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className={styles.closeBox} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{onMinimize && (\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclassName={styles.controlButton}\n\t\t\t\t\t\t\t\t\t\tonClick={onMinimize}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Minimize\"\n\t\t\t\t\t\t\t\t\t\ttitle=\"Minimize\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.minimizeBox} />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{onMaximize && (\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclassName={styles.controlButton}\n\t\t\t\t\t\t\t\t\t\tonClick={onMaximize}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Maximize\"\n\t\t\t\t\t\t\t\t\t\ttitle=\"Maximize\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.maximizeBox} />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className={styles.titleCenter}>\n\t\t\t\t\t\t<svg width=\"132\" height=\"13\" viewBox=\"0 0 132 13\" fill=\"none\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<rect width=\"130.517\" height=\"13\" fill=\"#DDDDDD\"/>\n\t\t\t\t\t\t\t<rect width=\"1\" height=\"13\" fill=\"#EEEEEE\"/>\n\t\t\t\t\t\t\t<rect x=\"130\" width=\"1\" height=\"13\" fill=\"#C5C5C5\"/>\n\t\t\t\t\t\t\t<rect y=\"1\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"5\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"9\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"3\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"7\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"11\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<div className={styles.titleText}>{title}</div>\n\t\t\t\t\t\t<svg width=\"132\" height=\"13\" viewBox=\"0 0 132 13\" fill=\"none\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<rect width=\"130.517\" height=\"13\" fill=\"#DDDDDD\"/>\n\t\t\t\t\t\t\t<rect width=\"1\" height=\"13\" fill=\"#EEEEEE\"/>\n\t\t\t\t\t\t\t<rect x=\"130\" width=\"1\" height=\"13\" fill=\"#C5C5C5\"/>\n\t\t\t\t\t\t\t<rect y=\"1\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"5\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"9\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"3\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"7\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t\t<rect y=\"11\" width=\"131.268\" height=\"1\" fill=\"#999999\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\n\t\treturn (\n\t\t\t<div ref={ref} className={windowClassNames} style={windowStyle}>\n\t\t\t\t{renderTitleBar()}\n\t\t\t\t<div className={contentClassNames}>{children}</div>\n\t\t\t\t{resizable && <div className={styles.resizeHandle} aria-hidden=\"true\" />}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nWindow.displayName = 'Window';\n\nexport default Window;\n","/* Dialog Component Styles - Mac OS 9 */\n\n.backdrop {\n\t/* Full screen backdrop */\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tz-index: 1000;\n\t\n\t/* Background overlay */\n\tbackground-color: rgba(0, 0, 0, 0.3);\n\t\n\t/* Center dialog */\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\t\n\t/* Prevent interaction with content behind */\n\tbackdrop-filter: none;\n}\n\n.dialogContainer {\n\t/* Container for the window */\n\tposition: relative;\n\t\n\t/* Prevent backdrop click from closing when clicking dialog */\n\tpointer-events: auto;\n\t\n\t/* Animation */\n\tanimation: dialogFadeIn 0.15s ease-out;\n}\n\n/* ========================================\n * Animations\n * ======================================== */\n\n@keyframes dialogFadeIn {\n\tfrom {\n\t\topacity: 0;\n\t\ttransform: scale(0.95);\n\t}\n\tto {\n\t\topacity: 1;\n\t\ttransform: scale(1);\n\t}\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n\t.dialogContainer {\n\t\tanimation: none;\n\t}\n}\n","// Dialog component - Mac OS 9 style\n// Modal dialog with backdrop and focus trapping\n\nimport React, { forwardRef, useEffect, useRef, useCallback } from 'react';\nimport { Window, type WindowProps } from '../Window/Window';\nimport styles from './Dialog.module.css';\n\nexport interface DialogProps extends Omit<WindowProps, 'active'> {\n\t/**\n\t * Whether the dialog is open\n\t * @default false\n\t */\n\topen?: boolean;\n\n\t/**\n\t * Callback when dialog should close\n\t * Called when backdrop is clicked or Escape is pressed\n\t */\n\tonClose?: () => void;\n\n\t/**\n\t * Whether clicking the backdrop closes the dialog\n\t * @default true\n\t */\n\tcloseOnBackdropClick?: boolean;\n\n\t/**\n\t * Whether pressing Escape closes the dialog\n\t * @default true\n\t */\n\tcloseOnEscape?: boolean;\n\n\t/**\n\t * Custom backdrop className\n\t */\n\tbackdropClassName?: string;\n\n\t/**\n\t * Whether to trap focus within the dialog\n\t * @default true\n\t */\n\ttrapFocus?: boolean;\n\n\t/**\n\t * Initial focus element selector or ref\n\t */\n\tinitialFocus?: string | React.RefObject<HTMLElement>;\n}\n\n/**\n * Mac OS 9 style Dialog component\n * \n * Modal dialog with backdrop, focus trapping, and keyboard handling.\n * Built on top of the Window component.\n * \n * Features:\n * - Classic Mac OS 9 dialog styling\n * - Modal backdrop with click-to-close\n * - Escape key to close\n * - Focus trapping within dialog\n * - Centered on screen\n * - Prevents body scroll when open\n * \n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n * \n * <Dialog\n * open={open}\n * onClose={() => setOpen(false)}\n * title=\"Confirm\"\n * width={350}\n * >\n * <p>Are you sure?</p>\n * <div>\n * <Button onClick={() => setOpen(false)}>Cancel</Button>\n * <Button variant=\"primary\">OK</Button>\n * </div>\n * </Dialog>\n * ```\n */\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\n\t(\n\t\t{\n\t\t\topen = false,\n\t\t\tonClose,\n\t\t\tcloseOnBackdropClick = true,\n\t\t\tcloseOnEscape = true,\n\t\t\tbackdropClassName = '',\n\t\t\ttrapFocus = true,\n\t\t\tinitialFocus,\n\t\t\tchildren,\n\t\t\t...windowProps\n\t\t},\n\t\tref\n\t) => {\n\t\tconst dialogRef = useRef<HTMLDivElement>(null);\n\t\tconst previousActiveElement = useRef<HTMLElement | null>(null);\n\n\t\t// Handle Escape key\n\t\tuseEffect(() => {\n\t\t\tif (!open || !closeOnEscape) return;\n\n\t\t\tconst handleEscape = (event: KeyboardEvent) => {\n\t\t\t\tif (event.key === 'Escape') {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tonClose?.();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', handleEscape);\n\t\t\treturn () => document.removeEventListener('keydown', handleEscape);\n\t\t}, [open, closeOnEscape, onClose]);\n\n\t\t// Store previous active element and restore on close\n\t\tuseEffect(() => {\n\t\t\tif (open) {\n\t\t\t\tpreviousActiveElement.current = document.activeElement as HTMLElement;\n\t\t\t} else if (previousActiveElement.current) {\n\t\t\t\tpreviousActiveElement.current.focus();\n\t\t\t}\n\t\t}, [open]);\n\n\t\t// Set initial focus\n\t\tuseEffect(() => {\n\t\t\tif (!open || !initialFocus) return;\n\n\t\t\tconst focusElement = () => {\n\t\t\t\tif (typeof initialFocus === 'string') {\n\t\t\t\t\tconst element = dialogRef.current?.querySelector(initialFocus) as HTMLElement;\n\t\t\t\t\telement?.focus();\n\t\t\t\t} else if (initialFocus.current) {\n\t\t\t\t\tinitialFocus.current.focus();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Small delay to ensure dialog is rendered\n\t\t\tsetTimeout(focusElement, 10);\n\t\t}, [open, initialFocus]);\n\n\t\t// Focus trapping\n\t\tuseEffect(() => {\n\t\t\tif (!open || !trapFocus) return;\n\n\t\t\tconst handleTabKey = (event: KeyboardEvent) => {\n\t\t\t\tif (event.key !== 'Tab' || !dialogRef.current) return;\n\n\t\t\t\tconst focusableElements = dialogRef.current.querySelectorAll(\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n\t\t\t\t);\n\n\t\t\t\tconst firstElement = focusableElements[0] as HTMLElement;\n\t\t\t\tconst lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n\t\t\t\tif (event.shiftKey) {\n\t\t\t\t\t// Shift + Tab\n\t\t\t\t\tif (document.activeElement === firstElement) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tlastElement?.focus();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Tab\n\t\t\t\t\tif (document.activeElement === lastElement) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tfirstElement?.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', handleTabKey);\n\t\t\treturn () => document.removeEventListener('keydown', handleTabKey);\n\t\t}, [open, trapFocus]);\n\n\t\t// Prevent body scroll when dialog is open\n\t\tuseEffect(() => {\n\t\t\tif (open) {\n\t\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\tdocument.body.style.overflow = '';\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tdocument.body.style.overflow = '';\n\t\t\t};\n\t\t}, [open]);\n\n\t\t// Handle backdrop click\n\t\tconst handleBackdropClick = useCallback(\n\t\t\t(event: React.MouseEvent<HTMLDivElement>) => {\n\t\t\t\tif (closeOnBackdropClick && event.target === event.currentTarget) {\n\t\t\t\t\tonClose?.();\n\t\t\t\t}\n\t\t\t},\n\t\t\t[closeOnBackdropClick, onClose]\n\t\t);\n\n\t\tif (!open) return null;\n\n\t\tconst backdropClassNames = [styles.backdrop, backdropClassName].filter(Boolean).join(' ');\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={backdropClassNames}\n\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\trole=\"presentation\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t>\n\t\t\t\t<div className={styles.dialogContainer} ref={dialogRef} role=\"dialog\" aria-modal=\"true\">\n\t\t\t\t\t<Window {...windowProps} ref={ref} active={true} onClose={onClose}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Window>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nDialog.displayName = 'Dialog';\n\nexport default Dialog;\n","/* MenuBar Component Styles - Mac OS 9 */\n\n/* ========================================\n * Menu Bar Container\n * ======================================== */\n\n.menuBar {\n\t/* Base menu bar styling */\n\tdisplay: flex;\n\talign-items: stretch;\n\t\n\t/* Mac OS 9 menu bar appearance */\n\tbackground-color: var(--color-gray-100); /* Light gray like Mac OS 9 */\n\tborder-bottom: var(--border-width-thin) solid var(--color-black);\n\t\n\t/* Layout */\n\twidth: 100%;\n\tmin-height: 24px;\n\t\n\t/* Position */\n\tposition: relative;\n\t\n\t/* Prevent selection */\n\tuser-select: none;\n}\n\n/* ========================================\n * Menu Container\n * ======================================== */\n\n.menuContainer {\n\t/* Container for each menu button and dropdown */\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: stretch;\n}\n\n/* ========================================\n * Menu Button\n * ======================================== */\n\n.menuButton {\n\t/* Base menu button styling */\n\tpadding: var(--spacing-1) var(--spacing-3);\n\t\n\t/* Text styling */\n\tfont-family: var(--font-system);\n\tfont-size: var(--font-size-md);\n\tfont-weight: var(--font-weight-bold);\n\tline-height: var(--line-height-snug);\n\tcolor: var(--color-text);\n\ttext-align: center;\n\twhite-space: nowrap;\n\t\n\t/* Remove button defaults */\n\tbackground-color: transparent;\n\tborder: none;\n\tcursor: pointer;\n\t\n\t/* Transitions */\n\ttransition: background-color 50ms ease;\n\t\n\t/* Prevent text selection */\n\tuser-select: none;\n}\n\n/* ========================================\n * Menu Button States\n * ======================================== */\n\n.menuButton:hover:not(.menuButton--disabled) {\n\t/* Hover state - blue highlight like Mac OS 9 */\n\tbackground-color: #0000BB;\n\tcolor: var(--color-white);\n}\n\n.menuButton:focus-visible {\n\t/* Focus state */\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: -1px;\n}\n\n.menuButton--open {\n\t/* Open state - highlighted */\n\tbackground-color: #0000BB;\n\tcolor: var(--color-white);\n}\n\n.menuButton--disabled {\n\t/* Disabled state */\n\tcolor: var(--color-gray-500);\n\tcursor: not-allowed;\n}\n\n/* ========================================\n * Dropdown Menu\n * ======================================== */\n\n.dropdown {\n\t/* Dropdown container */\n\tposition: absolute;\n\ttop: 100%;\n\tleft: 0;\n\tz-index: 1000;\n\t\n\t/* Mac OS 9 menu appearance */\n\tbackground-color: var(--color-gray-100);\n\tborder: var(--border-width-thin) solid var(--color-black);\n\t\n\t/* Drop shadow */\n\tbox-shadow: 2px 2px 0px rgba(0, 0, 0, 0.5);\n\t\n\t/* Sizing */\n\tmin-width: 200px;\n\t\n\t/* Padding */\n\tpadding: var(--spacing-1) 0;\n\t\n\t/* Animation */\n\tanimation: menuFadeIn 100ms ease-out;\n}\n\n@keyframes menuFadeIn {\n\tfrom {\n\t\topacity: 0;\n\t\ttransform: translateY(-4px);\n\t}\n\tto {\n\t\topacity: 1;\n\t\ttransform: translateY(0);\n\t}\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode */\n@media (prefers-contrast: high) {\n\t.menuBar {\n\t\tborder-width: 2px;\n\t}\n\t\n\t.menuButton:hover:not(.menuButton--disabled),\n\t.menuButton--open {\n\t\toutline: 2px solid currentColor;\n\t\toutline-offset: -2px;\n\t}\n\t\n\t.dropdown {\n\t\tborder-width: 2px;\n\t}\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n\t.menuButton {\n\t\ttransition: none;\n\t}\n\t\n\t.dropdown {\n\t\tanimation: none;\n\t}\n}","// MenuBar component - Mac OS 9 style\n// Horizontal menu bar with dropdown menus\n\nimport React, { forwardRef, useRef, useState, useEffect, useCallback } from 'react';\nimport styles from './MenuBar.module.css';\n\nexport interface Menu {\n\t/**\n\t * Menu label (displayed in the menu bar)\n\t */\n\tlabel: string;\n\n\t/**\n\t * Menu items (content of the dropdown)\n\t */\n\titems: React.ReactNode;\n\n\t/**\n\t * Whether the menu is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n}\n\nexport interface MenuBarProps {\n\t/**\n\t * Array of menus to display\n\t */\n\tmenus: Menu[];\n\n\t/**\n\t * Index of the currently open menu (controlled)\n\t */\n\topenMenuIndex?: number;\n\n\t/**\n\t * Callback when a menu is opened\n\t */\n\tonMenuOpen?: (index: number) => void;\n\n\t/**\n\t * Callback when menus are closed\n\t */\n\tonMenuClose?: () => void;\n\n\t/**\n\t * Custom class name for the menu bar\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Custom class name for menu dropdowns\n\t */\n\tdropdownClassName?: string;\n}\n\n/**\n * Mac OS 9 style MenuBar component\n * \n * Horizontal menu bar with dropdown menus.\n * \n * Features:\n * - Classic Mac OS 9 menu bar styling\n * - Horizontal menu layout\n * - Dropdown menus on click\n * - Keyboard navigation (Left/Right for menus, Up/Down for items)\n * - Click outside to close\n * - Escape key to close\n * - Controlled state (consumers manage open/closed)\n * - Disabled menu support\n * \n * @example\n * ```tsx\n * const [openMenu, setOpenMenu] = useState<number | undefined>();\n * \n * <MenuBar\n * openMenuIndex={openMenu}\n * onMenuOpen={setOpenMenu}\n * onMenuClose={() => setOpenMenu(undefined)}\n * menus={[\n * {\n * label: 'File',\n * items: (\n * <>\n * <MenuItem label=\"Open...\" shortcut=\"⌘O\" onClick={() => {}} />\n * <MenuItem label=\"Save\" shortcut=\"⌘S\" onClick={() => {}} />\n * </>\n * ),\n * },\n * {\n * label: 'Edit',\n * items: (\n * <>\n * <MenuItem label=\"Undo\" shortcut=\"⌘Z\" onClick={() => {}} />\n * <MenuItem label=\"Redo\" shortcut=\"⇧⌘Z\" onClick={() => {}} />\n * </>\n * ),\n * },\n * ]}\n * />\n * ```\n */\nexport const MenuBar = forwardRef<HTMLDivElement, MenuBarProps>(\n\t({ menus, openMenuIndex, onMenuOpen, onMenuClose, className = '', dropdownClassName = '' }, ref) => {\n\t\tconst [menuBarElement, setMenuBarElement] = useState<HTMLDivElement | null>(null);\n\t\tconst [focusedIndex, setFocusedIndex] = useState<number>(-1);\n\n\t\t// Handle click outside to close menu\n\t\tuseEffect(() => {\n\t\t\tif (openMenuIndex === undefined || !menuBarElement) return;\n\n\t\t\tconst handleClickOutside = (event: MouseEvent) => {\n\t\t\t\tif (menuBarElement && !menuBarElement.contains(event.target as Node)) {\n\t\t\t\t\tonMenuClose?.();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.addEventListener('mousedown', handleClickOutside);\n\t\t\treturn () => document.removeEventListener('mousedown', handleClickOutside);\n\t\t}, [openMenuIndex, onMenuClose, menuBarElement]);\n\n\t\t// Handle Escape key to close menu\n\t\tuseEffect(() => {\n\t\t\tif (openMenuIndex === undefined) return;\n\n\t\t\tconst handleEscape = (event: KeyboardEvent) => {\n\t\t\t\tif (event.key === 'Escape') {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonMenuClose?.();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', handleEscape);\n\t\t\treturn () => document.removeEventListener('keydown', handleEscape);\n\t\t}, [openMenuIndex, onMenuClose]);\n\n\t\t// Handle keyboard navigation\n\t\tconst handleKeyDown = useCallback(\n\t\t\t(event: React.KeyboardEvent) => {\n\t\t\t\tswitch (event.key) {\n\t\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tif (openMenuIndex !== undefined) {\n\t\t\t\t\t\t\t// Move to previous menu\n\t\t\t\t\t\t\tconst prevIndex = openMenuIndex > 0 ? openMenuIndex - 1 : menus.length - 1;\n\t\t\t\t\t\t\tif (!menus[prevIndex]?.disabled) {\n\t\t\t\t\t\t\t\tonMenuOpen?.(prevIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (focusedIndex > 0) {\n\t\t\t\t\t\t\tsetFocusedIndex(focusedIndex - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ArrowRight':\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tif (openMenuIndex !== undefined) {\n\t\t\t\t\t\t\t// Move to next menu\n\t\t\t\t\t\t\tconst nextIndex = openMenuIndex < menus.length - 1 ? openMenuIndex + 1 : 0;\n\t\t\t\t\t\t\tif (!menus[nextIndex]?.disabled) {\n\t\t\t\t\t\t\t\tonMenuOpen?.(nextIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (focusedIndex < menus.length - 1) {\n\t\t\t\t\t\t\tsetFocusedIndex(focusedIndex + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tif (openMenuIndex === undefined && focusedIndex >= 0) {\n\t\t\t\t\t\t\t// Open the focused menu\n\t\t\t\t\t\t\tif (!menus[focusedIndex]?.disabled) {\n\t\t\t\t\t\t\t\tonMenuOpen?.(focusedIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Enter':\n\t\t\t\t\tcase ' ':\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tif (openMenuIndex === undefined && focusedIndex >= 0) {\n\t\t\t\t\t\t\t// Open the focused menu\n\t\t\t\t\t\t\tif (!menus[focusedIndex]?.disabled) {\n\t\t\t\t\t\t\t\tonMenuOpen?.(focusedIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[openMenuIndex, focusedIndex, menus, onMenuOpen, onMenuClose]\n\t\t);\n\n\t\t// Handle menu button click\n\t\tconst handleMenuClick = (index: number) => {\n\t\t\tif (menus[index]?.disabled) return;\n\n\t\t\tif (openMenuIndex === index) {\n\t\t\t\t// Clicking the same menu closes it\n\t\t\t\tonMenuClose?.();\n\t\t\t} else {\n\t\t\t\t// Open the clicked menu\n\t\t\t\tonMenuOpen?.(index);\n\t\t\t}\n\t\t};\n\n\t\t// Class names\n\t\tconst menuBarClassNames = [styles.menuBar, className].filter(Boolean).join(' ');\n\n\t\tconst dropdownClassNames = [styles.dropdown, dropdownClassName].filter(Boolean).join(' ');\n\n\t// Callback ref to handle both internal state and forwarded ref\n\tconst handleRef = useCallback(\n\t\t(node: HTMLDivElement | null) => {\n\t\t\tsetMenuBarElement(node);\n\t\t\tif (typeof ref === 'function') {\n\t\t\t\tref(node);\n\t\t\t}\n\t\t},\n\t\t[ref]\n\t);\n\n\treturn (\n\t\t<div ref={handleRef} className={menuBarClassNames} role=\"menubar\" onKeyDown={handleKeyDown}>\n\t\t\t\t{menus.map((menu, index) => {\n\t\t\t\t\tconst isOpen = openMenuIndex === index;\n\t\t\t\t\tconst isFocused = focusedIndex === index;\n\n\t\t\t\t\tconst menuButtonClassNames = [\n\t\t\t\t\t\tstyles.menuButton,\n\t\t\t\t\t\tisOpen ? styles['menuButton--open'] : '',\n\t\t\t\t\t\tmenu.disabled ? styles['menuButton--disabled'] : '',\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(' ');\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={index} className={styles.menuContainer}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName={menuButtonClassNames}\n\t\t\t\t\t\t\t\tonClick={() => handleMenuClick(index)}\n\t\t\t\t\t\t\t\tonFocus={() => setFocusedIndex(index)}\n\t\t\t\t\t\t\t\tonBlur={() => setFocusedIndex(-1)}\n\t\t\t\t\t\t\t\tdisabled={menu.disabled}\n\t\t\t\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\t\t\t\taria-expanded={isOpen}\n\t\t\t\t\t\t\t\taria-disabled={menu.disabled}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{menu.label}\n\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t{isOpen && (\n\t\t\t\t\t\t\t\t<div className={dropdownClassNames} role=\"menu\">\n\t\t\t\t\t\t\t\t\t{menu.items}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nMenuBar.displayName = 'MenuBar';\n\nexport default MenuBar;\n","/* MenuItem Component Styles - Mac OS 9 */\n\n/* ========================================\n * Menu Item\n * ======================================== */\n\n.menuItem {\n\t/* Base menu item styling */\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-2);\n\t\n\t/* Layout */\n\twidth: 100%;\n\tpadding: var(--spacing-1) var(--spacing-3);\n\tmin-height: 20px;\n\t\n\t/* Text styling */\n\tfont-family: var(--font-system);\n\tfont-size: var(--font-size-md);\n\tfont-weight: var(--font-weight-bold);\n\tline-height: var(--line-height-snug);\n\ttext-align: left;\n\tcolor: var(--color-text);\n\t\n\t/* Remove button defaults */\n\tbackground-color: transparent;\n\tborder: none;\n\tcursor: pointer;\n\t\n\t/* Transitions */\n\ttransition: background-color 50ms ease;\n\t\n\t/* Prevent text selection */\n\tuser-select: none;\n}\n\n/* ========================================\n * Menu Item States\n * ======================================== */\n\n.menuItem:hover:not(.menuItem--disabled) {\n\t/* Hover state - blue highlight like Mac OS 9 */\n\tbackground-color: #0000BB;\n\tcolor: var(--color-white);\n}\n\n.menuItem:focus-visible {\n\t/* Focus state */\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: -1px;\n}\n\n.menuItem--selected {\n\t/* Selected/active state */\n\tbackground-color: #0000BB;\n\tcolor: var(--color-white);\n}\n\n.menuItem--disabled {\n\t/* Disabled state */\n\tcolor: var(--color-gray-500);\n\tcursor: not-allowed;\n}\n\n.menuItem--separator {\n\t/* Item with separator - no additional styling needed */\n}\n\n/* ========================================\n * Menu Item Elements\n * ======================================== */\n\n.checkmark {\n\t/* Checkmark area (for toggle items) */\n\twidth: 16px;\n\tmin-width: 16px;\n\ttext-align: center;\n\tfont-size: var(--font-size-md);\n}\n\n.icon {\n\t/* Icon area */\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 16px;\n\tmin-width: 16px;\n\theight: 16px;\n}\n\n.label {\n\t/* Label text */\n\tflex: 1;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.shortcut {\n\t/* Keyboard shortcut */\n\tmargin-left: auto;\n\tfont-size: var(--font-size-sm);\n\topacity: 0.8;\n\twhite-space: nowrap;\n}\n\n.submenuArrow {\n\t/* Submenu indicator */\n\tfont-size: 8px;\n\tmargin-left: var(--spacing-1);\n}\n\n/* ========================================\n * Separator Line\n * ======================================== */\n\n.separatorLine {\n\t/* Separator line after menu item */\n\theight: 1px;\n\tbackground-color: var(--color-gray-500);\n\tmargin: var(--spacing-1) var(--spacing-2);\n}\n\n/* ========================================\n * Hover State Color Override\n * ======================================== */\n\n/* When menu item is hovered, change text color of all children */\n.menuItem:hover:not(.menuItem--disabled) .checkmark,\n.menuItem:hover:not(.menuItem--disabled) .icon,\n.menuItem:hover:not(.menuItem--disabled) .label,\n.menuItem:hover:not(.menuItem--disabled) .shortcut,\n.menuItem:hover:not(.menuItem--disabled) .submenuArrow {\n\tcolor: var(--color-white);\n}\n\n/* When menu item is selected, change text color of all children */\n.menuItem--selected .checkmark,\n.menuItem--selected .icon,\n.menuItem--selected .label,\n.menuItem--selected .shortcut,\n.menuItem--selected .submenuArrow {\n\tcolor: var(--color-white);\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* High contrast mode */\n@media (prefers-contrast: high) {\n\t.menuItem:hover:not(.menuItem--disabled) {\n\t\toutline: 2px solid currentColor;\n\t\toutline-offset: -2px;\n\t}\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n\t.menuItem {\n\t\ttransition: none;\n\t}\n}","// MenuItem component - Mac OS 9 style\n// Individual menu item for use within MenuBar\n\nimport React, { forwardRef } from 'react';\nimport styles from './MenuItem.module.css';\n\nexport interface MenuItemProps {\n\t/**\n\t * Menu item label text\n\t */\n\tlabel: string;\n\n\t/**\n\t * Optional keyboard shortcut to display (e.g., \"⌘S\", \"Ctrl+O\")\n\t */\n\tshortcut?: string;\n\n\t/**\n\t * Whether the menu item is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Whether the menu item is selected/active\n\t * @default false\n\t */\n\tselected?: boolean;\n\n\t/**\n\t * Whether the menu item has a separator after it\n\t * @default false\n\t */\n\tseparator?: boolean;\n\n\t/**\n\t * Whether the menu item has a checkmark (for toggle items)\n\t * @default false\n\t */\n\tchecked?: boolean;\n\n\t/**\n\t * Optional icon to display before the label\n\t */\n\ticon?: React.ReactNode;\n\n\t/**\n\t * Callback when menu item is clicked\n\t */\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n\n\t/**\n\t * Callback when menu item is focused\n\t */\n\tonFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void;\n\n\t/**\n\t * Callback when menu item loses focus\n\t */\n\tonBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void;\n\n\t/**\n\t * Custom class name for the menu item\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Whether the item has a submenu indicator (arrow)\n\t * @default false\n\t */\n\thasSubmenu?: boolean;\n}\n\n/**\n * Mac OS 9 style MenuItem component\n * \n * Individual menu item for use within MenuBar or dropdown menus.\n * \n * Features:\n * - Classic Mac OS 9 menu item styling\n * - Disabled state support\n * - Keyboard shortcut display\n * - Checkmark support for toggle items\n * - Separator support\n * - Selected/active state\n * - Icon support\n * - Submenu indicator\n * - Full keyboard and mouse support\n * \n * @example\n * ```tsx\n * // Basic menu item\n * <MenuItem label=\"Open...\" onClick={() => console.log('Open')} />\n * \n * // With keyboard shortcut\n * <MenuItem label=\"Save\" shortcut=\"⌘S\" onClick={() => console.log('Save')} />\n * \n * // Disabled item\n * <MenuItem label=\"Undo\" disabled />\n * \n * // Checked item (toggle)\n * <MenuItem label=\"Show Grid\" checked onClick={() => console.log('Toggle')} />\n * \n * // With separator\n * <MenuItem label=\"Preferences...\" separator onClick={() => console.log('Prefs')} />\n * \n * // With submenu indicator\n * <MenuItem label=\"Recent Files\" hasSubmenu />\n * ```\n */\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(\n\t(\n\t\t{\n\t\t\tlabel,\n\t\t\tshortcut,\n\t\t\tdisabled = false,\n\t\t\tselected = false,\n\t\t\tseparator = false,\n\t\t\tchecked = false,\n\t\t\ticon,\n\t\t\tonClick,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tclassName = '',\n\t\t\thasSubmenu = false,\n\t\t},\n\t\tref\n\t) => {\n\t\t// Class names\n\t\tconst menuItemClassNames = [\n\t\t\tstyles.menuItem,\n\t\t\tselected ? styles['menuItem--selected'] : '',\n\t\t\tdisabled ? styles['menuItem--disabled'] : '',\n\t\t\tseparator ? styles['menuItem--separator'] : '',\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\t// Handle click\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClick?.(event);\n\t\t};\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<button\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={menuItemClassNames}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\taria-checked={checked ? 'true' : undefined}\n\t\t\t\t>\n\t\t\t\t\t{/* Checkmark area */}\n\t\t\t\t\t<span className={styles.checkmark}>{checked && '✓'}</span>\n\n\t\t\t\t\t{/* Icon area */}\n\t\t\t\t\t{icon && <span className={styles.icon}>{icon}</span>}\n\n\t\t\t\t\t{/* Label */}\n\t\t\t\t\t<span className={styles.label}>{label}</span>\n\n\t\t\t\t\t{/* Shortcut */}\n\t\t\t\t\t{shortcut && <span className={styles.shortcut}>{shortcut}</span>}\n\n\t\t\t\t\t{/* Submenu indicator */}\n\t\t\t\t\t{hasSubmenu && <span className={styles.submenuArrow}>▶</span>}\n\t\t\t\t</button>\n\n\t\t\t\t{/* Separator line if needed */}\n\t\t\t\t{separator && <div className={styles.separatorLine} role=\"separator\" />}\n\t\t\t</>\n\t\t);\n\t}\n);\n\nMenuItem.displayName = 'MenuItem';\n\nexport default MenuItem;","/* Scrollbar Component Styles - Mac OS 9 */\n\n/* ========================================\n * Base Scrollbar Container\n * ======================================== */\n\n.scrollbar {\n\t/* Base styling */\n\tdisplay: flex;\n\tbackground: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\t\n\t/* Position */\n\tposition: relative;\n\t\n\t/* No user select */\n\tuser-select: none;\n}\n\n.scrollbar--vertical {\n\tflex-direction: column;\n\twidth: 16px;\n\tmin-height: 60px;\n}\n\n.scrollbar--horizontal {\n\tflex-direction: row;\n\theight: 16px;\n\tmin-width: 60px;\n}\n\n/* Disabled state */\n.scrollbar--disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n/* ========================================\n * Arrow Buttons\n * ======================================== */\n\n.arrow {\n\t/* Base styling */\n\tbackground: var(--color-gray-400);\n\tborder: none;\n\tbox-shadow: var(--shadow-raised);\n\t\n\t/* Size */\n\tflex-shrink: 0;\n\twidth: 16px;\n\theight: 16px;\n\t\n\t/* Layout */\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\t\n\t/* Cursor */\n\tcursor: pointer;\n\t\n\t/* Remove button defaults */\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\t\n\t/* No transitions */\n\ttransition: none;\n\t\n\t/* Position */\n\tposition: relative;\n}\n\n/* Arrow states */\n.arrow:hover:not(:disabled) {\n\tbackground: var(--color-gray-300);\n}\n\n.arrow:active:not(:disabled) {\n\tbox-shadow: var(--shadow-inset);\n\tbackground: var(--color-gray-500);\n}\n\n.arrow:disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n/* Arrow icons */\n.arrowIcon {\n\twidth: 0;\n\theight: 0;\n\tborder-style: solid;\n}\n\n/* Vertical scrollbar arrows */\n.scrollbar--vertical .arrow--start .arrowIcon {\n\t/* Up arrow */\n\tborder-width: 0 3px 4px 3px;\n\tborder-color: transparent transparent var(--color-text) transparent;\n}\n\n.scrollbar--vertical .arrow--end .arrowIcon {\n\t/* Down arrow */\n\tborder-width: 4px 3px 0 3px;\n\tborder-color: var(--color-text) transparent transparent transparent;\n}\n\n/* Horizontal scrollbar arrows */\n.scrollbar--horizontal .arrow--start .arrowIcon {\n\t/* Left arrow */\n\tborder-width: 3px 4px 3px 0;\n\tborder-color: transparent var(--color-text) transparent transparent;\n}\n\n.scrollbar--horizontal .arrow--end .arrowIcon {\n\t/* Right arrow */\n\tborder-width: 3px 0 3px 4px;\n\tborder-color: transparent transparent transparent var(--color-text);\n}\n\n/* ========================================\n * Track (scrollable area)\n * ======================================== */\n\n.track {\n\t/* Base styling */\n\tbackground: var(--color-gray-200);\n\t\n\t/* Layout */\n\tflex: 1;\n\tposition: relative;\n\t\n\t/* Cursor */\n\tcursor: pointer;\n\t\n\t/* Pattern background for Mac OS 9 look */\n\tbackground-image: repeating-linear-gradient(\n\t\t0deg,\n\t\ttransparent,\n\t\ttransparent 1px,\n\t\trgba(0, 0, 0, 0.03) 1px,\n\t\trgba(0, 0, 0, 0.03) 2px\n\t);\n}\n\n/* ========================================\n * Thumb (draggable handle)\n * ======================================== */\n\n.thumb {\n\t/* Base styling */\n\tbackground: var(--color-gray-400);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\tbox-shadow: var(--shadow-raised);\n\t\n\t/* Position */\n\tposition: absolute;\n\t\n\t/* Cursor */\n\tcursor: grab;\n\t\n\t/* No transitions for instant response */\n\ttransition: none;\n}\n\n.thumb:active {\n\tcursor: grabbing;\n\tbackground: var(--color-gray-300);\n}\n\n/* Vertical thumb */\n.scrollbar--vertical .thumb {\n\tleft: 0;\n\tright: 0;\n\tmin-height: 16px;\n}\n\n/* Horizontal thumb */\n.scrollbar--horizontal .thumb {\n\ttop: 0;\n\tbottom: 0;\n\tmin-width: 16px;\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* Keyboard focus */\n.arrow:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: -2px;\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.thumb {\n\t\ttransition: none;\n\t}\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.scrollbar {\n\t\tborder-width: 2px;\n\t}\n\t\n\t.thumb {\n\t\tborder-width: 2px;\n\t}\n}\n","// Scrollbar component - Mac OS 9 style\n// Classic scrollbar with arrows and draggable thumb\n\n'use client';\n\nimport React, { forwardRef, useRef, useState, useEffect, useCallback } from 'react';\nimport styles from './Scrollbar.module.css';\n\nexport interface ScrollbarProps {\n\t/**\n\t * Scrollbar orientation\n\t * @default 'vertical'\n\t */\n\torientation?: 'vertical' | 'horizontal';\n\n\t/**\n\t * Current scroll position (0-1)\n\t */\n\tvalue?: number;\n\n\t/**\n\t * Viewport size relative to content size (0-1)\n\t * Used to calculate thumb size\n\t */\n\tviewportRatio?: number;\n\n\t/**\n\t * Callback when scroll position changes\n\t */\n\tonChange?: (value: number) => void;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Whether scrollbar is disabled\n\t * @default false\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * Mac OS 9 style Scrollbar component\n * \n * Classic scrollbar with arrow buttons and draggable thumb.\n * Can be used standalone or integrated with scrollable content.\n * \n * @example\n * ```tsx\n * <Scrollbar\n * orientation=\"vertical\"\n * value={0.5}\n * viewportRatio={0.3}\n * onChange={(value) => console.log('Scroll position:', value)}\n * />\n * ```\n */\nexport const Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>(\n\t(\n\t\t{\n\t\t\torientation = 'vertical',\n\t\t\tvalue = 0,\n\t\t\tviewportRatio = 0.2,\n\t\t\tonChange,\n\t\t\tclassName = '',\n\t\t\tdisabled = false,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst trackRef = useRef<HTMLDivElement>(null);\n\t\tconst [isDragging, setIsDragging] = useState(false);\n\t\tconst [dragStartPos, setDragStartPos] = useState(0);\n\t\tconst [dragStartValue, setDragStartValue] = useState(0);\n\n\t\tconst isVertical = orientation === 'vertical';\n\n\t\t// Calculate thumb size based on viewport ratio\n\t\tconst thumbSize = Math.max(viewportRatio * 100, 10); // Minimum 10% size\n\n\t\t// Calculate thumb position\n\t\tconst maxThumbPos = 100 - thumbSize;\n\t\tconst thumbPos = value * maxThumbPos;\n\n\t\t// Class names\n\t\tconst classNames = [\n\t\t\tstyles.scrollbar,\n\t\t\tstyles[`scrollbar--${orientation}`],\n\t\t\tdisabled && styles['scrollbar--disabled'],\n\t\t\tclassName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\t// Handle arrow clicks\n\t\tconst handleDecrement = useCallback(() => {\n\t\t\tif (disabled || !onChange) return;\n\t\t\tconst newValue = Math.max(0, value - 0.1);\n\t\t\tonChange(newValue);\n\t\t}, [disabled, onChange, value]);\n\n\t\tconst handleIncrement = useCallback(() => {\n\t\t\tif (disabled || !onChange) return;\n\t\t\tconst newValue = Math.min(1, value + 0.1);\n\t\t\tonChange(newValue);\n\t\t}, [disabled, onChange, value]);\n\n\t\t// Handle track clicks\n\t\tconst handleTrackClick = useCallback(\n\t\t\t(event: React.MouseEvent<HTMLDivElement>) => {\n\t\t\t\tif (disabled || !onChange || !trackRef.current) return;\n\n\t\t\t\tconst rect = trackRef.current.getBoundingClientRect();\n\t\t\t\tconst clickPos = isVertical\n\t\t\t\t\t? event.clientY - rect.top\n\t\t\t\t\t: event.clientX - rect.left;\n\t\t\t\tconst trackSize = isVertical ? rect.height : rect.width;\n\n\t\t\t\t// Convert click position to scroll value (0-1)\n\t\t\t\tconst clickRatio = clickPos / trackSize;\n\t\t\t\tconst newValue = Math.max(0, Math.min(1, clickRatio));\n\t\t\t\tonChange(newValue);\n\t\t\t},\n\t\t\t[disabled, onChange, isVertical]\n\t\t);\n\n\t\t// Handle thumb drag start\n\t\tconst handleThumbMouseDown = useCallback(\n\t\t\t(event: React.MouseEvent) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tsetIsDragging(true);\n\t\t\t\tsetDragStartPos(isVertical ? event.clientY : event.clientX);\n\t\t\t\tsetDragStartValue(value);\n\t\t\t},\n\t\t\t[disabled, isVertical, value]\n\t\t);\n\n\t\t// Handle drag move\n\t\tuseEffect(() => {\n\t\t\tif (!isDragging || !onChange || !trackRef.current) return;\n\n\t\t\tconst handleMouseMove = (event: MouseEvent) => {\n\t\t\t\tconst currentPos = isVertical ? event.clientY : event.clientX;\n\t\t\t\tconst delta = currentPos - dragStartPos;\n\n\t\t\t\tconst rect = trackRef.current!.getBoundingClientRect();\n\t\t\t\tconst trackSize = isVertical ? rect.height : rect.width;\n\t\t\t\tconst deltaRatio = delta / trackSize;\n\n\t\t\t\tconst newValue = Math.max(0, Math.min(1, dragStartValue + deltaRatio));\n\t\t\t\tonChange(newValue);\n\t\t\t};\n\n\t\t\tconst handleMouseUp = () => {\n\t\t\t\tsetIsDragging(false);\n\t\t\t};\n\n\t\t\tdocument.addEventListener('mousemove', handleMouseMove);\n\t\t\tdocument.addEventListener('mouseup', handleMouseUp);\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener('mousemove', handleMouseMove);\n\t\t\t\tdocument.removeEventListener('mouseup', handleMouseUp);\n\t\t\t};\n\t\t}, [isDragging, dragStartPos, dragStartValue, onChange, isVertical]);\n\n\t\treturn (\n\t\t\t<div ref={ref} className={classNames}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={`${styles.arrow} ${styles['arrow--start']}`}\n\t\t\t\t\tonClick={handleDecrement}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-label={isVertical ? 'Scroll up' : 'Scroll left'}\n\t\t\t\t>\n\t\t\t\t\t<div className={styles.arrowIcon} />\n\t\t\t\t</button>\n\n\t\t\t\t<div\n\t\t\t\t\tref={trackRef}\n\t\t\t\t\tclassName={styles.track}\n\t\t\t\t\tonClick={handleTrackClick}\n\t\t\t\t\trole=\"scrollbar\"\n\t\t\t\t\taria-valuenow={Math.round(value * 100)}\n\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\taria-orientation={orientation}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={styles.thumb}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t[isVertical ? 'height' : 'width']: `${thumbSize}%`,\n\t\t\t\t\t\t\t[isVertical ? 'top' : 'left']: `${thumbPos}%`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonMouseDown={handleThumbMouseDown}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={`${styles.arrow} ${styles['arrow--end']}`}\n\t\t\t\t\tonClick={handleIncrement}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-label={isVertical ? 'Scroll down' : 'Scroll right'}\n\t\t\t\t>\n\t\t\t\t\t<div className={styles.arrowIcon} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nScrollbar.displayName = 'Scrollbar';\n\nexport default Scrollbar;\n","/* ListView Component Styles - Mac OS 9 */\n\n/* ========================================\n * Base ListView Container\n * ======================================== */\n\n.listView {\n\t/* Base styling */\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground: var(--color-surface);\n\tborder: var(--border-width-thin) solid var(--color-border);\n\t\n\t/* Mac OS 9 inset appearance */\n\tbox-shadow: var(--shadow-inset);\n\t\n\t/* Font */\n\tfont-family: var(--font-system);\n\tfont-size: var(--font-size-md);\n\t\n\t/* No user select on structure */\n\tuser-select: none;\n\t\n\t/* Overflow */\n\toverflow: auto;\n}\n\n/* ========================================\n * Header (Column Headers)\n * ======================================== */\n\n.header {\n\t/* Layout */\n\tdisplay: flex;\n\tflex-shrink: 0;\n\t\n\t/* Styling */\n\tbackground: var(--color-gray-400);\n\tborder-bottom: var(--border-width-thin) solid var(--color-border);\n\tbox-shadow: var(--shadow-raised);\n\t\n\t/* Position */\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 1;\n}\n\n.headerCell {\n\t/* Base styling */\n\tpadding: var(--spacing-1) var(--spacing-2);\n\t\n\t/* Text */\n\tfont-weight: var(--font-weight-bold);\n\tcolor: var(--color-text);\n\t\n\t/* Layout */\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-1);\n\t\n\t/* Border */\n\tborder-right: var(--border-width-thin) solid var(--color-border);\n\t\n\t/* Prevent text wrap */\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.headerCell:last-child {\n\tborder-right: none;\n\tflex: 1; /* Last column takes remaining space */\n}\n\n.headerCell.sortable {\n\tcursor: pointer;\n}\n\n.headerCell.sortable:hover {\n\tbackground: var(--color-gray-300);\n}\n\n.sortIndicator {\n\tfont-size: var(--font-size-xs);\n\tcolor: var(--color-text);\n}\n\n/* ========================================\n * Body (List Items)\n * ======================================== */\n\n.body {\n\t/* Layout */\n\tflex: 1;\n\toverflow-y: auto;\n\t\n\t/* Background */\n\tbackground: var(--color-surface);\n}\n\n.row {\n\t/* Layout */\n\tdisplay: flex;\n\t\n\t/* Styling */\n\tborder-bottom: var(--border-width-thin) solid var(--color-border);\n\t\n\t/* Cursor */\n\tcursor: pointer;\n\t\n\t/* No transitions */\n\ttransition: none;\n}\n\n.row:hover {\n\tbackground: var(--color-gray-300);\n}\n\n.row.selected {\n\tbackground: var(--color-gray-400);\n\tcolor: var(--color-text);\n}\n\n.row.selected:hover {\n\tbackground: var(--color-gray-500);\n}\n\n.cell {\n\t/* Base styling */\n\tpadding: var(--spacing-1) var(--spacing-2);\n\t\n\t/* Layout */\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-1);\n\t\n\t/* Border */\n\tborder-right: var(--border-width-thin) solid var(--color-border);\n\t\n\t/* Prevent text wrap */\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.cell:last-child {\n\tborder-right: none;\n\tflex: 1; /* Last cell takes remaining space */\n}\n\n.icon {\n\t/* Layout */\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n\t\n\t/* Size */\n\twidth: 16px;\n\theight: 16px;\n}\n\n/* ========================================\n * Accessibility\n * ======================================== */\n\n/* Keyboard focus */\n.row:focus-visible {\n\toutline: 1px dotted var(--color-focus);\n\toutline-offset: -1px;\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n\t.row {\n\t\ttransition: none;\n\t}\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n\t.listView {\n\t\tborder-width: 2px;\n\t}\n\t\n\t.row.selected {\n\t\toutline: 2px solid var(--color-text);\n\t}\n}\n","// ListView component - Mac OS 9 style multi-column list\n// List view with sortable columns and row selection\n\n'use client';\n\nimport React, { forwardRef, useState, useCallback } from 'react';\nimport styles from './ListView.module.css';\n\nexport interface ListColumn {\n\t/**\n\t * Column key/identifier\n\t */\n\tkey: string;\n\n\t/**\n\t * Column header label\n\t */\n\tlabel: string;\n\n\t/**\n\t * Column width (px or percentage)\n\t * @default 'auto'\n\t */\n\twidth?: number | string;\n\n\t/**\n\t * Whether column is sortable\n\t * @default true\n\t */\n\tsortable?: boolean;\n}\n\nexport interface ListItem {\n\t/**\n\t * Unique item ID\n\t */\n\tid: string;\n\n\t/**\n\t * Item data - keys should match column keys\n\t */\n\t[key: string]: any;\n\n\t/**\n\t * Optional icon to display\n\t */\n\ticon?: React.ReactNode;\n}\n\nexport interface ListViewProps {\n\t/**\n\t * Column definitions\n\t */\n\tcolumns: ListColumn[];\n\n\t/**\n\t * List items\n\t */\n\titems: ListItem[];\n\n\t/**\n\t * Selected item IDs\n\t */\n\tselectedIds?: string[];\n\n\t/**\n\t * Callback when selection changes\n\t */\n\tonSelectionChange?: (selectedIds: string[]) => void;\n\n\t/**\n\t * Callback when item is double-clicked\n\t */\n\tonItemOpen?: (item: ListItem) => void;\n\n\t/**\n\t * Callback when column is clicked for sorting\n\t */\n\tonSort?: (columnKey: string, direction: 'asc' | 'desc') => void;\n\n\t/**\n\t * Additional CSS class names\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Height of the list view\n\t */\n\theight?: number | string;\n}\n\n/**\n * Mac OS 9 style ListView component\n * \n * Multi-column list with sortable headers and row selection.\n * Similar to Finder list view.\n * \n * @example\n * ```tsx\n * <ListView\n * columns={[\n * { key: 'name', label: 'Name' },\n * { key: 'modified', label: 'Date Modified' },\n * { key: 'size', label: 'Size' }\n * ]}\n * items={[\n * { id: '1', name: 'Document.txt', modified: 'Today', size: '2 KB' },\n * { id: '2', name: 'Images', modified: 'Yesterday', size: '--' }\n * ]}\n * selectedIds={['1']}\n * onSelectionChange={(ids) => console.log('Selected:', ids)}\n * />\n * ```\n */\nexport const ListView = forwardRef<HTMLDivElement, ListViewProps>(\n\t(\n\t\t{\n\t\t\tcolumns,\n\t\t\titems,\n\t\t\tselectedIds = [],\n\t\t\tonSelectionChange,\n\t\t\tonItemOpen,\n\t\t\tonSort,\n\t\t\tclassName = '',\n\t\t\theight = 'auto',\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [sortColumn, setSortColumn] = useState<string | null>(null);\n\t\tconst [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc');\n\n\t\t// Class names\n\t\tconst classNames = [styles.listView, className].filter(Boolean).join(' ');\n\n\t\t// Handle column header click\n\t\tconst handleColumnClick = useCallback(\n\t\t\t(columnKey: string, sortable: boolean = true) => {\n\t\t\t\tif (!sortable || !onSort) return;\n\n\t\t\t\tconst newDirection =\n\t\t\t\t\tsortColumn === columnKey && sortDirection === 'asc' ? 'desc' : 'asc';\n\t\t\t\tsetSortColumn(columnKey);\n\t\t\t\tsetSortDirection(newDirection);\n\t\t\t\tonSort(columnKey, newDirection);\n\t\t\t},\n\t\t\t[sortColumn, sortDirection, onSort]\n\t\t);\n\n\t\t// Handle row click\n\t\tconst handleRowClick = useCallback(\n\t\t\t(itemId: string, event: React.MouseEvent) => {\n\t\t\t\tif (!onSelectionChange) return;\n\n\t\t\t\tif (event.metaKey || event.ctrlKey) {\n\t\t\t\t\t// Multi-select with Cmd/Ctrl\n\t\t\t\t\tif (selectedIds.includes(itemId)) {\n\t\t\t\t\t\tonSelectionChange(selectedIds.filter((id) => id !== itemId));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonSelectionChange([...selectedIds, itemId]);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.shiftKey && selectedIds.length > 0) {\n\t\t\t\t\t// Range select with Shift\n\t\t\t\t\tconst lastSelectedId = selectedIds[selectedIds.length - 1];\n\t\t\t\t\tconst lastIndex = items.findIndex((item) => item.id === lastSelectedId);\n\t\t\t\t\tconst currentIndex = items.findIndex((item) => item.id === itemId);\n\n\t\t\t\t\tconst start = Math.min(lastIndex, currentIndex);\n\t\t\t\t\tconst end = Math.max(lastIndex, currentIndex);\n\t\t\t\t\tconst rangeIds = items.slice(start, end + 1).map((item) => item.id);\n\n\t\t\t\t\tonSelectionChange(rangeIds);\n\t\t\t\t} else {\n\t\t\t\t\t// Single select\n\t\t\t\t\tonSelectionChange([itemId]);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[selectedIds, items, onSelectionChange]\n\t\t);\n\n\t\t// Handle row double-click\n\t\tconst handleRowDoubleClick = useCallback(\n\t\t\t(item: ListItem) => {\n\t\t\t\tif (onItemOpen) {\n\t\t\t\t\tonItemOpen(item);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onItemOpen]\n\t\t);\n\n\t\t// Container style\n\t\tconst containerStyle: React.CSSProperties = {};\n\t\tif (height !== 'auto') {\n\t\t\tcontainerStyle.height = typeof height === 'number' ? `${height}px` : height;\n\t\t}\n\n\t\treturn (\n\t\t\t<div ref={ref} className={classNames} style={containerStyle}>\n\t\t\t\t{/* Column headers */}\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={column.key}\n\t\t\t\t\t\t\tclassName={`${styles.headerCell} ${\n\t\t\t\t\t\t\t\tcolumn.sortable !== false ? styles.sortable : ''\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth:\n\t\t\t\t\t\t\t\t\ttypeof column.width === 'number'\n\t\t\t\t\t\t\t\t\t\t? `${column.width}px`\n\t\t\t\t\t\t\t\t\t\t: column.width,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={() => handleColumnClick(column.key, column.sortable)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{column.label}\n\t\t\t\t\t\t\t{sortColumn === column.key && (\n\t\t\t\t\t\t\t\t<span className={styles.sortIndicator}>\n\t\t\t\t\t\t\t\t\t{sortDirection === 'asc' ? '▲' : '▼'}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* List items */}\n\t\t\t\t<div className={styles.body}>\n\t\t\t\t\t{items.map((item) => {\n\t\t\t\t\t\tconst isSelected = selectedIds.includes(item.id);\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\tclassName={`${styles.row} ${isSelected ? styles.selected : ''}`}\n\t\t\t\t\t\t\t\tonClick={(e) => handleRowClick(item.id, e)}\n\t\t\t\t\t\t\t\tonDoubleClick={() => handleRowDoubleClick(item)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{columns.map((column, index) => (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={column.key}\n\t\t\t\t\t\t\t\t\t\tclassName={styles.cell}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\twidth:\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof column.width === 'number'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `${column.width}px`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: column.width,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{index === 0 && item.icon && (\n\t\t\t\t\t\t\t\t\t\t\t<span className={styles.icon}>{item.icon}</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{item[column.key]}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nListView.displayName = 'ListView';\n\nexport default ListView;\n","/* FolderList Component Styles - Mac OS 9 */\n\n/* ========================================\n * FolderList Content Area\n * ======================================== */\n\n.folderListContent {\n\t/* Remove default padding from Window content */\n\tpadding: 0;\n\t\n\t/* Ensure ListView fills the content area */\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n}\n\n.listView {\n\t/* Fill the entire content area */\n\tflex: 1;\n\t\n\t/* Remove extra borders (Window already has a border) */\n\tborder: none;\n\t\n\t/* Remove shadow (already inset in Window) */\n\tbox-shadow: none;\n}\n","// FolderList component - Mac OS 9 style folder/file list window\n// Window component with integrated ListView for file browsing\n\n'use client';\n\nimport React, { forwardRef, useState } from 'react';\nimport { Window, WindowProps } from '../Window/Window';\nimport { ListView, ListColumn, ListItem } from '../ListView/ListView';\nimport styles from './FolderList.module.css';\n\nexport interface FolderListProps extends Omit<WindowProps, 'children'> {\n\t/**\n\t * Column definitions for the list\n\t * @default [{ key: 'name', label: 'Name' }, { key: 'modified', label: 'Date Modified' }, { key: 'size', label: 'Size' }]\n\t */\n\tcolumns?: ListColumn[];\n\n\t/**\n\t * Items to display in the list\n\t */\n\titems: ListItem[];\n\n\t/**\n\t * Selected item IDs\n\t */\n\tselectedIds?: string[];\n\n\t/**\n\t * Callback when selection changes\n\t */\n\tonSelectionChange?: (selectedIds: string[]) => void;\n\n\t/**\n\t * Callback when item is double-clicked (opened)\n\t */\n\tonItemOpen?: (item: ListItem) => void;\n\n\t/**\n\t * Callback when column header is clicked for sorting\n\t */\n\tonSort?: (columnKey: string, direction: 'asc' | 'desc') => void;\n\n\t/**\n\t * Height of the list view area\n\t * @default 400\n\t */\n\tlistHeight?: number | string;\n}\n\n/**\n * Mac OS 9 style FolderList component\n * \n * Window with integrated ListView for browsing files and folders.\n * Similar to Finder list view in Mac OS 9.\n * \n * @example\n * ```tsx\n * <FolderList\n * title=\"My Documents\"\n * items={[\n * { id: '1', name: 'Document.txt', modified: 'Today', size: '2 KB', icon: <FileIcon /> },\n * { id: '2', name: 'Images', modified: 'Yesterday', size: '--', icon: <FolderIcon /> }\n * ]}\n * selectedIds={['1']}\n * onSelectionChange={(ids) => console.log('Selected:', ids)}\n * onItemOpen={(item) => console.log('Open:', item.name)}\n * />\n * ```\n */\nexport const FolderList = forwardRef<HTMLDivElement, FolderListProps>(\n\t(\n\t\t{\n\t\t\tcolumns = [\n\t\t\t\t{ key: 'name', label: 'Name', width: '40%' },\n\t\t\t\t{ key: 'modified', label: 'Date Modified', width: '30%' },\n\t\t\t\t{ key: 'size', label: 'Size', width: '30%' },\n\t\t\t],\n\t\t\titems,\n\t\t\tselectedIds,\n\t\t\tonSelectionChange,\n\t\t\tonItemOpen,\n\t\t\tonSort,\n\t\t\tlistHeight = 400,\n\t\t\t...windowProps\n\t\t},\n\t\tref\n\t) => {\n\t\t// Window content with ListView\n\t\treturn (\n\t\t\t<Window ref={ref} contentClassName={styles.folderListContent} {...windowProps}>\n\t\t\t\t<ListView\n\t\t\t\t\tcolumns={columns}\n\t\t\t\t\titems={items}\n\t\t\t\t\tselectedIds={selectedIds}\n\t\t\t\t\tonSelectionChange={onSelectionChange}\n\t\t\t\t\tonItemOpen={onItemOpen}\n\t\t\t\t\tonSort={onSort}\n\t\t\t\t\theight={listHeight}\n\t\t\t\t\tclassName={styles.listView}\n\t\t\t\t/>\n\t\t\t</Window>\n\t\t);\n\t}\n);\n\nFolderList.displayName = 'FolderList';\n\nexport default FolderList;\n","// Sample Icons for Demo Purposes\n// Simple SVG icons in Mac OS 9 style\n\nimport React from 'react';\nimport { Icon } from './Icon';\n\nexport const SaveIcon: React.FC = () => (\n\t<Icon label=\"Save\" size=\"sm\">\n\t\t<path d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z\" />\n\t</Icon>\n);\n\nexport const FolderIcon: React.FC = () => (\n\t<Icon label=\"Folder\" size=\"sm\">\n\t\t<path d=\"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\" />\n\t</Icon>\n);\n\nexport const CloseIcon: React.FC = () => (\n\t<Icon label=\"Close\" size=\"sm\">\n\t\t<path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n\t</Icon>\n);\n\nexport const ArrowRightIcon: React.FC = () => (\n\t<Icon label=\"Arrow Right\" size=\"sm\">\n\t\t<path d=\"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\" />\n\t</Icon>\n);\n\nexport const ArrowLeftIcon: React.FC = () => (\n\t<Icon label=\"Arrow Left\" size=\"sm\">\n\t\t<path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" />\n\t</Icon>\n);\n\nexport const DownloadIcon: React.FC = () => (\n\t<Icon label=\"Download\" size=\"sm\">\n\t\t<path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\" />\n\t</Icon>\n);\n\nexport const LinkIcon: React.FC = () => (\n\t<Icon label=\"Link\" size=\"sm\">\n\t\t<path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\" />\n\t</Icon>\n);\n\nexport const MailIcon: React.FC = () => (\n\t<Icon label=\"Mail\" size=\"sm\">\n\t\t<path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\" />\n\t</Icon>\n);\n\nexport const PrintIcon: React.FC = () => (\n\t<Icon label=\"Print\" size=\"sm\">\n\t\t<path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\" />\n\t</Icon>\n);\n\nexport const TrashIcon: React.FC = () => (\n\t<Icon label=\"Delete\" size=\"sm\">\n\t\t<path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" />\n\t</Icon>\n);\n\nexport const SearchIcon: React.FC = () => (\n\t<Icon label=\"Search\" size=\"sm\">\n\t\t<path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n\t</Icon>\n);\n\nexport const UserIcon: React.FC = () => (\n\t<Icon label=\"User\" size=\"sm\">\n\t\t<path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n\t</Icon>\n);\n\nexport const LockIcon: React.FC = () => (\n\t<Icon label=\"Lock\" size=\"sm\">\n\t\t<path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n\t</Icon>\n);\n\nexport const CalendarIcon: React.FC = () => (\n\t<Icon label=\"Calendar\" size=\"sm\">\n\t\t<path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\" />\n\t</Icon>\n);\n\nexport const DocumentIcon: React.FC = () => (\n\t<Icon label=\"Document\" size=\"sm\">\n\t\t<path d=\"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z\" />\n\t</Icon>\n);\n\nexport const FileIcon: React.FC = () => (\n\t<Icon label=\"File\" size=\"sm\">\n\t\t<path d=\"M8 16h8v2H8zm0-4h8v2H8zm6-10H6c-1.1 0-2 .9-2 2v16c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11z\" />\n\t</Icon>\n);\n\nexport const ImageIcon: React.FC = () => (\n\t<Icon label=\"Image\" size=\"sm\">\n\t\t<path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n\t</Icon>\n);\n\nexport const MusicIcon: React.FC = () => (\n\t<Icon label=\"Music\" size=\"sm\">\n\t\t<path d=\"M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z\" />\n\t</Icon>\n);\n\nexport const VideoIcon: React.FC = () => (\n\t<Icon label=\"Video\" size=\"sm\">\n\t\t<path d=\"M18 4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l2 4H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4h-4z\" />\n\t</Icon>\n);\n\nexport const SettingsIcon: React.FC = () => (\n\t<Icon label=\"Settings\" size=\"sm\">\n\t\t<path d=\"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94L14.4 2.81c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\" />\n\t</Icon>\n);\n\nexport const HomeIcon: React.FC = () => (\n\t<Icon label=\"Home\" size=\"sm\">\n\t\t<path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\" />\n\t</Icon>\n);\n\nexport const StarIcon: React.FC = () => (\n\t<Icon label=\"Star\" size=\"sm\">\n\t\t<path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\" />\n\t</Icon>\n);\n\nexport const HeartIcon: React.FC = () => (\n\t<Icon label=\"Heart\" size=\"sm\">\n\t\t<path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\" />\n\t</Icon>\n);\n\nexport const InfoIcon: React.FC = () => (\n\t<Icon label=\"Info\" size=\"sm\">\n\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n\t</Icon>\n);\n\nexport const WarningIcon: React.FC = () => (\n\t<Icon label=\"Warning\" size=\"sm\">\n\t\t<path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n\t</Icon>\n);\n\nexport const ErrorIcon: React.FC = () => (\n\t<Icon label=\"Error\" size=\"sm\">\n\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n\t</Icon>\n);\n\nexport const CheckIcon: React.FC = () => (\n\t<Icon label=\"Check\" size=\"sm\">\n\t\t<path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n\t</Icon>\n);\n\nexport const PlusIcon: React.FC = () => (\n\t<Icon label=\"Plus\" size=\"sm\">\n\t\t<path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n\t</Icon>\n);\n\nexport const MinusIcon: React.FC = () => (\n\t<Icon label=\"Minus\" size=\"sm\">\n\t\t<path d=\"M19 13H5v-2h14v2z\" />\n\t</Icon>\n);\n\nexport const RefreshIcon: React.FC = () => (\n\t<Icon label=\"Refresh\" size=\"sm\">\n\t\t<path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\" />\n\t</Icon>\n);\n\nexport const MenuIcon: React.FC = () => (\n\t<Icon label=\"Menu\" size=\"sm\">\n\t\t<path d=\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\" />\n\t</Icon>\n);\n\nexport const MoreIcon: React.FC = () => (\n\t<Icon label=\"More\" size=\"sm\">\n\t\t<path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\n\t</Icon>\n);\n\nexport const ChevronUpIcon: React.FC = () => (\n\t<Icon label=\"Chevron Up\" size=\"sm\">\n\t\t<path d=\"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\" />\n\t</Icon>\n);\n\nexport const ChevronDownIcon: React.FC = () => (\n\t<Icon label=\"Chevron Down\" size=\"sm\">\n\t\t<path d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\" />\n\t</Icon>\n);\n\nexport const EyeIcon: React.FC = () => (\n\t<Icon label=\"Eye\" size=\"sm\">\n\t\t<path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n\t</Icon>\n);\n","// Mac OS 9 Design Tokens\n// Extracted from Figma file: vy2T5MCXFz7QWf4Ba86eqN\n// Reference: docs/figma-map.md\n\n/**\n * Color tokens based on Mac OS 9 grayscale palette\n * Extracted from Figma styles and component analysis\n */\nexport const colors = {\n\t// Grayscale palette (Figma style IDs included for reference)\n\tgray100: '#FFFFFF', // 18:47 - White\n\tgray200: '#EEEEEE', // 19:2507 - Base UI background\n\tgray300: '#DDDDDD', // 18:60 - Inferred mid-tone\n\tgray400: '#CCCCCC', // 18:1970 - Inferred mid-tone\n\tgray500: '#999999', // 20:7306 - Inferred mid-tone\n\tgray600: '#666666', // 18:52 - Inferred dark tone\n\tgray700: '#4D4D4D', // 18:46 - Inferred dark tone\n\tgray800: '#333333', // 45:184845 - Inferred very dark\n\tgray900: '#262626', // 18:48 - Black (strokes, borders, text)\n\n\t// Accent colors\n\tlavender: '#CCCCFF', // 60:134029 - Cover background\n\tazul: '#0066CC', // 49:36229 - Accent (inferred)\n\tlinkRed: '#CC0000', // 102:398, 102:3935 - Link color (inferred)\n\n\t// Semantic mappings\n\tbackground: '#EEEEEE', // Gray 200\n\tforeground: '#262626', // Gray 900\n\tborder: '#262626', // Gray 900\n\ttext: '#262626', // Gray 900\n\ttextInverse: '#FFFFFF', // Gray 100\n\tsurface: '#EEEEEE', // Gray 200\n\tsurfaceInset: '#FFFFFF', // Gray 100 (for inset areas)\n\n\t// Legacy names for compatibility\n\tblack: '#262626',\n\twhite: '#FFFFFF',\n\n\t// Status colors (Mac OS 9 style)\n\tfocus: '#000080',\n\terror: '#CC0000',\n\tsuccess: '#008000',\n\twarning: '#FF8C00',\n} as const;\n\n/**\n * Typography tokens\n * Based on Figma text styles and authentic Mac OS 9 system fonts\n * \n * Mac OS 9 Typography:\n * - Charcoal: Primary system UI font (menus, buttons, dialogs)\n * - Geneva: Body text and secondary UI elements\n * - Chicago: Classic Mac system font (menu bar, earlier versions)\n * - Apple Garamond: Headlines and editorial content\n */\nexport const typography = {\n\tfontFamily: {\n\t\t// Charcoal - Primary system UI font used throughout Mac OS 9\n\t\t// Fallback chain: Try Charcoal variants, then Chicago, then modern system fonts\n\t\tsystem: 'Charcoal, \"Charcoal CY\", Chicago, \"Chicago Classic\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif',\n\t\t\n\t\t// Geneva - Used for dialog text and body content in Mac OS 9\n\t\t// More readable for longer text than Charcoal\n\t\tbody: 'Geneva, \"Geneva CY\", \"Lucida Grande\", \"Lucida Sans Unicode\", sans-serif',\n\t\t\n\t\t// Apple Garamond Light - Used for headlines in Figma\n\t\tdisplay: '\"Apple Garamond Light\", \"Apple Garamond\", Garamond, Georgia, serif',\n\t\t\n\t\t// Chicago - Classic Mac OS system font (menu bar, classic UI)\n\t\tchicago: 'Chicago, \"Chicago Classic\", \"Charcoal CY\", Charcoal, monospace',\n\t\t\n\t\t// Monaco - Mac OS 9 monospace font\n\t\tmono: 'Monaco, \"Monaco CY\", \"SF Mono\", \"Courier New\", Courier, monospace',\n\t},\n\tfontSize: {\n\t\txs: '9px', // Smallest UI text (9pt Chicago/Charcoal)\n\t\tsm: '10px', // Small labels (10pt)\n\t\tmd: '12px', // Standard UI text - Mac OS 9 default (12pt)\n\t\tlg: '13px', // Slightly larger UI text\n\t\txl: '14px', // Large UI text\n\t\t'2xl': '16px', // Headings\n\t\t'3xl': '18px', // Large headings\n\t\t'4xl': '20px', // Major headings\n\t\t'5xl': '24px', // Display text\n\t},\n\tfontWeight: {\n\t\tnormal: 700, // Charcoal Bold is the Mac OS 9 default\n\t\tmedium: 700, // Medium (same as bold for Charcoal)\n\t\tsemibold: 700, // Semibold (same as bold)\n\t\tbold: 700, // Bold weight\n\t\tlight: 400, // Light weight (regular Charcoal)\n\t},\n\tlineHeight: {\n\t\ttight: 1.2, // Tight leading (Mac OS 9 style)\n\t\tsnug: 1.3, // Snug\n\t\tnormal: 1.4, // Normal (Mac OS 9 used tighter line heights)\n\t\trelaxed: 1.5, // Relaxed\n\t\tloose: 1.6, // Loose\n\t},\n\tletterSpacing: {\n\t\ttighter: '-0.02em', // Slightly tighter\n\t\ttight: '-0.01em', // Tight\n\t\tnormal: '0', // Normal - Mac OS 9 default\n\t\twide: '0.01em', // Wide\n\t\twider: '0.02em', // Wider\n\t},\n} as const;\n\n/**\n * Spacing tokens based on Mac OS 9 measurements\n * Mac OS 9 used tight spacing; using 2px as base unit\n */\nexport const spacing = {\n\t'0': '0',\n\tpx: '1px',\n\t'0.5': '2px', // Minimal spacing\n\t'1': '4px', // Base grid unit\n\t'1.5': '6px',\n\t'2': '8px',\n\t'2.5': '10px',\n\t'3': '12px',\n\t'4': '16px',\n\t'5': '20px',\n\t'6': '24px',\n\t'8': '32px',\n\t'10': '40px',\n\t'12': '48px',\n\t'16': '64px',\n\n\t// Legacy names\n\txs: '2px',\n\tsm: '4px',\n\tmd: '8px',\n\tlg: '12px',\n\txl: '16px',\n\t'2xl': '24px',\n\t'3xl': '32px',\n} as const;\n\n/**\n * Shadow tokens for Mac OS 9 bevel effects\n * Exact values from Figma Window Shadow effect (67:95038)\n * \n * Classic 3-layer bevel:\n * 1. Hard drop shadow (2px, 2px, 0 blur) - creates depth\n * 2. Top-left highlight (light inner shadow)\n * 3. Bottom-right shadow (dark inner shadow)\n */\nexport const shadows = {\n\t// Standard raised bevel (default button state)\n\tbevel:\n\t\t'inset 2px 2px 0 rgba(255, 255, 255, 0.6), inset -2px -2px 0 rgba(38, 38, 38, 0.4), 2px 2px 0 rgba(38, 38, 38, 1)',\n\n\t// Inverted bevel for pressed/inset states\n\tinset:\n\t\t'inset -2px -2px 0 rgba(255, 255, 255, 0.6), inset 2px 2px 0 rgba(38, 38, 38, 0.4), 2px 2px 0 rgba(38, 38, 38, 1)',\n\n\t// Individual layers for custom composition\n\tdropShadow: '2px 2px 0 rgba(38, 38, 38, 1)',\n\tinnerHighlight: 'inset 2px 2px 0 rgba(255, 255, 255, 0.6)',\n\tinnerShadow: 'inset -2px -2px 0 rgba(38, 38, 38, 0.4)',\n\n\t// Legacy format for compatibility\n\traised: {\n\t\thighlight: 'inset 2px 2px 0 rgba(255, 255, 255, 0.6)',\n\t\tshadow: 'inset -2px -2px 0 rgba(38, 38, 38, 0.4)',\n\t\tfull: 'inset 2px 2px 0 rgba(255, 255, 255, 0.6), inset -2px -2px 0 rgba(38, 38, 38, 0.4), 2px 2px 0 rgba(38, 38, 38, 1)',\n\t},\n\n\t// No shadow (flat)\n\tnone: 'none',\n} as const;\n\n/**\n * Border tokens\n * Mac OS 9 used consistent 1px borders with sharp corners\n */\nexport const borders = {\n\twidth: {\n\t\tnone: '0',\n\t\tthin: '1px',\n\t\tmedium: '2px',\n\t\tthick: '3px',\n\t},\n\tstyle: {\n\t\tsolid: 'solid',\n\t\tdashed: 'dashed',\n\t\tdotted: 'dotted',\n\t\tnone: 'none',\n\t},\n\tradius: {\n\t\tnone: '0', // Mac OS 9 always used square corners\n\t\tsm: '0', // Kept for API consistency\n\t\tmd: '0',\n\t\tlg: '0',\n\t\tfull: '0',\n\t},\n} as const;\n\n/**\n * Z-index scale for layering\n */\nexport const zIndex = {\n\tbase: 0,\n\tdropdown: 1000,\n\tsticky: 1100,\n\tmodal: 1200,\n\tpopover: 1300,\n\ttooltip: 1400,\n} as const;\n\n/**\n * Transition/Animation tokens\n * Mac OS 9 had minimal animations, but we add subtle ones for modern feel\n */\nexport const transitions = {\n\tduration: {\n\t\tinstant: '0ms',\n\t\tfast: '100ms',\n\t\tnormal: '200ms',\n\t\tslow: '300ms',\n\t},\n\ttiming: {\n\t\tlinear: 'linear',\n\t\teaseIn: 'cubic-bezier(0.4, 0, 1, 1)',\n\t\teaseOut: 'cubic-bezier(0, 0, 0.2, 1)',\n\t\teaseInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n\t},\n} as const;\n\n// Export all tokens as a single object\nexport const tokens = {\n\tcolors,\n\ttypography,\n\tspacing,\n\tborders,\n\tshadows,\n\tzIndex,\n\ttransitions,\n} as const;\n\nexport default tokens;"]}
|