@snowball-tech/fractal
Version:
Fractal's (Snowball's design system) React component library based on RadixUI and PandaCSS
3 lines • 6.23 kB
JavaScript
'use client';
import{a as E}from"./chunk-RKZN6FZX.js";import{a as Q}from"./chunk-Q4YA32NC.js";import{a as t,e as J}from"./chunk-3CV5UMCN.js";import{a as j}from"./chunk-DZJSJNZD.js";import{c as Y}from"./chunk-YHZZRBQ2.js";import{c as X}from"./chunk-LYTTDLE2.js";import{a as g}from"./chunk-AOLTZ2WJ.js";import{b as e}from"./chunk-CMFNILWJ.js";import{a as l,b as i,c as W}from"./chunk-XYM7TA65.js";import*as u from"@radix-ui/react-scroll-area";import{useClickOutside as xe}from"@react-hookz/web";import{UilAngleRight as Ne}from"@tooni/iconscout-unicons-react";import{forwardRef as Re,useContext as Z,useEffect as Me,useImperativeHandle as Se,useRef as P,useState as Ee}from"react";import Pe from"lodash/fp/constant";import Ce from"lodash/fp/isEmpty";import f from"lodash/fp/isFunction";import ee from"lodash/fp/isString";import te from"lodash/fp/omit";import{jsx as n,jsxs as C}from"react/jsx-runtime";var oe=Re(({active:A=!1,align:ne="start",children:D,condensed:re=!1,condensedItems:ae=!1,defaultOpen:se=!1,disabled:d=!1,elevation:T=J,icon:v,label:_,labelElement:le,onClose:y,onInteractOutside:k,onOpen:h,onSubMenuOpenChange:L,open:$,popover:I=!0,popup:r,rainbow:ie=!0,side:K,triggerOnHover:w=!0,withIndicator:ue=!0,withScroll:F=!0,...a},me)=>{let x=P(null),N=P(null);Se(me,()=>({get content(){return N?.current??null},get trigger(){return x?.current??null}}));let U=P(null),b=!!D,[m,ce]=Ee($===!0&&b),p=o=>{if(d)return;let s=m;ce(Pe(o)),f(L)&&s!==o&&L(o),!s&&o&&f(h)&&h(),s&&!o&&f(y)&&y()},R=()=>{p(!0)},M=()=>{p(!1)},de=()=>{p(!m)};Me(()=>{$===!0&&b?R():M()},[b,$]);let{condensed:_e,disabled:fe,orientation:be,rainbow:pe}=Z(Q),{condensed:ge,disabled:ve,rainbow:ye}=Z(E),c=d||ve||fe,he=re||ge||_e,S=ie&&ye&&pe,$e=o=>{let{target:s}=o;s===window||s===null||s===void 0||((x?.current?.contains(s)||N?.current?.contains(s))&&o.preventDefault(),f(k)&&k(o))},we=o=>{f(a.onKeyDown)&&a.onKeyDown(o),(o.key==="Enter"||o.key===" ")&&R()},B=()=>{w&&R()},O=()=>{w&&M()};xe(U,()=>{M()});let V=ee(_)?_:X(_),G=C(g,{ref:x,"aria-label":V,className:l(`${e}-${t}__sub-menu__trigger`,"flex w-full flex-row items-center gap-1","rounded-sm outline-none transition-background-color duration-300 ease-out",he?"max-h-6 px-2 py-1":"p-2",v?`${e}-${t}__sub-menu__trigger--with-icon`:"",c?`${e}-${t}__sub-menu__trigger--disabled pointer-events-none cursor-not-allowed !bg-transparent text-disabled`:"cursor-pointer text-dark",r?.trigger?.className),element:"div",role:"menuitem",tabIndex:-1,title:V,...I?w?{onClick:o=>o.preventDefault(),onMouseEnter:B}:{}:{onClick:de},style:r?.trigger?.style,onKeyDown:we,children:[v&&n("div",{className:l(`${e}-${t}__item__icon`,"max-h-3 max-w-3"),children:v}),n(g,{className:l("flex-1",d?"cursor-not-allowed":"cursor-pointer"),element:le||(ee(_)?"label":"div"),children:_}),ue&&n("div",{className:l(`${e}-${t}__sub-menu__indicator`,"max-h-3 max-w-3"),children:n(Ne,{})})]}),H=n(g,{className:l(`${e}-${t}__sub-menu__items`,"relative overflow-hidden rounded-sm p-1",c?`${e}-${t}__sub-menu__items--disabled`:S?W:""),element:"div",children:n(E.Provider,{value:{condensed:ae,disabled:c,rainbow:S},children:D})}),q=n("div",{ref:N,className:i(`${e}-${t}__sub-menu__content`,"w-full",c?`${e}-${t}__sub-menu__content--disabled`:"",b?"":`${e}-${t}__sub-menu__content--empty invisible`,r?.content?.className),style:r?.content?.style,children:F?C(u.Root,{className:`${e}-${t}__sub-menu__content__scrollarea`,...a.dir===void 0?{}:{dir:a.dir},type:"hover",children:[n(u.Viewport,{className:l(`${e}-${t}__sub-menu__content__scrollarea__viewport`,`relative h-full max-h-[calc(var(--radix-popper-available-height)-theme(spacing.4))] w-full overflow-auto [&:has(+_.${e}-${t}__sub-menu__content__scrollarea__scrollbar--y)]:w-[calc(100%-theme(spacing.1)+theme(spacing.quarter))]`),style:{overflowY:void 0},children:H}),n(u.Scrollbar,{className:l(`${e}-${t}__sub-menu__content__scrollarea__scrollbar--y`,'flex touch-none select-none rounded-r-sm bg-grey-90 p-quarter transition-background-color duration-300 ease-out hover:bg-grey-70 data-[orientation="vertical"]:w-1'),orientation:"vertical",children:n(u.Thumb,{className:l(`${e}-${t}__sub-menu__content__scrollarea__scrollbar--y__thumb`,"before:l-1/2 relative !w-half flex-1 rounded-sm bg-grey-30 before:absolute before:top-1/2 before:h-full before:min-h-[44px] before:w-full before:min-w-[44px] before:-translate-x-1/2 before:-translate-y-1/2 before:content-empty")})})]}):H}),z=i(`${e}-${t}__sub-menu`,c?`${e}-${t}__sub-menu--disabled`:"",'pointer-events-auto relative z-50 overflow-hidden rounded-sm p-0 data-[side="bottom"]:mt-1 data-[side="left"]:mr-2 data-[side="right"]:ml-2 data-[side="top"]:mb-1');return I?n(j,{align:ne,className:i(`${e}-${t}__sub-menu__popup`,`${e}-${t}__sub-menu__popup--popover`,S?"alternatee":c?"":"hover:bg-decorative-pink-90","rounded-sm",a.className),"data-highlighted":A||m||void 0,disabled:d,elevation:T,fullWidth:!0,popover:{className:z,style:r?.style},side:Ce(K)?be==="vertical"?"right":"bottom":K,style:{...a.style,...r?.style},trigger:G,withArrow:!1,withCloseButton:!1,withScroll:F,onClose:y,onInteractOutside:$e,onOpen:h,onOpenChange:p,...se?{defaultOpen:!0}:{},...d?{open:!1}:{open:m},onMouseLeave:O,...te(["className","style"],a),children:q}):C("div",{ref:U,className:i(`${e}-${t}__sub-menu__popup`,`${e}-${t}__sub-menu__popup--non-popover`,"alternatee","relative rounded-sm outline-none transition-background-color duration-300 ease-out",a.className,r?.className),"data-highlighted":A||m||void 0,style:{...a.style,...r?.style},onMouseEnter:B,onMouseLeave:O,...te(["className","style"],a),children:[n("div",{className:i(`${e}-${t}__sub-menu__popup__trigger-wrapper`,r?.trigger?.wrapper?.className),style:r?.trigger?.wrapper?.style,children:G}),n("div",{className:i(`${e}-${t}__sub-menu__popup__content-positionner`,"absolute left-full top-0 z-[5000] pl-2",m?"":"hidden",r?.content?.positionner?.className),style:r?.content?.positionner?.style,children:n(Y,{className:i(`${e}-${t}__sub-menu__popup__content-wrapper`,"p-0",r?.content?.wrapper?.className),elevation:T,style:r?.content?.wrapper?.style,children:n("div",{className:z,children:q})})})]})});oe.displayName="SubMenu";var Je=oe;export{oe as a,Je as b};
//# sourceMappingURL=chunk-6TLCL53L.js.map