ladle-inject-custom-addons
Version:
Adds a button to the Ladle addon bar
2 lines (1 loc) • 758 B
JavaScript
import r from"react";import{createPortal as i}from"react-dom";function l(){return document.getElementsByClassName("ladle-addons")[0]?.getElementsByTagName("ul")?.[0]??null}var E=(n,{position:t=0})=>{let[e]=r.useState(document.createElement("li"));return r.useEffect(()=>{let o=l();if(!o){console.warn("Unable to find addon panel. Custom addons won't be mounted!");return}return a(o,e,t),()=>{o.removeChild(e)}},[t]),e?i(n,e):null},a=(n,t,e)=>{t.setAttribute("data-position",e.toString()),n.insertBefore(t,u(Array.from(n.getElementsByTagName("li")),e))};function u(n,t){let e=null;for(let o of n){let s=Number(o.dataset.position);if(o.dataset.position!=null&&!isNaN(s)?e=s:e===null||isNaN(e)?e=1:++e,t<e)return o}return null}export{E as useAddonPanelPortal};