UNPKG

create-slots

Version:
2 lines 1.92 kB
import*as n from"react";import*as p from"react";var i=typeof window>"u"?p.useEffect:p.useLayoutEffect,f=e=>{let r=p.createContext(e);return r.displayName="SlotsContext",r},d=e=>typeof e=="string"?e:e.displayName||e.name||"Component",y=["$$typeof","render","displayName","defaultProps"],m=(e,r)=>{if(typeof r=="string")return e;let t=Object.getOwnPropertyNames(r).reduce((o,s)=>(y.includes(s)||(o[s]=r[s]),o),{});return Object.assign(e,t)};import*as c from"react";var u="slots-wrapper",x=new RegExp(`^<${u}>.*</${u}>$`),R=({name:e,forceUpdate:r,children:t})=>{let o=c.useRef(null),s=c.useRef(!1);return i(()=>{var a;if(!s.current&&((a=o.current)==null?void 0:a.innerHTML)){let l=o.current.innerHTML;l&&!x.test(l)&&console.warn(`Unwrapped children found in "${e}", either wrap them in slots or remove`)}s.current=!0,r()},[e]),s.current?c.createElement(c.Fragment,null,t):c.createElement(u,{ref:o},t)};var S=e=>{let r=new Map;return{register(t,o){r.set(t,o)},update(t,o){r.set(t,o),e(t)},unmount(t){r.delete(t),e(t)},get(t){return r.get(t)},getProps(t){let o=r.get(t);if(!o)return;let{ref:s,props:a}=o;return s?{...a,ref:s}:a}}};var T=f(void 0),E=({children:e})=>e(),C=({children:e,callback:r})=>{let t=n.useReducer(()=>[],[])[1],o=n.useMemo(()=>S(t),[t]);return n.createElement(n.Fragment,null,n.createElement(T.Provider,{value:o},process.env.NODE_ENV==="production"?e:n.createElement(R,{name:"HostSlots",forceUpdate:t},e)),n.createElement(E,null,()=>r(o)))},$=(e,r)=>n.createElement(C,{children:e,callback:r}),D=e=>{let r=(o,s)=>{let a=n.useContext(T);if(!a)return e?n.createElement(e,{ref:s,...o}):null;let l=n.createElement(t,{ref:s,...o});return n.useState(()=>a.register(t,l)),n.useEffect(()=>a.update(t,l)),n.useEffect(()=>()=>a.unmount(t),[a]),null};r.displayName=e?`Slot(${d(e)})`:"Slot";let t=n.forwardRef(r);return e?m(t,e):t};export{C as HostSlots,$ as createHost,D as createSlot}; //# sourceMappingURL=index.js.map