{"version":3,"file":"progressive-enhancement-hooks.mjs","sources":["../../../src/lib/ux/progressive-enhancement-hooks.ts"],"sourcesContent":["/**\n * @file Progressive Enhancement Hooks\n * @description React hooks for progressive enhancement functionality\n */\n\nimport { useContext, useCallback, useMemo } from 'react';\nimport {\n  ProgressiveEnhancementContext,\n  type ProgressiveEnhancementContextValue,\n} from '../contexts/ProgressiveEnhancementContext';\nimport type { BrowserCapabilities, CapabilityLevel } from './progressive-enhancement';\n\n/**\n * Use progressive enhancement context\n */\nexport function useProgressiveEnhancement(): ProgressiveEnhancementContextValue {\n  const context = useContext(ProgressiveEnhancementContext);\n  if (!context) {\n    throw new Error(\n      'useProgressiveEnhancement must be used within a ProgressiveEnhancementProvider'\n    );\n  }\n  return context;\n}\n\n/**\n * Use feature with progressive loading\n */\nexport function useProgressiveFeature<T = unknown>(\n  featureId: string,\n  options: {\n    autoLoad?: boolean;\n    fallback?: T;\n  } = {}\n): {\n  module: T | null;\n  level: CapabilityLevel;\n  loading: boolean;\n  error: Error | null;\n  load: () => Promise<T>;\n} {\n  const { autoLoad = true, fallback } = options;\n  const { features, loadFeature, getFeatureLevel } = useProgressiveEnhancement();\n\n  const status = features.get(featureId);\n\n  const load = useCallback(async (): Promise<T> => {\n    try {\n      const result = await loadFeature(featureId);\n      return (result as T) ?? (fallback as T);\n    } catch (error) {\n      throw error instanceof Error ? error : new Error(String(error));\n    }\n  }, [featureId, loadFeature, fallback]);\n\n  // Auto-load if enabled and not loaded\n  useMemo(() => {\n    if (autoLoad && status?.loaded !== true && status?.loading !== true) {\n      void load();\n    }\n  }, [autoLoad, status, load]);\n\n  return {\n    module: (status?.module as T) ?? null,\n    level: getFeatureLevel(featureId),\n    loading: status?.loading ?? false,\n    error: status?.error ?? null,\n    load,\n  };\n}\n\n/**\n * Use capability check\n */\nexport function useCapability(capability: keyof BrowserCapabilities): boolean {\n  const { hasCapability } = useProgressiveEnhancement();\n  return hasCapability(capability);\n}\n\n/**\n * Use multiple capabilities\n */\nexport function useCapabilities(\n  capabilities: Array<keyof BrowserCapabilities>\n): Record<string, boolean> {\n  const { hasCapability } = useProgressiveEnhancement();\n  return useMemo(() => {\n    const result: Record<string, boolean> = {};\n    capabilities.forEach((cap) => {\n      result[cap] = hasCapability(cap);\n    });\n    return result;\n  }, [capabilities, hasCapability]);\n}\n\n/**\n * Use capability conditional\n */\nexport function useCapabilityConditional<T>(\n  capability: keyof BrowserCapabilities,\n  trueValue: T,\n  falseValue: T\n): T {\n  const hasCapability = useCapability(capability);\n  return hasCapability ? trueValue : falseValue;\n}\n"],"names":["useProgressiveEnhancement","context","useContext","ProgressiveEnhancementContext","useProgressiveFeature","featureId","options","autoLoad","fallback","features","loadFeature","getFeatureLevel","status","load","useCallback","error","useMemo","useCapability","capability","hasCapability","useCapabilities","capabilities","result","cap","useCapabilityConditional","trueValue","falseValue"],"mappings":";;AAeO,SAASA,IAAgE;AAC9E,QAAMC,IAAUC,EAAWC,CAA6B;AACxD,MAAI,CAACF;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;AAKO,SAASG,EACdC,GACAC,IAGI,IAOJ;AACA,QAAM,EAAE,UAAAC,IAAW,IAAM,UAAAC,EAAA,IAAaF,GAChC,EAAE,UAAAG,GAAU,aAAAC,GAAa,iBAAAC,EAAA,IAAoBX,EAAA,GAE7CY,IAASH,EAAS,IAAIJ,CAAS,GAE/BQ,IAAOC,EAAY,YAAwB;AAC/C,QAAI;AAEF,aADe,MAAMJ,EAAYL,CAAS,KACjBG;AAAA,IAC3B,SAASO,GAAO;AACd,YAAMA,aAAiB,QAAQA,IAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC;AAAA,IAChE;AAAA,EACF,GAAG,CAACV,GAAWK,GAAaF,CAAQ,CAAC;AAGrC,SAAAQ,EAAQ,MAAM;AACZ,IAAIT,KAAYK,GAAQ,WAAW,MAAQA,GAAQ,YAAY,MACxDC,EAAA;AAAA,EAET,GAAG,CAACN,GAAUK,GAAQC,CAAI,CAAC,GAEpB;AAAA,IACL,QAASD,GAAQ,UAAgB;AAAA,IACjC,OAAOD,EAAgBN,CAAS;AAAA,IAChC,SAASO,GAAQ,WAAW;AAAA,IAC5B,OAAOA,GAAQ,SAAS;AAAA,IACxB,MAAAC;AAAA,EAAA;AAEJ;AAKO,SAASI,EAAcC,GAAgD;AAC5E,QAAM,EAAE,eAAAC,EAAA,IAAkBnB,EAAA;AAC1B,SAAOmB,EAAcD,CAAU;AACjC;AAKO,SAASE,EACdC,GACyB;AACzB,QAAM,EAAE,eAAAF,EAAA,IAAkBnB,EAAA;AAC1B,SAAOgB,EAAQ,MAAM;AACnB,UAAMM,IAAkC,CAAA;AACxC,WAAAD,EAAa,QAAQ,CAACE,MAAQ;AAC5B,MAAAD,EAAOC,CAAG,IAAIJ,EAAcI,CAAG;AAAA,IACjC,CAAC,GACMD;AAAA,EACT,GAAG,CAACD,GAAcF,CAAa,CAAC;AAClC;AAKO,SAASK,EACdN,GACAO,GACAC,GACG;AAEH,SADsBT,EAAcC,CAAU,IACvBO,IAAYC;AACrC;"}