{"version":3,"file":"ui-flags.mjs","sources":["../../../../src/lib/flags/integration/ui-flags.tsx"],"sourcesContent":["/**\n * @fileoverview UI feature flags for controlling component behavior.\n *\n * This module provides feature flag integration for the UI layer, enabling\n * dynamic control over components, themes, accessibility, and visual features.\n *\n * @module flags/integration/ui-flags\n *\n * @example\n * ```typescript\n * import {\n *   uiFlags,\n *   useUiFlagConfig,\n *   FlaggedUIComponent,\n * } from '@/lib/flags/integration/ui-flags';\n *\n * // Check UI feature flags\n * if (uiFlags.isDarkModeEnabled()) {\n *   // Apply dark mode styles\n * }\n *\n * // Use in component\n * function Dashboard() {\n *   const config = useUiFlagConfig();\n *   // config.darkModeEnabled, config.animationsEnabled, etc.\n * }\n * ```\n */\n\n/* eslint-disable react-refresh/only-export-components */\nimport React, { useMemo, type ComponentType, type ReactNode } from 'react';\nimport {\n  createLibraryIntegration,\n  useLibraryFlags,\n  integrationRegistry,\n  type LibraryIntegration,\n} from './library-integration';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * UI flag keys\n */\nexport const UI_FLAG_KEYS = {\n  /** Enable dark mode */\n  UI_DARK_MODE_ENABLED: 'ui-dark-mode-enabled',\n  /** Enable animations */\n  UI_ANIMATIONS_ENABLED: 'ui-animations-enabled',\n  /** Enable reduced motion */\n  UI_REDUCED_MOTION_ENABLED: 'ui-reduced-motion-enabled',\n  /** Enable high contrast mode */\n  UI_HIGH_CONTRAST_ENABLED: 'ui-high-contrast-enabled',\n  /** Enable compact mode */\n  UI_COMPACT_MODE_ENABLED: 'ui-compact-mode-enabled',\n  /** Enable skeleton loading */\n  UI_SKELETON_LOADING_ENABLED: 'ui-skeleton-loading-enabled',\n  /** Enable virtual scrolling */\n  UI_VIRTUAL_SCROLL_ENABLED: 'ui-virtual-scroll-enabled',\n  /** Enable tooltips */\n  UI_TOOLTIPS_ENABLED: 'ui-tooltips-enabled',\n  /** Enable notifications */\n  UI_NOTIFICATIONS_ENABLED: 'ui-notifications-enabled',\n  /** Enable modals */\n  UI_MODALS_ENABLED: 'ui-modals-enabled',\n  /** Enable sidebars */\n  UI_SIDEBARS_ENABLED: 'ui-sidebars-enabled',\n  /** Enable new design system */\n  UI_DESIGN_SYSTEM_V2: 'ui-design-system-v2',\n  /** Enable experimental components */\n  UI_EXPERIMENTAL_ENABLED: 'ui-experimental-enabled',\n  /** Enable keyboard shortcuts */\n  UI_KEYBOARD_SHORTCUTS_ENABLED: 'ui-keyboard-shortcuts-enabled',\n  /** Enable drag and drop */\n  UI_DND_ENABLED: 'ui-dnd-enabled',\n  /** Enable inline editing */\n  UI_INLINE_EDIT_ENABLED: 'ui-inline-edit-enabled',\n} as const;\n\nexport type UiFlagKey = (typeof UI_FLAG_KEYS)[keyof typeof UI_FLAG_KEYS];\n\n/**\n * UI flag configuration\n */\nexport interface UiFlagConfig {\n  /** Enable dark mode */\n  readonly darkModeEnabled: boolean;\n  /** Enable animations */\n  readonly animationsEnabled: boolean;\n  /** Enable reduced motion */\n  readonly reducedMotionEnabled: boolean;\n  /** Enable high contrast */\n  readonly highContrastEnabled: boolean;\n  /** Enable compact mode */\n  readonly compactModeEnabled: boolean;\n  /** Enable skeleton loading */\n  readonly skeletonLoadingEnabled: boolean;\n  /** Enable virtual scrolling */\n  readonly virtualScrollEnabled: boolean;\n  /** Enable tooltips */\n  readonly tooltipsEnabled: boolean;\n  /** Enable notifications */\n  readonly notificationsEnabled: boolean;\n  /** Enable modals */\n  readonly modalsEnabled: boolean;\n  /** Enable sidebars */\n  readonly sidebarsEnabled: boolean;\n  /** Use design system v2 */\n  readonly designSystemV2: boolean;\n  /** Enable experimental */\n  readonly experimentalEnabled: boolean;\n  /** Enable keyboard shortcuts */\n  readonly keyboardShortcutsEnabled: boolean;\n  /** Enable drag and drop */\n  readonly dndEnabled: boolean;\n  /** Enable inline editing */\n  readonly inlineEditEnabled: boolean;\n  /** Index signature for Record<string, unknown> compatibility */\n  [key: string]: unknown;\n}\n\n/**\n * Component variant configuration\n */\nexport interface ComponentVariantConfig<P = unknown> {\n  /** Component identifier */\n  readonly componentId: string;\n  /** Feature flag key */\n  readonly flagKey: string;\n  /** Variant A (flag disabled) */\n  readonly variantA: ComponentType<P>;\n  /** Variant B (flag enabled) */\n  readonly variantB: ComponentType<P>;\n  /** Track variant exposure */\n  readonly trackExposure?: boolean;\n}\n\n/**\n * Style variant configuration\n */\nexport interface StyleVariantConfig {\n  /** Style identifier */\n  readonly styleId: string;\n  /** Feature flag key */\n  readonly flagKey: string;\n  /** Styles when flag is disabled */\n  readonly disabledStyles: Record<string, string | number>;\n  /** Styles when flag is enabled */\n  readonly enabledStyles: Record<string, string | number>;\n}\n\n// =============================================================================\n// Default Configuration\n// =============================================================================\n\n/**\n * Default UI flag configuration\n */\nexport const DEFAULT_UI_FLAG_CONFIG: UiFlagConfig = {\n  darkModeEnabled: false,\n  animationsEnabled: true,\n  reducedMotionEnabled: false,\n  highContrastEnabled: false,\n  compactModeEnabled: false,\n  skeletonLoadingEnabled: true,\n  virtualScrollEnabled: false,\n  tooltipsEnabled: true,\n  notificationsEnabled: true,\n  modalsEnabled: true,\n  sidebarsEnabled: true,\n  designSystemV2: false,\n  experimentalEnabled: false,\n  keyboardShortcutsEnabled: true,\n  dndEnabled: false,\n  inlineEditEnabled: false,\n};\n\n// =============================================================================\n// Library Integration\n// =============================================================================\n\n/**\n * Create UI flag integration\n */\nexport function createUiFlagIntegration(): LibraryIntegration<UiFlagConfig> {\n  return createLibraryIntegration<UiFlagConfig>({\n    libraryId: 'ui',\n    defaultConfig: DEFAULT_UI_FLAG_CONFIG,\n    flagMappings: {\n      [UI_FLAG_KEYS.UI_DARK_MODE_ENABLED]: 'darkModeEnabled',\n      [UI_FLAG_KEYS.UI_ANIMATIONS_ENABLED]: 'animationsEnabled',\n      [UI_FLAG_KEYS.UI_REDUCED_MOTION_ENABLED]: 'reducedMotionEnabled',\n      [UI_FLAG_KEYS.UI_HIGH_CONTRAST_ENABLED]: 'highContrastEnabled',\n      [UI_FLAG_KEYS.UI_COMPACT_MODE_ENABLED]: 'compactModeEnabled',\n      [UI_FLAG_KEYS.UI_SKELETON_LOADING_ENABLED]: 'skeletonLoadingEnabled',\n      [UI_FLAG_KEYS.UI_VIRTUAL_SCROLL_ENABLED]: 'virtualScrollEnabled',\n      [UI_FLAG_KEYS.UI_TOOLTIPS_ENABLED]: 'tooltipsEnabled',\n      [UI_FLAG_KEYS.UI_NOTIFICATIONS_ENABLED]: 'notificationsEnabled',\n      [UI_FLAG_KEYS.UI_MODALS_ENABLED]: 'modalsEnabled',\n      [UI_FLAG_KEYS.UI_SIDEBARS_ENABLED]: 'sidebarsEnabled',\n      [UI_FLAG_KEYS.UI_DESIGN_SYSTEM_V2]: 'designSystemV2',\n      [UI_FLAG_KEYS.UI_EXPERIMENTAL_ENABLED]: 'experimentalEnabled',\n      [UI_FLAG_KEYS.UI_KEYBOARD_SHORTCUTS_ENABLED]: 'keyboardShortcutsEnabled',\n      [UI_FLAG_KEYS.UI_DND_ENABLED]: 'dndEnabled',\n      [UI_FLAG_KEYS.UI_INLINE_EDIT_ENABLED]: 'inlineEditEnabled',\n    },\n    onConfigChange: (config, changedFlags) => {\n      console.info('[UI Flags] Config changed:', changedFlags, config);\n\n      // Apply dark mode to document\n      if (changedFlags.includes(UI_FLAG_KEYS.UI_DARK_MODE_ENABLED)) {\n        document.documentElement.classList.toggle('dark', config.darkModeEnabled);\n      }\n\n      // Apply reduced motion preference\n      if (changedFlags.includes(UI_FLAG_KEYS.UI_REDUCED_MOTION_ENABLED)) {\n        document.documentElement.classList.toggle('reduce-motion', config.reducedMotionEnabled);\n      }\n\n      // Apply high contrast mode\n      if (changedFlags.includes(UI_FLAG_KEYS.UI_HIGH_CONTRAST_ENABLED)) {\n        document.documentElement.classList.toggle('high-contrast', config.highContrastEnabled);\n      }\n\n      // Apply compact mode\n      if (changedFlags.includes(UI_FLAG_KEYS.UI_COMPACT_MODE_ENABLED)) {\n        document.documentElement.classList.toggle('compact', config.compactModeEnabled);\n      }\n    },\n  });\n}\n\n// Initialize and register the UI integration\nconst uiIntegration = createUiFlagIntegration();\nintegrationRegistry.register(uiIntegration);\n\n// =============================================================================\n// UI Flag Helpers\n// =============================================================================\n\n/**\n * UI flags helper class\n */\nclass UiFlagsHelper {\n  setFlagGetter(getter: (flagKey: string) => boolean): void {\n    this.getFlag = getter;\n  }\n\n  isDarkModeEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_DARK_MODE_ENABLED);\n  }\n\n  isAnimationsEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_ANIMATIONS_ENABLED);\n  }\n\n  isReducedMotionEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_REDUCED_MOTION_ENABLED);\n  }\n\n  isHighContrastEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_HIGH_CONTRAST_ENABLED);\n  }\n\n  isCompactModeEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_COMPACT_MODE_ENABLED);\n  }\n\n  isSkeletonLoadingEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_SKELETON_LOADING_ENABLED);\n  }\n\n  isVirtualScrollEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_VIRTUAL_SCROLL_ENABLED);\n  }\n\n  isTooltipsEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_TOOLTIPS_ENABLED);\n  }\n\n  isNotificationsEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_NOTIFICATIONS_ENABLED);\n  }\n\n  isModalsEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_MODALS_ENABLED);\n  }\n\n  isSidebarsEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_SIDEBARS_ENABLED);\n  }\n\n  isDesignSystemV2Enabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_DESIGN_SYSTEM_V2);\n  }\n\n  isExperimentalEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_EXPERIMENTAL_ENABLED);\n  }\n\n  isKeyboardShortcutsEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_KEYBOARD_SHORTCUTS_ENABLED);\n  }\n\n  isDndEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_DND_ENABLED);\n  }\n\n  isInlineEditEnabled(): boolean {\n    return this.getFlag(UI_FLAG_KEYS.UI_INLINE_EDIT_ENABLED);\n  }\n\n  getAllFlags(): Record<UiFlagKey, boolean> {\n    return {\n      [UI_FLAG_KEYS.UI_DARK_MODE_ENABLED]: this.isDarkModeEnabled(),\n      [UI_FLAG_KEYS.UI_ANIMATIONS_ENABLED]: this.isAnimationsEnabled(),\n      [UI_FLAG_KEYS.UI_REDUCED_MOTION_ENABLED]: this.isReducedMotionEnabled(),\n      [UI_FLAG_KEYS.UI_HIGH_CONTRAST_ENABLED]: this.isHighContrastEnabled(),\n      [UI_FLAG_KEYS.UI_COMPACT_MODE_ENABLED]: this.isCompactModeEnabled(),\n      [UI_FLAG_KEYS.UI_SKELETON_LOADING_ENABLED]: this.isSkeletonLoadingEnabled(),\n      [UI_FLAG_KEYS.UI_VIRTUAL_SCROLL_ENABLED]: this.isVirtualScrollEnabled(),\n      [UI_FLAG_KEYS.UI_TOOLTIPS_ENABLED]: this.isTooltipsEnabled(),\n      [UI_FLAG_KEYS.UI_NOTIFICATIONS_ENABLED]: this.isNotificationsEnabled(),\n      [UI_FLAG_KEYS.UI_MODALS_ENABLED]: this.isModalsEnabled(),\n      [UI_FLAG_KEYS.UI_SIDEBARS_ENABLED]: this.isSidebarsEnabled(),\n      [UI_FLAG_KEYS.UI_DESIGN_SYSTEM_V2]: this.isDesignSystemV2Enabled(),\n      [UI_FLAG_KEYS.UI_EXPERIMENTAL_ENABLED]: this.isExperimentalEnabled(),\n      [UI_FLAG_KEYS.UI_KEYBOARD_SHORTCUTS_ENABLED]: this.isKeyboardShortcutsEnabled(),\n      [UI_FLAG_KEYS.UI_DND_ENABLED]: this.isDndEnabled(),\n      [UI_FLAG_KEYS.UI_INLINE_EDIT_ENABLED]: this.isInlineEditEnabled(),\n    };\n  }\n\n  private getFlag: (flagKey: string) => boolean = () => false;\n}\n\n/**\n * Global UI flags helper instance\n */\nexport const uiFlags = new UiFlagsHelper();\n\n// =============================================================================\n// React Hooks\n// =============================================================================\n\n/**\n * Hook to get UI flag configuration\n */\nexport function useUiFlagConfig(): UiFlagConfig {\n  const config = useLibraryFlags<UiFlagConfig>('ui');\n  return config ?? DEFAULT_UI_FLAG_CONFIG;\n}\n\n/**\n * Hook to check a specific UI flag\n */\nexport function useUiFlag(flagKey: UiFlagKey): boolean {\n  const config = useUiFlagConfig();\n\n  return useMemo(() => {\n    switch (flagKey) {\n      case UI_FLAG_KEYS.UI_DARK_MODE_ENABLED:\n        return config.darkModeEnabled;\n      case UI_FLAG_KEYS.UI_ANIMATIONS_ENABLED:\n        return config.animationsEnabled;\n      case UI_FLAG_KEYS.UI_REDUCED_MOTION_ENABLED:\n        return config.reducedMotionEnabled;\n      case UI_FLAG_KEYS.UI_HIGH_CONTRAST_ENABLED:\n        return config.highContrastEnabled;\n      case UI_FLAG_KEYS.UI_COMPACT_MODE_ENABLED:\n        return config.compactModeEnabled;\n      case UI_FLAG_KEYS.UI_SKELETON_LOADING_ENABLED:\n        return config.skeletonLoadingEnabled;\n      case UI_FLAG_KEYS.UI_VIRTUAL_SCROLL_ENABLED:\n        return config.virtualScrollEnabled;\n      case UI_FLAG_KEYS.UI_TOOLTIPS_ENABLED:\n        return config.tooltipsEnabled;\n      case UI_FLAG_KEYS.UI_NOTIFICATIONS_ENABLED:\n        return config.notificationsEnabled;\n      case UI_FLAG_KEYS.UI_MODALS_ENABLED:\n        return config.modalsEnabled;\n      case UI_FLAG_KEYS.UI_SIDEBARS_ENABLED:\n        return config.sidebarsEnabled;\n      case UI_FLAG_KEYS.UI_DESIGN_SYSTEM_V2:\n        return config.designSystemV2;\n      case UI_FLAG_KEYS.UI_EXPERIMENTAL_ENABLED:\n        return config.experimentalEnabled;\n      case UI_FLAG_KEYS.UI_KEYBOARD_SHORTCUTS_ENABLED:\n        return config.keyboardShortcutsEnabled;\n      case UI_FLAG_KEYS.UI_DND_ENABLED:\n        return config.dndEnabled;\n      case UI_FLAG_KEYS.UI_INLINE_EDIT_ENABLED:\n        return config.inlineEditEnabled;\n      default:\n        return false;\n    }\n  }, [config, flagKey]);\n}\n\n/**\n * Hook for animation settings based on flags\n */\nexport function useAnimationSettings(): {\n  enabled: boolean;\n  duration: number;\n  easing: string;\n} {\n  const config = useUiFlagConfig();\n\n  return useMemo(() => {\n    if (!config.animationsEnabled || config.reducedMotionEnabled) {\n      return {\n        enabled: false,\n        duration: 0,\n        easing: 'linear',\n      };\n    }\n\n    return {\n      enabled: true,\n      duration: 200,\n      easing: 'ease-in-out',\n    };\n  }, [config.animationsEnabled, config.reducedMotionEnabled]);\n}\n\n/**\n * Hook for theme settings based on flags\n */\nexport function useThemeSettings(): {\n  isDark: boolean;\n  isHighContrast: boolean;\n  isCompact: boolean;\n  themeClass: string;\n} {\n  const config = useUiFlagConfig();\n\n  return useMemo(() => {\n    const classes: string[] = [];\n\n    if (config.darkModeEnabled) classes.push('dark');\n    if (config.highContrastEnabled) classes.push('high-contrast');\n    if (config.compactModeEnabled) classes.push('compact');\n\n    return {\n      isDark: config.darkModeEnabled,\n      isHighContrast: config.highContrastEnabled,\n      isCompact: config.compactModeEnabled,\n      themeClass: classes.join(' '),\n    };\n  }, [config.darkModeEnabled, config.highContrastEnabled, config.compactModeEnabled]);\n}\n\n// =============================================================================\n// Component Variants\n// =============================================================================\n\nconst componentVariants = new Map<string, ComponentVariantConfig>();\nconst styleVariants = new Map<string, StyleVariantConfig>();\n\n/**\n * Register a component variant\n */\nexport function registerComponentVariant<P>(config: ComponentVariantConfig<P>): void {\n  componentVariants.set(config.componentId, config as ComponentVariantConfig);\n}\n\n/**\n * Get component variant based on flag state\n */\nexport function getComponentVariant<P>(\n  componentId: string,\n  getFlag: (flagKey: string) => boolean\n): ComponentType<P> | null {\n  const config = componentVariants.get(componentId);\n  if (!config) return null;\n\n  const isEnabled = getFlag(config.flagKey);\n  return (isEnabled ? config.variantB : config.variantA) as ComponentType<P>;\n}\n\n/**\n * Register a style variant\n */\nexport function registerStyleVariant(config: StyleVariantConfig): void {\n  styleVariants.set(config.styleId, config);\n}\n\n/**\n * Get style variant based on flag state\n */\nexport function getStyleVariant(\n  styleId: string,\n  getFlag: (flagKey: string) => boolean\n): Record<string, string | number> {\n  const config = styleVariants.get(styleId);\n  if (!config) return {};\n\n  const isEnabled = getFlag(config.flagKey);\n  return isEnabled ? config.enabledStyles : config.disabledStyles;\n}\n\n/**\n * Hook to use component variant\n */\nexport function useComponentVariant<P>(\n  componentId: string,\n  getFlag: (flagKey: string) => boolean\n): ComponentType<P> | null {\n  return useMemo(\n    () => getComponentVariant<P>(componentId, getFlag),\n    [componentId, getFlag]\n  );\n}\n\n/**\n * Hook to use style variant\n */\nexport function useStyleVariant(\n  styleId: string,\n  getFlag: (flagKey: string) => boolean\n): Record<string, string | number> {\n  return useMemo(() => getStyleVariant(styleId, getFlag), [styleId, getFlag]);\n}\n\n// =============================================================================\n// Flagged UI Components\n// =============================================================================\n\n/**\n * Props for FlaggedUIComponent\n */\nexport interface FlaggedUIComponentProps<P = unknown> {\n  /** Feature flag key */\n  readonly flagKey: UiFlagKey | string;\n  /** Component when flag is enabled */\n  readonly enabledComponent: ComponentType<P>;\n  /** Component when flag is disabled */\n  readonly disabledComponent?: ComponentType<P>;\n  /** Props to pass to the component */\n  readonly componentProps?: P;\n  /** Fallback when disabled and no component */\n  readonly fallback?: ReactNode;\n  /** Flag getter function */\n  readonly getFlag?: (flagKey: string) => boolean;\n}\n\n/**\n * Render component based on flag state\n */\nexport function FlaggedUIComponent<P extends React.JSX.IntrinsicAttributes = React.JSX.IntrinsicAttributes>({\n  flagKey,\n  enabledComponent: EnabledComponent,\n  disabledComponent: DisabledComponent,\n  componentProps,\n  fallback = null,\n  getFlag,\n}: FlaggedUIComponentProps<P>): React.JSX.Element | null {\n  const config = useUiFlagConfig();\n\n  const isEnabled = useMemo(() => {\n    if (getFlag) return getFlag(flagKey);\n\n    // Check if it's a known UI flag key\n    for (const [, value] of Object.entries(UI_FLAG_KEYS)) {\n      if (value === flagKey) {\n        const key = flagKey.replace('ui-', '').replace(/-enabled$/, '').replace(/-/g, '');\n        // Map to config property\n        const configKey = `${key  }Enabled`;\n        return (config as Record<string, boolean>)[configKey] ?? false;\n      }\n    }\n\n    return false;\n  }, [flagKey, getFlag, config]);\n\n  if (isEnabled) {\n    return <EnabledComponent {...(componentProps as P)} />;\n  }\n\n  if (DisabledComponent) {\n    return <DisabledComponent {...(componentProps as P)} />;\n  }\n\n  return <>{fallback}</>;\n}\n\n/**\n * HOC to wrap component with flag check\n */\nexport function withUiFlag<P extends object>(\n  Component: ComponentType<P>,\n  flagKey: UiFlagKey | string,\n  options: {\n    fallback?: ComponentType<P>;\n    getFlag?: (flagKey: string) => boolean;\n  } = {}\n): ComponentType<P> {\n  const { fallback: FallbackComponent, getFlag } = options;\n\n  function WithUiFlag(props: P): React.JSX.Element | null {\n    return (\n      <FlaggedUIComponent<P>\n        flagKey={flagKey}\n        enabledComponent={Component}\n        disabledComponent={FallbackComponent}\n        componentProps={props}\n        getFlag={getFlag}\n      />\n    );\n  }\n\n  WithUiFlag.displayName = `WithUiFlag(${Component.displayName ?? Component.name ?? 'Component'})`;\n\n  return WithUiFlag;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get CSS classes based on UI flags\n */\nexport function getUiFlagClasses(\n  config: UiFlagConfig\n): string {\n  const classes: string[] = [];\n\n  if (config.darkModeEnabled) classes.push('dark-mode');\n  if (config.reducedMotionEnabled) classes.push('reduce-motion');\n  if (config.highContrastEnabled) classes.push('high-contrast');\n  if (config.compactModeEnabled) classes.push('compact-mode');\n  if (config.designSystemV2) classes.push('design-v2');\n\n  return classes.join(' ');\n}\n\n/**\n * Hook to get UI flag CSS classes\n */\nexport function useUiFlagClasses(): string {\n  const config = useUiFlagConfig();\n  return useMemo(() => getUiFlagClasses(config), [config]);\n}\n\n/**\n * Apply UI flags to document root\n */\nexport function applyUiFlagsToDocument(config: UiFlagConfig): void {\n  const root = document.documentElement;\n\n  root.classList.toggle('dark', config.darkModeEnabled);\n  root.classList.toggle('reduce-motion', config.reducedMotionEnabled);\n  root.classList.toggle('high-contrast', config.highContrastEnabled);\n  root.classList.toggle('compact', config.compactModeEnabled);\n  root.classList.toggle('design-v2', config.designSystemV2);\n}\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport { uiIntegration };\n\n\n"],"names":["UI_FLAG_KEYS","DEFAULT_UI_FLAG_CONFIG","createUiFlagIntegration","createLibraryIntegration","config","changedFlags","uiIntegration","integrationRegistry","UiFlagsHelper","getter","uiFlags","useUiFlagConfig","useLibraryFlags","useUiFlag","flagKey","useMemo","useAnimationSettings","useThemeSettings","classes","componentVariants","styleVariants","registerComponentVariant","getComponentVariant","componentId","getFlag","registerStyleVariant","getStyleVariant","styleId","useComponentVariant","useStyleVariant","FlaggedUIComponent","EnabledComponent","DisabledComponent","componentProps","fallback","value","configKey","jsx","withUiFlag","Component","options","FallbackComponent","WithUiFlag","props","getUiFlagClasses","useUiFlagClasses","applyUiFlagsToDocument","root"],"mappings":"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"}