@projectdiscoveryio/design-system 1.0.0 → 1.0.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/dist/fallback.css +24 -3
- package/dist/index.cjs +4 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +208 -0
- package/dist/index.js +4 -26
- package/dist/index.js.map +1 -1
- package/dist/styles.css +225 -0
- package/package.json +8 -9
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/types.ts","../src/theme/config.ts","../src/adapters/shadcn/utils.ts","../src/primitives/ButtonPrimitive.tsx","../src/utils/icons.ts","../src/adapters/shadcn/Button.tsx","../src/adapters/index.ts","../src/components/Button.tsx","../src/tokens/tokens.ts","../src/theme/theme.ts","../src/components/PdThemeProvider.tsx","../src/components/ErrorBoundary.tsx","../src/theme/ThemeProvider.tsx","../src/tokens/semantic.ts","../src/tokens/index.ts","../src/utils/accessibility.ts"],"names":["React","forwardRef","jsx","clsx","jsxs","useState","useEffect","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["// Single source of truth: define arrays first, then derive types from them\nexport const THEME_MODES = ['light', 'dark', 'system'] as const;\nexport const THEME_NAMES = ['base', 'brand'] as const;\nexport const ADAPTER_TYPES = ['shadcn', 'material'] as const;\n\n// Derive types from arrays to ensure they stay in sync\nexport type ThemeMode = typeof THEME_MODES[number];\nexport type ThemeName = typeof THEME_NAMES[number];\nexport type AdapterType = typeof ADAPTER_TYPES[number];\n\n// Default values - single source of truth\nexport const DEFAULT_ADAPTER: AdapterType = 'shadcn';\nexport const DEFAULT_THEME: ThemeName = 'base';\nexport const DEFAULT_MODE: ThemeMode = 'system';\n\nexport interface DesignSystemConfig {\n adapter: AdapterType;\n theme: ThemeName;\n mode: ThemeMode;\n}\n\nexport interface Theme {\n mode: ThemeMode;\n name: ThemeName;\n cssVariables: Record<string, string>;\n}\n","import type { DesignSystemConfig, AdapterType, ThemeName, ThemeMode } from './types';\nimport { DEFAULT_ADAPTER, DEFAULT_THEME, DEFAULT_MODE } from './types';\n\n// Use a function to create a new object each time to avoid mutation issues\n// This ensures thread-safety in concurrent React environments\nlet globalConfig: DesignSystemConfig = {\n adapter: DEFAULT_ADAPTER,\n theme: DEFAULT_THEME,\n mode: DEFAULT_MODE,\n};\n\nexport function setDesignSystemConfig(config: Partial<DesignSystemConfig>): void {\n // Create a new object to avoid direct mutation\n globalConfig = { ...globalConfig, ...config };\n}\n\nexport function getDesignSystemConfig(): DesignSystemConfig {\n // Return a copy to prevent external mutation\n return { ...globalConfig };\n}\n\nexport function getAdapter(): AdapterType {\n return globalConfig.adapter;\n}\n\nexport function getThemeName(): ThemeName {\n return globalConfig.theme;\n}\n\nexport function getThemeMode(): ThemeMode {\n return globalConfig.mode;\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, { forwardRef } from 'react';\nimport type { ButtonType } from '../tokens/semantic';\n\nexport interface ButtonPrimitiveProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n asChild?: boolean;\n type?: ButtonType;\n}\n\nexport const ButtonPrimitive = forwardRef<HTMLButtonElement, ButtonPrimitiveProps>(\n ({ asChild = false, type = 'button', children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...props,\n ref,\n type,\n } as React.HTMLAttributes<HTMLElement>);\n }\n \n return (\n <button\n ref={ref}\n type={type}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nButtonPrimitive.displayName = 'ButtonPrimitive';\n","/**\n * Icon Utility\n * \n * Dynamically loads icons from lucide-react by name.\n * Handles invalid icon names gracefully.\n */\n\nimport * as LucideIcons from 'lucide-react';\nimport React from 'react';\n\n// Icons are React components (functions), we exclude types, utilities, and other non-component exports\ntype LucideExports = typeof LucideIcons;\ntype LucideIconKeys = {\n [K in keyof LucideExports]: LucideExports[K] extends React.ComponentType<React.SVGProps<SVGSVGElement>>\n ? K\n : never;\n}[keyof LucideExports];\n\n// Type for valid lucide-react icon names (only actual icon components)\nexport type LucideIconName = LucideIconKeys;\n\n// Cache for icon components to avoid repeated lookups\nconst iconCache = new Map<string, React.ComponentType<React.SVGProps<SVGSVGElement>>>();\n// Track which icons we've logged (to avoid spam)\nconst loggedIcons = new Set<string>();\n\n/**\n * Get an icon component from lucide-react by name\n * \n * @param iconName - Name of the icon (e.g., 'Download', 'Trash2', 'Plus')\n * @returns Icon component or null if icon doesn't exist\n * \n * @example\n * ```tsx\n * const Icon = getIcon('Download');\n * if (Icon) {\n * return <Icon className=\"h-4 w-4\" />;\n * }\n * ```\n */\nexport function getIcon(iconName: string | undefined | null): React.ComponentType<React.SVGProps<SVGSVGElement>> | null {\n if (!iconName || typeof iconName !== 'string') {\n return null;\n }\n\n // Check cache first\n if (iconCache.has(iconName)) {\n return iconCache.get(iconName) || null;\n }\n\n // Try to get icon from lucide-react\n // Handle different naming conventions:\n // 1. Exact match (e.g., \"Download\")\n // 2. PascalCase (e.g., \"download\" -> \"Download\")\n let IconComponent: React.ComponentType<React.SVGProps<SVGSVGElement>> | null = null;\n\n // Try exact match first\n if (iconName in LucideIcons) {\n IconComponent = (LucideIcons as unknown as Record<string, React.ComponentType<React.SVGProps<SVGSVGElement>>>)[iconName];\n } else {\n // Try PascalCase conversion\n const pascalCaseName = iconName.charAt(0).toUpperCase() + iconName.slice(1);\n if (pascalCaseName in LucideIcons) {\n IconComponent = (LucideIcons as unknown as Record<string, React.ComponentType<React.SVGProps<SVGSVGElement>>>)[pascalCaseName];\n }\n }\n\n // If we found something, verify it's usable as a React component\n // React components can be functions or objects (memo, forwardRef, etc.)\n if (IconComponent) {\n // Verify it's a valid component - check if it's callable or has React component properties\n const isValidComponent = \n typeof IconComponent === 'function' || \n (typeof IconComponent === 'object' && IconComponent !== null);\n \n if (isValidComponent) {\n // Cache and return the icon component\n iconCache.set(iconName, IconComponent as React.ComponentType<React.SVGProps<SVGSVGElement>>);\n \n // Debug logging in development\n if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined') {\n // Only log once per icon to avoid spam\n if (!loggedIcons.has(iconName)) {\n console.debug(`[pd-design] Icon \"${iconName}\" found and cached`);\n loggedIcons.add(iconName);\n }\n }\n \n return IconComponent as React.ComponentType<React.SVGProps<SVGSVGElement>>;\n }\n }\n\n // Icon not found - return null (graceful handling)\n // Only warn in development to avoid console noise\n if (process.env.NODE_ENV !== 'production') {\n const availableIcons = Object.keys(LucideIcons)\n .filter(k => {\n const icon = (LucideIcons as Record<string, unknown>)[k];\n return !k.includes('Icon') && icon && (typeof icon === 'function' || typeof icon === 'object');\n })\n .slice(0, 10);\n console.warn(`[pd-design] Icon \"${iconName}\" not found in lucide-react. Available icons: ${availableIcons.join(', ')}...`);\n }\n return null;\n}\n\n/**\n * Render an icon component with proper sizing\n * \n * @param iconName - Name of the icon\n * @param size - Size class for the icon\n * @param className - Additional classes\n * @returns Rendered icon or null\n */\nexport function renderIcon(\n iconName: string | undefined | null,\n size: string = 'h-4 w-4',\n className?: string\n): React.ReactElement | null {\n const IconComponent = getIcon(iconName);\n \n if (!IconComponent) {\n return null;\n }\n\n return React.createElement(IconComponent as React.ComponentType<React.SVGProps<SVGSVGElement>>, { \n className: `${size} ${className || ''}`.trim() \n }) as React.ReactElement;\n}\n\n/**\n * Check if an icon name exists in lucide-react\n * \n * @param iconName - Name of the icon to check\n * @returns true if icon exists, false otherwise\n */\nexport function iconExists(iconName: string | undefined | null): boolean {\n return getIcon(iconName) !== null;\n}\n\n/**\n * Get list of available icon names (for autocomplete/validation)\n * Note: This returns all exported names from lucide-react\n */\nexport function getAvailableIconNames(): string[] {\n return Object.keys(LucideIcons).filter(\n (name) => {\n const icon = (LucideIcons as Record<string, unknown>)[name];\n return icon && (typeof icon === 'function' || typeof icon === 'object') && !name.includes('Icon');\n }\n );\n}\n","import React, { forwardRef } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Loader2 } from 'lucide-react';\nimport { cn } from './utils';\nimport type { ButtonAdapterProps } from '../types';\nimport type { Size } from '../../tokens/semantic';\nimport { ButtonPrimitive } from '../../primitives/ButtonPrimitive';\nimport { getIcon } from '../../utils/icons';\n\nconst buttonVariants = cva(\n 'pd-inline-flex pd-items-center pd-justify-center pd-font-medium pd-transition-colors pd-focus-visible:outline-none pd-focus-visible:ring-2 pd-focus-visible:ring-[var(--pd-border-blue)] pd-focus-visible:ring-offset-2 pd-disabled:pointer-events-none pd-disabled:cursor-not-allowed pd-disabled:hover:pd-bg-[inherit] pd-disabled:hover:pd-text-[inherit] pd-disabled:hover:pd-border-[inherit] pd-disabled:active:pd-bg-[inherit] pd-disabled:active:pd-text-[inherit] pd-disabled:active:pd-border-[inherit] [font-family:var(--pd-font-sans,Geist,sans-serif)] [gap:var(--pd-button-gap)] [border-radius:var(--pd-radius-button)] pd-shadow-none',\n {\n variants: {\n variant: {\n primary: 'pd-border-0',\n secondary: 'pd-border',\n ghost: 'pd-border-0',\n destructive: 'pd-border-0'\n },\n intent: {\n primary: '',\n success: '',\n warning: '',\n danger: '',\n neutral: '',\n },\n size: {\n sm: '[padding-top:var(--pd-button-padding-sm-vertical)] [padding-bottom:var(--pd-button-padding-sm-vertical)] [padding-left:var(--pd-button-padding-sm-horizontal)] [padding-right:var(--pd-button-padding-sm-horizontal)] pd-text-xs [line-height:var(--pd-button-line-height-sm)] [letter-spacing:var(--pd-button-letter-spacing)]',\n md: '[padding-top:var(--pd-button-padding-md-vertical)] [padding-bottom:var(--pd-button-padding-md-vertical)] [padding-left:var(--pd-button-padding-md-horizontal)] [padding-right:var(--pd-button-padding-md-horizontal)] pd-text-xs [line-height:var(--pd-button-line-height-md)] [letter-spacing:var(--pd-button-letter-spacing)]',\n lg: '[padding-top:var(--pd-button-padding-lg-vertical)] [padding-bottom:var(--pd-button-padding-lg-vertical)] [padding-left:var(--pd-button-padding-lg-horizontal)] [padding-right:var(--pd-button-padding-lg-horizontal)] pd-text-base [line-height:var(--pd-button-line-height-lg)] [letter-spacing:var(--pd-button-letter-spacing)]',\n },\n },\n compoundVariants: [\n // Primary variant - using new semantic tokens\n {\n variant: 'primary',\n intent: 'primary',\n class: 'pd-bg-[var(--pd-background-invert)] pd-text-[var(--pd-content-on-color)] hover:pd-bg-[var(--pd-background-invert-light)] active:pd-bg-[var(--pd-background-invert)]',\n },\n {\n variant: 'primary',\n intent: 'success',\n class: 'pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)]',\n },\n {\n variant: 'primary',\n intent: 'warning',\n class: 'pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)]',\n },\n {\n variant: 'primary',\n intent: 'danger',\n class: 'pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-destructive-foreground)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-[var(--pd-intent-danger-bg)] pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'primary',\n intent: 'neutral',\n class: 'pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)]',\n },\n // Secondary variant - White bg default, always has light grey border\n {\n variant: 'secondary',\n intent: 'primary',\n class: 'pd-bg-[var(--pd-background-primary)] pd-text-[var(--pd-content-secondary)] hover:pd-bg-[var(--pd-background-low)] hover:pd-text-[var(--pd-content-primary)] active:pd-bg-[var(--pd-background-low-on-hover)] active:pd-text-[var(--pd-content-primary)] pd-border pd-border-[var(--pd-border-secondary)]',\n },\n {\n variant: 'secondary',\n intent: 'success',\n class: 'pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)] pd-border-[var(--pd-intent-success-border)]',\n },\n {\n variant: 'secondary',\n intent: 'warning',\n class: 'pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)] pd-border-[var(--pd-intent-warning-border)]',\n },\n {\n variant: 'secondary',\n intent: 'danger',\n class: 'pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] hover:pd-text-[var(--pd-intent-danger-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-border pd-border-[var(--pd-intent-danger-border)]',\n },\n {\n variant: 'secondary',\n intent: 'neutral',\n class: 'pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)] pd-border-[var(--pd-intent-neutral-border)]',\n },\n // Ghost variant - Transparent default, light grey fill on hover/pressed/loading\n {\n variant: 'ghost',\n intent: 'primary',\n class: 'pd-border-0 pd-bg-transparent pd-text-[var(--pd-content-secondary)] hover:pd-bg-[var(--pd-background-low)] hover:pd-text-[var(--pd-content-primary)] active:pd-bg-[var(--pd-background-low-on-hover)] active:pd-text-[var(--pd-content-primary)] pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'ghost',\n intent: 'success',\n class: 'pd-border-0 pd-bg-transparent hover:pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-text-[var(--pd-intent-success-hover)]',\n },\n {\n variant: 'ghost',\n intent: 'warning',\n class: 'pd-border-0 pd-bg-transparent hover:pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-text-[var(--pd-intent-warning-hover)]',\n },\n {\n variant: 'ghost',\n intent: 'danger',\n class: 'pd-border-0 pd-bg-transparent pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg)] hover:pd-text-[var(--pd-intent-danger-hover)]',\n },\n {\n variant: 'ghost',\n intent: 'neutral',\n class: 'pd-border-0 pd-bg-transparent pd-text-[var(--pd-intent-neutral-text)] hover:pd-text-[var(--pd-intent-neutral-hover)]',\n },\n // Destructive variant - Red text, light red/pink background, different on hover/active/disabled\n {\n variant: 'destructive',\n intent: 'primary',\n class: 'pd-border-0 pd-bg-[var(--pd-background-red)] pd-text-[var(--pd-content-red)] hover:pd-bg-[var(--pd-background-red-on-hover)] hover:pd-text-[var(--pd-content-red-on-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'success',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] hover:pd-text-[var(--pd-intent-success-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'warning',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] hover:pd-text-[var(--pd-intent-warning-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'danger',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] hover:pd-text-[var(--pd-intent-danger-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'neutral',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] hover:pd-text-[var(--pd-intent-neutral-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n ],\n defaultVariants: {\n variant: 'primary',\n intent: 'primary',\n size: 'md',\n },\n }\n);\n\nexport const ShadcnButton = forwardRef<HTMLButtonElement, ButtonAdapterProps>(\n ({ \n variant = 'primary', \n intent = 'primary', \n size = 'md', \n disabled, \n loading, \n fullWidth,\n startIcon,\n endIcon,\n loadingText,\n asChild,\n href,\n target,\n children, \n ...props \n }, ref) => {\n\n // Build className from variants - no arbitrary classes allowed\n // Add loading and disabled state overrides based on specification\n const buttonClasses = cn(\n buttonVariants({ variant, intent, size }),\n fullWidth && 'pd-w-full',\n // Loading states - light mode (apply to all intents for secondary and ghost)\n loading && variant === 'primary' && intent === 'primary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)]',\n loading && variant === 'secondary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)] pd-border-[var(--pd-border-secondary)]',\n loading && variant === 'ghost' && '!pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)]',\n // Destructive variant loading states - use intent-specific backgrounds\n loading && variant === 'destructive' && intent === 'primary' && 'pd-bg-[var(--pd-background-red)] pd-text-[var(--pd-content-red)]',\n loading && variant === 'destructive' && intent === 'success' && 'pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)]',\n loading && variant === 'destructive' && intent === 'warning' && 'pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)]',\n loading && variant === 'destructive' && intent === 'danger' && 'pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-intent-danger-text)]',\n loading && variant === 'destructive' && intent === 'neutral' && 'pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)]',\n // Disabled states - consistent across all variants (no hover/active changes)\n disabled && variant === 'primary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-subtle)]',\n disabled && variant === 'secondary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-subtle)] pd-border-[var(--pd-border-secondary)]',\n disabled && variant === 'ghost' && 'pd-bg-transparent pd-text-[var(--pd-content-subtle)]',\n disabled && variant === 'destructive' && 'pd-bg-transparent pd-text-[var(--pd-content-subtle)]',\n );\n\n // Handle link buttons\n if (href) {\n return (\n <ButtonPrimitive\n asChild={true}\n {...props}\n >\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n className={buttonClasses}\n aria-disabled={disabled || loading}\n style={{ pointerEvents: disabled || loading ? 'none' : undefined }}\n >\n {renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size, variant, intent })}\n </a>\n </ButtonPrimitive>\n );\n }\n\n return (\n <ButtonPrimitive\n ref={ref}\n disabled={disabled || loading}\n className={buttonClasses}\n asChild={asChild}\n {...props}\n >\n {renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size, variant, intent })}\n </ButtonPrimitive>\n );\n }\n);\n\nfunction renderButtonContent({\n loading,\n loadingText,\n startIcon,\n endIcon,\n children,\n size,\n variant,\n intent,\n}: {\n loading?: boolean;\n loadingText?: string;\n startIcon?: string;\n endIcon?: string;\n children: React.ReactNode;\n size?: Size;\n variant?: string;\n intent?: string;\n}) {\n // Icon sizes based on button size\n const iconSizeClass = size === 'sm' ? 'pd-h-3 pd-w-3' : size === 'lg' ? 'pd-h-5 pd-w-5' : 'pd-h-4 pd-w-4';\n const spinnerSizeClass = size === 'sm' ? 'pd-h-3 pd-w-3' : size === 'lg' ? 'pd-h-5 pd-w-5' : 'pd-h-4 pd-w-4';\n\n // Determine loading text/spinner color based on variant and intent\n const getLoadingTextColor = () => {\n if (variant === 'primary' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-secondary)]'; // Grey for light grey background\n }\n if (variant === 'primary' && intent === 'danger') {\n return 'pd-text-[var(--pd-destructive-foreground)]'; // White for red background\n }\n if (variant === 'secondary' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-secondary)]'; // Grey for light grey background\n }\n if (variant === 'ghost' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-secondary)]'; // Grey for light grey background\n }\n if (variant === 'destructive' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-red)]'; // Red text for destructive primary\n }\n if (variant === 'destructive' && intent === 'success') {\n return 'pd-text-[var(--pd-intent-success-text)]'; // Success text for destructive success\n }\n if (variant === 'destructive' && intent === 'warning') {\n return 'pd-text-[var(--pd-intent-warning-text)]'; // Warning text for destructive warning\n }\n if (variant === 'destructive' && intent === 'danger') {\n return 'pd-text-[var(--pd-intent-danger-text)]'; // Danger text for destructive danger\n }\n if (variant === 'destructive' && intent === 'neutral') {\n return 'pd-text-[var(--pd-intent-neutral-text)]'; // Neutral text for destructive neutral\n }\n return 'pd-text-[var(--pd-content-secondary)]'; // Fallback\n };\n\n const loadingTextColor = getLoadingTextColor();\n\n if (loading) {\n return (\n <>\n <Loader2 \n aria-hidden=\"true\" \n className={`${spinnerSizeClass} pd-animate-spin ${loadingTextColor}`} \n />\n <span className={loadingTextColor}>\n {loadingText || children}\n </span>\n <span className=\"pd-sr-only\">\n {loadingText ? `Loading: ${loadingText}` : 'Loading'}\n </span>\n </>\n );\n }\n\n // Get icon components from lucide-react by name\n const StartIconComponent = startIcon ? getIcon(startIcon) : null;\n const EndIconComponent = endIcon ? getIcon(endIcon) : null;\n\n return (\n <>\n {StartIconComponent && (\n <span className=\"pd-inline-flex pd-items-center pd-justify-center\">\n {React.createElement(StartIconComponent, { className: iconSizeClass })}\n </span>\n )}\n {children}\n {EndIconComponent && (\n <span className=\"pd-inline-flex pd-items-center pd-justify-center\">\n {React.createElement(EndIconComponent, { className: iconSizeClass })}\n </span>\n )}\n </>\n );\n}\n\nShadcnButton.displayName = 'ShadcnButton';\n","import { getAdapter } from '../theme/config';\nimport { ADAPTER_TYPES } from '../theme/types';\nimport * as ShadcnAdapter from './shadcn';\n// Material/Any other adapter will be imported when the adapter is installed\n// import * as MaterialAdapter from './material';\n\nconst [SHADCN_ADAPTER, MATERIAL_ADAPTER] = ADAPTER_TYPES;\n\nexport function getButtonAdapter() {\n const adapter = getAdapter();\n \n switch (adapter) {\n case SHADCN_ADAPTER:\n return ShadcnAdapter.ShadcnButton;\n case MATERIAL_ADAPTER:\n // Material adapter implementation available in src/adapters/material/Button.tsx\n // Uncomment when Material UI is installed:\n // return MaterialAdapter.MaterialButton;\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Material adapter not yet enabled. Install @mui/material to use it.');\n }\n return ShadcnAdapter.ShadcnButton;\n default:\n return ShadcnAdapter.ShadcnButton;\n }\n}\n\n// export function getInputAdapter() {\n// const adapter = getAdapter();\n \n// switch (adapter) {\n// case SHADCN_ADAPTER:\n// return ShadcnAdapter.ShadcnInput;\n// case MATERIAL_ADAPTER:\n// // Material adapter would go here\n// return ShadcnAdapter.ShadcnInput;\n// default:\n// return ShadcnAdapter.ShadcnInput;\n// }\n// }\n\n// export function getCardAdapter() {\n// const adapter = getAdapter();\n \n// switch (adapter) {\n// case SHADCN_ADAPTER:\n// return ShadcnAdapter.Card;\n// case MATERIAL_ADAPTER:\n// // Material adapter would go here\n// return ShadcnAdapter.Card;\n// default:\n// return ShadcnAdapter.Card;\n// }\n// }\n\n","import React, { forwardRef, useMemo, memo } from 'react';\nimport { getButtonAdapter } from '../adapters';\nimport type { Variant, Size, ButtonType } from '../tokens/semantic';\nimport type { LucideIconName } from '../utils/icons';\n\nexport type { Variant, Size, ButtonType } from '../tokens/semantic';\n\nexport interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'className'> {\n variant?: Variant;\n size?: Size;\n loading?: boolean;\n fullWidth?: boolean;\n startIcon?: LucideIconName;\n endIcon?: LucideIconName;\n loadingText?: string;\n href?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n type?: ButtonType;\n asChild?: boolean;\n}\n\nconst ButtonComponent = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ \n variant = 'primary', \n size = 'md', \n loading, \n disabled,\n fullWidth,\n startIcon,\n endIcon,\n loadingText,\n href,\n target,\n type = 'button',\n asChild,\n children,\n ...props \n }, ref) => {\n const AdapterButton = getButtonAdapter();\n \n // Remove className if passed - we don't allow arbitrary classes\n const { className, ...restProps } = props as Omit<ButtonProps, 'variant' | 'size' | 'loading' | 'fullWidth' | 'startIcon' | 'endIcon' | 'loadingText' | 'href' | 'target' | 'type' | 'asChild'> & { className?: string };\n if (className && process.env.NODE_ENV !== 'production') {\n console.warn('Button component does not accept className prop. Use variant, size, and other props for styling.');\n }\n \n // Intent is internal only - default to 'primary'\n const intent = 'primary' as const;\n \n // Apply sensible accessibility defaults based on component state\n const accessibilityProps = useMemo(() => {\n const defaults: Record<string, boolean> = {};\n \n // Auto-apply aria-disabled for disabled/loading state\n if (disabled || loading) {\n defaults['aria-disabled'] = true;\n }\n \n // Auto-apply aria-busy for loading state\n if (loading) {\n defaults['aria-busy'] = true;\n }\n \n return defaults;\n }, [disabled, loading]);\n \n // Merge defaults with user props (user props take precedence)\n const mergedProps = {\n ...restProps,\n ...accessibilityProps,\n };\n \n return (\n <AdapterButton\n ref={ref}\n variant={variant}\n intent={intent}\n size={size}\n disabled={disabled}\n loading={loading}\n fullWidth={fullWidth}\n startIcon={startIcon}\n endIcon={endIcon}\n loadingText={loadingText}\n href={href}\n target={target}\n type={type}\n asChild={asChild}\n {...mergedProps}\n >\n {children}\n </AdapterButton>\n );\n }\n);\n\nButtonComponent.displayName = 'Button';\n\n// Memoize Button to prevent unnecessary re-renders\nexport const Button = memo(ButtonComponent);\n","/**\n * Design Tokens - Single Source of Truth\n * \n * This file contains all design tokens in one place:\n * - Base color primitives\n * - Typography, spacing, radius, shadows, z-index\n * - Semantic token mappings (derived from base tokens)\n * \n * Everything else (CSS variables, theme objects) is generated from this file.\n */\n\n// ============================================================================\n// COLOR PRIMITIVES\n// ============================================================================\n\nexport const neutral = {\n 100: \"#FFFFFF\",\n 200: \"#EDEDED\",\n 300: \"#DFDFE2\",\n 400: \"#BEBEC1\",\n 500: \"#7E7E8B\",\n 600: \"#60606C\",\n 700: \"#4E4E5A\",\n 800: \"#2F2F37\",\n 900: \"#17171C\",\n 950: \"#09090B\",\n 1000: \"#FAFAFA\",\n} as const;\n\nexport const blue = {\n 100: \"#EBF1FF\",\n 200: \"#C2D4FF\",\n 300: \"#99B7FF\",\n 400: \"#709AFF\",\n 500: \"#3772FF\",\n 600: \"#004BFF\",\n 700: \"#003FD6\",\n 800: \"#002680\",\n 900: \"#001E66\",\n 950: \"#00123D\",\n} as const;\n\nexport const orange = {\n 100: \"#FFF3EB\",\n 200: \"#FFE1CC\",\n 300: \"#FFC9A3\",\n 400: \"#EC9C64\",\n 500: \"#FF6800\",\n 600: \"#D65700\",\n 700: \"#AD4700\",\n 800: \"#7A3200\",\n 900: \"#5C2500\",\n 950: \"#331500\",\n} as const;\n\nexport const red = {\n 100: \"#FDF2F4\",\n 200: \"#FADBE1\",\n 300: \"#F6C1CA\",\n 400: \"#E15C5C\",\n 500: \"#E12D4E\",\n 600: \"#C41C3B\",\n 700: \"#A11730\",\n 800: \"#7D1225\",\n 900: \"#4C0B17\",\n 950: \"#2D060D\",\n} as const;\n\nexport const green = {\n 100: \"#E0FFEC\",\n 200: \"#BDFFD5\",\n 300: \"#8AFFB5\",\n 400: \"#5CFF98\",\n 500: \"#09FF63\",\n 600: \"#00E052\",\n 700: \"#00B241\",\n 800: \"#008A32\",\n 900: \"#006625\",\n 950: \"#00471A\",\n} as const;\n\nexport const yellow = {\n 100: \"#FFF4E0\",\n 200: \"#FFE8C2\",\n 300: \"#FFD999\",\n 400: \"#FFCA70\",\n 500: \"#FFAD22\",\n 600: \"#F09700\",\n 700: \"#D68700\",\n 800: \"#7A4D00\",\n 900: \"#5C3A00\",\n 950: \"#3D2600\",\n} as const;\n\nexport const colorPrimitives = {\n neutral,\n blue,\n orange,\n red,\n green,\n yellow,\n} as const;\n\n// ============================================================================\n// TYPOGRAPHY\n// ============================================================================\n\nexport const typography = {\n fontFamily: {\n sans: ['Geist', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'sans-serif'],\n mono: ['Geist Mono', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', 'monospace'],\n },\n fontSize: {\n xs: '0.75em', // 12px\n sm: '0.875em', // 14px\n base: '1em', // 16px\n lg: '1.125em', // 18px\n xl: '1.25em', // 20px\n '2xl': '1.5em', // 24px\n '3xl': '1.875em', // 30px\n '4xl': '2.25em', // 36px\n '5xl': '3em', // 48px\n '6xl': '3.75em', // 60px\n '7xl': '4.5em', // 72px\n '8xl': '6em', // 96px\n '9xl': '8em', // 128px\n },\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n lineHeight: {\n tight: '1.25',\n normal: '1.5',\n relaxed: '1.75',\n },\n // Tailwind fontSize lineHeight mappings (for use in tailwind.config.js)\n fontSizeLineHeight: {\n xs: '1em', // 16px for 12px font\n sm: '1.25em', // 20px for 14px font\n base: '1.5em', // 24px for 16px font\n lg: '1.75em', // 28px for 18px font\n xl: '1.75em', // 28px for 20px font\n '2xl': '2em',\n '3xl': '2.25em',\n '4xl': '2.5em',\n '5xl': '1',\n '6xl': '1',\n '7xl': '1',\n '8xl': '1',\n '9xl': '1',\n },\n letterSpacing: {\n tight: '-0.025em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n button: '0.00833em', // 0.1px for 12px font \n },\n} as const;\n\n// ============================================================================\n// SPACING\n// ============================================================================\n\nexport const spacing = {\n 0: '0em', // 0px\n 1: '0.25em', // 4px\n 2: '0.5em', // 8px\n 3: '0.75em', // 12px\n 4: '1em', // 16px\n 5: '1.25em', // 20px\n 6: '1.5em', // 24px\n 7: '1.75em', // 28px\n 8: '2em', // 32px\n 9: '2.25em', // 36px\n 10: '2.5em', // 40px\n} as const;\n\n// ============================================================================\n// RADIUS\n// ============================================================================\n\nexport const radius = {\n none: '0',\n sm: '0.125em', // 2px\n base: '0.25em', // 4px\n md: '0.375em', // 6px\n lg: '0.5em', // 8px\n xl: '0.75em', // 12px\n '2xl': '1em', // 16px\n '3xl': '1.5em', // 24px\n full: '9999px',\n button: '0.5em', // 8px - button border radius \n} as const;\n\n// ============================================================================\n// SHADOWS\n// ============================================================================\n\nexport const shadows = {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n base: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n none: 'none',\n} as const;\n\n// ============================================================================\n// Z-INDEX\n// ============================================================================\n\nexport const zIndex = {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n} as const;\n\n// ============================================================================\n// BUTTON TOKENS\n// ============================================================================\n\nexport const button = {\n padding: {\n sm: {\n vertical: '0.5em', // 8px\n horizontal: '0.75em', // 12px\n },\n md: {\n vertical: '0.625em', // 10px \n horizontal: '1em', // 16px \n },\n lg: {\n vertical: '0.75em', // 12px\n horizontal: '1.25em', // 20px\n },\n },\n gap: '0.5em', // 8px - gap between icon and text \n lineHeight: {\n sm: '1.333em', \n md: '1.333em', // 16px for 12px font-size (1.333 × 12px = 16px)\n lg: '1.333em', \n },\n letterSpacing: '0.00833em', // 0.1px for 12px font\n} as const;\n\n// ============================================================================\n// SEMANTIC TOKENS (Derived from base tokens)\n// ============================================================================\n\n/**\n * Semantic tokens map base color primitives to meaningful names\n * that change based on theme mode (light/dark)\n */\nexport const semanticTokens = {\n light: {\n border: {\n primary: neutral[400],\n secondary: neutral[300],\n subtle: neutral[300],\n invert: neutral[950],\n onColor: neutral[100],\n blue: blue[500],\n blueSubtle: blue[300],\n blueOnHover: blue[700],\n red: red[600],\n redSubtle: red[300],\n redOnHover: red[700],\n orange: orange[600],\n orangeSubtle: orange[300],\n orangeOnHover: orange[700],\n yellow: yellow[600],\n yellowSubtle: yellow[300],\n yellowOnHover: yellow[700],\n green: green[600],\n greenSubtle: green[300],\n greenOnHover: green[700],\n },\n content: {\n primary: neutral[900],\n secondary: neutral[600],\n subtle: neutral[400],\n onColor: neutral[100],\n alwaysWhite: neutral[100],\n alwaysBlack: neutral[950],\n onColorInverse: neutral[950],\n blue: blue[500],\n blueDisabled: blue[400],\n blueOnHover: blue[600],\n green: green[700],\n greenDisabled: green[400],\n greenOnHover: green[600],\n red: red[600],\n redDisabled: red[400],\n redOnHover: red[700],\n orange: orange[600],\n orangeDisabled: orange[400],\n orangeOnHover: orange[700],\n yellow: yellow[600],\n yellowDisabled: yellow[400],\n yellowOnHover: yellow[700],\n },\n background: {\n primary: neutral[100],\n system: neutral[1000],\n secondary: neutral[200],\n tertiary: neutral[300],\n invert: neutral[950],\n invertLight: neutral[900],\n green: green[100],\n greenOnHover: green[200],\n red: red[100],\n redOnHover: red[200],\n orange: orange[100],\n orangeOnHover: orange[200],\n yellow: orange[100],\n yellowOnHover: orange[200],\n low: neutral[200],\n lowOnHover: neutral[300],\n info: blue[100],\n infoOnHover: blue[300],\n base: neutral[100],\n },\n },\n dark: {\n border: {\n primary: neutral[700],\n secondary: neutral[800],\n subtle: neutral[800],\n invert: neutral[100],\n onColor: neutral[950],\n blue: blue[400],\n blueSubtle: blue[800],\n blueOnHover: blue[500],\n red: red[400],\n redSubtle: red[900],\n redOnHover: red[500],\n orange: orange[400],\n orangeSubtle: orange[900],\n orangeOnHover: orange[500],\n yellow: yellow[400],\n yellowSubtle: yellow[900],\n yellowOnHover: yellow[500],\n green: green[600],\n greenSubtle: green[900],\n greenOnHover: green[700],\n },\n content: {\n primary: neutral[300],\n secondary: neutral[500],\n subtle: neutral[700],\n onColor: neutral[950],\n alwaysWhite: neutral[100],\n alwaysBlack: neutral[950],\n onColorInverse: neutral[100],\n blue: blue[400],\n blueDisabled: blue[800],\n blueOnHover: blue[500],\n green: green[600],\n greenDisabled: green[800],\n greenOnHover: green[500],\n red: red[400],\n redDisabled: red[800],\n redOnHover: red[300],\n orange: orange[400],\n orangeDisabled: orange[800],\n orangeOnHover: orange[300],\n yellow: yellow[400],\n yellowDisabled: yellow[800],\n yellowOnHover: yellow[300],\n },\n background: {\n primary: neutral[950],\n system: neutral[950],\n secondary: neutral[900],\n tertiary: neutral[800],\n invert: neutral[100],\n invertLight: neutral[300],\n green: green[950],\n greenOnHover: green[900],\n red: red[950],\n redOnHover: red[900],\n orange: orange[950],\n orangeOnHover: orange[900],\n yellow: yellow[950],\n yellowOnHover: yellow[900],\n low: neutral[900],\n lowOnHover: neutral[800],\n info: blue[950],\n infoOnHover: blue[900],\n base: neutral[950],\n },\n },\n} as const;\n\n// ============================================================================\n// TYPE DEFINITIONS\n// ============================================================================\n\nexport const COLOR_SCALES = [100, 200, 300, 400, 500, 600, 700, 800, 900, 950, 1000] as const;\nexport const VARIANTS = ['primary', 'secondary', 'ghost', 'destructive'] as const;\nexport const INTENTS = ['primary', 'success', 'warning', 'danger', 'neutral'] as const;\nexport const SIZES = ['sm', 'md', 'lg'] as const;\nexport const BUTTON_TYPES = ['button', 'submit', 'reset'] as const;\nexport const INPUT_TYPES = ['text', 'email', 'password', 'number', 'tel', 'url', 'search'] as const;\nexport const ORIENTATIONS = ['horizontal', 'vertical'] as const;\nexport const SURFACE_LEVELS = ['base', 'elevated', 'overlay'] as const;\n\nexport type ColorName = keyof typeof colorPrimitives;\nexport type ColorScale = typeof COLOR_SCALES[number];\nexport type Variant = typeof VARIANTS[number];\nexport type Intent = typeof INTENTS[number];\nexport type Size = typeof SIZES[number];\nexport type ButtonType = typeof BUTTON_TYPES[number];\nexport type InputType = typeof INPUT_TYPES[number];\nexport type Orientation = typeof ORIENTATIONS[number];\nexport type SurfaceLevel = typeof SURFACE_LEVELS[number];\n\nexport type ColorPrimitives = typeof colorPrimitives;\nexport type Typography = typeof typography;\nexport type Spacing = typeof spacing;\nexport type Radius = typeof radius;\nexport type Shadows = typeof shadows;\nexport type ZIndex = typeof zIndex;\n\n// ============================================================================\n// LEGACY COMPATIBILITY (for backward compatibility)\n// ============================================================================\n\n/**\n * Legacy colors object for backward compatibility\n * Maps old color names to new scale-based colors\n */\nexport const colors = {\n // Neutral palette\n white: neutral[100],\n black: neutral[950],\n gray50: neutral[200],\n gray100: neutral[300],\n gray200: neutral[400],\n gray300: neutral[500],\n gray400: neutral[500],\n gray500: neutral[500],\n gray600: neutral[600],\n gray700: neutral[700],\n gray800: neutral[800],\n gray900: neutral[900],\n \n // Primary palette (mapped from blue)\n blue50: blue[100],\n blue100: blue[100],\n blue200: blue[200],\n blue300: blue[300],\n blue400: blue[400],\n blue500: blue[500],\n blue600: blue[600],\n blue700: blue[700],\n blue800: blue[800],\n blue900: blue[900],\n \n // Success palette (mapped from green)\n green50: green[100],\n green100: green[100],\n green200: green[200],\n green300: green[300],\n green400: green[400],\n green500: green[500],\n green600: green[600],\n green700: green[700],\n green800: green[800],\n green900: green[900],\n \n // Warning palette (mapped from yellow)\n yellow50: yellow[100],\n yellow100: yellow[100],\n yellow200: yellow[200],\n yellow300: yellow[300],\n yellow400: yellow[400],\n yellow500: yellow[500],\n yellow600: yellow[600],\n yellow700: yellow[700],\n yellow800: yellow[800],\n yellow900: yellow[900],\n \n // Danger palette (mapped from red)\n red50: red[100],\n red100: red[100],\n red200: red[200],\n red300: red[300],\n red400: red[400],\n red500: red[500],\n red600: red[600],\n red700: red[700],\n red800: red[800],\n red900: red[900],\n} as const;\n\nexport type Colors = typeof colors;\n","/**\n * Theme Creation\n * \n * Creates theme objects from unified tokens.\n * This is a thin layer that converts tokens to CSS variables for runtime theming.\n */\n\nimport { \n radius, \n semanticTokens,\n neutral,\n} from '../tokens/tokens';\nimport type { Theme, ThemeMode, ThemeName } from './types';\n\n/**\n * Resolves 'system' mode to either 'light' or 'dark' based on OS preference\n * Falls back to 'light' if matchMedia is not available (SSR)\n */\nexport function resolveThemeMode(mode: ThemeMode): 'light' | 'dark' {\n if (mode !== 'system') {\n return mode;\n }\n \n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.matchMedia) {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n \n // Default to light for SSR or when matchMedia is not available\n return 'light';\n}\n\nexport function createTheme(name: ThemeName, mode: ThemeMode): Theme {\n const resolvedMode = resolveThemeMode(mode);\n const semantic = semanticTokens[resolvedMode];\n\n // Only create shadcn/ui compatibility variables here\n // All semantic tokens (--pd-background-*, --pd-content-*, --pd-border-*)\n // are already defined in tokens.css, so we don't duplicate them\n const cssVariables: Record<string, string> = {\n // Base colors\n '--color-white': neutral[100],\n '--color-black': neutral[950],\n \n // shadcn/ui CSS variable mappings for compatibility\n '--background': semantic.background.primary,\n '--foreground': semantic.content.primary,\n '--card': semantic.background.secondary,\n '--card-foreground': semantic.content.primary,\n '--popover': semantic.background.secondary,\n '--popover-foreground': semantic.content.primary,\n '--primary': semantic.content.secondary,\n '--primary-foreground': neutral[100],\n '--secondary': semantic.background.secondary,\n '--secondary-foreground': semantic.content.primary,\n '--muted': semantic.background.secondary,\n '--muted-foreground': semantic.content.subtle,\n '--accent': semantic.background.secondary,\n '--accent-foreground': semantic.content.primary,\n '--destructive': resolvedMode === 'light' ? semantic.content.red : semantic.content.red,\n '--destructive-foreground': neutral[100],\n '--border': semantic.border.primary,\n '--input': semantic.border.primary,\n '--ring': semantic.content.secondary,\n '--radius': radius.md,\n };\n \n return {\n name,\n mode: resolvedMode, // Store the resolved mode (light/dark) not 'system'\n cssVariables,\n };\n}\n","import React, { useEffect, useState } from 'react';\nimport { clsx } from 'clsx';\nimport type { ThemeName, ThemeMode } from '../theme/types';\nimport { DEFAULT_THEME, DEFAULT_MODE } from '../theme/types';\nimport { resolveThemeMode } from '../theme/theme';\n\nexport type PdThemeProviderProps = {\n children: React.ReactNode;\n theme?: ThemeName;\n mode?: ThemeMode;\n className?: string;\n};\n\n/**\n * PdThemeProvider - Root provider for PD Design System\n * \n * This component creates a scoped boundary for all design system styles.\n * All tokens are scoped under .pd-root to prevent style leakage.\n * \n * @param theme - Theme name ('base' | 'brand'). Defaults to 'base'.\n * @param mode - Color mode ('light' | 'dark' | 'system'). Defaults to 'system'.\n * \n * @example\n * ```tsx\n * <PdThemeProvider theme=\"base\" mode=\"dark\">\n * <Button>Click me</Button>\n * </PdThemeProvider>\n * ```\n * \n * @example\n * ```tsx\n * <PdThemeProvider theme=\"brand\" mode=\"light\">\n * <Button>Click me</Button>\n * </PdThemeProvider>\n * ```\n */\nexport function PdThemeProvider({ \n children, \n theme: themeName = DEFAULT_THEME, \n mode = DEFAULT_MODE,\n className \n}: PdThemeProviderProps) {\n // Track the resolved mode for system theme\n const [resolvedMode, setResolvedMode] = useState<'light' | 'dark'>(() => \n resolveThemeMode(mode)\n );\n \n // Listen to system preference changes when mode is 'system'\n useEffect(() => {\n if (mode !== 'system' || typeof window === 'undefined' || !window.matchMedia) {\n return;\n }\n \n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n setResolvedMode(e.matches ? 'dark' : 'light');\n };\n \n // Set initial value\n handleChange(mediaQuery);\n \n // Listen for changes\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n } else {\n // Fallback for older browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }\n }, [mode]);\n \n // Update resolved mode when mode prop changes\n useEffect(() => {\n if (mode !== 'system') {\n setResolvedMode(mode === 'dark' ? 'dark' : 'light');\n }\n }, [mode]);\n \n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n const isDark = effectiveMode === 'dark';\n \n \n return (\n <div \n className={clsx(\n 'pd-root', \n isDark && 'pd-dark',\n `pd-theme-${themeName}`,\n className\n )}\n >\n {children}\n </div>\n );\n}\n\nPdThemeProvider.displayName = 'PdThemeProvider';\n","import React, { Component, type ReactNode } from 'react';\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode | ((error: Error, errorInfo: React.ErrorInfo) => ReactNode);\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorInfo: React.ErrorInfo | null;\n}\n\n/**\n * ErrorBoundary component to catch adapter failures and other React errors\n * \n * @example\n * ```tsx\n * <ErrorBoundary fallback={<div>Something went wrong</div>}>\n * <Button>Click me</Button>\n * </ErrorBoundary>\n * ```\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n errorInfo: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n this.setState({\n error,\n errorInfo,\n });\n\n // Call optional error handler\n if (this.props.onError) {\n this.props.onError(error, errorInfo);\n }\n\n // Log error in development\n if (process.env.NODE_ENV !== 'production') {\n console.error('ErrorBoundary caught an error:', error, errorInfo);\n }\n }\n\n render(): ReactNode {\n if (this.state.hasError) {\n const { fallback } = this.props;\n const { error, errorInfo } = this.state;\n\n if (typeof fallback === 'function' && error && errorInfo) {\n return fallback(error, errorInfo) as ReactNode;\n }\n\n if (fallback && typeof fallback !== 'function') {\n return fallback;\n }\n\n // Default fallback UI\n return (\n <div className=\"pd-root pd-p-4 pd-border pd-border-[var(--pd-border-red)] pd-rounded-md pd-bg-[var(--pd-background-red)]\">\n <h3 className=\"pd-m-0 pd-mb-2 pd-text-[var(--pd-content-red)]\">Something went wrong</h3>\n {process.env.NODE_ENV !== 'production' && error && (\n <details className=\"pd-mt-2\">\n <summary className=\"pd-cursor-pointer pd-text-[var(--pd-content-red-on-hover)]\">Error details</summary>\n <pre className=\"pd-mt-2 pd-p-2 pd-bg-[var(--pd-background-red-on-hover)] pd-rounded pd-overflow-auto pd-text-sm\">\n {error.toString()}\n {errorInfo?.componentStack}\n </pre>\n </details>\n )}\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n\n// Set displayName for better debugging\n(ErrorBoundary as typeof ErrorBoundary & { displayName?: string }).displayName = 'ErrorBoundary';\n","import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { createTheme, resolveThemeMode } from './theme';\nimport { setDesignSystemConfig, getDesignSystemConfig } from './config';\nimport type { DesignSystemConfig, ThemeMode, ThemeName } from './types';\nimport { DEFAULT_ADAPTER, DEFAULT_THEME, DEFAULT_MODE } from './types';\n\ninterface ThemeContextValue {\n config: DesignSystemConfig;\n setConfig: (config: Partial<DesignSystemConfig>) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n adapter?: DesignSystemConfig['adapter'];\n theme?: ThemeName;\n mode?: ThemeMode;\n /**\n * Optional localStorage key for persisting theme preference.\n * If provided, ThemeProvider will automatically sync mode with localStorage.\n * If not provided, no localStorage sync will occur.\n */\n storageKey?: string;\n}\n\nconst parsePreference = (value: string | null): ThemeMode => {\n if (value === 'light' || value === 'dark' || value === 'system') {\n return value;\n }\n return 'system';\n};\n\nexport function ThemeProvider({\n children,\n adapter = DEFAULT_ADAPTER,\n theme: themeName = DEFAULT_THEME,\n mode: initialMode = DEFAULT_MODE,\n storageKey,\n}: ThemeProviderProps) {\n // If storageKey is provided, read initial mode from localStorage\n const getInitialMode = (): ThemeMode => {\n if (storageKey && typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n return parsePreference(stored);\n }\n }\n return initialMode;\n };\n\n const [mode, setMode] = useState<ThemeMode>(getInitialMode);\n \n // Track the resolved mode for system theme\n const [resolvedMode, setResolvedMode] = useState<'light' | 'dark'>(() => \n resolveThemeMode(mode)\n );\n \n // Listen to system preference changes when mode is 'system'\n useEffect(() => {\n if (mode !== 'system' || typeof window === 'undefined' || !window.matchMedia) {\n return;\n }\n \n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n setResolvedMode(e.matches ? 'dark' : 'light');\n };\n \n // Set initial value\n handleChange(mediaQuery);\n \n // Listen for changes\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n } else {\n // Fallback for older browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }\n }, [mode]);\n \n // Update resolved mode when mode prop changes\n useEffect(() => {\n if (mode !== 'system') {\n setResolvedMode(mode === 'dark' ? 'dark' : 'light');\n }\n }, [mode]);\n \n const theme = useMemo(() => {\n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n return createTheme(themeName, effectiveMode);\n }, [themeName, mode, resolvedMode]);\n \n // Handle localStorage sync if storageKey is provided\n useEffect(() => {\n if (storageKey && typeof window !== 'undefined') {\n localStorage.setItem(storageKey, mode);\n // Dispatch event for same-tab sync\n window.dispatchEvent(new Event('theme-preference-changed'));\n }\n }, [mode, storageKey]);\n\n // Listen to localStorage changes (cross-tab sync)\n useEffect(() => {\n if (!storageKey || typeof window === 'undefined') {\n return;\n }\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === storageKey && event.newValue) {\n const newMode = parsePreference(event.newValue);\n setMode(newMode);\n }\n };\n\n window.addEventListener('storage', handleStorage);\n return () => window.removeEventListener('storage', handleStorage);\n }, [storageKey]);\n\n // Listen to custom events (same-tab sync when setConfig is called)\n useEffect(() => {\n if (!storageKey || typeof window === 'undefined') {\n return;\n }\n\n const handlePreferenceChange = () => {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n const newMode = parsePreference(stored);\n setMode(newMode);\n }\n };\n\n window.addEventListener('theme-preference-changed', handlePreferenceChange);\n return () => window.removeEventListener('theme-preference-changed', handlePreferenceChange);\n }, [storageKey]);\n\n useEffect(() => {\n setDesignSystemConfig({ adapter, theme: themeName, mode });\n }, [adapter, themeName, mode]);\n \n // SSR-safe DOM manipulation - only runs on client\n useEffect(() => {\n // Guard: Only run in browser environment\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n \n const root = document.documentElement;\n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n \n // Use requestAnimationFrame to ensure DOM is ready and avoid hydration mismatch\n const rafId = requestAnimationFrame(() => {\n if (effectiveMode === 'dark') {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n \n Object.entries(theme.cssVariables).forEach(([key, value]) => {\n // Only set shadcn variables (--background, --foreground, etc.)\n // Skip semantic tokens that are already in tokens.css\n if (!key.startsWith('--background-') && \n !key.startsWith('--content-') && \n !key.startsWith('--border-') &&\n !key.startsWith('--intent-') &&\n !key.startsWith('--surface-') &&\n !key.startsWith('--text-') &&\n !key.startsWith('--spacing-') &&\n !key.startsWith('--radius-') &&\n !key.startsWith('--shadow-') &&\n !key.startsWith('--z-') &&\n !key.startsWith('--font-') &&\n !key.startsWith('--line-height-')) {\n root.style.setProperty(key, value);\n }\n });\n });\n \n return () => {\n cancelAnimationFrame(rafId);\n if (typeof document !== 'undefined') {\n // Only clean up shadcn variables\n Object.keys(theme.cssVariables).forEach((key) => {\n if (!key.startsWith('--background-') && \n !key.startsWith('--content-') && \n !key.startsWith('--border-') &&\n !key.startsWith('--intent-') &&\n !key.startsWith('--surface-') &&\n !key.startsWith('--text-') &&\n !key.startsWith('--spacing-') &&\n !key.startsWith('--radius-') &&\n !key.startsWith('--shadow-') &&\n !key.startsWith('--z-') &&\n !key.startsWith('--font-') &&\n !key.startsWith('--line-height-')) {\n document.documentElement.style.removeProperty(key);\n }\n });\n }\n };\n }, [theme, mode, resolvedMode]);\n\n // Handle pd-root and pd-dark classes on body\n useEffect(() => {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const body = document.body;\n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n const isDark = effectiveMode === 'dark';\n\n // Always add pd-root class\n body.classList.add('pd-root');\n\n // Handle pd-dark class based on mode\n if (isDark) {\n body.classList.add('pd-dark');\n } else {\n body.classList.remove('pd-dark');\n }\n\n // Handle system preference changes for pd-dark class when mode is 'system'\n if (mode === 'system') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleSystemChange = (e: MediaQueryListEvent | MediaQueryList) => {\n const systemIsDark = e.matches;\n if (systemIsDark) {\n body.classList.add('pd-dark');\n } else {\n body.classList.remove('pd-dark');\n }\n };\n\n handleSystemChange(mediaQuery);\n\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleSystemChange);\n return () => {\n mediaQuery.removeEventListener('change', handleSystemChange);\n body.classList.remove('pd-root', 'pd-dark');\n };\n } else {\n mediaQuery.addListener(handleSystemChange);\n return () => {\n mediaQuery.removeListener(handleSystemChange);\n body.classList.remove('pd-root', 'pd-dark');\n };\n }\n }\n\n return () => {\n body.classList.remove('pd-root', 'pd-dark');\n };\n }, [mode, resolvedMode]);\n\n // Make context reactive by using state instead of memoized value\n const [configState, setConfigState] = useState<DesignSystemConfig>(() => getDesignSystemConfig());\n\n // Update context when config changes\n useEffect(() => {\n const currentConfig = getDesignSystemConfig();\n setConfigState(currentConfig);\n }, [adapter, themeName, mode]);\n\n // Enhanced setConfig that also updates localStorage if storageKey is provided\n const enhancedSetConfig = React.useCallback((newConfig: Partial<DesignSystemConfig>) => {\n setDesignSystemConfig(newConfig);\n const updatedConfig = getDesignSystemConfig();\n setConfigState(updatedConfig);\n\n // If mode changed, update the mode state directly\n if (newConfig.mode && newConfig.mode !== mode) {\n setMode(newConfig.mode);\n }\n\n // If mode changed and storageKey is provided, update localStorage\n if (newConfig.mode && storageKey && typeof window !== 'undefined') {\n localStorage.setItem(storageKey, newConfig.mode);\n window.dispatchEvent(new Event('theme-preference-changed'));\n }\n }, [storageKey, mode]);\n\n const contextValue = useMemo<ThemeContextValue>(() => ({\n config: configState,\n setConfig: enhancedSetConfig,\n }), [configState, enhancedSetConfig]);\n \n return (\n <ThemeContext.Provider value={contextValue}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider');\n }\n return context;\n}\n","/**\n * @deprecated This file is kept for backward compatibility.\n * Import from '../tokens/tokens' or '../tokens' instead.\n * \n * This file re-exports from the unified tokens.ts file and provides\n * legacy compatibility functions.\n */\n\nimport { semanticTokens } from './tokens';\nimport type { ThemeMode } from '../theme/types';\n\n// Re-export semantic tokens\nexport const borderTokens = {\n light: semanticTokens.light.border,\n dark: semanticTokens.dark.border,\n} as const;\n\nexport const contentTokens = {\n light: semanticTokens.light.content,\n dark: semanticTokens.dark.content,\n} as const;\n\nexport const backgroundTokens = {\n light: semanticTokens.light.background,\n dark: semanticTokens.dark.background,\n} as const;\n\nexport { semanticTokens };\n\n// Re-export types\nexport {\n VARIANTS,\n INTENTS,\n SIZES,\n BUTTON_TYPES,\n INPUT_TYPES,\n ORIENTATIONS,\n SURFACE_LEVELS,\n type Variant,\n type Intent,\n type Size,\n type ButtonType,\n type InputType,\n type Orientation,\n type SurfaceLevel,\n} from './tokens';\n\n// Legacy types\nexport type BorderToken = keyof typeof borderTokens.light;\nexport type ContentToken = keyof typeof contentTokens.light;\nexport type BackgroundToken = keyof typeof backgroundTokens.light;\nexport type SemanticToken = BorderToken | ContentToken | BackgroundToken;\n\n// Legacy interface for backward compatibility\nexport interface SemanticTokens {\n intent: {\n [K in typeof INTENTS[number]]: {\n color: string;\n colorHover: string;\n colorActive: string;\n background: string;\n backgroundHover: string;\n backgroundActive: string;\n border: string;\n text: string;\n textMuted: string;\n };\n };\n surface: {\n [K in typeof SURFACE_LEVELS[number]]: {\n background: string;\n border: string;\n };\n };\n text: {\n heading: string;\n body: string;\n muted: string;\n disabled: string;\n };\n}\n\n// Import INTENTS and SURFACE_LEVELS for the function\nimport { INTENTS, SURFACE_LEVELS, neutral, green, yellow, red } from './tokens';\n\n/**\n * Legacy function for backward compatibility\n * Maps new semantic tokens to old structure\n */\nexport function createSemanticTokens(mode: ThemeMode): SemanticTokens {\n const isLight = mode === 'light';\n const border = isLight ? borderTokens.light : borderTokens.dark;\n const content = isLight ? contentTokens.light : contentTokens.dark;\n const background = isLight ? backgroundTokens.light : backgroundTokens.dark;\n \n return {\n intent: {\n primary: {\n color: content.secondary,\n colorHover: isLight ? neutral[700] : neutral[300],\n colorActive: isLight ? neutral[800] : neutral[200],\n background: background.secondary,\n backgroundHover: background.lowOnHover,\n backgroundActive: background.tertiary,\n border: border.primary,\n text: content.primary,\n textMuted: content.subtle,\n },\n success: {\n color: isLight ? green[600] : green[600],\n colorHover: isLight ? green[700] : green[500],\n colorActive: isLight ? green[800] : green[700],\n background: background.green,\n backgroundHover: background.greenOnHover,\n backgroundActive: isLight ? green[300] : green[800],\n border: border.green,\n text: content.green,\n textMuted: isLight ? green[700] : green[300],\n },\n warning: {\n color: isLight ? yellow[600] : yellow[400],\n colorHover: isLight ? yellow[700] : yellow[300],\n colorActive: isLight ? yellow[800] : yellow[500],\n background: background.yellow,\n backgroundHover: background.yellowOnHover,\n backgroundActive: isLight ? yellow[200] : yellow[900],\n border: border.yellow,\n text: content.yellow,\n textMuted: isLight ? yellow[700] : yellow[300],\n },\n danger: {\n color: isLight ? red[600] : red[400],\n colorHover: isLight ? red[700] : red[300],\n colorActive: isLight ? red[800] : red[500],\n background: background.red,\n backgroundHover: background.redOnHover,\n backgroundActive: isLight ? red[200] : red[900],\n border: border.red,\n text: content.red,\n textMuted: isLight ? red[700] : red[300],\n },\n neutral: {\n color: content.secondary,\n colorHover: isLight ? neutral[700] : neutral[300],\n colorActive: isLight ? neutral[800] : neutral[200],\n background: background.secondary,\n backgroundHover: background.lowOnHover,\n backgroundActive: background.tertiary,\n border: border.primary,\n text: content.primary,\n textMuted: content.subtle,\n },\n },\n surface: {\n base: {\n background: background.primary,\n border: border.primary,\n },\n elevated: {\n background: background.secondary,\n border: border.secondary,\n },\n overlay: {\n background: isLight ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.7)',\n border: 'transparent',\n },\n },\n text: {\n heading: content.primary,\n body: content.primary,\n muted: content.subtle,\n disabled: isLight ? content.subtle : neutral[600],\n },\n };\n}\n","/**\n * Design Tokens - Main Export\n * \n * This is the main entry point for all design tokens.\n * All tokens come from the unified tokens.ts file (single source of truth).\n */\n\n// Import the values we need for the tokens object\nimport {\n colorPrimitives,\n neutral,\n blue,\n orange,\n red,\n green,\n yellow,\n colors,\n semanticTokens,\n spacing,\n typography,\n radius,\n shadows,\n zIndex,\n} from './tokens';\n\nexport * from './tokens';\n\n// Re-export legacy semantic tokens for backward compatibility\nexport {\n borderTokens,\n contentTokens,\n backgroundTokens,\n createSemanticTokens,\n type BorderToken,\n type ContentToken,\n type BackgroundToken,\n type SemanticToken,\n type SemanticTokens,\n} from './semantic';\n\n/**\n * Grouped design tokens for convenient access\n * \n * Provides a structured object containing all design tokens organized by category.\n * \n * @example\n * ```ts\n * import { tokens } from '@pd-design/system';\n * \n * // Access color primitives\n * const primaryColor = tokens.colors.blue[500];\n * const grayColor = tokens.colors.neutral[600];\n * \n * // Access semantic tokens\n * const borderColor = tokens.semantic.light.border.primary;\n * \n * // Access spacing\n * const padding = tokens.spacing[4];\n * \n * // Access typography\n * const fontSize = tokens.typography.fontSize.base;\n * ```\n */\nexport const tokens = {\n colors: {\n // Individual color scales\n neutral,\n blue,\n orange,\n red,\n green,\n yellow,\n // All colors grouped together\n all: colorPrimitives,\n // Legacy color names (for backward compatibility)\n legacy: colors,\n },\n semantic: semanticTokens,\n spacing,\n typography,\n radius,\n shadows,\n zIndex,\n} as const;\n\n// Type export for better developer experience\nexport type Tokens = typeof tokens;\n","/**\n * Accessibility Utilities\n * \n * Provides utilities and types for ensuring excellent accessibility scores\n * across all components. Supports both user-provided and default accessibility props.\n */\n\nimport React from 'react';\n\n/**\n * Accessibility props that can be passed by users or use defaults\n */\nexport interface AccessibilityProps {\n /**\n * Accessible label for the element.\n * If not provided, will attempt to generate from children or other props.\n */\n 'aria-label'?: string;\n \n /**\n * Reference to element(s) that describe this element.\n */\n 'aria-describedby'?: string;\n \n /**\n * Reference to element(s) that label this element.\n */\n 'aria-labelledby'?: string;\n \n /**\n * Indicates the current state of the element.\n */\n 'aria-current'?: 'page' | 'step' | 'location' | 'date' | 'time' | boolean;\n \n /**\n * Indicates whether the element is expanded or collapsed.\n */\n 'aria-expanded'?: boolean;\n \n /**\n * Indicates whether the element is selected.\n */\n 'aria-selected'?: boolean;\n \n /**\n * Indicates whether the element is checked.\n */\n 'aria-checked'?: boolean | 'mixed';\n \n /**\n * Indicates whether the element is disabled.\n */\n 'aria-disabled'?: boolean;\n \n /**\n * Indicates whether the element is required.\n */\n 'aria-required'?: boolean;\n \n /**\n * Indicates whether the element has invalid input.\n */\n 'aria-invalid'?: boolean | 'grammar' | 'spelling';\n \n /**\n * Describes the error message for invalid input.\n */\n 'aria-errormessage'?: string;\n \n /**\n * Indicates the element's role.\n */\n role?: string;\n \n /**\n * Tab index for keyboard navigation.\n * -1: Not focusable, 0: Focusable in tab order, >0: Custom tab order (not recommended)\n */\n tabIndex?: number;\n \n /**\n * Indicates whether the element should be hidden from assistive technologies.\n */\n 'aria-hidden'?: boolean;\n \n /**\n * Indicates whether the element is live and should be announced.\n */\n 'aria-live'?: 'off' | 'polite' | 'assertive';\n \n /**\n * Indicates whether the element is atomic for live regions.\n */\n 'aria-atomic'?: boolean;\n \n /**\n * Indicates the level of heading (for headings).\n */\n 'aria-level'?: number;\n \n /**\n * Indicates the position in a set (for list items, etc.).\n */\n 'aria-posinset'?: number;\n \n /**\n * Indicates the size of a set (for list items, etc.).\n */\n 'aria-setsize'?: number;\n \n /**\n * Indicates whether the element has a popup.\n */\n 'aria-haspopup'?: boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\n \n /**\n * Indicates the orientation of the element.\n */\n 'aria-orientation'?: 'horizontal' | 'vertical';\n \n /**\n * Indicates the value of the element.\n */\n 'aria-valuenow'?: number;\n \n /**\n * Indicates the minimum value.\n */\n 'aria-valuemin'?: number;\n \n /**\n * Indicates the maximum value.\n */\n 'aria-valuemax'?: number;\n \n /**\n * Human-readable text alternative of aria-valuenow.\n */\n 'aria-valuetext'?: string;\n \n /**\n * Indicates whether the element is busy.\n */\n 'aria-busy'?: boolean;\n \n /**\n * Indicates the element's controls.\n */\n 'aria-controls'?: string;\n \n /**\n * Indicates the element's owns.\n */\n 'aria-owns'?: string;\n}\n\n/**\n * Options for generating default accessibility props\n */\nexport interface AccessibilityDefaultsOptions {\n /**\n * Component type/name for generating appropriate defaults\n */\n componentType?: string;\n \n /**\n * Children content to extract text from\n */\n children?: React.ReactNode;\n \n /**\n * Whether the element is disabled\n */\n disabled?: boolean;\n \n /**\n * Whether the element is loading\n */\n loading?: boolean;\n \n /**\n * Whether the element is required\n */\n required?: boolean;\n \n /**\n * Whether the element has an error\n */\n error?: boolean;\n \n /**\n * Error message for the element\n */\n errorMessage?: string;\n \n /**\n * Description or help text for the element\n */\n description?: string;\n \n /**\n * Label text for the element\n */\n label?: string;\n \n /**\n * ID for the element (used for generating related IDs)\n */\n id?: string;\n \n /**\n * Start icon name (for icon-only detection)\n */\n startIcon?: string;\n \n /**\n * End icon name (for icon-only detection)\n */\n endIcon?: string;\n}\n\n/**\n * Extracts text content from React children\n */\nexport function extractTextFromChildren(children: React.ReactNode): string {\n if (typeof children === 'string') {\n return children.trim();\n }\n \n if (typeof children === 'number') {\n return String(children);\n }\n \n if (Array.isArray(children)) {\n return children.map(extractTextFromChildren).join(' ').trim();\n }\n \n if (React.isValidElement(children) && children.props) {\n if (children.props.children) {\n return extractTextFromChildren(children.props.children);\n }\n }\n \n return '';\n}\n\n/**\n * Generates default accessibility props based on component state and options\n * \n * @param options - Options for generating defaults\n * @param userProps - User-provided accessibility props (will override defaults)\n * @returns Merged accessibility props with user props taking precedence\n */\nexport function generateAccessibilityDefaults(\n options: AccessibilityDefaultsOptions,\n userProps: Partial<AccessibilityProps> = {}\n): AccessibilityProps {\n const {\n componentType,\n children,\n disabled,\n loading,\n required,\n error,\n errorMessage,\n description,\n label,\n id,\n } = options;\n\n const defaults: AccessibilityProps = {};\n\n // Generate aria-label from children if not provided\n if (!userProps['aria-label'] && !userProps['aria-labelledby']) {\n const textContent = extractTextFromChildren(children);\n if (textContent) {\n defaults['aria-label'] = textContent;\n } else if (label) {\n defaults['aria-label'] = label;\n }\n }\n\n // Handle disabled state\n if (disabled !== undefined) {\n defaults['aria-disabled'] = disabled;\n }\n\n // Handle loading state\n if (loading) {\n defaults['aria-busy'] = true;\n if (!userProps['aria-label']) {\n const baseLabel = defaults['aria-label'] || extractTextFromChildren(children) || 'Loading';\n defaults['aria-label'] = `${baseLabel}, loading`;\n }\n }\n\n // Handle required state\n if (required !== undefined) {\n defaults['aria-required'] = required;\n }\n\n // Handle error state\n if (error !== undefined) {\n defaults['aria-invalid'] = error;\n \n if (error && errorMessage && id) {\n const errorId = `${id}-error`;\n defaults['aria-errormessage'] = errorId;\n defaults['aria-describedby'] = userProps['aria-describedby']\n ? `${userProps['aria-describedby']} ${errorId}`\n : errorId;\n }\n }\n\n // Handle description\n if (description && id && !userProps['aria-describedby']) {\n const descId = `${id}-description`;\n defaults['aria-describedby'] = userProps['aria-describedby']\n ? `${userProps['aria-describedby']} ${descId}`\n : descId;\n }\n\n // Component-specific defaults\n if (componentType === 'button') {\n if (!userProps.role && !userProps['aria-label']) {\n // Buttons don't need explicit role unless they're not actually buttons\n defaults.role = 'button';\n }\n }\n\n if (componentType === 'link') {\n defaults.role = 'link';\n }\n\n // Merge user props (user props take precedence)\n return {\n ...defaults,\n ...userProps,\n };\n}\n\n/**\n * Merges accessibility props with user-provided props\n * User props always take precedence over defaults\n */\nexport function mergeAccessibilityProps(\n defaults: AccessibilityProps,\n userProps: Partial<AccessibilityProps>\n): AccessibilityProps {\n return {\n ...defaults,\n ...userProps,\n };\n}\n\n/**\n * Validates accessibility props and returns warnings in development\n */\nexport function validateAccessibilityProps(\n props: AccessibilityProps,\n componentType: string,\n options: { children?: React.ReactNode; iconOnly?: boolean } = {}\n): void {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const warnings: string[] = [];\n\n // Check for icon-only buttons without aria-label\n if (componentType === 'button' && options.iconOnly && !props['aria-label'] && !props['aria-labelledby']) {\n warnings.push(\n `[pd-design] Icon-only button should have an aria-label or aria-labelledby for accessibility.`\n );\n }\n\n // Check for interactive elements without accessible name\n if (\n (componentType === 'button' || componentType === 'link') &&\n !props['aria-label'] &&\n !props['aria-labelledby'] &&\n !extractTextFromChildren(options.children)\n ) {\n warnings.push(\n `[pd-design] ${componentType} should have an accessible name (aria-label, aria-labelledby, or text content).`\n );\n }\n\n // Check for form inputs without labels\n if (\n (componentType === 'input' || componentType === 'select' || componentType === 'textarea') &&\n !props['aria-label'] &&\n !props['aria-labelledby']\n ) {\n warnings.push(\n `[pd-design] ${componentType} should have an accessible label (aria-label or aria-labelledby).`\n );\n }\n\n // Warn about invalid tabIndex values\n if (props.tabIndex !== undefined && props.tabIndex > 0) {\n warnings.push(\n `[pd-design] tabIndex > 0 is not recommended. Use tabIndex={0} for focusable elements or tabIndex={-1} for programmatic focus only.`\n );\n }\n\n // Output warnings\n warnings.forEach(warning => console.warn(warning));\n}\n\n/**\n * Generates unique IDs for accessibility relationships\n */\nlet idCounter = 0;\nexport function generateId(prefix: string = 'pd'): string {\n return `${prefix}-${++idCounter}-${Date.now()}`;\n}\n\n/**\n * Keyboard event handlers for common patterns\n */\nexport interface KeyboardHandlers {\n onEnter?: (event: React.KeyboardEvent) => void;\n onEscape?: (event: React.KeyboardEvent) => void;\n onArrowUp?: (event: React.KeyboardEvent) => void;\n onArrowDown?: (event: React.KeyboardEvent) => void;\n onArrowLeft?: (event: React.KeyboardEvent) => void;\n onArrowRight?: (event: React.KeyboardEvent) => void;\n onHome?: (event: React.KeyboardEvent) => void;\n onEnd?: (event: React.KeyboardEvent) => void;\n onSpace?: (event: React.KeyboardEvent) => void;\n}\n\n/**\n * Creates a keyboard event handler that calls appropriate callbacks\n */\nexport function createKeyboardHandler(handlers: KeyboardHandlers) {\n return (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n handlers.onEnter?.(event);\n break;\n case 'Escape':\n handlers.onEscape?.(event);\n break;\n case 'ArrowUp':\n handlers.onArrowUp?.(event);\n break;\n case 'ArrowDown':\n handlers.onArrowDown?.(event);\n break;\n case 'ArrowLeft':\n handlers.onArrowLeft?.(event);\n break;\n case 'ArrowRight':\n handlers.onArrowRight?.(event);\n break;\n case 'Home':\n handlers.onHome?.(event);\n break;\n case 'End':\n handlers.onEnd?.(event);\n break;\n case ' ':\n handlers.onSpace?.(event);\n event.preventDefault(); // Prevent page scroll\n break;\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme/types.ts","../src/theme/config.ts","../src/adapters/shadcn/utils.ts","../src/primitives/ButtonPrimitive.tsx","../src/utils/icons.ts","../src/adapters/shadcn/Button.tsx","../src/adapters/index.ts","../src/components/Button.tsx","../src/tokens/tokens.ts","../src/theme/theme.ts","../src/components/PdThemeProvider.tsx","../src/components/ErrorBoundary.tsx","../src/theme/ThemeProvider.tsx","../src/tokens/semantic.ts","../src/tokens/index.ts","../src/utils/accessibility.ts"],"names":["React","forwardRef","jsx","clsx","jsxs","useState","useEffect","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["// Single source of truth: define arrays first, then derive types from them\nexport const THEME_MODES = ['light', 'dark', 'system'] as const;\nexport const THEME_NAMES = ['base', 'brand'] as const;\nexport const ADAPTER_TYPES = ['shadcn', 'material'] as const;\n\n// Derive types from arrays to ensure they stay in sync\nexport type ThemeMode = typeof THEME_MODES[number];\nexport type ThemeName = typeof THEME_NAMES[number];\nexport type AdapterType = typeof ADAPTER_TYPES[number];\n\n// Default values - single source of truth\nexport const DEFAULT_ADAPTER: AdapterType = 'shadcn';\nexport const DEFAULT_THEME: ThemeName = 'base';\nexport const DEFAULT_MODE: ThemeMode = 'system';\n\nexport interface DesignSystemConfig {\n adapter: AdapterType;\n theme: ThemeName;\n mode: ThemeMode;\n}\n\nexport interface Theme {\n mode: ThemeMode;\n name: ThemeName;\n cssVariables: Record<string, string>;\n}\n","import type { DesignSystemConfig, AdapterType, ThemeName, ThemeMode } from './types';\nimport { DEFAULT_ADAPTER, DEFAULT_THEME, DEFAULT_MODE } from './types';\n\n// Use a function to create a new object each time to avoid mutation issues\n// This ensures thread-safety in concurrent React environments\nlet globalConfig: DesignSystemConfig = {\n adapter: DEFAULT_ADAPTER,\n theme: DEFAULT_THEME,\n mode: DEFAULT_MODE,\n};\n\nexport function setDesignSystemConfig(config: Partial<DesignSystemConfig>): void {\n // Create a new object to avoid direct mutation\n globalConfig = { ...globalConfig, ...config };\n}\n\nexport function getDesignSystemConfig(): DesignSystemConfig {\n // Return a copy to prevent external mutation\n return { ...globalConfig };\n}\n\nexport function getAdapter(): AdapterType {\n return globalConfig.adapter;\n}\n\nexport function getThemeName(): ThemeName {\n return globalConfig.theme;\n}\n\nexport function getThemeMode(): ThemeMode {\n return globalConfig.mode;\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, { forwardRef } from 'react';\nimport type { ButtonType } from '../tokens/semantic';\n\nexport interface ButtonPrimitiveProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n asChild?: boolean;\n type?: ButtonType;\n}\n\nexport const ButtonPrimitive = forwardRef<HTMLButtonElement, ButtonPrimitiveProps>(\n ({ asChild = false, type = 'button', children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...props,\n ref,\n type,\n } as React.HTMLAttributes<HTMLElement>);\n }\n \n return (\n <button\n ref={ref}\n type={type}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nButtonPrimitive.displayName = 'ButtonPrimitive';\n","/**\n * Icon Utility\n * \n * Dynamically loads icons from lucide-react by name.\n * Handles invalid icon names gracefully.\n */\n\nimport * as LucideIcons from 'lucide-react';\nimport React from 'react';\n\n// Icons are React components (functions), we exclude types, utilities, and other non-component exports\ntype LucideExports = typeof LucideIcons;\ntype LucideIconKeys = {\n [K in keyof LucideExports]: LucideExports[K] extends React.ComponentType<React.SVGProps<SVGSVGElement>>\n ? K\n : never;\n}[keyof LucideExports];\n\n// Type for valid lucide-react icon names (only actual icon components)\nexport type LucideIconName = LucideIconKeys;\n\n// Cache for icon components to avoid repeated lookups\nconst iconCache = new Map<string, React.ComponentType<React.SVGProps<SVGSVGElement>>>();\n// Track which icons we've logged (to avoid spam)\nconst loggedIcons = new Set<string>();\n\n/**\n * Get an icon component from lucide-react by name\n * \n * @param iconName - Name of the icon (e.g., 'Download', 'Trash2', 'Plus')\n * @returns Icon component or null if icon doesn't exist\n * \n * @example\n * ```tsx\n * const Icon = getIcon('Download');\n * if (Icon) {\n * return <Icon className=\"h-4 w-4\" />;\n * }\n * ```\n */\nexport function getIcon(iconName: string | undefined | null): React.ComponentType<React.SVGProps<SVGSVGElement>> | null {\n if (!iconName || typeof iconName !== 'string') {\n return null;\n }\n\n // Check cache first\n if (iconCache.has(iconName)) {\n return iconCache.get(iconName) || null;\n }\n\n // Try to get icon from lucide-react\n // Handle different naming conventions:\n // 1. Exact match (e.g., \"Download\")\n // 2. PascalCase (e.g., \"download\" -> \"Download\")\n let IconComponent: React.ComponentType<React.SVGProps<SVGSVGElement>> | null = null;\n\n // Try exact match first\n if (iconName in LucideIcons) {\n IconComponent = (LucideIcons as unknown as Record<string, React.ComponentType<React.SVGProps<SVGSVGElement>>>)[iconName];\n } else {\n // Try PascalCase conversion\n const pascalCaseName = iconName.charAt(0).toUpperCase() + iconName.slice(1);\n if (pascalCaseName in LucideIcons) {\n IconComponent = (LucideIcons as unknown as Record<string, React.ComponentType<React.SVGProps<SVGSVGElement>>>)[pascalCaseName];\n }\n }\n\n // If we found something, verify it's usable as a React component\n // React components can be functions or objects (memo, forwardRef, etc.)\n if (IconComponent) {\n // Verify it's a valid component - check if it's callable or has React component properties\n const isValidComponent = \n typeof IconComponent === 'function' || \n (typeof IconComponent === 'object' && IconComponent !== null);\n \n if (isValidComponent) {\n // Cache and return the icon component\n iconCache.set(iconName, IconComponent as React.ComponentType<React.SVGProps<SVGSVGElement>>);\n \n // Debug logging in development\n if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined') {\n // Only log once per icon to avoid spam\n if (!loggedIcons.has(iconName)) {\n console.debug(`[pd-design] Icon \"${iconName}\" found and cached`);\n loggedIcons.add(iconName);\n }\n }\n \n return IconComponent as React.ComponentType<React.SVGProps<SVGSVGElement>>;\n }\n }\n\n // Icon not found - return null (graceful handling)\n // Only warn in development to avoid console noise\n if (process.env.NODE_ENV !== 'production') {\n const availableIcons = Object.keys(LucideIcons)\n .filter(k => {\n const icon = (LucideIcons as Record<string, unknown>)[k];\n return !k.includes('Icon') && icon && (typeof icon === 'function' || typeof icon === 'object');\n })\n .slice(0, 10);\n console.warn(`[pd-design] Icon \"${iconName}\" not found in lucide-react. Available icons: ${availableIcons.join(', ')}...`);\n }\n return null;\n}\n\n/**\n * Render an icon component with proper sizing\n * \n * @param iconName - Name of the icon\n * @param size - Size class for the icon\n * @param className - Additional classes\n * @returns Rendered icon or null\n */\nexport function renderIcon(\n iconName: string | undefined | null,\n size: string = 'h-4 w-4',\n className?: string\n): React.ReactElement | null {\n const IconComponent = getIcon(iconName);\n \n if (!IconComponent) {\n return null;\n }\n\n return React.createElement(IconComponent as React.ComponentType<React.SVGProps<SVGSVGElement>>, { \n className: `${size} ${className || ''}`.trim() \n }) as React.ReactElement;\n}\n\n/**\n * Check if an icon name exists in lucide-react\n * \n * @param iconName - Name of the icon to check\n * @returns true if icon exists, false otherwise\n */\nexport function iconExists(iconName: string | undefined | null): boolean {\n return getIcon(iconName) !== null;\n}\n\n/**\n * Get list of available icon names (for autocomplete/validation)\n * Note: This returns all exported names from lucide-react\n */\nexport function getAvailableIconNames(): string[] {\n return Object.keys(LucideIcons).filter(\n (name) => {\n const icon = (LucideIcons as Record<string, unknown>)[name];\n return icon && (typeof icon === 'function' || typeof icon === 'object') && !name.includes('Icon');\n }\n );\n}\n","import React, { forwardRef } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Loader2 } from 'lucide-react';\nimport { cn } from './utils';\nimport type { ButtonAdapterProps } from '../types';\nimport type { Size } from '../../tokens/semantic';\nimport { ButtonPrimitive } from '../../primitives/ButtonPrimitive';\nimport { getIcon } from '../../utils/icons';\n\nconst buttonVariants = cva(\n 'pd-inline-flex pd-items-center pd-justify-center pd-font-medium pd-transition-colors pd-focus-visible:outline-none pd-focus-visible:ring-2 pd-focus-visible:ring-[var(--pd-border-blue)] pd-focus-visible:ring-offset-2 pd-disabled:pointer-events-none pd-disabled:cursor-not-allowed pd-disabled:hover:pd-bg-[inherit] pd-disabled:hover:pd-text-[inherit] pd-disabled:hover:pd-border-[inherit] pd-disabled:active:pd-bg-[inherit] pd-disabled:active:pd-text-[inherit] pd-disabled:active:pd-border-[inherit] [font-family:var(--pd-font-sans,Geist,sans-serif)] [gap:var(--pd-button-gap)] [border-radius:var(--pd-radius-button)] pd-shadow-none',\n {\n variants: {\n variant: {\n primary: 'pd-border-0',\n secondary: 'pd-border',\n ghost: 'pd-border-0',\n destructive: 'pd-border-0'\n },\n intent: {\n primary: '',\n success: '',\n warning: '',\n danger: '',\n neutral: '',\n },\n size: {\n sm: '[padding-top:var(--pd-button-padding-sm-vertical)] [padding-bottom:var(--pd-button-padding-sm-vertical)] [padding-left:var(--pd-button-padding-sm-horizontal)] [padding-right:var(--pd-button-padding-sm-horizontal)] pd-text-xs [line-height:var(--pd-button-line-height-sm)] [letter-spacing:var(--pd-button-letter-spacing)]',\n md: '[padding-top:var(--pd-button-padding-md-vertical)] [padding-bottom:var(--pd-button-padding-md-vertical)] [padding-left:var(--pd-button-padding-md-horizontal)] [padding-right:var(--pd-button-padding-md-horizontal)] pd-text-xs [line-height:var(--pd-button-line-height-md)] [letter-spacing:var(--pd-button-letter-spacing)]',\n lg: '[padding-top:var(--pd-button-padding-lg-vertical)] [padding-bottom:var(--pd-button-padding-lg-vertical)] [padding-left:var(--pd-button-padding-lg-horizontal)] [padding-right:var(--pd-button-padding-lg-horizontal)] pd-text-base [line-height:var(--pd-button-line-height-lg)] [letter-spacing:var(--pd-button-letter-spacing)]',\n },\n },\n compoundVariants: [\n // Primary variant - using new semantic tokens\n {\n variant: 'primary',\n intent: 'primary',\n class: 'pd-bg-[var(--pd-background-invert)] pd-text-[var(--pd-content-on-color)] hover:pd-bg-[var(--pd-background-invert-light)] active:pd-bg-[var(--pd-background-invert)]',\n },\n {\n variant: 'primary',\n intent: 'success',\n class: 'pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)]',\n },\n {\n variant: 'primary',\n intent: 'warning',\n class: 'pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)]',\n },\n {\n variant: 'primary',\n intent: 'danger',\n class: 'pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-destructive-foreground)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-[var(--pd-intent-danger-bg)] pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'primary',\n intent: 'neutral',\n class: 'pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)]',\n },\n // Secondary variant - White bg default, always has light grey border\n {\n variant: 'secondary',\n intent: 'primary',\n class: 'pd-bg-[var(--pd-background-primary)] pd-text-[var(--pd-content-secondary)] hover:pd-bg-[var(--pd-background-low)] hover:pd-text-[var(--pd-content-primary)] active:pd-bg-[var(--pd-background-low-on-hover)] active:pd-text-[var(--pd-content-primary)] pd-border pd-border-[var(--pd-border-secondary)]',\n },\n {\n variant: 'secondary',\n intent: 'success',\n class: 'pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)] pd-border-[var(--pd-intent-success-border)]',\n },\n {\n variant: 'secondary',\n intent: 'warning',\n class: 'pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)] pd-border-[var(--pd-intent-warning-border)]',\n },\n {\n variant: 'secondary',\n intent: 'danger',\n class: 'pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] hover:pd-text-[var(--pd-intent-danger-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-border pd-border-[var(--pd-intent-danger-border)]',\n },\n {\n variant: 'secondary',\n intent: 'neutral',\n class: 'pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)] pd-border-[var(--pd-intent-neutral-border)]',\n },\n // Ghost variant - Transparent default, light grey fill on hover/pressed/loading\n {\n variant: 'ghost',\n intent: 'primary',\n class: 'pd-border-0 pd-bg-transparent pd-text-[var(--pd-content-secondary)] hover:pd-bg-[var(--pd-background-low)] hover:pd-text-[var(--pd-content-primary)] active:pd-bg-[var(--pd-background-low-on-hover)] active:pd-text-[var(--pd-content-primary)] pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'ghost',\n intent: 'success',\n class: 'pd-border-0 pd-bg-transparent hover:pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-text-[var(--pd-intent-success-hover)]',\n },\n {\n variant: 'ghost',\n intent: 'warning',\n class: 'pd-border-0 pd-bg-transparent hover:pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-text-[var(--pd-intent-warning-hover)]',\n },\n {\n variant: 'ghost',\n intent: 'danger',\n class: 'pd-border-0 pd-bg-transparent pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg)] hover:pd-text-[var(--pd-intent-danger-hover)]',\n },\n {\n variant: 'ghost',\n intent: 'neutral',\n class: 'pd-border-0 pd-bg-transparent pd-text-[var(--pd-intent-neutral-text)] hover:pd-text-[var(--pd-intent-neutral-hover)]',\n },\n // Destructive variant - Red text, light red/pink background, different on hover/active/disabled\n {\n variant: 'destructive',\n intent: 'primary',\n class: 'pd-border-0 pd-bg-[var(--pd-background-red)] pd-text-[var(--pd-content-red)] hover:pd-bg-[var(--pd-background-red-on-hover)] hover:pd-text-[var(--pd-content-red-on-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'success',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] hover:pd-text-[var(--pd-intent-success-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'warning',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] hover:pd-text-[var(--pd-intent-warning-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'danger',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] hover:pd-text-[var(--pd-intent-danger-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n {\n variant: 'destructive',\n intent: 'neutral',\n class: 'pd-border-0 pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] hover:pd-text-[var(--pd-intent-neutral-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]',\n },\n ],\n defaultVariants: {\n variant: 'primary',\n intent: 'primary',\n size: 'md',\n },\n }\n);\n\nexport const ShadcnButton = forwardRef<HTMLButtonElement, ButtonAdapterProps>(\n ({ \n variant = 'primary', \n intent = 'primary', \n size = 'md', \n disabled, \n loading, \n fullWidth,\n startIcon,\n endIcon,\n loadingText,\n asChild,\n href,\n target,\n children, \n ...props \n }, ref) => {\n\n // Build className from variants - no arbitrary classes allowed\n // Add loading and disabled state overrides based on specification\n const buttonClasses = cn(\n buttonVariants({ variant, intent, size }),\n fullWidth && 'pd-w-full',\n // Loading states - light mode (apply to all intents for secondary and ghost)\n loading && variant === 'primary' && intent === 'primary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)]',\n loading && variant === 'secondary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)] pd-border-[var(--pd-border-secondary)]',\n loading && variant === 'ghost' && '!pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)]',\n // Destructive variant loading states - use intent-specific backgrounds\n loading && variant === 'destructive' && intent === 'primary' && 'pd-bg-[var(--pd-background-red)] pd-text-[var(--pd-content-red)]',\n loading && variant === 'destructive' && intent === 'success' && 'pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)]',\n loading && variant === 'destructive' && intent === 'warning' && 'pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)]',\n loading && variant === 'destructive' && intent === 'danger' && 'pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-intent-danger-text)]',\n loading && variant === 'destructive' && intent === 'neutral' && 'pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)]',\n // Disabled states - consistent across all variants (no hover/active changes)\n disabled && variant === 'primary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-subtle)]',\n disabled && variant === 'secondary' && 'pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-subtle)] pd-border-[var(--pd-border-secondary)]',\n disabled && variant === 'ghost' && 'pd-bg-transparent pd-text-[var(--pd-content-subtle)]',\n disabled && variant === 'destructive' && 'pd-bg-transparent pd-text-[var(--pd-content-subtle)]',\n );\n\n // Handle link buttons\n if (href) {\n return (\n <ButtonPrimitive\n asChild={true}\n {...props}\n >\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n className={buttonClasses}\n aria-disabled={disabled || loading}\n style={{ pointerEvents: disabled || loading ? 'none' : undefined }}\n >\n {renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size, variant, intent })}\n </a>\n </ButtonPrimitive>\n );\n }\n\n return (\n <ButtonPrimitive\n ref={ref}\n disabled={disabled || loading}\n className={buttonClasses}\n asChild={asChild}\n {...props}\n >\n {renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size, variant, intent })}\n </ButtonPrimitive>\n );\n }\n);\n\nfunction renderButtonContent({\n loading,\n loadingText,\n startIcon,\n endIcon,\n children,\n size,\n variant,\n intent,\n}: {\n loading?: boolean;\n loadingText?: string;\n startIcon?: string;\n endIcon?: string;\n children: React.ReactNode;\n size?: Size;\n variant?: string;\n intent?: string;\n}) {\n // Icon sizes based on button size\n const iconSizeClass = size === 'sm' ? 'pd-h-3 pd-w-3' : size === 'lg' ? 'pd-h-5 pd-w-5' : 'pd-h-4 pd-w-4';\n const spinnerSizeClass = size === 'sm' ? 'pd-h-3 pd-w-3' : size === 'lg' ? 'pd-h-5 pd-w-5' : 'pd-h-4 pd-w-4';\n\n // Determine loading text/spinner color based on variant and intent\n const getLoadingTextColor = () => {\n if (variant === 'primary' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-secondary)]'; // Grey for light grey background\n }\n if (variant === 'primary' && intent === 'danger') {\n return 'pd-text-[var(--pd-destructive-foreground)]'; // White for red background\n }\n if (variant === 'secondary' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-secondary)]'; // Grey for light grey background\n }\n if (variant === 'ghost' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-secondary)]'; // Grey for light grey background\n }\n if (variant === 'destructive' && intent === 'primary') {\n return 'pd-text-[var(--pd-content-red)]'; // Red text for destructive primary\n }\n if (variant === 'destructive' && intent === 'success') {\n return 'pd-text-[var(--pd-intent-success-text)]'; // Success text for destructive success\n }\n if (variant === 'destructive' && intent === 'warning') {\n return 'pd-text-[var(--pd-intent-warning-text)]'; // Warning text for destructive warning\n }\n if (variant === 'destructive' && intent === 'danger') {\n return 'pd-text-[var(--pd-intent-danger-text)]'; // Danger text for destructive danger\n }\n if (variant === 'destructive' && intent === 'neutral') {\n return 'pd-text-[var(--pd-intent-neutral-text)]'; // Neutral text for destructive neutral\n }\n return 'pd-text-[var(--pd-content-secondary)]'; // Fallback\n };\n\n const loadingTextColor = getLoadingTextColor();\n\n if (loading) {\n return (\n <>\n <Loader2 \n aria-hidden=\"true\" \n className={`${spinnerSizeClass} pd-animate-spin ${loadingTextColor}`} \n />\n <span className={loadingTextColor}>\n {loadingText || children}\n </span>\n <span className=\"pd-sr-only\">\n {loadingText ? `Loading: ${loadingText}` : 'Loading'}\n </span>\n </>\n );\n }\n\n // Get icon components from lucide-react by name\n const StartIconComponent = startIcon ? getIcon(startIcon) : null;\n const EndIconComponent = endIcon ? getIcon(endIcon) : null;\n\n return (\n <>\n {StartIconComponent && (\n <span className=\"pd-inline-flex pd-items-center pd-justify-center\">\n {React.createElement(StartIconComponent, { className: iconSizeClass })}\n </span>\n )}\n {children}\n {EndIconComponent && (\n <span className=\"pd-inline-flex pd-items-center pd-justify-center\">\n {React.createElement(EndIconComponent, { className: iconSizeClass })}\n </span>\n )}\n </>\n );\n}\n\nShadcnButton.displayName = 'ShadcnButton';\n","import { getAdapter } from '../theme/config';\nimport { ADAPTER_TYPES } from '../theme/types';\nimport * as ShadcnAdapter from './shadcn';\n// Material/Any other adapter will be imported when the adapter is installed\n// import * as MaterialAdapter from './material';\n\nconst [SHADCN_ADAPTER, MATERIAL_ADAPTER] = ADAPTER_TYPES;\n\nexport function getButtonAdapter() {\n const adapter = getAdapter();\n \n switch (adapter) {\n case SHADCN_ADAPTER:\n return ShadcnAdapter.ShadcnButton;\n case MATERIAL_ADAPTER:\n // Material adapter implementation available in src/adapters/material/Button.tsx\n // Uncomment when Material UI is installed:\n // return MaterialAdapter.MaterialButton;\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Material adapter not yet enabled. Install @mui/material to use it.');\n }\n return ShadcnAdapter.ShadcnButton;\n default:\n return ShadcnAdapter.ShadcnButton;\n }\n}\n\n// export function getInputAdapter() {\n// const adapter = getAdapter();\n \n// switch (adapter) {\n// case SHADCN_ADAPTER:\n// return ShadcnAdapter.ShadcnInput;\n// case MATERIAL_ADAPTER:\n// // Material adapter would go here\n// return ShadcnAdapter.ShadcnInput;\n// default:\n// return ShadcnAdapter.ShadcnInput;\n// }\n// }\n\n// export function getCardAdapter() {\n// const adapter = getAdapter();\n \n// switch (adapter) {\n// case SHADCN_ADAPTER:\n// return ShadcnAdapter.Card;\n// case MATERIAL_ADAPTER:\n// // Material adapter would go here\n// return ShadcnAdapter.Card;\n// default:\n// return ShadcnAdapter.Card;\n// }\n// }\n\n","import React, { forwardRef, useMemo, memo } from 'react';\nimport { getButtonAdapter } from '../adapters';\nimport type { Variant, Size, ButtonType } from '../tokens/semantic';\nimport type { LucideIconName } from '../utils/icons';\n\nexport type { Variant, Size, ButtonType } from '../tokens/semantic';\n\nexport interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'className'> {\n variant?: Variant;\n size?: Size;\n loading?: boolean;\n fullWidth?: boolean;\n startIcon?: LucideIconName;\n endIcon?: LucideIconName;\n loadingText?: string;\n href?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n type?: ButtonType;\n asChild?: boolean;\n}\n\nconst ButtonComponent = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ \n variant = 'primary', \n size = 'md', \n loading, \n disabled,\n fullWidth,\n startIcon,\n endIcon,\n loadingText,\n href,\n target,\n type = 'button',\n asChild,\n children,\n ...props \n }, ref) => {\n const AdapterButton = getButtonAdapter();\n \n // Remove className if passed - we don't allow arbitrary classes\n const { className, ...restProps } = props as Omit<ButtonProps, 'variant' | 'size' | 'loading' | 'fullWidth' | 'startIcon' | 'endIcon' | 'loadingText' | 'href' | 'target' | 'type' | 'asChild'> & { className?: string };\n if (className && process.env.NODE_ENV !== 'production') {\n console.warn('Button component does not accept className prop. Use variant, size, and other props for styling.');\n }\n \n // Intent is internal only - default to 'primary'\n const intent = 'primary' as const;\n \n // Apply sensible accessibility defaults based on component state\n const accessibilityProps = useMemo(() => {\n const defaults: Record<string, boolean> = {};\n \n // Auto-apply aria-disabled for disabled/loading state\n if (disabled || loading) {\n defaults['aria-disabled'] = true;\n }\n \n // Auto-apply aria-busy for loading state\n if (loading) {\n defaults['aria-busy'] = true;\n }\n \n return defaults;\n }, [disabled, loading]);\n \n // Merge defaults with user props (user props take precedence)\n const mergedProps = {\n ...restProps,\n ...accessibilityProps,\n };\n \n return (\n <AdapterButton\n ref={ref}\n variant={variant}\n intent={intent}\n size={size}\n disabled={disabled}\n loading={loading}\n fullWidth={fullWidth}\n startIcon={startIcon}\n endIcon={endIcon}\n loadingText={loadingText}\n href={href}\n target={target}\n type={type}\n asChild={asChild}\n {...mergedProps}\n >\n {children}\n </AdapterButton>\n );\n }\n);\n\nButtonComponent.displayName = 'Button';\n\n// Memoize Button to prevent unnecessary re-renders\nexport const Button = memo(ButtonComponent);\n","/**\n * Design Tokens - Single Source of Truth\n * \n * This file contains all design tokens in one place:\n * - Base color primitives\n * - Typography, spacing, radius, shadows, z-index\n * - Semantic token mappings (derived from base tokens)\n * \n * Everything else (CSS variables, theme objects) is generated from this file.\n */\n\n// ============================================================================\n// COLOR PRIMITIVES\n// ============================================================================\n\nexport const neutral = {\n 100: \"#FFFFFF\",\n 200: \"#EDEDED\",\n 300: \"#DFDFE2\",\n 400: \"#BEBEC1\",\n 500: \"#7E7E8B\",\n 600: \"#60606C\",\n 700: \"#4E4E5A\",\n 800: \"#2F2F37\",\n 900: \"#17171C\",\n 950: \"#09090B\",\n 1000: \"#FAFAFA\",\n} as const;\n\nexport const blue = {\n 100: \"#EBF1FF\",\n 200: \"#C2D4FF\",\n 300: \"#99B7FF\",\n 400: \"#709AFF\",\n 500: \"#3772FF\",\n 600: \"#004BFF\",\n 700: \"#003FD6\",\n 800: \"#002680\",\n 900: \"#001E66\",\n 950: \"#00123D\",\n} as const;\n\nexport const orange = {\n 100: \"#FFF3EB\",\n 200: \"#FFE1CC\",\n 300: \"#FFC9A3\",\n 400: \"#EC9C64\",\n 500: \"#FF6800\",\n 600: \"#D65700\",\n 700: \"#AD4700\",\n 800: \"#7A3200\",\n 900: \"#5C2500\",\n 950: \"#331500\",\n} as const;\n\nexport const red = {\n 100: \"#FDF2F4\",\n 200: \"#FADBE1\",\n 300: \"#F6C1CA\",\n 400: \"#E15C5C\",\n 500: \"#E12D4E\",\n 600: \"#C41C3B\",\n 700: \"#A11730\",\n 800: \"#7D1225\",\n 900: \"#4C0B17\",\n 950: \"#2D060D\",\n} as const;\n\nexport const green = {\n 100: \"#E0FFEC\",\n 200: \"#BDFFD5\",\n 300: \"#8AFFB5\",\n 400: \"#5CFF98\",\n 500: \"#09FF63\",\n 600: \"#00E052\",\n 700: \"#00B241\",\n 800: \"#008A32\",\n 900: \"#006625\",\n 950: \"#00471A\",\n} as const;\n\nexport const yellow = {\n 100: \"#FFF4E0\",\n 200: \"#FFE8C2\",\n 300: \"#FFD999\",\n 400: \"#FFCA70\",\n 500: \"#FFAD22\",\n 600: \"#F09700\",\n 700: \"#D68700\",\n 800: \"#7A4D00\",\n 900: \"#5C3A00\",\n 950: \"#3D2600\",\n} as const;\n\nexport const colorPrimitives = {\n neutral,\n blue,\n orange,\n red,\n green,\n yellow,\n} as const;\n\n// ============================================================================\n// TYPOGRAPHY\n// ============================================================================\n\nexport const typography = {\n fontFamily: {\n sans: ['Geist', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'sans-serif'],\n mono: ['Geist Mono', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', 'monospace'],\n },\n fontSize: {\n xs: '0.75em', // 12px\n sm: '0.875em', // 14px\n base: '1em', // 16px\n lg: '1.125em', // 18px\n xl: '1.25em', // 20px\n '2xl': '1.5em', // 24px\n '3xl': '1.875em', // 30px\n '4xl': '2.25em', // 36px\n '5xl': '3em', // 48px\n '6xl': '3.75em', // 60px\n '7xl': '4.5em', // 72px\n '8xl': '6em', // 96px\n '9xl': '8em', // 128px\n },\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n lineHeight: {\n tight: '1.25',\n normal: '1.5',\n relaxed: '1.75',\n },\n // Tailwind fontSize lineHeight mappings (for use in tailwind.config.js)\n fontSizeLineHeight: {\n xs: '1em', // 16px for 12px font\n sm: '1.25em', // 20px for 14px font\n base: '1.5em', // 24px for 16px font\n lg: '1.75em', // 28px for 18px font\n xl: '1.75em', // 28px for 20px font\n '2xl': '2em',\n '3xl': '2.25em',\n '4xl': '2.5em',\n '5xl': '1',\n '6xl': '1',\n '7xl': '1',\n '8xl': '1',\n '9xl': '1',\n },\n letterSpacing: {\n tight: '-0.025em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n button: '0.00833em', // 0.1px for 12px font \n },\n} as const;\n\n// ============================================================================\n// SPACING\n// ============================================================================\n\nexport const spacing = {\n 0: '0em', // 0px\n 1: '0.25em', // 4px\n 2: '0.5em', // 8px\n 3: '0.75em', // 12px\n 4: '1em', // 16px\n 5: '1.25em', // 20px\n 6: '1.5em', // 24px\n 7: '1.75em', // 28px\n 8: '2em', // 32px\n 9: '2.25em', // 36px\n 10: '2.5em', // 40px\n} as const;\n\n// ============================================================================\n// RADIUS\n// ============================================================================\n\nexport const radius = {\n none: '0',\n sm: '0.125em', // 2px\n base: '0.25em', // 4px\n md: '0.375em', // 6px\n lg: '0.5em', // 8px\n xl: '0.75em', // 12px\n '2xl': '1em', // 16px\n '3xl': '1.5em', // 24px\n full: '9999px',\n button: '0.5em', // 8px - button border radius \n} as const;\n\n// ============================================================================\n// SHADOWS\n// ============================================================================\n\nexport const shadows = {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n base: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n none: 'none',\n} as const;\n\n// ============================================================================\n// Z-INDEX\n// ============================================================================\n\nexport const zIndex = {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n} as const;\n\n// ============================================================================\n// BUTTON TOKENS\n// ============================================================================\n\nexport const button = {\n padding: {\n sm: {\n vertical: '0.5em', // 8px\n horizontal: '0.75em', // 12px\n },\n md: {\n vertical: '0.625em', // 10px \n horizontal: '1em', // 16px \n },\n lg: {\n vertical: '0.75em', // 12px\n horizontal: '1.25em', // 20px\n },\n },\n gap: '0.5em', // 8px - gap between icon and text \n lineHeight: {\n sm: '1.333em', \n md: '1.333em', // 16px for 12px font-size (1.333 × 12px = 16px)\n lg: '1.333em', \n },\n letterSpacing: '0.00833em', // 0.1px for 12px font\n} as const;\n\n// ============================================================================\n// SEMANTIC TOKENS (Derived from base tokens)\n// ============================================================================\n\n/**\n * Semantic tokens map base color primitives to meaningful names\n * that change based on theme mode (light/dark)\n */\nexport const semanticTokens = {\n light: {\n border: {\n primary: neutral[400],\n secondary: neutral[300],\n subtle: neutral[300],\n invert: neutral[950],\n onColor: neutral[100],\n blue: blue[500],\n blueSubtle: blue[300],\n blueOnHover: blue[700],\n red: red[600],\n redSubtle: red[300],\n redOnHover: red[700],\n orange: orange[600],\n orangeSubtle: orange[300],\n orangeOnHover: orange[700],\n yellow: yellow[600],\n yellowSubtle: yellow[300],\n yellowOnHover: yellow[700],\n green: green[600],\n greenSubtle: green[300],\n greenOnHover: green[700],\n },\n content: {\n primary: neutral[900],\n secondary: neutral[600],\n subtle: neutral[400],\n onColor: neutral[100],\n alwaysWhite: neutral[100],\n alwaysBlack: neutral[950],\n onColorInverse: neutral[950],\n blue: blue[500],\n blueDisabled: blue[400],\n blueOnHover: blue[600],\n green: green[700],\n greenDisabled: green[400],\n greenOnHover: green[600],\n red: red[600],\n redDisabled: red[400],\n redOnHover: red[700],\n orange: orange[600],\n orangeDisabled: orange[400],\n orangeOnHover: orange[700],\n yellow: yellow[600],\n yellowDisabled: yellow[400],\n yellowOnHover: yellow[700],\n },\n background: {\n primary: neutral[100],\n system: neutral[1000],\n secondary: neutral[200],\n tertiary: neutral[300],\n invert: neutral[950],\n invertLight: neutral[900],\n green: green[100],\n greenOnHover: green[200],\n red: red[100],\n redOnHover: red[200],\n orange: orange[100],\n orangeOnHover: orange[200],\n yellow: orange[100],\n yellowOnHover: orange[200],\n low: neutral[200],\n lowOnHover: neutral[300],\n info: blue[100],\n infoOnHover: blue[300],\n base: neutral[100],\n },\n },\n dark: {\n border: {\n primary: neutral[700],\n secondary: neutral[800],\n subtle: neutral[800],\n invert: neutral[100],\n onColor: neutral[950],\n blue: blue[400],\n blueSubtle: blue[800],\n blueOnHover: blue[500],\n red: red[400],\n redSubtle: red[900],\n redOnHover: red[500],\n orange: orange[400],\n orangeSubtle: orange[900],\n orangeOnHover: orange[500],\n yellow: yellow[400],\n yellowSubtle: yellow[900],\n yellowOnHover: yellow[500],\n green: green[600],\n greenSubtle: green[900],\n greenOnHover: green[700],\n },\n content: {\n primary: neutral[300],\n secondary: neutral[500],\n subtle: neutral[700],\n onColor: neutral[950],\n alwaysWhite: neutral[100],\n alwaysBlack: neutral[950],\n onColorInverse: neutral[100],\n blue: blue[400],\n blueDisabled: blue[800],\n blueOnHover: blue[500],\n green: green[600],\n greenDisabled: green[800],\n greenOnHover: green[500],\n red: red[400],\n redDisabled: red[800],\n redOnHover: red[300],\n orange: orange[400],\n orangeDisabled: orange[800],\n orangeOnHover: orange[300],\n yellow: yellow[400],\n yellowDisabled: yellow[800],\n yellowOnHover: yellow[300],\n },\n background: {\n primary: neutral[950],\n system: neutral[950],\n secondary: neutral[900],\n tertiary: neutral[800],\n invert: neutral[100],\n invertLight: neutral[300],\n green: green[950],\n greenOnHover: green[900],\n red: red[950],\n redOnHover: red[900],\n orange: orange[950],\n orangeOnHover: orange[900],\n yellow: yellow[950],\n yellowOnHover: yellow[900],\n low: neutral[900],\n lowOnHover: neutral[800],\n info: blue[950],\n infoOnHover: blue[900],\n base: neutral[950],\n },\n },\n} as const;\n\n// ============================================================================\n// TYPE DEFINITIONS\n// ============================================================================\n\nexport const COLOR_SCALES = [100, 200, 300, 400, 500, 600, 700, 800, 900, 950, 1000] as const;\nexport const VARIANTS = ['primary', 'secondary', 'ghost', 'destructive'] as const;\nexport const INTENTS = ['primary', 'success', 'warning', 'danger', 'neutral'] as const;\nexport const SIZES = ['sm', 'md', 'lg'] as const;\nexport const BUTTON_TYPES = ['button', 'submit', 'reset'] as const;\nexport const INPUT_TYPES = ['text', 'email', 'password', 'number', 'tel', 'url', 'search'] as const;\nexport const ORIENTATIONS = ['horizontal', 'vertical'] as const;\nexport const SURFACE_LEVELS = ['base', 'elevated', 'overlay'] as const;\n\nexport type ColorName = keyof typeof colorPrimitives;\nexport type ColorScale = typeof COLOR_SCALES[number];\nexport type Variant = typeof VARIANTS[number];\nexport type Intent = typeof INTENTS[number];\nexport type Size = typeof SIZES[number];\nexport type ButtonType = typeof BUTTON_TYPES[number];\nexport type InputType = typeof INPUT_TYPES[number];\nexport type Orientation = typeof ORIENTATIONS[number];\nexport type SurfaceLevel = typeof SURFACE_LEVELS[number];\n\nexport type ColorPrimitives = typeof colorPrimitives;\nexport type Typography = typeof typography;\nexport type Spacing = typeof spacing;\nexport type Radius = typeof radius;\nexport type Shadows = typeof shadows;\nexport type ZIndex = typeof zIndex;\n\n// ============================================================================\n// LEGACY COMPATIBILITY (for backward compatibility)\n// ============================================================================\n\n/**\n * Legacy colors object for backward compatibility\n * Maps old color names to new scale-based colors\n */\nexport const colors = {\n // Neutral palette\n white: neutral[100],\n black: neutral[950],\n gray50: neutral[200],\n gray100: neutral[300],\n gray200: neutral[400],\n gray300: neutral[500],\n gray400: neutral[500],\n gray500: neutral[500],\n gray600: neutral[600],\n gray700: neutral[700],\n gray800: neutral[800],\n gray900: neutral[900],\n \n // Primary palette (mapped from blue)\n blue50: blue[100],\n blue100: blue[100],\n blue200: blue[200],\n blue300: blue[300],\n blue400: blue[400],\n blue500: blue[500],\n blue600: blue[600],\n blue700: blue[700],\n blue800: blue[800],\n blue900: blue[900],\n \n // Success palette (mapped from green)\n green50: green[100],\n green100: green[100],\n green200: green[200],\n green300: green[300],\n green400: green[400],\n green500: green[500],\n green600: green[600],\n green700: green[700],\n green800: green[800],\n green900: green[900],\n \n // Warning palette (mapped from yellow)\n yellow50: yellow[100],\n yellow100: yellow[100],\n yellow200: yellow[200],\n yellow300: yellow[300],\n yellow400: yellow[400],\n yellow500: yellow[500],\n yellow600: yellow[600],\n yellow700: yellow[700],\n yellow800: yellow[800],\n yellow900: yellow[900],\n \n // Danger palette (mapped from red)\n red50: red[100],\n red100: red[100],\n red200: red[200],\n red300: red[300],\n red400: red[400],\n red500: red[500],\n red600: red[600],\n red700: red[700],\n red800: red[800],\n red900: red[900],\n} as const;\n\nexport type Colors = typeof colors;\n","/**\n * Theme Creation\n * \n * Creates theme objects from unified tokens.\n * This is a thin layer that converts tokens to CSS variables for runtime theming.\n */\n\nimport { \n radius, \n semanticTokens,\n neutral,\n} from '../tokens/tokens';\nimport type { Theme, ThemeMode, ThemeName } from './types';\n\n/**\n * Resolves 'system' mode to either 'light' or 'dark' based on OS preference\n * Falls back to 'light' if matchMedia is not available (SSR)\n */\nexport function resolveThemeMode(mode: ThemeMode): 'light' | 'dark' {\n if (mode !== 'system') {\n return mode;\n }\n \n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.matchMedia) {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n \n // Default to light for SSR or when matchMedia is not available\n return 'light';\n}\n\nexport function createTheme(name: ThemeName, mode: ThemeMode): Theme {\n const resolvedMode = resolveThemeMode(mode);\n const semantic = semanticTokens[resolvedMode];\n\n // Only create shadcn/ui compatibility variables here\n // All semantic tokens (--pd-background-*, --pd-content-*, --pd-border-*)\n // are already defined in tokens.css, so we don't duplicate them\n const cssVariables: Record<string, string> = {\n // Base colors\n '--color-white': neutral[100],\n '--color-black': neutral[950],\n \n // shadcn/ui CSS variable mappings for compatibility\n '--background': semantic.background.primary,\n '--foreground': semantic.content.primary,\n '--card': semantic.background.secondary,\n '--card-foreground': semantic.content.primary,\n '--popover': semantic.background.secondary,\n '--popover-foreground': semantic.content.primary,\n '--primary': semantic.content.secondary,\n '--primary-foreground': neutral[100],\n '--secondary': semantic.background.secondary,\n '--secondary-foreground': semantic.content.primary,\n '--muted': semantic.background.secondary,\n '--muted-foreground': semantic.content.subtle,\n '--accent': semantic.background.secondary,\n '--accent-foreground': semantic.content.primary,\n '--destructive': resolvedMode === 'light' ? semantic.content.red : semantic.content.red,\n '--destructive-foreground': neutral[100],\n '--border': semantic.border.primary,\n '--input': semantic.border.primary,\n '--ring': semantic.content.secondary,\n '--radius': radius.md,\n };\n \n return {\n name,\n mode: resolvedMode, // Store the resolved mode (light/dark) not 'system'\n cssVariables,\n };\n}\n","import React, { useEffect, useState } from 'react';\nimport { clsx } from 'clsx';\nimport type { ThemeName, ThemeMode } from '../theme/types';\nimport { DEFAULT_THEME, DEFAULT_MODE } from '../theme/types';\nimport { resolveThemeMode } from '../theme/theme';\n\nexport type PdThemeProviderProps = {\n children: React.ReactNode;\n theme?: ThemeName;\n mode?: ThemeMode;\n className?: string;\n};\n\n/**\n * PdThemeProvider - Root provider for PD Design System\n * \n * This component creates a scoped boundary for all design system styles.\n * All tokens are scoped under .pd-root to prevent style leakage.\n * \n * @param theme - Theme name ('base' | 'brand'). Defaults to 'base'.\n * @param mode - Color mode ('light' | 'dark' | 'system'). Defaults to 'system'.\n * \n * @example\n * ```tsx\n * <PdThemeProvider theme=\"base\" mode=\"dark\">\n * <Button>Click me</Button>\n * </PdThemeProvider>\n * ```\n * \n * @example\n * ```tsx\n * <PdThemeProvider theme=\"brand\" mode=\"light\">\n * <Button>Click me</Button>\n * </PdThemeProvider>\n * ```\n */\nexport function PdThemeProvider({ \n children, \n theme: themeName = DEFAULT_THEME, \n mode = DEFAULT_MODE,\n className \n}: PdThemeProviderProps) {\n // Track the resolved mode for system theme\n const [resolvedMode, setResolvedMode] = useState<'light' | 'dark'>(() => \n resolveThemeMode(mode)\n );\n \n // Listen to system preference changes when mode is 'system'\n useEffect(() => {\n if (mode !== 'system' || typeof window === 'undefined' || !window.matchMedia) {\n return;\n }\n \n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n setResolvedMode(e.matches ? 'dark' : 'light');\n };\n \n // Set initial value\n handleChange(mediaQuery);\n \n // Listen for changes\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n } else {\n // Fallback for older browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }\n }, [mode]);\n \n // Update resolved mode when mode prop changes\n useEffect(() => {\n if (mode !== 'system') {\n setResolvedMode(mode === 'dark' ? 'dark' : 'light');\n }\n }, [mode]);\n \n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n const isDark = effectiveMode === 'dark';\n \n \n return (\n <div \n className={clsx(\n 'pd-root', \n isDark && 'pd-dark',\n `pd-theme-${themeName}`,\n className\n )}\n >\n {children}\n </div>\n );\n}\n\nPdThemeProvider.displayName = 'PdThemeProvider';\n","import React, { Component, type ReactNode } from 'react';\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode | ((error: Error, errorInfo: React.ErrorInfo) => ReactNode);\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorInfo: React.ErrorInfo | null;\n}\n\n/**\n * ErrorBoundary component to catch adapter failures and other React errors\n * \n * @example\n * ```tsx\n * <ErrorBoundary fallback={<div>Something went wrong</div>}>\n * <Button>Click me</Button>\n * </ErrorBoundary>\n * ```\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n errorInfo: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n this.setState({\n error,\n errorInfo,\n });\n\n // Call optional error handler\n if (this.props.onError) {\n this.props.onError(error, errorInfo);\n }\n\n // Log error in development\n if (process.env.NODE_ENV !== 'production') {\n console.error('ErrorBoundary caught an error:', error, errorInfo);\n }\n }\n\n render(): ReactNode {\n if (this.state.hasError) {\n const { fallback } = this.props;\n const { error, errorInfo } = this.state;\n\n if (typeof fallback === 'function' && error && errorInfo) {\n return fallback(error, errorInfo) as ReactNode;\n }\n\n if (fallback && typeof fallback !== 'function') {\n return fallback;\n }\n\n // Default fallback UI\n return (\n <div className=\"pd-root pd-p-4 pd-border pd-border-[var(--pd-border-red)] pd-rounded-md pd-bg-[var(--pd-background-red)]\">\n <h3 className=\"pd-m-0 pd-mb-2 pd-text-[var(--pd-content-red)]\">Something went wrong</h3>\n {process.env.NODE_ENV !== 'production' && error && (\n <details className=\"pd-mt-2\">\n <summary className=\"pd-cursor-pointer pd-text-[var(--pd-content-red-on-hover)]\">Error details</summary>\n <pre className=\"pd-mt-2 pd-p-2 pd-bg-[var(--pd-background-red-on-hover)] pd-rounded pd-overflow-auto pd-text-sm\">\n {error.toString()}\n {errorInfo?.componentStack}\n </pre>\n </details>\n )}\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n\n// Set displayName for better debugging\n(ErrorBoundary as typeof ErrorBoundary & { displayName?: string }).displayName = 'ErrorBoundary';\n","import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { createTheme, resolveThemeMode } from './theme';\nimport { setDesignSystemConfig, getDesignSystemConfig } from './config';\nimport type { DesignSystemConfig, ThemeMode, ThemeName } from './types';\nimport { DEFAULT_ADAPTER, DEFAULT_THEME, DEFAULT_MODE } from './types';\n\ninterface ThemeContextValue {\n config: DesignSystemConfig;\n setConfig: (config: Partial<DesignSystemConfig>) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n adapter?: DesignSystemConfig['adapter'];\n theme?: ThemeName;\n mode?: ThemeMode;\n /**\n * Optional localStorage key for persisting theme preference.\n * If provided, ThemeProvider will automatically sync mode with localStorage.\n * If not provided, no localStorage sync will occur.\n */\n storageKey?: string;\n}\n\nconst parsePreference = (value: string | null): ThemeMode => {\n if (value === 'light' || value === 'dark' || value === 'system') {\n return value;\n }\n return 'system';\n};\n\nexport function ThemeProvider({\n children,\n adapter = DEFAULT_ADAPTER,\n theme: themeName = DEFAULT_THEME,\n mode: initialMode = DEFAULT_MODE,\n storageKey,\n}: ThemeProviderProps) {\n // If storageKey is provided, read initial mode from localStorage\n const getInitialMode = (): ThemeMode => {\n if (storageKey && typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n return parsePreference(stored);\n }\n }\n return initialMode;\n };\n\n const [mode, setMode] = useState<ThemeMode>(getInitialMode);\n\n // Sync internal mode state with mode prop when it changes\n useEffect(() => {\n setMode(initialMode);\n }, [initialMode]);\n \n // Track the resolved mode for system theme\n const [resolvedMode, setResolvedMode] = useState<'light' | 'dark'>(() => \n resolveThemeMode(initialMode)\n );\n \n // Listen to system preference changes when mode is 'system'\n useEffect(() => {\n if (mode !== 'system' || typeof window === 'undefined' || !window.matchMedia) {\n return;\n }\n \n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n setResolvedMode(e.matches ? 'dark' : 'light');\n };\n \n // Set initial value\n handleChange(mediaQuery);\n \n // Listen for changes\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n } else {\n // Fallback for older browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }\n }, [mode]);\n \n // Update resolved mode when mode prop changes\n useEffect(() => {\n if (mode !== 'system') {\n setResolvedMode(mode === 'dark' ? 'dark' : 'light');\n }\n }, [mode]);\n \n const theme = useMemo(() => {\n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n return createTheme(themeName, effectiveMode);\n }, [themeName, mode, resolvedMode]);\n \n // Handle localStorage sync if storageKey is provided\n useEffect(() => {\n if (storageKey && typeof window !== 'undefined') {\n localStorage.setItem(storageKey, mode);\n // Dispatch event for same-tab sync\n window.dispatchEvent(new Event('theme-preference-changed'));\n }\n }, [mode, storageKey]);\n\n // Listen to localStorage changes (cross-tab sync)\n useEffect(() => {\n if (!storageKey || typeof window === 'undefined') {\n return;\n }\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === storageKey && event.newValue) {\n const newMode = parsePreference(event.newValue);\n setMode(newMode);\n }\n };\n\n window.addEventListener('storage', handleStorage);\n return () => window.removeEventListener('storage', handleStorage);\n }, [storageKey]);\n\n // Listen to custom events (same-tab sync when setConfig is called)\n useEffect(() => {\n if (!storageKey || typeof window === 'undefined') {\n return;\n }\n\n const handlePreferenceChange = () => {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n const newMode = parsePreference(stored);\n setMode(newMode);\n }\n };\n\n window.addEventListener('theme-preference-changed', handlePreferenceChange);\n return () => window.removeEventListener('theme-preference-changed', handlePreferenceChange);\n }, [storageKey]);\n\n useEffect(() => {\n setDesignSystemConfig({ adapter, theme: themeName, mode });\n }, [adapter, themeName, mode]);\n \n // SSR-safe DOM manipulation - only runs on client\n useEffect(() => {\n // Guard: Only run in browser environment\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n \n const root = document.documentElement;\n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n \n // Use requestAnimationFrame to ensure DOM is ready and avoid hydration mismatch\n const rafId = requestAnimationFrame(() => {\n if (effectiveMode === 'dark') {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n \n Object.entries(theme.cssVariables).forEach(([key, value]) => {\n // Only set shadcn variables (--background, --foreground, etc.)\n // Skip semantic tokens that are already in tokens.css\n if (!key.startsWith('--background-') && \n !key.startsWith('--content-') && \n !key.startsWith('--border-') &&\n !key.startsWith('--intent-') &&\n !key.startsWith('--surface-') &&\n !key.startsWith('--text-') &&\n !key.startsWith('--spacing-') &&\n !key.startsWith('--radius-') &&\n !key.startsWith('--shadow-') &&\n !key.startsWith('--z-') &&\n !key.startsWith('--font-') &&\n !key.startsWith('--line-height-')) {\n root.style.setProperty(key, value);\n }\n });\n });\n \n return () => {\n cancelAnimationFrame(rafId);\n if (typeof document !== 'undefined') {\n // Only clean up shadcn variables\n Object.keys(theme.cssVariables).forEach((key) => {\n if (!key.startsWith('--background-') && \n !key.startsWith('--content-') && \n !key.startsWith('--border-') &&\n !key.startsWith('--intent-') &&\n !key.startsWith('--surface-') &&\n !key.startsWith('--text-') &&\n !key.startsWith('--spacing-') &&\n !key.startsWith('--radius-') &&\n !key.startsWith('--shadow-') &&\n !key.startsWith('--z-') &&\n !key.startsWith('--font-') &&\n !key.startsWith('--line-height-')) {\n document.documentElement.style.removeProperty(key);\n }\n });\n }\n };\n }, [theme, mode, resolvedMode]);\n\n // Handle pd-root and pd-dark classes on body\n useEffect(() => {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const body = document.body;\n const effectiveMode = mode === 'system' ? resolvedMode : mode;\n const isDark = effectiveMode === 'dark';\n\n // Always add pd-root class\n body.classList.add('pd-root');\n\n // Handle pd-dark class based on mode\n if (isDark) {\n body.classList.add('pd-dark');\n } else {\n body.classList.remove('pd-dark');\n }\n\n return () => {\n body.classList.remove('pd-root', 'pd-dark');\n };\n }, [mode, resolvedMode]);\n\n // Make context reactive by using state instead of memoized value\n const [configState, setConfigState] = useState<DesignSystemConfig>(() => getDesignSystemConfig());\n\n // Update context when config changes\n useEffect(() => {\n const currentConfig = getDesignSystemConfig();\n setConfigState(currentConfig);\n }, [adapter, themeName, mode]);\n\n // Enhanced setConfig that also updates localStorage if storageKey is provided\n const enhancedSetConfig = React.useCallback((newConfig: Partial<DesignSystemConfig>) => {\n setDesignSystemConfig(newConfig);\n const updatedConfig = getDesignSystemConfig();\n setConfigState(updatedConfig);\n\n // If mode changed, update the mode state directly\n if (newConfig.mode && newConfig.mode !== mode) {\n setMode(newConfig.mode);\n }\n\n // If mode changed and storageKey is provided, update localStorage\n if (newConfig.mode && storageKey && typeof window !== 'undefined') {\n localStorage.setItem(storageKey, newConfig.mode);\n window.dispatchEvent(new Event('theme-preference-changed'));\n }\n }, [storageKey, mode]);\n\n const contextValue = useMemo<ThemeContextValue>(() => ({\n config: configState,\n setConfig: enhancedSetConfig,\n }), [configState, enhancedSetConfig]);\n \n return (\n <ThemeContext.Provider value={contextValue}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider');\n }\n return context;\n}\n","/**\n * @deprecated This file is kept for backward compatibility.\n * Import from '../tokens/tokens' or '../tokens' instead.\n * \n * This file re-exports from the unified tokens.ts file and provides\n * legacy compatibility functions.\n */\n\nimport { semanticTokens } from './tokens';\nimport type { ThemeMode } from '../theme/types';\n\n// Re-export semantic tokens\nexport const borderTokens = {\n light: semanticTokens.light.border,\n dark: semanticTokens.dark.border,\n} as const;\n\nexport const contentTokens = {\n light: semanticTokens.light.content,\n dark: semanticTokens.dark.content,\n} as const;\n\nexport const backgroundTokens = {\n light: semanticTokens.light.background,\n dark: semanticTokens.dark.background,\n} as const;\n\nexport { semanticTokens };\n\n// Re-export types\nexport {\n VARIANTS,\n INTENTS,\n SIZES,\n BUTTON_TYPES,\n INPUT_TYPES,\n ORIENTATIONS,\n SURFACE_LEVELS,\n type Variant,\n type Intent,\n type Size,\n type ButtonType,\n type InputType,\n type Orientation,\n type SurfaceLevel,\n} from './tokens';\n\n// Legacy types\nexport type BorderToken = keyof typeof borderTokens.light;\nexport type ContentToken = keyof typeof contentTokens.light;\nexport type BackgroundToken = keyof typeof backgroundTokens.light;\nexport type SemanticToken = BorderToken | ContentToken | BackgroundToken;\n\n// Legacy interface for backward compatibility\nexport interface SemanticTokens {\n intent: {\n [K in typeof INTENTS[number]]: {\n color: string;\n colorHover: string;\n colorActive: string;\n background: string;\n backgroundHover: string;\n backgroundActive: string;\n border: string;\n text: string;\n textMuted: string;\n };\n };\n surface: {\n [K in typeof SURFACE_LEVELS[number]]: {\n background: string;\n border: string;\n };\n };\n text: {\n heading: string;\n body: string;\n muted: string;\n disabled: string;\n };\n}\n\n// Import INTENTS and SURFACE_LEVELS for the function\nimport { INTENTS, SURFACE_LEVELS, neutral, green, yellow, red } from './tokens';\n\n/**\n * Legacy function for backward compatibility\n * Maps new semantic tokens to old structure\n */\nexport function createSemanticTokens(mode: ThemeMode): SemanticTokens {\n const isLight = mode === 'light';\n const border = isLight ? borderTokens.light : borderTokens.dark;\n const content = isLight ? contentTokens.light : contentTokens.dark;\n const background = isLight ? backgroundTokens.light : backgroundTokens.dark;\n \n return {\n intent: {\n primary: {\n color: content.secondary,\n colorHover: isLight ? neutral[700] : neutral[300],\n colorActive: isLight ? neutral[800] : neutral[200],\n background: background.secondary,\n backgroundHover: background.lowOnHover,\n backgroundActive: background.tertiary,\n border: border.primary,\n text: content.primary,\n textMuted: content.subtle,\n },\n success: {\n color: isLight ? green[600] : green[600],\n colorHover: isLight ? green[700] : green[500],\n colorActive: isLight ? green[800] : green[700],\n background: background.green,\n backgroundHover: background.greenOnHover,\n backgroundActive: isLight ? green[300] : green[800],\n border: border.green,\n text: content.green,\n textMuted: isLight ? green[700] : green[300],\n },\n warning: {\n color: isLight ? yellow[600] : yellow[400],\n colorHover: isLight ? yellow[700] : yellow[300],\n colorActive: isLight ? yellow[800] : yellow[500],\n background: background.yellow,\n backgroundHover: background.yellowOnHover,\n backgroundActive: isLight ? yellow[200] : yellow[900],\n border: border.yellow,\n text: content.yellow,\n textMuted: isLight ? yellow[700] : yellow[300],\n },\n danger: {\n color: isLight ? red[600] : red[400],\n colorHover: isLight ? red[700] : red[300],\n colorActive: isLight ? red[800] : red[500],\n background: background.red,\n backgroundHover: background.redOnHover,\n backgroundActive: isLight ? red[200] : red[900],\n border: border.red,\n text: content.red,\n textMuted: isLight ? red[700] : red[300],\n },\n neutral: {\n color: content.secondary,\n colorHover: isLight ? neutral[700] : neutral[300],\n colorActive: isLight ? neutral[800] : neutral[200],\n background: background.secondary,\n backgroundHover: background.lowOnHover,\n backgroundActive: background.tertiary,\n border: border.primary,\n text: content.primary,\n textMuted: content.subtle,\n },\n },\n surface: {\n base: {\n background: background.primary,\n border: border.primary,\n },\n elevated: {\n background: background.secondary,\n border: border.secondary,\n },\n overlay: {\n background: isLight ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0.7)',\n border: 'transparent',\n },\n },\n text: {\n heading: content.primary,\n body: content.primary,\n muted: content.subtle,\n disabled: isLight ? content.subtle : neutral[600],\n },\n };\n}\n","/**\n * Design Tokens - Main Export\n * \n * This is the main entry point for all design tokens.\n * All tokens come from the unified tokens.ts file (single source of truth).\n */\n\n// Import the values we need for the tokens object\nimport {\n colorPrimitives,\n neutral,\n blue,\n orange,\n red,\n green,\n yellow,\n colors,\n semanticTokens,\n spacing,\n typography,\n radius,\n shadows,\n zIndex,\n} from './tokens';\n\nexport * from './tokens';\n\n// Re-export legacy semantic tokens for backward compatibility\nexport {\n borderTokens,\n contentTokens,\n backgroundTokens,\n createSemanticTokens,\n type BorderToken,\n type ContentToken,\n type BackgroundToken,\n type SemanticToken,\n type SemanticTokens,\n} from './semantic';\n\n/**\n * Grouped design tokens for convenient access\n * \n * Provides a structured object containing all design tokens organized by category.\n * \n * @example\n * ```ts\n * import { tokens } from '@pd-design/system';\n * \n * // Access color primitives\n * const primaryColor = tokens.colors.blue[500];\n * const grayColor = tokens.colors.neutral[600];\n * \n * // Access semantic tokens\n * const borderColor = tokens.semantic.light.border.primary;\n * \n * // Access spacing\n * const padding = tokens.spacing[4];\n * \n * // Access typography\n * const fontSize = tokens.typography.fontSize.base;\n * ```\n */\nexport const tokens = {\n colors: {\n // Individual color scales\n neutral,\n blue,\n orange,\n red,\n green,\n yellow,\n // All colors grouped together\n all: colorPrimitives,\n // Legacy color names (for backward compatibility)\n legacy: colors,\n },\n semantic: semanticTokens,\n spacing,\n typography,\n radius,\n shadows,\n zIndex,\n} as const;\n\n// Type export for better developer experience\nexport type Tokens = typeof tokens;\n","/**\n * Accessibility Utilities\n * \n * Provides utilities and types for ensuring excellent accessibility scores\n * across all components. Supports both user-provided and default accessibility props.\n */\n\nimport React from 'react';\n\n/**\n * Accessibility props that can be passed by users or use defaults\n */\nexport interface AccessibilityProps {\n /**\n * Accessible label for the element.\n * If not provided, will attempt to generate from children or other props.\n */\n 'aria-label'?: string;\n \n /**\n * Reference to element(s) that describe this element.\n */\n 'aria-describedby'?: string;\n \n /**\n * Reference to element(s) that label this element.\n */\n 'aria-labelledby'?: string;\n \n /**\n * Indicates the current state of the element.\n */\n 'aria-current'?: 'page' | 'step' | 'location' | 'date' | 'time' | boolean;\n \n /**\n * Indicates whether the element is expanded or collapsed.\n */\n 'aria-expanded'?: boolean;\n \n /**\n * Indicates whether the element is selected.\n */\n 'aria-selected'?: boolean;\n \n /**\n * Indicates whether the element is checked.\n */\n 'aria-checked'?: boolean | 'mixed';\n \n /**\n * Indicates whether the element is disabled.\n */\n 'aria-disabled'?: boolean;\n \n /**\n * Indicates whether the element is required.\n */\n 'aria-required'?: boolean;\n \n /**\n * Indicates whether the element has invalid input.\n */\n 'aria-invalid'?: boolean | 'grammar' | 'spelling';\n \n /**\n * Describes the error message for invalid input.\n */\n 'aria-errormessage'?: string;\n \n /**\n * Indicates the element's role.\n */\n role?: string;\n \n /**\n * Tab index for keyboard navigation.\n * -1: Not focusable, 0: Focusable in tab order, >0: Custom tab order (not recommended)\n */\n tabIndex?: number;\n \n /**\n * Indicates whether the element should be hidden from assistive technologies.\n */\n 'aria-hidden'?: boolean;\n \n /**\n * Indicates whether the element is live and should be announced.\n */\n 'aria-live'?: 'off' | 'polite' | 'assertive';\n \n /**\n * Indicates whether the element is atomic for live regions.\n */\n 'aria-atomic'?: boolean;\n \n /**\n * Indicates the level of heading (for headings).\n */\n 'aria-level'?: number;\n \n /**\n * Indicates the position in a set (for list items, etc.).\n */\n 'aria-posinset'?: number;\n \n /**\n * Indicates the size of a set (for list items, etc.).\n */\n 'aria-setsize'?: number;\n \n /**\n * Indicates whether the element has a popup.\n */\n 'aria-haspopup'?: boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\n \n /**\n * Indicates the orientation of the element.\n */\n 'aria-orientation'?: 'horizontal' | 'vertical';\n \n /**\n * Indicates the value of the element.\n */\n 'aria-valuenow'?: number;\n \n /**\n * Indicates the minimum value.\n */\n 'aria-valuemin'?: number;\n \n /**\n * Indicates the maximum value.\n */\n 'aria-valuemax'?: number;\n \n /**\n * Human-readable text alternative of aria-valuenow.\n */\n 'aria-valuetext'?: string;\n \n /**\n * Indicates whether the element is busy.\n */\n 'aria-busy'?: boolean;\n \n /**\n * Indicates the element's controls.\n */\n 'aria-controls'?: string;\n \n /**\n * Indicates the element's owns.\n */\n 'aria-owns'?: string;\n}\n\n/**\n * Options for generating default accessibility props\n */\nexport interface AccessibilityDefaultsOptions {\n /**\n * Component type/name for generating appropriate defaults\n */\n componentType?: string;\n \n /**\n * Children content to extract text from\n */\n children?: React.ReactNode;\n \n /**\n * Whether the element is disabled\n */\n disabled?: boolean;\n \n /**\n * Whether the element is loading\n */\n loading?: boolean;\n \n /**\n * Whether the element is required\n */\n required?: boolean;\n \n /**\n * Whether the element has an error\n */\n error?: boolean;\n \n /**\n * Error message for the element\n */\n errorMessage?: string;\n \n /**\n * Description or help text for the element\n */\n description?: string;\n \n /**\n * Label text for the element\n */\n label?: string;\n \n /**\n * ID for the element (used for generating related IDs)\n */\n id?: string;\n \n /**\n * Start icon name (for icon-only detection)\n */\n startIcon?: string;\n \n /**\n * End icon name (for icon-only detection)\n */\n endIcon?: string;\n}\n\n/**\n * Extracts text content from React children\n */\nexport function extractTextFromChildren(children: React.ReactNode): string {\n if (typeof children === 'string') {\n return children.trim();\n }\n \n if (typeof children === 'number') {\n return String(children);\n }\n \n if (Array.isArray(children)) {\n return children.map(extractTextFromChildren).join(' ').trim();\n }\n \n if (React.isValidElement(children) && children.props) {\n if (children.props.children) {\n return extractTextFromChildren(children.props.children);\n }\n }\n \n return '';\n}\n\n/**\n * Generates default accessibility props based on component state and options\n * \n * @param options - Options for generating defaults\n * @param userProps - User-provided accessibility props (will override defaults)\n * @returns Merged accessibility props with user props taking precedence\n */\nexport function generateAccessibilityDefaults(\n options: AccessibilityDefaultsOptions,\n userProps: Partial<AccessibilityProps> = {}\n): AccessibilityProps {\n const {\n componentType,\n children,\n disabled,\n loading,\n required,\n error,\n errorMessage,\n description,\n label,\n id,\n } = options;\n\n const defaults: AccessibilityProps = {};\n\n // Generate aria-label from children if not provided\n if (!userProps['aria-label'] && !userProps['aria-labelledby']) {\n const textContent = extractTextFromChildren(children);\n if (textContent) {\n defaults['aria-label'] = textContent;\n } else if (label) {\n defaults['aria-label'] = label;\n }\n }\n\n // Handle disabled state\n if (disabled !== undefined) {\n defaults['aria-disabled'] = disabled;\n }\n\n // Handle loading state\n if (loading) {\n defaults['aria-busy'] = true;\n if (!userProps['aria-label']) {\n const baseLabel = defaults['aria-label'] || extractTextFromChildren(children) || 'Loading';\n defaults['aria-label'] = `${baseLabel}, loading`;\n }\n }\n\n // Handle required state\n if (required !== undefined) {\n defaults['aria-required'] = required;\n }\n\n // Handle error state\n if (error !== undefined) {\n defaults['aria-invalid'] = error;\n \n if (error && errorMessage && id) {\n const errorId = `${id}-error`;\n defaults['aria-errormessage'] = errorId;\n defaults['aria-describedby'] = userProps['aria-describedby']\n ? `${userProps['aria-describedby']} ${errorId}`\n : errorId;\n }\n }\n\n // Handle description\n if (description && id && !userProps['aria-describedby']) {\n const descId = `${id}-description`;\n defaults['aria-describedby'] = userProps['aria-describedby']\n ? `${userProps['aria-describedby']} ${descId}`\n : descId;\n }\n\n // Component-specific defaults\n if (componentType === 'button') {\n if (!userProps.role && !userProps['aria-label']) {\n // Buttons don't need explicit role unless they're not actually buttons\n defaults.role = 'button';\n }\n }\n\n if (componentType === 'link') {\n defaults.role = 'link';\n }\n\n // Merge user props (user props take precedence)\n return {\n ...defaults,\n ...userProps,\n };\n}\n\n/**\n * Merges accessibility props with user-provided props\n * User props always take precedence over defaults\n */\nexport function mergeAccessibilityProps(\n defaults: AccessibilityProps,\n userProps: Partial<AccessibilityProps>\n): AccessibilityProps {\n return {\n ...defaults,\n ...userProps,\n };\n}\n\n/**\n * Validates accessibility props and returns warnings in development\n */\nexport function validateAccessibilityProps(\n props: AccessibilityProps,\n componentType: string,\n options: { children?: React.ReactNode; iconOnly?: boolean } = {}\n): void {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const warnings: string[] = [];\n\n // Check for icon-only buttons without aria-label\n if (componentType === 'button' && options.iconOnly && !props['aria-label'] && !props['aria-labelledby']) {\n warnings.push(\n `[pd-design] Icon-only button should have an aria-label or aria-labelledby for accessibility.`\n );\n }\n\n // Check for interactive elements without accessible name\n if (\n (componentType === 'button' || componentType === 'link') &&\n !props['aria-label'] &&\n !props['aria-labelledby'] &&\n !extractTextFromChildren(options.children)\n ) {\n warnings.push(\n `[pd-design] ${componentType} should have an accessible name (aria-label, aria-labelledby, or text content).`\n );\n }\n\n // Check for form inputs without labels\n if (\n (componentType === 'input' || componentType === 'select' || componentType === 'textarea') &&\n !props['aria-label'] &&\n !props['aria-labelledby']\n ) {\n warnings.push(\n `[pd-design] ${componentType} should have an accessible label (aria-label or aria-labelledby).`\n );\n }\n\n // Warn about invalid tabIndex values\n if (props.tabIndex !== undefined && props.tabIndex > 0) {\n warnings.push(\n `[pd-design] tabIndex > 0 is not recommended. Use tabIndex={0} for focusable elements or tabIndex={-1} for programmatic focus only.`\n );\n }\n\n // Output warnings\n warnings.forEach(warning => console.warn(warning));\n}\n\n/**\n * Generates unique IDs for accessibility relationships\n */\nlet idCounter = 0;\nexport function generateId(prefix: string = 'pd'): string {\n return `${prefix}-${++idCounter}-${Date.now()}`;\n}\n\n/**\n * Keyboard event handlers for common patterns\n */\nexport interface KeyboardHandlers {\n onEnter?: (event: React.KeyboardEvent) => void;\n onEscape?: (event: React.KeyboardEvent) => void;\n onArrowUp?: (event: React.KeyboardEvent) => void;\n onArrowDown?: (event: React.KeyboardEvent) => void;\n onArrowLeft?: (event: React.KeyboardEvent) => void;\n onArrowRight?: (event: React.KeyboardEvent) => void;\n onHome?: (event: React.KeyboardEvent) => void;\n onEnd?: (event: React.KeyboardEvent) => void;\n onSpace?: (event: React.KeyboardEvent) => void;\n}\n\n/**\n * Creates a keyboard event handler that calls appropriate callbacks\n */\nexport function createKeyboardHandler(handlers: KeyboardHandlers) {\n return (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n handlers.onEnter?.(event);\n break;\n case 'Escape':\n handlers.onEscape?.(event);\n break;\n case 'ArrowUp':\n handlers.onArrowUp?.(event);\n break;\n case 'ArrowDown':\n handlers.onArrowDown?.(event);\n break;\n case 'ArrowLeft':\n handlers.onArrowLeft?.(event);\n break;\n case 'ArrowRight':\n handlers.onArrowRight?.(event);\n break;\n case 'Home':\n handlers.onHome?.(event);\n break;\n case 'End':\n handlers.onEnd?.(event);\n break;\n case ' ':\n handlers.onSpace?.(event);\n event.preventDefault(); // Prevent page scroll\n break;\n }\n };\n}\n"]}
|