UNPKG

@grlt-hub/react-slots

Version:

Bring the power of slots to your React components effortlessly.

2 lines (1 loc) 1.08 kB
import{createEvent as F,createStore as x}from"effector";import{useStoreMap as b}from"effector-react";import{nanoid as A}from"nanoid";import o,{memo as T,useMemo as v}from"react";var C=n=>n==null,h=(n,m,s)=>{let i=[...n];return m<=0?i.unshift(s):m>=n.length?i.push(s):i.splice(m,0,s),i},I=()=>n=>n,K=n=>{let s=Object.entries(n).map(([e])=>e),i=x(s.reduce((e,t)=>(e[t]=[],e),{})),l=s.reduce((e,t)=>{let a=F();return i.on(a,(p,y)=>{var d;let r={...y,id:A(10)},P=h(p[t],(d=y.order)!=null?d:p[t].length+1,r).sort((g,E)=>{var u,f;return((u=g.order)!=null?u:0)-((f=E.order)!=null?f:0)});return{...p,[t]:P}}),e[t]=a,e},{}),k=e=>T(t=>{let a=v(()=>e.fn(t),[t]);return o.createElement(o.Fragment,{key:e.id},o.createElement(e.component,{...a}))}),S=s.reduce((e,t)=>{let a=T(p=>b(i,r=>r[t]).map(r=>{if(C(r.fn))return o.createElement(o.Fragment,{key:r.id},o.createElement(r.component,null));let c=k(r);return o.createElement(o.Fragment,{key:r.id},o.createElement(c,{...p}))}));return e[t]=a,e},{});return{slotsApi:{insert:{into:l}},Slots:S}};export{I as createSlotIdentifier,K as createSlots};