{"version":3,"file":"Island.cjs","names":["withDefaultProps","DEFAULT_PROPS","GlobalContext","ISLAND_CONTEXT_KEY"],"sources":["../../src/Island/Island.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { hydrateRoot, type Root } from 'react-dom/client';\nimport { GlobalContext } from '../GlobalContext';\nimport { withDefaultProps } from '../withDefaultProps';\nimport { DEFAULT_PROPS, ISLAND_CONTEXT_KEY } from './constants';\nimport type { IslandProps, IslandDefaultProps } from './types';\n\nexport function Island(props: IslandProps) {\n  const p = withDefaultProps<IslandDefaultProps>(props, DEFAULT_PROPS);\n  const { client, media, fallback, children, idleTimeout, islandId } = p;\n  const ref = useRef<HTMLDivElement>(null);\n  const rootRef = useRef<Root | null>(null);\n\n  useEffect(() => {\n    if (client === 'none') return;\n\n    const element = ref.current;\n    if (!element) return;\n\n    let mounted = false;\n\n    const hydrate = () => {\n      if (mounted) return;\n      mounted = true;\n\n      rootRef.current = hydrateRoot(\n        element,\n        <GlobalContext update={{ [ISLAND_CONTEXT_KEY]: true }}>\n          {children}\n        </GlobalContext>,\n        {\n          onRecoverableError: err =>\n            console.warn('[Island] recoverable error during hydration', err),\n        },\n      );\n    };\n\n    if (client === 'load') {\n      hydrate();\n      return;\n    }\n\n    if (client === 'idle') {\n      if ('requestIdleCallback' in window) {\n        const handle = window.requestIdleCallback(hydrate, { timeout: idleTimeout });\n        return () => window.cancelIdleCallback(handle);\n      }\n      const timeout = setTimeout(hydrate, 200);\n      return () => clearTimeout(timeout);\n    }\n\n    if (client === 'visible') {\n      const observer = new IntersectionObserver(\n        ([entry]) => {\n          if (entry?.isIntersecting) {\n            hydrate();\n            observer.disconnect();\n          }\n        },\n        { rootMargin: '200px' }\n      );\n\n      observer.observe(element);\n      return () => observer.disconnect();\n    }\n\n    if (client === 'media' && media) {\n      const mql = window.matchMedia(media);\n      if (mql.matches) {\n        hydrate();\n      } else {\n        const onChange = () => {\n          if (mql.matches) {\n            hydrate();\n            mql.removeEventListener('change', onChange);\n          }\n        };\n        mql.addEventListener('change', onChange);\n        return () => mql.removeEventListener('change', onChange);\n      }\n    }\n\n    return undefined;\n  }, [client, media, children, idleTimeout]);\n\n  return (\n    <div\n      ref={ref}\n      data-island\n      data-client={client}\n      data-media={media || undefined}\n      data-island-id={islandId}\n      suppressHydrationWarning\n      style={{ display: 'contents' }}\n    >\n      <GlobalContext update={{ [ISLAND_CONTEXT_KEY]: true }}>\n        {client === 'none' ? children : fallback || children}\n      </GlobalContext>\n    </div>\n  );\n}\n\nexport default Island;\n"],"mappings":";;;;;;;;;;AASA,SAAgB,OAAO,OAAoB;CAEzC,MAAM,EAAE,QAAQ,OAAO,UAAU,UAAU,aAAa,aAD9CA,+BAAAA,iBAAqC,OAAOC,yBAAAA,aACe;CACrE,MAAM,OAAA,GAAA,MAAA,OAAA,CAA6B,IAAI;CACvC,MAAM,WAAA,GAAA,MAAA,OAAA,CAA8B,IAAI;CAExC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,WAAW,QAAQ;EAEvB,MAAM,UAAU,IAAI;EACpB,IAAI,CAAC,SAAS;EAEd,IAAI,UAAU;EAEd,MAAM,gBAAgB;GACpB,IAAI,SAAS;GACb,UAAU;GAEV,QAAQ,WAAA,GAAA,iBAAA,YAAA,CACN,SACA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,eAAD;IAAe,QAAQ,GAAGC,eAAAA,qBAAqB,KAAK;IACjD;GACY,CAAA,GACf,EACE,qBAAoB,QAClB,QAAQ,KAAK,+CAA+C,GAAG,EACnE,CACF;EACF;EAEA,IAAI,WAAW,QAAQ;GACrB,QAAQ;GACR;EACF;EAEA,IAAI,WAAW,QAAQ;GACrB,IAAI,yBAAyB,QAAQ;IACnC,MAAM,SAAS,OAAO,oBAAoB,SAAS,EAAE,SAAS,YAAY,CAAC;IAC3E,aAAa,OAAO,mBAAmB,MAAM;GAC/C;GACA,MAAM,UAAU,WAAW,SAAS,GAAG;GACvC,aAAa,aAAa,OAAO;EACnC;EAEA,IAAI,WAAW,WAAW;GACxB,MAAM,WAAW,IAAI,sBAClB,CAAC,WAAW;IACX,IAAI,OAAO,gBAAgB;KACzB,QAAQ;KACR,SAAS,WAAW;IACtB;GACF,GACA,EAAE,YAAY,QAAQ,CACxB;GAEA,SAAS,QAAQ,OAAO;GACxB,aAAa,SAAS,WAAW;EACnC;EAEA,IAAI,WAAW,WAAW,OAAO;GAC/B,MAAM,MAAM,OAAO,WAAW,KAAK;GACnC,IAAI,IAAI,SACN,QAAQ;QACH;IACL,MAAM,iBAAiB;KACrB,IAAI,IAAI,SAAS;MACf,QAAQ;MACR,IAAI,oBAAoB,UAAU,QAAQ;KAC5C;IACF;IACA,IAAI,iBAAiB,UAAU,QAAQ;IACvC,aAAa,IAAI,oBAAoB,UAAU,QAAQ;GACzD;EACF;CAGF,GAAG;EAAC;EAAQ;EAAO;EAAU;CAAW,CAAC;CAEzC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACO;EACL,eAAA;EACA,eAAa;EACb,cAAY,SAAS,KAAA;EACrB,kBAAgB;EAChB,0BAAA;EACA,OAAO,EAAE,SAAS,WAAW;YAE7B,iBAAA,GAAA,kBAAA,IAAA,CAACD,sBAAAA,eAAD;GAAe,QAAQ,GAAGC,eAAAA,qBAAqB,KAAK;aACjD,WAAW,SAAS,WAAW,YAAY;EAC/B,CAAA;CACZ,CAAA;AAET"}