@useloops/design-system
Version:
The official React based Loops design system
2 lines (1 loc) • 2.55 kB
JavaScript
import{jsx as e,jsxs as i}from"react/jsx-runtime";import{timelineItemClasses as t,TimelineItem as n,TimelineSeparator as o,TimelineConnector as r,TimelineContent as l}from"@mui/lab";import c from"@mui/lab/Timeline";import{Box as m}from"@mui/material";import{motion as a}from"motion/react";import{useMemo as d,useRef as s,useState as p,useCallback as h,useEffect as u}from"react";import g from"../../BrandCore/Icon/Icon.js";import f from"../../WebCore/Button/Button.js";import{StyledDot as C,ItemContainer as x,TitleText as v,DescriptionText as b,StyledBoxWrapper as k,StyledLinkWrapper as w}from"./StyledTimeline.js";const z=({children:i,complete:t,onClick:n})=>t?e(k,{children:i}):e(w,{underline:"none",component:"button",onClick:n,target:"_self",children:i}),j=({complete:t,title:n,description:o,onClick:r})=>e(x,{children:i(z,{complete:t,onClick:r,children:[e(v,{component:"p",variation:"lg",children:n}),!t&&e(g,{name:"arrow-right",size:16}),!t&&o&&e(b,{variation:"lg",component:"p",children:o})]})}),y=({item:t,showConnector:c})=>{const{complete:m,title:a,description:d,onClick:s}=t;return i(n,{children:[i(o,{children:[e(C,{completed:m,children:m?e(g,{name:"badge-tick-in-circle",size:24}):void 0}),c&&e(r,{sx:{backgroundColor:e=>e.custom.palette.icon.disabled}})]}),t&&e(l,{sx:{pt:0},children:e(j,{complete:m,title:a,description:d,onClick:s})})]})},B={initial:{height:"auto",transition:{duration:0}},animate:e=>({height:e,transition:{duration:.4,ease:[.645,.045,.355,1]}})},T=({expanded:n,onToggleExpanded:o,items:r})=>{const l=r.find(e=>!e.complete),C=d(()=>n?r:[l],[n,r,l]),x=s(null),[v,b]=p(),k=h(()=>{if(!x.current)return;const e=x.current.scrollHeight;b(e)},[r]);return u(()=>{k()},[n,k]),u(()=>{const e=new ResizeObserver(k);return x.current&&e.observe(x.current),()=>e.disconnect()},[k]),e(a.div,{variants:B,initial:"initial",animate:"auto"===v?"initial":["initial","animate"],custom:v,style:{overflow:"hidden"},children:e("div",{ref:x,style:{display:"flex"},children:i(c,{sx:{paddingLeft:e=>e.spacing(e.custom.padding.xs),marginBottom:0,[`& .${t.root}`]:{minHeight:0,":before":{flex:0,padding:0}}},children:[C.map((i,t)=>{const n=t<C.length-1;return i&&i?.title===l?.title?e(y,{item:i,showConnector:C.length>1?n:!!l?.description},`${i.title}-${i.complete}`):i&&e(y,{item:i,showConnector:n},i.title)}),!n&&e(m,{sx:{marginTop:e=>e.spacing(e.custom.margin.md),alignSelf:"center"},children:e(f,{endIcon:e(g,{name:"chevron-down",size:16}),sizing:"xs",variation:"outlined",onClick:o,children:"Show more"})})]})})})};export{T as default};