amotify
Version:
UI Component for React,NextJS,esbuild
2 lines (1 loc) • 1.65 kB
JavaScript
import{b as u,d as D}from"../chunk-C5N2D3ZX.js";import{jsx as C}from"react/jsx-runtime";import a,{UUID as w,useStore as r}from"jmini";import{useState as l,useEffect as H,useRef as b}from"react";import{$$fromRoot as d}from"../@utils";import{Box as O}from"../atoms";import{AccordionClasses as _}from"../@styles/componentClasses";const E=o=>{o=u({},o);let x=o,{accordionID:e="",slideAnimation:v="fast",defaultOpen:f=!1,override:R=!1}=x,y=D(x,["accordionID","slideAnimation","defaultOpen","override"]),[p]=l(w()),[m]=l(w()),[c,s]=l(f),[g,A]=l(0);R&&c!=f&&s(f);const I=b(!1);return H(()=>{a.scope(()=>{let n=d('[data-accordion-content-id="'+m+'"]')[0];if(!n)return;let i=n.offsetHeight,t=0;v=="fast"?(t=i/1e3,t=Math.max(t,.2)):v=="slow"&&(t=i/300),A(i),d("#"+p).css({transition:t+"s"})}),a.scope(()=>{e&&r.set({["Accordion-"+e]:{open:()=>{s(!0)},close:()=>{s(!1)},toggle:()=>{s(n=>!n)}}})})},[]),r.update({["Accordion-"+e]:{isOpen:!!c}}),H(()=>{let n=d("#"+p),i=d('[data-accordion-content-id="'+m+'"]')[0];I.current||(I.current=!0),a.scope(()=>{if(!i||a.isNullish(g))return;let t=i.offsetHeight;g!=t&&A(t),g&&n.css({maxHeight:t+1+"px"}).await(100),c?n.css({maxHeight:"unset",overflow:(o==null?void 0:o.overflow)||"unset"}):n.css({maxHeight:"0px",overflow:"hidden"})})},[c]),C(O,{className:[_("Wrap"),_("Open_"+c)].join(" "),id:p,children:C(O,u({"data-accordion-content-id":m},y))})},h=E;h.fn={open:o=>{let e=r.get("Accordion-"+o);!e||e.open()},close:o=>{let e=r.get("Accordion-"+o);!e||e.close()},toggle:o=>{let e=r.get("Accordion-"+o);!e||e.toggle()},isOpen:o=>{let e=r.get("Accordion-"+o);if(e)return e.isOpen}};export{h as Accordion,h as default};