create-slots
Version:
Bring slots to React components
2 lines • 3.4 kB
JavaScript
;var K=Object.create;var m=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var L=(e,t)=>{for(var r in t)m(e,r,{get:t[r],enumerable:!0})},E=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of D(t))!W.call(e,s)&&s!==r&&m(e,s,{get:()=>t[s],enumerable:!(o=I(t,s))||o.enumerable});return e};var d=(e,t,r)=>(r=e!=null?K(H(e)):{},E(t||!e||!e.__esModule?m(r,"default",{value:e,enumerable:!0}):r,e)),_=e=>E(m({},"__esModule",{value:!0}),e);var z={};L(z,{HostSlots:()=>$,createHost:()=>X,createSlot:()=>q,getLastSlot:()=>j,getSlot:()=>b,getSlotProps:()=>G,getSlots:()=>A,isSlot:()=>k});module.exports=_(z);var n=d(require("react"),1);var u=d(require("react"),1),f=typeof window>"u"?u.useEffect:u.useLayoutEffect,v=e=>{let t=u.createContext(e);return t.displayName="SlotsContext",t},P=e=>typeof e=="string"?e:e.displayName||e.name||"Component",O=["$$typeof","render","displayName","defaultProps"],C=(e,t)=>{if(typeof t=="string")return e;let r=Object.getOwnPropertyNames(t).reduce((o,s)=>(O.includes(s)||(o[s]=t[s]),o),{});return Object.assign(e,r)};var l=d(require("react"),1);var R="slots-wrapper",U=new RegExp(`^<${R}>.*</${R}>$`),w=({name:e,forceUpdate:t,children:r})=>{let o=l.useRef(null),s=l.useRef(!1);return f(()=>{var c;if(!s.current&&((c=o.current)==null?void 0:c.innerHTML)){let i=o.current.innerHTML;i&&!U.test(i)&&console.warn(`Unwrapped children found in "${e}", either wrap them in slots or remove`)}s.current=!0,t()},[e]),s.current?l.createElement(l.Fragment,null,r):l.createElement(R,{ref:o},r)};var p=d(require("react"),1),S=p.createContext({rescan:()=>{}}),g=({children:e})=>{let[t,r]=p.useReducer(()=>[],[]),o=p.useMemo(()=>({rescan:r}),[t]);return p.createElement(S.Provider,{value:o},e)};var h=e=>{let t=new Map;return{register(r,o){t.set(r,o)},update(r,o){t.set(r,o),e==null||e(r)},unmount(r){t.delete(r),e==null||e(r)},clear(){t.clear()},has(r){return t.has(r)},get(){return Array.from(t.values())}}};var A=(e,t)=>e.filter(r=>r.type===t),b=(e,t)=>e.find(r=>r.type===t),j=(e,t)=>{for(let r=e.length-1;r>=0;r--)if(e[r].type===t)return e[r]},k=(e,t)=>e.type===t,G=e=>{if(!e)return;let{key:t,ref:r,props:o}=e;return{...o,key:t,ref:r}};var T=v(void 0),J=({children:e})=>e(),N=e=>{let t=0;return()=>`${e}_${t++}`},V=N("s"),$=({children:e,callback:t})=>{let r=n.useReducer(()=>[],[])[1],o=n.useMemo(()=>h(r),[r]);return n.createElement(n.Fragment,null,n.createElement(T.Provider,{value:o},n.createElement(g,null,process.env.NODE_ENV==="production"?e:n.createElement(w,{name:"HostSlots",forceUpdate:r},e))),n.createElement(J,null,()=>t(o.get())))},X=(e,t)=>n.createElement($,{children:e,callback:t}),q=e=>{let t=N(V()),r=n.forwardRef(({$slot_key$:c,...i},y)=>{let a=n.useContext(T);if(!a)return null;let M=n.useContext(S),x=n.createElement(s,{key:c,ref:y,...i});return a.register(c,x),n.useEffect(()=>{a.has(c)&&a.update(c,x)}),f(()=>(a.clear(),M.rescan(),()=>a.unmount(c)),[a]),null}),o=(c,i)=>{if(!n.useContext(T))return e?n.createElement(e,{ref:i,...c}):null;let[a]=n.useState(t);return n.createElement(r,{ref:i,$slot_key$:a,...c})};o.displayName=e?`Slot(${P(e)})`:"Slot";let s=n.forwardRef(o);return e?C(s,e):s};0&&(module.exports={HostSlots,createHost,createSlot,getLastSlot,getSlot,getSlotProps,getSlots,isSlot});
//# sourceMappingURL=index.cjs.map