koval-ui
Version:
React components collection with minimalistic design. Supports theming, layout, and input validation.
1 lines • 1.57 kB
Source Map (JSON)
{"version":3,"file":"Portal.cjs","sources":["../../../../src/internal/Portal/Portal.tsx"],"sourcesContent":["import type {FC, ReactNode} from 'react';\nimport {useId, useState} from 'react';\nimport {createPortal} from 'react-dom';\n\nimport {useSafeLayoutEffect} from '@/internal/hooks/useSafeLayoutEffect.ts';\n\nexport type Props = {\n children: ReactNode;\n};\n\nexport const Portal: FC<Props> = ({children}) => {\n const id = useId();\n const [portalRendered, setPortalRendered] = useState(false);\n useSafeLayoutEffect(() => {\n if (!portalRendered) {\n const element = document.createElement('div');\n element.id = id;\n document.body.appendChild(element);\n setPortalRendered(true);\n }\n return () => {\n portalRendered && document.getElementById(id)!.remove();\n };\n }, [id, portalRendered]);\n\n return portalRendered && createPortal(children, document.getElementById(id)!, id);\n};\n"],"names":["Portal","children","id","useId","portalRendered","setPortalRendered","useState","useSafeLayoutEffect","element","createPortal"],"mappings":"2LAUaA,EAAoB,CAAC,CAAC,SAAAC,KAAc,CAC7C,MAAMC,EAAKC,EAAAA,MAAM,EACX,CAACC,EAAgBC,CAAiB,EAAIC,EAAAA,SAAS,EAAK,EAC1DC,OAAAA,EAAAA,oBAAoB,IAAM,CACtB,GAAI,CAACH,EAAgB,CACX,MAAAI,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,GAAKN,EACJ,SAAA,KAAK,YAAYM,CAAO,EACjCH,EAAkB,EAAI,CAAA,CAE1B,MAAO,IAAM,CACTD,GAAkB,SAAS,eAAeF,CAAE,EAAG,OAAO,CAC1D,CAAA,EACD,CAACA,EAAIE,CAAc,CAAC,EAEhBA,GAAkBK,EAAAA,aAAaR,EAAU,SAAS,eAAeC,CAAE,EAAIA,CAAE,CACpF"}