@xploreu/components 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- export{a as ComboboxChipOutside}from'../chunk-NG3NFI2B.js';export{a as PhoneInput}from'../chunk-VE5ZAJ35.js';import'../chunk-DXI32G2S.js';import'../chunk-WIUYDPXB.js';import'../chunk-NTQ2FXS7.js';import'../chunk-MMCL4HWD.js';import'../chunk-ZVME3JB3.js';import'../chunk-2TUGHMFW.js';import'../chunk-PJYKUR4F.js';import'../chunk-3ASGRRVT.js';import'../chunk-K2BMQ2TN.js';import'../chunk-G6HDEOYZ.js';import'../chunk-K7GGFR7W.js';import'../chunk-VNAMAKPG.js';import {d,a,m,l,n,o,b,p,t,v,z,G,e,x,c,h}from'../chunk-746IQSMF.js';import'../chunk-KYD4ATTG.js';import'../chunk-TED2PUK6.js';import {a as a$1}from'../chunk-JH6RZ3QH.js';import'../chunk-MAY6ICTE.js';import'../chunk-322IBGFZ.js';import'../chunk-QDCD6MNO.js';import'../chunk-LFQAJN4H.js';import'../chunk-BEJ2SIQP.js';import'../chunk-4PD3DZE6.js';import'../chunk-3RJED3RZ.js';import'../chunk-FKOYTHRM.js';import'../chunk-GJ5F6YBZ.js';import'../chunk-4D2HXXN3.js';import'../chunk-S7ZMBRYT.js';import'../chunk-TIVYCE4X.js';import'../chunk-RCP2CZRA.js';import {a as a$3}from'../chunk-AGKZWMW5.js';import'../chunk-YWG6HJAX.js';import'../chunk-NHQA6KSU.js';import'../chunk-DDCGJBN7.js';import'../chunk-SGJYHWYM.js';import'../chunk-QYGN3VYS.js';import'../chunk-ADC7WDF4.js';import'../chunk-ICQEZHVV.js';import'../chunk-PSHB2EQA.js';import'../chunk-JVBWH3DS.js';import'../chunk-EHRGIXKH.js';import'../chunk-CQC2IBSD.js';import'../chunk-CKVTRZ3S.js';import'../chunk-YSG3MHTX.js';import'../chunk-ZSYQCIYS.js';import'../chunk-4EYPU56T.js';import'../chunk-2JHFRTOZ.js';import'../chunk-FJTQQ4SC.js';import {a as a$2}from'../chunk-W2HFGSVH.js';import'../chunk-2GABMQSA.js';import'../chunk-7ECOWHUV.js';import'../chunk-IUPJTP3B.js';import'../chunk-KO4EAVJY.js';import'../chunk-PEHI6LCP.js';import'../chunk-3HUMZKFZ.js';import'../chunk-U5N2WWD3.js';import'../chunk-F2D445K4.js';import'../chunk-NUCPKDK5.js';import'../chunk-2IOTGL4J.js';import'../chunk-NASTZUK6.js';import'../chunk-UKXYDUDY.js';import'../chunk-7YXRTIXL.js';import'../chunk-4NU44YPN.js';import'../chunk-3SQB2TJB.js';import'../chunk-L5AG5DTS.js';import'../chunk-EAF4H4YJ.js';import'../chunk-XH22TH7N.js';import'../chunk-7LF2CJ3L.js';import'../chunk-4UC2VYI5.js';import'../chunk-TMDCYGCN.js';import'../chunk-BZGVXBP3.js';import'../chunk-U6W5PRLZ.js';import'../chunk-JXTOUSXQ.js';import'../chunk-DRYKJQ72.js';import'../chunk-46KQF4UN.js';import'../chunk-556ANF7Z.js';import'../chunk-3NFGWKSO.js';import'../chunk-L73GMVVO.js';import'../chunk-OL4WHG4U.js';import'../chunk-V5WX4TSN.js';import'../chunk-Z22ALCLD.js';import'../chunk-IHTB4XCP.js';import'../chunk-5KMCPFGM.js';import'../chunk-6I4GG756.js';import'../chunk-Z5GMQ477.js';import'../chunk-6FL6AY4D.js';import'../chunk-3376QA4Q.js';import'../chunk-PDZ7VJPX.js';import'../chunk-Y72C3IVO.js';import'../chunk-5OQVCPXP.js';import'../chunk-LSW5TIYQ.js';import'../chunk-5YFGDOSH.js';import'../chunk-JWAU7A2Q.js';import'../chunk-YFCBMUPK.js';import'../chunk-SLLTAQ22.js';import'../chunk-WMUM5NGX.js';import'../chunk-A2U6VIQW.js';import'../chunk-VZMFSH37.js';import'../chunk-ECVIBKDN.js';import'../chunk-MPD36YFP.js';import'../chunk-EDXV6BE6.js';import'../chunk-HM2QBLIL.js';import'../chunk-6IKHZM3V.js';import'../chunk-ZVCIT3QN.js';import'../chunk-UACQQO3I.js';import'../chunk-IHLMMP5Q.js';import'../chunk-LN37WPV7.js';import'../chunk-5NAO3POG.js';import'../chunk-VOTCMLJE.js';import'../chunk-ZKFUHFBC.js';import'../chunk-CEYIRTZQ.js';import'../chunk-TORDOY73.js';import'../chunk-CAK44O3E.js';import'../chunk-MTWFWU3I.js';import'../chunk-NREZRMEX.js';import'../chunk-3SKJUZ5H.js';import'../chunk-6EMNBLEM.js';import'../chunk-4CBZOTZR.js';import'../chunk-XY4CWRWG.js';import'../chunk-2FGDZ6WR.js';import'../chunk-KHCZBVOK.js';import'../chunk-2TO4PAQM.js';import'../chunk-HSTY767P.js';import'../chunk-BKWINCGB.js';import'../chunk-GGD2FGWK.js';import'../chunk-AI5FYYCO.js';import'../chunk-UCQKCAYY.js';import'../chunk-HL32HBMO.js';import'../chunk-K7EZKYBC.js';import'../chunk-FIXJ55FT.js';import'../chunk-GDU3OVET.js';import'../chunk-3EU5QGAN.js';import'../chunk-V6YCCR75.js';import'../chunk-NYSABCPP.js';import'../chunk-M5IVXDZ4.js';import'../chunk-2ZG2WNSI.js';import'../chunk-FBKS63GQ.js';import'../chunk-NUGYUIN6.js';import'../chunk-6KFTNJLJ.js';import'../chunk-C7GZULSV.js';import'../chunk-L6ZGEGUV.js';import'../chunk-DQSDZXTX.js';import'../chunk-R33XCP5H.js';import'../chunk-SDKXW3R4.js';import'../chunk-EJ5XTT5H.js';import'../chunk-6FEBVO2P.js';import'../chunk-JCFEHT75.js';import'../chunk-5I545S2U.js';import'../chunk-KPA4J3CC.js';import'../chunk-4JEHGT2R.js';import'../chunk-QNEJRZ4U.js';import'../chunk-SCPA3CM2.js';import'../chunk-2PQUW476.js';import'../chunk-HEKI5WR2.js';import'../chunk-TTZ2UE5L.js';import'../chunk-JZJHLBOV.js';import'../chunk-F5FFAJ6B.js';import'../chunk-5FALHJEA.js';import'../chunk-ICHHISXQ.js';import'../chunk-EERDL5XC.js';import'../chunk-GE3TPDYX.js';import'../chunk-RMGJAA2L.js';import'../chunk-Z7IOYXOK.js';import'../chunk-X2VRJLPR.js';import'../chunk-FELUIC3Z.js';import'../chunk-BKBLZKQ7.js';import'../chunk-3Q72MLBZ.js';import'../chunk-ZWZZVZOP.js';import'../chunk-VLSPFIZU.js';import'../chunk-BGSHHAM2.js';import'../chunk-SR76VRAC.js';import'../chunk-4GMRFP6B.js';import'../chunk-KCSDB6W4.js';import'../chunk-3N22A4KQ.js';import'../chunk-F7KNYOYR.js';import'../chunk-IRRA2OTH.js';import'../chunk-QM2KF35E.js';import'../chunk-WI5V5Z76.js';import'../chunk-PCUUUW7T.js';import'../chunk-EYH5SNDK.js';import'../chunk-RUTYHOHT.js';import'../chunk-4FH2LYOC.js';import'../chunk-U27RVBYT.js';import'../chunk-SX54FORI.js';import'../chunk-XOIZGRZ6.js';import'../chunk-EY3W3WZX.js';import'../chunk-X2J6MJ6Y.js';import'../chunk-CP6DGMEP.js';import'../chunk-7TNSQNT7.js';import'../chunk-YTN4DVWB.js';import'../chunk-XNDNAHCC.js';import'../chunk-UESMX3LA.js';import'../chunk-33MUUBSB.js';import'../chunk-VK62KNI7.js';import'../chunk-OREIXD3L.js';import'../chunk-J64EBQ23.js';import'../chunk-PFSN7DQX.js';import'../chunk-Y2R7ZZYY.js';import'../chunk-LYV7R7DB.js';import'../chunk-EKS6U6XR.js';import'../chunk-5LAJMBKN.js';import'../chunk-ZEONZS5N.js';import'../chunk-75BEGXGF.js';import'../chunk-V4VKQ2QF.js';import'../chunk-NVVCGBML.js';import'../chunk-ZTCAXM77.js';import'../chunk-UVYYUEHO.js';import'../chunk-FFYGBVMN.js';import'../chunk-HJJ2VCYO.js';import'../chunk-KZMULPFK.js';import'../chunk-X5TJ3Z24.js';import'../chunk-ZY5FUK37.js';import'../chunk-DNIYW2WB.js';import'../chunk-DVXIIACM.js';import'../chunk-ZPPUEK2E.js';import'../chunk-GOXCPAUM.js';import'../chunk-6L6HTR6E.js';import'../chunk-4VQUQ3NT.js';import'../chunk-MHRHCLIU.js';import'../chunk-OE7VPOT4.js';import'../chunk-LHVBJHQZ.js';import'../chunk-2V46QEC7.js';import'../chunk-TJNOFRWB.js';import'../chunk-Y2TTBBRP.js';import'../chunk-NYQJHUKD.js';import'../chunk-6NPT5BJ7.js';import'../chunk-MYGQXM66.js';import'../chunk-TJFA5O6Z.js';import'../chunk-KCCBSGT3.js';import'../chunk-QWFECUYL.js';import'../chunk-IPTGAZ37.js';import'../chunk-DEFVXH3J.js';import'../chunk-Y56EKYRN.js';import'../chunk-IW6VX3I7.js';import'../chunk-4S6MFDRP.js';import'../chunk-QBNIE5KZ.js';import'../chunk-24ZESL25.js';import'../chunk-QH67MZKV.js';import'../chunk-O5CSN63E.js';import'../chunk-I2K2QQOA.js';import'../chunk-ZPKZLDR2.js';import'../chunk-EBXTHJF5.js';import'../chunk-ZXSIHT6V.js';import'../chunk-YFZPYFTS.js';import'../chunk-JSE2CMYN.js';import'../chunk-WSMQZH5E.js';import'../chunk-CEY3P2QK.js';import'../chunk-E6ZLTD7K.js';import'../chunk-YWDIILO5.js';import'../chunk-WVOOXXON.js';import'../chunk-YRO736RI.js';import'../chunk-T7HRX3EC.js';import'../chunk-C4ELFIL6.js';import'../chunk-UJRREWOA.js';import'../chunk-3KSOBU4X.js';import'../chunk-ZMNFPSA3.js';import'../chunk-6C2TVGCV.js';import'../chunk-JUM5W2FF.js';import'../chunk-MOH4SNJJ.js';import'../chunk-HG6NCRSN.js';import'../chunk-4TNLRALG.js';import'../chunk-WYRCNM2M.js';import'../chunk-EYKDAQEG.js';import'../chunk-K3RU27VR.js';import'../chunk-CFKH5BM3.js';import'../chunk-OEEQX3JR.js';import'../chunk-ZT35KBQN.js';import'../chunk-XU65MB53.js';import'../chunk-JUY2JZGK.js';import'../chunk-CHPQMJNP.js';import'../chunk-CJSVB5XT.js';import'../chunk-XFY6L3B6.js';import'../chunk-BNOMWF6G.js';import'../chunk-XQ5APSL5.js';import'../chunk-6UJXNDLR.js';import'../chunk-MFV4KTCM.js';import'../chunk-I56A4HTS.js';import'../chunk-BM65PK4H.js';import'../chunk-3Q67KQWC.js';import'../chunk-A4G246BH.js';import'../chunk-WUGIELON.js';import'../chunk-GYYQR6WJ.js';import'../chunk-PEAZKA47.js';import'../chunk-NTXAFTKR.js';import {b as b$1}from'../chunk-DZKJRP4J.js';import'../chunk-DSH6THYW.js';import'../chunk-2TQHUVNP.js';import'../chunk-RBLL355H.js';import'../chunk-IXWAWSD4.js';import'../chunk-Z67QQMOX.js';import'../chunk-5YDJTHDG.js';import'../chunk-NGSCUYDU.js';import'../chunk-Y6JASO6W.js';import*as S from'react';import {cn}from'@xploreu/lib/cn';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {ChevronDownIcon,CheckCircle2Icon,CircleIcon}from'lucide-react';import {cva}from'class-variance-authority';import {Slot}from'@radix-ui/react-slot';function de({multiple:t$1=true,inputPlaceholder:l$1="Search...",container:x,items:p$1,infiniteScroll:z$1,isPending:w,taggable:i=false,maxVisible:u,...f}){let[F,A]=useControlledState({value:f?.inputValue?.toString(),defaultValue:f?.defaultInputValue?.toString(),onChange:f?.onInputValueChange}),[r,h]=useControlledState({value:f?.value??[],defaultValue:f?.defaultValue??[],onChange:f?.onValueChange}),[P,v$1]=S.useState([]),y=S.useRef(new Set);S.useEffect(()=>{let o=new Set(r.map(s=>s.value));v$1(s=>{let C=s.filter(e=>o.has(e.value));return C.length===s.length?s:(y.current=new Set(C.map(e=>e.value)),C)});},[r]);let a$2=F?.toString().trim()??"",m$1=S.useMemo(()=>a$2?r.some(o=>o.value.toLowerCase()===a$2.toLowerCase()):false,[a$2,r]),c=S.useMemo(()=>!i||!a$2?false:!p$1?.some(o=>o.label.toLowerCase()===a$2.toLowerCase()),[i,a$2,p$1]),O=S.useMemo(()=>{let o=[...p$1??[],...P];return c?[...o,{label:a$2,value:a$2,tag:true}]:o},[p$1,P,c,a$2]);return jsxs(d,{...f,behavior:"chip-outside",multiple:true,items:i?O:p$1,isItemEqualToValue:(o,s)=>o.value===s.value,onValueChange:(o,s)=>{if(i){let C=o.filter(e=>e?.tag===true&&!y.current.has(e.value));if(C.length>0){for(let e of C)y.current.add(e.value);v$1(e=>[...e,...C]);}}h(t$1?o:[o[o.length-1]],s);},onInputValueChange:A,children:[jsx(a,{className:cn(a$1(),"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text"),children:jsxs(m,{className:cn("contents",u!==void 0&&"flex-nowrap overflow-hidden"),children:[jsx(l,{children:o$1=>{let s=u!==void 0?o$1.slice(0,u):o$1,C=u!==void 0?o$1.length-u:0;return jsxs(Fragment,{children:[s?.map(e=>jsxs(n,{className:cn(u!==void 0&&"min-w-0 shrink"),children:[e?.image&&jsx("img",{src:e.image,alt:e?.label||"",className:"size-4 rounded-full object-cover shrink-0 mr-1"}),u!==void 0?jsx("span",{className:"truncate",children:e?.label||""}):e?.label||"",jsx(o,{})]},e?.value||"")),C>0&&jsxs(n,{className:"shrink-0",children:["+",C]})]})}}),jsx(b,{render:jsx("input",{className:"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder",placeholder:r.length===0?l$1:void 0})})]})}),jsxs(p,{container:x,children:[jsx(t,{status:w||p$1===void 0?"pending":p$1?.length===0&&!c?"empty":null}),jsxs(v,{children:[p$1?.map(o=>jsx(z,{value:o,children:jsxs("div",{className:"flex items-center gap-2 w-full min-w-0",children:[o.image&&jsx("img",{src:o.image,alt:o.label,className:"size-6 rounded-full object-cover shrink-0"}),jsx("span",{className:"truncate",children:o.label})]})},o.value)),c&&jsx(z,{value:{label:a$2,value:a$2,tag:true},children:jsxs("div",{className:"flex items-center gap-1.5 w-full min-w-0",children:[!m$1&&jsx("span",{className:"text-text-secondary",children:"Create:"}),jsx("span",{className:"font-medium text-text-primary truncate",children:a$2})]})}),jsx(G,{...z$1})]})]})]})}function Ce({items:t$1,value:l,defaultValue:x$1,onValueChange:p$1,placeholder:z$1="Select",icon:w,container:i,isPending:u,className:f,triggerClassName:F,contentClassName:A,disabled:r,size:h="md",infiniteScroll:P}){let v$1=b=>b?[b]:[],[y,a]=S.useState(()=>v$1(l!==void 0?l:x$1));S.useEffect(()=>{l!==void 0&&a(v$1(l));},[l]);let m=y,c$1=m[0]??null;return jsxs(d,{multiple:true,items:t$1,value:m,onValueChange:b=>{let o=b,s=o.length>0?o[o.length-1]:null;a(s?[s]:[]),p$1?.(s);},isItemEqualToValue:(b,o)=>b.value===o.value,disabled:r,children:[jsxs(e,{className:cn(a$1({size:h}),"group flex cursor-pointer items-center gap-2 pr-3 text-left",c$1?"text-text-primary":"text-text-placeholder",F,f),children:[w&&jsx("span",{className:"size-4.5 shrink-0 text-fg-quaternary",children:w}),jsx("span",{className:"flex-1 truncate",children:c$1?.label??z$1}),jsx(ChevronDownIcon,{className:"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180"})]}),jsxs(p,{container:i,className:cn("w-72",A),align:"start",sideOffset:8,children:[jsx(t,{status:u||t$1===void 0?"pending":t$1.length===0?"empty":null}),jsxs(v,{children:[t$1?.map(b=>jsx(x,{children:jsxs(z,{value:b,withIndicator:false,className:"justify-between",children:[jsx("span",{className:"truncate",children:b.label}),jsx(c,{children:jsx(CheckCircle2Icon,{className:"size-5 shrink-0 text-fg-brand-primary"})})]})},b.value)),jsx(G,{...P})]})]})]})}function ye({checked:t}){return jsx("span",{"data-checked":t?"":void 0,className:cn("flex size-4 shrink-0 items-center justify-center rounded-[4px] border transition-colors",t?"border-border-brand bg-bg-brand-solid text-white":"border-border-primary bg-bg-primary"),children:t&&jsx("svg",{viewBox:"0 0 12 12",className:"size-3",fill:"none",children:jsx("path",{d:"M2.5 6L4.75 8.25L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})}function be({...t}){return jsx(x,{children:jsx(z,{...t,withIndicator:false})})}function Ie(t){return jsx(c,{...t})}function Pe(t$1){let{items:l,placeholder:x="Select",icon:p$1,container:z,isPending:w,className:i,triggerClassName:u,contentClassName:f,disabled:F,infiniteScroll:A}=t$1,r=t$1.multiple===true,h$1=S.useMemo(()=>{if(r)return t$1.value;let e=t$1.value;return e?[e]:[]},[r,t$1.value,t$1.value]),P=S.useMemo(()=>{if(r)return t$1.defaultValue??[];let e=t$1.defaultValue;return e?[e]:[]},[r,t$1.defaultValue,t$1.defaultValue]),[v$1,y]=S.useState(()=>(h$1!==void 0?h$1:P)??[]);S.useEffect(()=>{h$1!==void 0&&y(h$1);},[h$1]);let a=v$1??[],m=a.length>0,[c,O]=S.useState(""),b=S.useMemo(()=>{if(!c.trim())return l;let e=c.toLowerCase();return l?.filter(I=>I.label.toLowerCase().includes(e)||I.value.toLowerCase().includes(e))},[l,c]),o=e=>{let I=e;if(r)y(I),t$1.onValueChange?.(I);else {let H=I.length>0?I[I.length-1]:null;y(H?[H]:[]),t$1.onValueChange?.(H);}},s=()=>{y([]),r?t$1.onValueChange?.([]):t$1.onValueChange?.(null);},C=S.useMemo(()=>m?r?`${x} (${a.length})`:a[0]?.label??x:r?`All ${x}`:x,[m,r,x,a]);return jsxs(d,{multiple:true,items:l,value:a,onValueChange:o,isItemEqualToValue:(e,I)=>e.value===I.value,disabled:F,children:[jsxs(e,{className:cn("group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors","border-border-primary text-text-secondary hover:bg-bg-primary-hover",m&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",u,i),children:[p$1&&jsx("span",{className:cn("size-4 shrink-0",m?"text-fg-brand-primary":"text-fg-quaternary"),children:p$1}),jsx("span",{className:"truncate",children:C}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",m?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(p,{container:z,className:cn("w-72",f),align:"start",sideOffset:8,children:r?jsxs("div",{className:"flex flex-col",children:[jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:x}),jsxs("button",{type:"button",disabled:!m,onClick:s,className:cn("text-body-medium-3 transition-colors",m?"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover":"cursor-not-allowed text-text-disabled"),children:["Clear",m?` (${a.length})`:""]})]}),jsx(h,{value:c,onChange:e=>O(e.target.value),placeholder:`Search ${x.toLowerCase()}...`}),jsx(t,{status:w||l===void 0?"pending":b?.length===0?"empty":null}),jsxs(v,{children:[b?.map(e=>{let I=a.some(H=>H.value===e.value);return jsxs(be,{value:e,children:[jsx(ye,{checked:I}),jsx("span",{className:"truncate",children:e.label})]},e.value)}),jsx(G,{...A})]})]}):jsxs(Fragment,{children:[jsx(t,{status:w||l===void 0?"pending":l?.length===0?"empty":null}),jsxs(v,{children:[l?.map(e=>jsxs(be,{value:e,className:"justify-between",children:[jsx("span",{className:"truncate",children:e.label}),jsx(Ie,{children:jsx(CheckCircle2Icon,{className:"size-5 shrink-0 text-fg-brand-primary"})})]},e.value)),jsx(G,{...A})]})]})})]})}var we=[{status:"open-to-all",label:"Open to All Opportunities",badgeColor:"gray"},{status:"open-to-work",label:"Open to Work",badgeColor:"success"},{status:"open-to-freelance",label:"Open to Freelance",badgeColor:"warning"},{status:"open-to-coach",label:"Open to Coach",badgeColor:"blue-light"}],ke=cva("flex flex-col items-center relative",{variants:{size:{xs:"gap-0.5 w-6",sm:"gap-0.5 w-8",md:"gap-0.5 w-10",lg:"gap-1 w-12",xl:"gap-1 w-14","2xl":"gap-2 w-16","3xl":"gap-2 w-20"}},defaultVariants:{size:"sm"}}),Re=cva(void 0,{variants:{size:{xs:"p-0.5 h-2 font-semibold text-[5px] leading-2",sm:"p-1 h-2.5 font-semibold text-[6px] leading-2.5",md:"px-1 h-3.5 font-semibold text-[6px] leading-2.5",lg:"px-1 h-4 text-body-semibold-caption",xl:"px-1 h-6 text-body-semibold-xs","2xl":"px-2 h-9 text-body-semibold-sm","3xl":"px-2 h-10 text-label-semibold-4"}},defaultVariants:{size:"sm"}}),ze=cva(void 0,{variants:{size:{xs:"p-[1.5px]",sm:"p-xp-xxs",md:"p-[2.5px]",lg:"p-xp-xs",xl:"p-[3.5px]","2xl":"p-1","3xl":"p-1"}},defaultVariants:{size:"sm"}});function Fe({avatarClassName:t,badgeClassName:l,imageSrc:x,avatarImageClassName:p,imageAlt:z,className:w,status:i,size:u,isVerified:f,onEdit:F,onClickAvatar:A,variant:r="profile",isOnline:h,companyLogoSrc:P,bordered:v=true,badged:y=false,...a}){let m=S.useMemo(()=>we.find(o=>o.status===i),[i]),c=!!i,O=v&&c&&r==="profile"?"div":Slot,b=S.useMemo(()=>{switch(r){case "company":return "/images/fallback-company.jpeg";case "university":return "/images/fallback-university.jpeg";case "group":return "/images/fallback-user-group.jpeg";default:return "/images/fallback-user.jpeg"}},[r]);return jsxs("div",{className:cn(ke({size:u,className:w})),"data-slot":"profile-avatar",...a,children:[jsx(O,{className:cn("rounded-xp-card-base",v?cn(i==="open-to-work"&&"bg-gradient-avatar-outline-opentowork",i==="open-to-freelance"&&"bg-gradient-avatar-outline-opentoprofesional",i==="open-to-coach"&&"bg-gradient-avatar-outline-opentocoach",i==="open-to-all"&&"bg-gradient-avatar-outline-opentowork",!i&&r==="profile"&&"bg-border-secondary"):void 0,v&&r==="profile"&&ze({size:u})),children:jsxs("div",{className:"relative group",children:[jsx("div",{className:cn("relative flex size-8 shrink-0 overflow-hidden rounded-xp-card-base","size-full",v&&c&&"border-0",t),onClick:A,children:x?jsx("img",{alt:z||"Avatar",className:cn("aspect-square size-full bg-bg-primary object-cover",p),src:x}):jsx("div",{className:"flex aspect-square size-full items-center justify-center bg-bg-tertiary text-label-semibold-2 text-text-quaternary",children:jsx("img",{alt:z||"Avatar Fallback",className:"aspect-square size-full bg-bg-primary object-cover",src:b})})}),F&&jsx("div",{className:"absolute inset-0 flex opacity-0 hover:opacity-100 hover:bg-background-primary-subtle-press/25 rounded-xp-card-base transition-opacity duration-200 items-center justify-center cursor-pointer",id:"avatar-upload-trigger",onClick:F,children:jsx("div",{className:"flex items-center p-2 hover:bg-background-primary-subtle-hover justify-center rounded-xp-card-base-sm bg-background-canvas-subtle",children:jsx(a$2,{className:"size-6"})})}),h&&!P&&jsx(CircleIcon,{className:"text-bg-primary-replace fill-fg-success-secondary size-[11.5px] absolute -bottom-[3.5px] -right-[3.5px]"}),P!==void 0&&jsx("div",{className:"border border-bg-primary-replace size-[15px] rounded-xs absolute -bottom-[3.5px] -right-[3.5px] overflow-hidden bg-bg-primary",children:jsx("img",{alt:"Company Logo",className:"bg-bg-primary object-cover size-full",src:P})})]})}),y&&m&&jsx(b$1,{className:cn(Re({size:u,className:l})),color:m.badgeColor,size:"sm",children:m.label}),f&&jsx("div",{className:"absolute -bottom-1 -right-1",children:jsx(a$3,{className:"size-4 text-[#068BEE]"})})]})}export{de as ComboboxChip,Ce as ComboboxSimple,Pe as FilterCombobox,Fe as ProfileAvatar};//# sourceMappingURL=index.js.map
1
+ export{a as ComboboxChipOutside}from'../chunk-NG3NFI2B.js';export{a as PhoneInput}from'../chunk-VE5ZAJ35.js';import'../chunk-DXI32G2S.js';import'../chunk-WIUYDPXB.js';import'../chunk-NTQ2FXS7.js';import'../chunk-MMCL4HWD.js';import'../chunk-ZVME3JB3.js';import'../chunk-2TUGHMFW.js';import'../chunk-PJYKUR4F.js';import'../chunk-3ASGRRVT.js';import'../chunk-K2BMQ2TN.js';import'../chunk-G6HDEOYZ.js';import'../chunk-K7GGFR7W.js';import'../chunk-VNAMAKPG.js';import {d,a,m,l,n,o,b,p,t,v,z,G,e,x,c,h}from'../chunk-746IQSMF.js';import'../chunk-KYD4ATTG.js';import'../chunk-TED2PUK6.js';import {a as a$1}from'../chunk-JH6RZ3QH.js';import'../chunk-MAY6ICTE.js';import'../chunk-322IBGFZ.js';import'../chunk-QDCD6MNO.js';import'../chunk-LFQAJN4H.js';import'../chunk-BEJ2SIQP.js';import'../chunk-4PD3DZE6.js';import'../chunk-3RJED3RZ.js';import'../chunk-FKOYTHRM.js';import'../chunk-GJ5F6YBZ.js';import'../chunk-4D2HXXN3.js';import'../chunk-S7ZMBRYT.js';import'../chunk-TIVYCE4X.js';import'../chunk-RCP2CZRA.js';import {a as a$3}from'../chunk-AGKZWMW5.js';import'../chunk-YWG6HJAX.js';import'../chunk-NHQA6KSU.js';import'../chunk-DDCGJBN7.js';import'../chunk-SGJYHWYM.js';import'../chunk-QYGN3VYS.js';import'../chunk-ADC7WDF4.js';import'../chunk-ICQEZHVV.js';import'../chunk-PSHB2EQA.js';import'../chunk-JVBWH3DS.js';import'../chunk-EHRGIXKH.js';import'../chunk-CQC2IBSD.js';import'../chunk-CKVTRZ3S.js';import'../chunk-YSG3MHTX.js';import'../chunk-ZSYQCIYS.js';import'../chunk-4EYPU56T.js';import'../chunk-2JHFRTOZ.js';import'../chunk-FJTQQ4SC.js';import {a as a$2}from'../chunk-W2HFGSVH.js';import'../chunk-2GABMQSA.js';import'../chunk-7ECOWHUV.js';import'../chunk-IUPJTP3B.js';import'../chunk-KO4EAVJY.js';import'../chunk-PEHI6LCP.js';import'../chunk-3HUMZKFZ.js';import'../chunk-U5N2WWD3.js';import'../chunk-F2D445K4.js';import'../chunk-NUCPKDK5.js';import'../chunk-2IOTGL4J.js';import'../chunk-NASTZUK6.js';import'../chunk-UKXYDUDY.js';import'../chunk-7YXRTIXL.js';import'../chunk-4NU44YPN.js';import'../chunk-3SQB2TJB.js';import'../chunk-L5AG5DTS.js';import'../chunk-EAF4H4YJ.js';import'../chunk-XH22TH7N.js';import'../chunk-7LF2CJ3L.js';import'../chunk-4UC2VYI5.js';import'../chunk-TMDCYGCN.js';import'../chunk-BZGVXBP3.js';import'../chunk-U6W5PRLZ.js';import'../chunk-JXTOUSXQ.js';import'../chunk-DRYKJQ72.js';import'../chunk-46KQF4UN.js';import'../chunk-556ANF7Z.js';import'../chunk-3NFGWKSO.js';import'../chunk-L73GMVVO.js';import'../chunk-OL4WHG4U.js';import'../chunk-V5WX4TSN.js';import'../chunk-Z22ALCLD.js';import'../chunk-IHTB4XCP.js';import'../chunk-5KMCPFGM.js';import'../chunk-6I4GG756.js';import'../chunk-Z5GMQ477.js';import'../chunk-6FL6AY4D.js';import'../chunk-3376QA4Q.js';import'../chunk-PDZ7VJPX.js';import'../chunk-Y72C3IVO.js';import'../chunk-5OQVCPXP.js';import'../chunk-LSW5TIYQ.js';import'../chunk-5YFGDOSH.js';import'../chunk-JWAU7A2Q.js';import'../chunk-YFCBMUPK.js';import'../chunk-SLLTAQ22.js';import'../chunk-WMUM5NGX.js';import'../chunk-A2U6VIQW.js';import'../chunk-VZMFSH37.js';import'../chunk-ECVIBKDN.js';import'../chunk-MPD36YFP.js';import'../chunk-EDXV6BE6.js';import'../chunk-HM2QBLIL.js';import'../chunk-6IKHZM3V.js';import'../chunk-ZVCIT3QN.js';import'../chunk-UACQQO3I.js';import'../chunk-IHLMMP5Q.js';import'../chunk-LN37WPV7.js';import'../chunk-5NAO3POG.js';import'../chunk-VOTCMLJE.js';import'../chunk-ZKFUHFBC.js';import'../chunk-CEYIRTZQ.js';import'../chunk-TORDOY73.js';import'../chunk-CAK44O3E.js';import'../chunk-MTWFWU3I.js';import'../chunk-NREZRMEX.js';import'../chunk-3SKJUZ5H.js';import'../chunk-6EMNBLEM.js';import'../chunk-4CBZOTZR.js';import'../chunk-XY4CWRWG.js';import'../chunk-2FGDZ6WR.js';import'../chunk-KHCZBVOK.js';import'../chunk-2TO4PAQM.js';import'../chunk-HSTY767P.js';import'../chunk-BKWINCGB.js';import'../chunk-GGD2FGWK.js';import'../chunk-AI5FYYCO.js';import'../chunk-UCQKCAYY.js';import'../chunk-HL32HBMO.js';import'../chunk-K7EZKYBC.js';import'../chunk-FIXJ55FT.js';import'../chunk-GDU3OVET.js';import'../chunk-3EU5QGAN.js';import'../chunk-V6YCCR75.js';import'../chunk-NYSABCPP.js';import'../chunk-M5IVXDZ4.js';import'../chunk-2ZG2WNSI.js';import'../chunk-FBKS63GQ.js';import'../chunk-NUGYUIN6.js';import'../chunk-6KFTNJLJ.js';import'../chunk-C7GZULSV.js';import'../chunk-L6ZGEGUV.js';import'../chunk-DQSDZXTX.js';import'../chunk-R33XCP5H.js';import'../chunk-SDKXW3R4.js';import'../chunk-EJ5XTT5H.js';import'../chunk-6FEBVO2P.js';import'../chunk-JCFEHT75.js';import'../chunk-5I545S2U.js';import'../chunk-KPA4J3CC.js';import'../chunk-4JEHGT2R.js';import'../chunk-QNEJRZ4U.js';import'../chunk-SCPA3CM2.js';import'../chunk-2PQUW476.js';import'../chunk-HEKI5WR2.js';import'../chunk-TTZ2UE5L.js';import'../chunk-JZJHLBOV.js';import'../chunk-F5FFAJ6B.js';import'../chunk-5FALHJEA.js';import'../chunk-ICHHISXQ.js';import'../chunk-EERDL5XC.js';import'../chunk-GE3TPDYX.js';import'../chunk-RMGJAA2L.js';import'../chunk-Z7IOYXOK.js';import'../chunk-X2VRJLPR.js';import'../chunk-FELUIC3Z.js';import'../chunk-BKBLZKQ7.js';import'../chunk-3Q72MLBZ.js';import'../chunk-ZWZZVZOP.js';import'../chunk-VLSPFIZU.js';import'../chunk-BGSHHAM2.js';import'../chunk-SR76VRAC.js';import'../chunk-4GMRFP6B.js';import'../chunk-KCSDB6W4.js';import'../chunk-3N22A4KQ.js';import'../chunk-F7KNYOYR.js';import'../chunk-IRRA2OTH.js';import'../chunk-QM2KF35E.js';import'../chunk-WI5V5Z76.js';import'../chunk-PCUUUW7T.js';import'../chunk-EYH5SNDK.js';import'../chunk-RUTYHOHT.js';import'../chunk-4FH2LYOC.js';import'../chunk-U27RVBYT.js';import'../chunk-SX54FORI.js';import'../chunk-XOIZGRZ6.js';import'../chunk-EY3W3WZX.js';import'../chunk-X2J6MJ6Y.js';import'../chunk-CP6DGMEP.js';import'../chunk-7TNSQNT7.js';import'../chunk-YTN4DVWB.js';import'../chunk-XNDNAHCC.js';import'../chunk-UESMX3LA.js';import'../chunk-33MUUBSB.js';import'../chunk-VK62KNI7.js';import'../chunk-OREIXD3L.js';import'../chunk-J64EBQ23.js';import'../chunk-PFSN7DQX.js';import'../chunk-Y2R7ZZYY.js';import'../chunk-LYV7R7DB.js';import'../chunk-EKS6U6XR.js';import'../chunk-5LAJMBKN.js';import'../chunk-ZEONZS5N.js';import'../chunk-75BEGXGF.js';import'../chunk-V4VKQ2QF.js';import'../chunk-NVVCGBML.js';import'../chunk-ZTCAXM77.js';import'../chunk-UVYYUEHO.js';import'../chunk-FFYGBVMN.js';import'../chunk-HJJ2VCYO.js';import'../chunk-KZMULPFK.js';import'../chunk-X5TJ3Z24.js';import'../chunk-ZY5FUK37.js';import'../chunk-DNIYW2WB.js';import'../chunk-DVXIIACM.js';import'../chunk-ZPPUEK2E.js';import'../chunk-GOXCPAUM.js';import'../chunk-6L6HTR6E.js';import'../chunk-4VQUQ3NT.js';import'../chunk-MHRHCLIU.js';import'../chunk-OE7VPOT4.js';import'../chunk-LHVBJHQZ.js';import'../chunk-2V46QEC7.js';import'../chunk-TJNOFRWB.js';import'../chunk-Y2TTBBRP.js';import'../chunk-NYQJHUKD.js';import'../chunk-6NPT5BJ7.js';import'../chunk-MYGQXM66.js';import'../chunk-TJFA5O6Z.js';import'../chunk-KCCBSGT3.js';import'../chunk-QWFECUYL.js';import'../chunk-IPTGAZ37.js';import'../chunk-DEFVXH3J.js';import'../chunk-Y56EKYRN.js';import'../chunk-IW6VX3I7.js';import'../chunk-4S6MFDRP.js';import'../chunk-QBNIE5KZ.js';import'../chunk-24ZESL25.js';import'../chunk-QH67MZKV.js';import'../chunk-O5CSN63E.js';import'../chunk-I2K2QQOA.js';import'../chunk-ZPKZLDR2.js';import'../chunk-EBXTHJF5.js';import'../chunk-ZXSIHT6V.js';import'../chunk-YFZPYFTS.js';import'../chunk-JSE2CMYN.js';import'../chunk-WSMQZH5E.js';import'../chunk-CEY3P2QK.js';import'../chunk-E6ZLTD7K.js';import'../chunk-YWDIILO5.js';import'../chunk-WVOOXXON.js';import'../chunk-YRO736RI.js';import'../chunk-T7HRX3EC.js';import'../chunk-C4ELFIL6.js';import'../chunk-UJRREWOA.js';import'../chunk-3KSOBU4X.js';import'../chunk-ZMNFPSA3.js';import'../chunk-6C2TVGCV.js';import'../chunk-JUM5W2FF.js';import'../chunk-MOH4SNJJ.js';import'../chunk-HG6NCRSN.js';import'../chunk-4TNLRALG.js';import'../chunk-WYRCNM2M.js';import'../chunk-EYKDAQEG.js';import'../chunk-K3RU27VR.js';import'../chunk-CFKH5BM3.js';import'../chunk-OEEQX3JR.js';import'../chunk-ZT35KBQN.js';import'../chunk-XU65MB53.js';import'../chunk-JUY2JZGK.js';import'../chunk-CHPQMJNP.js';import'../chunk-CJSVB5XT.js';import'../chunk-XFY6L3B6.js';import'../chunk-BNOMWF6G.js';import'../chunk-XQ5APSL5.js';import'../chunk-6UJXNDLR.js';import'../chunk-MFV4KTCM.js';import'../chunk-I56A4HTS.js';import'../chunk-BM65PK4H.js';import'../chunk-3Q67KQWC.js';import'../chunk-A4G246BH.js';import'../chunk-WUGIELON.js';import'../chunk-GYYQR6WJ.js';import'../chunk-PEAZKA47.js';import'../chunk-NTXAFTKR.js';import {b as b$1}from'../chunk-DZKJRP4J.js';import'../chunk-DSH6THYW.js';import'../chunk-2TQHUVNP.js';import'../chunk-RBLL355H.js';import'../chunk-IXWAWSD4.js';import'../chunk-Z67QQMOX.js';import'../chunk-5YDJTHDG.js';import'../chunk-NGSCUYDU.js';import'../chunk-Y6JASO6W.js';import*as S from'react';import {cn}from'@xploreu/lib/cn';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {ChevronDownIcon,CheckCircle2Icon,CircleIcon}from'lucide-react';import {cva}from'class-variance-authority';import {Slot}from'@radix-ui/react-slot';function ce({multiple:o$1=true,inputPlaceholder:p$1="Search...",container:u,items:i,infiniteScroll:R,isPending:w,taggable:s=false,maxVisible:m$1,...g}){let[z$1,F]=useControlledState({value:g?.inputValue?.toString(),defaultValue:g?.defaultInputValue?.toString(),onChange:g?.onInputValueChange}),[a$2,f]=useControlledState({value:g?.value??[],defaultValue:g?.defaultValue??[],onChange:g?.onValueChange}),[P,l$1]=S.useState([]),C=S.useRef(new Set);S.useEffect(()=>{let t=new Set(a$2.map(d=>d.value));l$1(d=>{let h=d.filter(e=>t.has(e.value));return h.length===d.length?d:(C.current=new Set(h.map(e=>e.value)),h)});},[a$2]);let r=z$1?.toString().trim()??"",c=S.useMemo(()=>r?a$2.some(t=>t.value.toLowerCase()===r.toLowerCase()):false,[r,a$2]),v$1=S.useMemo(()=>!s||!r?false:!i?.some(t=>t.label.toLowerCase()===r.toLowerCase()),[s,r,i]),E=S.useMemo(()=>{let t=[...i??[],...P];return v$1?[...t,{label:r,value:r,tag:true}]:t},[i,P,v$1,r]);return jsxs(d,{...g,behavior:"chip-outside",multiple:true,items:s?E:i,isItemEqualToValue:(t,d)=>t.value===d.value,onValueChange:(t,d)=>{if(s){let h=t.filter(e=>e?.tag===true&&!C.current.has(e.value));if(h.length>0){for(let e of h)C.current.add(e.value);l$1(e=>[...e,...h]);}}f(o$1?t:[t[t.length-1]],d);},onInputValueChange:F,children:[jsx(a,{className:cn(a$1(),"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text"),children:jsxs(m,{className:cn("contents",m$1!==void 0&&"flex-nowrap overflow-hidden"),children:[jsx(l,{children:t=>{let d=m$1!==void 0?t.slice(0,m$1):t,h=m$1!==void 0?t.length-m$1:0;return jsxs(Fragment,{children:[d?.map(e=>jsxs(n,{className:cn(m$1!==void 0&&"min-w-0 shrink"),children:[e?.image&&jsx("img",{src:e.image,alt:e?.label||"",className:"size-4 rounded-full object-cover shrink-0 mr-1"}),m$1!==void 0?jsx("span",{className:"truncate",children:e?.label||""}):e?.label||"",jsx(o,{})]},e?.value||"")),h>0&&jsxs(n,{className:"shrink-0",children:["+",h]})]})}}),jsx(b,{render:jsx("input",{className:"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder",placeholder:a$2.length===0?p$1:void 0})})]})}),jsxs(p,{container:u,children:[jsx(t,{status:w||i===void 0?"pending":i?.length===0&&!v$1?"empty":null}),jsxs(v,{children:[i?.map(t=>jsx(z,{value:t,children:jsxs("div",{className:"flex items-center gap-2 w-full min-w-0",children:[t.image&&jsx("img",{src:t.image,alt:t.label,className:"size-6 rounded-full object-cover shrink-0"}),jsx("span",{className:"truncate",children:t.label})]})},t.value)),v$1&&jsx(z,{value:{label:r,value:r,tag:true},children:jsxs("div",{className:"flex items-center gap-1.5 w-full min-w-0",children:[!c&&jsx("span",{className:"text-text-secondary",children:"Create:"}),jsx("span",{className:"font-medium text-text-primary truncate",children:r})]})}),jsx(G,{...R})]})]})]})}function fe({items:o,value:p$1,defaultValue:u,onValueChange:i,placeholder:R="Select",icon:w,container:s,isPending:m,className:g,triggerClassName:z$1,contentClassName:F,disabled:a,size:f="md",infiniteScroll:P}){return jsxs(d,{items:o,value:p$1,defaultValue:u,onValueChange:i,isItemEqualToValue:(l,C)=>l.value===C.value,disabled:a,children:[jsxs(e,{className:cn(a$1({size:f}),"group flex cursor-pointer items-center gap-2 pr-3 text-left",z$1,g),children:[w&&jsx("span",{className:"size-4.5 shrink-0 text-fg-quaternary",children:w}),jsx("span",{className:"flex-1 truncate",children:jsx(l,{children:l=>jsx("span",{className:l?"text-text-primary":"text-text-placeholder",children:l?.label??R})})}),jsx(ChevronDownIcon,{className:"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180"})]}),jsxs(p,{container:s,className:cn("w-72",F),align:"start",sideOffset:8,children:[jsx(t,{status:m||o===void 0?"pending":o.length===0?"empty":null}),jsxs(v,{children:[o?.map(l=>jsx(x,{children:jsxs(z,{value:l,withIndicator:false,className:"justify-between",children:[jsx("span",{className:"truncate",children:l.label}),jsx(c,{children:jsx(CheckCircle2Icon,{className:"size-5 shrink-0 text-fg-brand-primary"})})]})},l.value)),jsx(G,{...P})]})]})]})}function he({checked:o}){return jsx("span",{"data-checked":o?"":void 0,className:cn("flex size-4 shrink-0 items-center justify-center rounded-[4px] border transition-colors",o?"border-border-brand bg-bg-brand-solid text-white":"border-border-primary bg-bg-primary"),children:o&&jsx("svg",{viewBox:"0 0 12 12",className:"size-3",fill:"none",children:jsx("path",{d:"M2.5 6L4.75 8.25L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})}function me({...o}){return jsx(x,{children:jsx(z,{...o,withIndicator:false})})}function ye(o){return jsx(c,{...o})}function Ie(o){let{items:p$1,placeholder:u="Select",icon:i,container:R,isPending:w,className:s,triggerClassName:m,contentClassName:g,disabled:z,infiniteScroll:F}=o,a=o.multiple===true,f=S.useMemo(()=>{if(a)return o.value;let e=o.value;return e?[e]:[]},[a,o.value,o.value]),P=S.useMemo(()=>{if(a)return o.defaultValue??[];let e=o.defaultValue;return e?[e]:[]},[a,o.defaultValue,o.defaultValue]),[l,C]=S.useState(()=>(f!==void 0?f:P)??[]);S.useEffect(()=>{f!==void 0&&C(f);},[f]);let r=l??[],c=r.length>0,[v$1,E]=S.useState(""),$=S.useMemo(()=>{if(!v$1.trim())return p$1;let e=v$1.toLowerCase();return p$1?.filter(y=>y.label.toLowerCase().includes(e)||y.value.toLowerCase().includes(e))},[p$1,v$1]),t$1=e=>{let y=e;if(a)C(y),o.onValueChange?.(y);else {let H=y.length>0?y[y.length-1]:null;C(H?[H]:[]),o.onValueChange?.(H);}},d$1=()=>{C([]),a?o.onValueChange?.([]):o.onValueChange?.(null);},h$1=S.useMemo(()=>c?a?`${u} (${r.length})`:r[0]?.label??u:a?`All ${u}`:u,[c,a,u,r]);return jsxs(d,{multiple:true,items:p$1,value:r,onValueChange:t$1,isItemEqualToValue:(e,y)=>e.value===y.value,disabled:z,children:[jsxs(e,{className:cn("group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors","border-border-primary text-text-secondary hover:bg-bg-primary-hover",c&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",m,s),children:[i&&jsx("span",{className:cn("size-4 shrink-0",c?"text-fg-brand-primary":"text-fg-quaternary"),children:i}),jsx("span",{className:"truncate",children:h$1}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",c?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(p,{container:R,className:cn("w-72",g),align:"start",sideOffset:8,children:a?jsxs("div",{className:"flex flex-col",children:[jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:u}),jsxs("button",{type:"button",disabled:!c,onClick:d$1,className:cn("text-body-medium-3 transition-colors",c?"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover":"cursor-not-allowed text-text-disabled"),children:["Clear",c?` (${r.length})`:""]})]}),jsx(h,{value:v$1,onChange:e=>E(e.target.value),placeholder:`Search ${u.toLowerCase()}...`}),jsx(t,{status:w||p$1===void 0?"pending":$?.length===0?"empty":null}),jsxs(v,{children:[$?.map(e=>{let y=r.some(H=>H.value===e.value);return jsxs(me,{value:e,children:[jsx(he,{checked:y}),jsx("span",{className:"truncate",children:e.label})]},e.value)}),jsx(G,{...F})]})]}):jsxs(Fragment,{children:[jsx(t,{status:w||p$1===void 0?"pending":p$1?.length===0?"empty":null}),jsxs(v,{children:[p$1?.map(e=>jsxs(me,{value:e,className:"justify-between",children:[jsx("span",{className:"truncate",children:e.label}),jsx(ye,{children:jsx(CheckCircle2Icon,{className:"size-5 shrink-0 text-fg-brand-primary"})})]},e.value)),jsx(G,{...F})]})]})})]})}var Se=[{status:"open-to-all",label:"Open to All Opportunities",badgeColor:"gray"},{status:"open-to-work",label:"Open to Work",badgeColor:"success"},{status:"open-to-freelance",label:"Open to Freelance",badgeColor:"warning"},{status:"open-to-coach",label:"Open to Coach",badgeColor:"blue-light"}],we=cva("flex flex-col items-center relative",{variants:{size:{xs:"gap-0.5 w-6",sm:"gap-0.5 w-8",md:"gap-0.5 w-10",lg:"gap-1 w-12",xl:"gap-1 w-14","2xl":"gap-2 w-16","3xl":"gap-2 w-20"}},defaultVariants:{size:"sm"}}),ke=cva(void 0,{variants:{size:{xs:"p-0.5 h-2 font-semibold text-[5px] leading-2",sm:"p-1 h-2.5 font-semibold text-[6px] leading-2.5",md:"px-1 h-3.5 font-semibold text-[6px] leading-2.5",lg:"px-1 h-4 text-body-semibold-caption",xl:"px-1 h-6 text-body-semibold-xs","2xl":"px-2 h-9 text-body-semibold-sm","3xl":"px-2 h-10 text-label-semibold-4"}},defaultVariants:{size:"sm"}}),Re=cva(void 0,{variants:{size:{xs:"p-[1.5px]",sm:"p-xp-xxs",md:"p-[2.5px]",lg:"p-xp-xs",xl:"p-[3.5px]","2xl":"p-1","3xl":"p-1"}},defaultVariants:{size:"sm"}});function ze({avatarClassName:o,badgeClassName:p,imageSrc:u,avatarImageClassName:i,imageAlt:R,className:w,status:s,size:m,isVerified:g,onEdit:z,onClickAvatar:F,variant:a="profile",isOnline:f,companyLogoSrc:P,bordered:l=true,badged:C=false,...r}){let c=S.useMemo(()=>Se.find(t=>t.status===s),[s]),v=!!s,E=l&&v&&a==="profile"?"div":Slot,$=S.useMemo(()=>{switch(a){case "company":return "/images/fallback-company.jpeg";case "university":return "/images/fallback-university.jpeg";case "group":return "/images/fallback-user-group.jpeg";default:return "/images/fallback-user.jpeg"}},[a]);return jsxs("div",{className:cn(we({size:m,className:w})),"data-slot":"profile-avatar",...r,children:[jsx(E,{className:cn("rounded-xp-card-base",l?cn(s==="open-to-work"&&"bg-gradient-avatar-outline-opentowork",s==="open-to-freelance"&&"bg-gradient-avatar-outline-opentoprofesional",s==="open-to-coach"&&"bg-gradient-avatar-outline-opentocoach",s==="open-to-all"&&"bg-gradient-avatar-outline-opentowork",!s&&a==="profile"&&"bg-border-secondary"):void 0,l&&a==="profile"&&Re({size:m})),children:jsxs("div",{className:"relative group",children:[jsx("div",{className:cn("relative flex size-8 shrink-0 overflow-hidden rounded-xp-card-base","size-full",l&&v&&"border-0",o),onClick:F,children:u?jsx("img",{alt:R||"Avatar",className:cn("aspect-square size-full bg-bg-primary object-cover",i),src:u}):jsx("div",{className:"flex aspect-square size-full items-center justify-center bg-bg-tertiary text-label-semibold-2 text-text-quaternary",children:jsx("img",{alt:R||"Avatar Fallback",className:"aspect-square size-full bg-bg-primary object-cover",src:$})})}),z&&jsx("div",{className:"absolute inset-0 flex opacity-0 hover:opacity-100 hover:bg-background-primary-subtle-press/25 rounded-xp-card-base transition-opacity duration-200 items-center justify-center cursor-pointer",id:"avatar-upload-trigger",onClick:z,children:jsx("div",{className:"flex items-center p-2 hover:bg-background-primary-subtle-hover justify-center rounded-xp-card-base-sm bg-background-canvas-subtle",children:jsx(a$2,{className:"size-6"})})}),f&&!P&&jsx(CircleIcon,{className:"text-bg-primary-replace fill-fg-success-secondary size-[11.5px] absolute -bottom-[3.5px] -right-[3.5px]"}),P!==void 0&&jsx("div",{className:"border border-bg-primary-replace size-[15px] rounded-xs absolute -bottom-[3.5px] -right-[3.5px] overflow-hidden bg-bg-primary",children:jsx("img",{alt:"Company Logo",className:"bg-bg-primary object-cover size-full",src:P})})]})}),C&&c&&jsx(b$1,{className:cn(ke({size:m,className:p})),color:c.badgeColor,size:"sm",children:c.label}),g&&jsx("div",{className:"absolute -bottom-1 -right-1",children:jsx(a$3,{className:"size-4 text-[#068BEE]"})})]})}export{ce as ComboboxChip,fe as ComboboxSimple,Ie as FilterCombobox,ze as ProfileAvatar};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/composites/combobox-chip.tsx","../../src/composites/combobox-simple.tsx","../../src/composites/filter-combobox.tsx","../../src/composites/profile-avatar.tsx"],"names":["ComboboxChip","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","V","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInputGroup","cn","inputVariants","ComboboxChips","ComboboxValue","visible","overflow","Fragment","ComboboxChipRemove","ComboboxInput","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxInfiniteScroll","ComboboxSimple","defaultValue","onValueChange","placeholder","icon","className","triggerClassName","contentClassName","disabled","size","toArray","internalValue","setInternalValue","K","valueArray","selected","arr","single","ComboboxTrigger","ChevronDownIcon","ComboboxHighlightItem","ComboboxItemIndicator","CheckCircle2Icon","MiniCheckbox","checked","FilterItem","FilterItemIndicator","FilterCombobox","isMultiple","controlledArray","defaultArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","handleClear","triggerLabel","profileAvatarStatus","profileAvatarVariants","cva","profileAvatarBadgeVariants","profileAvatarPaddingVariants","ProfileAvatar","avatarClassName","badgeClassName","imageSrc","avatarImageClassName","imageAlt","status","isVerified","onEdit","onClickAvatar","variant","isOnline","companyLogoSrc","bordered","badged","activeStatus","Y","s","hasActiveStatus","Comp","Slot","fallbackImage","upload_pictures_on_profile_icon_default","CircleIcon","Badge","verified_icon_default"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxInput as ComboboxInputPrimitive,\r\n ComboboxInputGroup,\r\n} from \"../primitives/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxChip as ComboboxChipUI,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxValue,\r\n type ComboboxProps\r\n} from \"../ui/combobox\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { inputVariants } from \"../ui/input\"\r\n\r\ntype ComboboxChipProps<Value> = Omit<ComboboxProps<Value, true>, \"multiple\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items: ({ label: string; value: string; image?: string }[]) | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChip<Value extends { label: string; value: string; image?: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n return [...base, { label: trimmedInput, value: trimmedInput, tag: true } as unknown as Value]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n {/* Input box with chips inside */}\r\n <ComboboxInputGroup\r\n className={cn(\r\n inputVariants(),\r\n \"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text\"\r\n )}\r\n >\r\n {/* Chips inside the input box */}\r\n <ComboboxChips\r\n className={cn(\r\n \"contents\",\r\n maxVisible !== undefined && \"flex-nowrap overflow-hidden\"\r\n )}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChipUI\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {item?.image && (\r\n <img\r\n src={item.image}\r\n alt={item?.label || \"\"}\r\n className=\"size-4 rounded-full object-cover shrink-0 mr-1\"\r\n />\r\n )}\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChipUI>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChipUI className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChipUI>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n {/* Text input — shrinks to fit remaining space (inside Chips so backspace works) */}\r\n <ComboboxInputPrimitive\r\n render={\r\n <input\r\n className=\"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder\"\r\n placeholder={value.length === 0 ? inputPlaceholder : undefined}\r\n />\r\n }\r\n />\r\n </ComboboxChips>\r\n </ComboboxInputGroup>\r\n\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item as Value}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n {item.image && (\r\n <img\r\n src={item.image}\r\n alt={item.label}\r\n className=\"size-6 rounded-full object-cover shrink-0\"\r\n />\r\n )}\r\n <span className=\"truncate\">{item.label}</span>\r\n </div>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n <div className=\"flex items-center gap-1.5 w-full min-w-0\">\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary\">Create:</span>\r\n )}\r\n <span className=\"font-medium text-text-primary truncate\">\r\n {trimmedInput}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxChip }\r\nexport type { ComboboxChipProps }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon } from \"lucide-react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ComboboxItemIndicator as ComboboxItemIndicatorPrimitive } from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type ComboboxSimpleItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\nexport type ComboboxSimpleProps = {\r\n items: ComboboxSimpleItem[] | undefined\r\n value?: ComboboxSimpleItem | null\r\n defaultValue?: ComboboxSimpleItem | null\r\n onValueChange?: (value: ComboboxSimpleItem | null) => void\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n size?: VariantProps<typeof inputVariants>[\"size\"]\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction ComboboxSimple({\r\n items,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n size = \"md\",\r\n infiniteScroll,\r\n}: ComboboxSimpleProps) {\r\n const toArray = (v: ComboboxSimpleItem | null | undefined) => (v ? [v] : [])\r\n\r\n const [internalValue, setInternalValue] = React.useState<ComboboxSimpleItem[]>(\r\n () => toArray(value !== undefined ? value : defaultValue)\r\n )\r\n\r\n // Sync controlled value\r\n React.useEffect(() => {\r\n if (value !== undefined) setInternalValue(toArray(value))\r\n }, [value])\r\n\r\n const valueArray = internalValue\r\n const selected = valueArray[0] ?? null\r\n\r\n const handleValueChange: ComboboxProps<ComboboxSimpleItem, boolean>[\"onValueChange\"] = (next) => {\r\n const arr = next as ComboboxSimpleItem[]\r\n // take last selected (base-ui gives full array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n onValueChange?.(single)\r\n }\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n inputVariants({ size }),\r\n \"group flex cursor-pointer items-center gap-2 pr-3 text-left\",\r\n selected ? \"text-text-primary\" : \"text-text-placeholder\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span className=\"size-4.5 shrink-0 text-fg-quaternary\">{icon}</span>\r\n )}\r\n <span className=\"flex-1 truncate\">{selected?.label ?? placeholder}</span>\r\n <ChevronDownIcon\r\n className=\"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180\"\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxHighlightItem key={item.value}>\r\n <ComboboxItem value={item} withIndicator={false} className=\"justify-between\">\r\n <span className=\"truncate\">{item.label}</span>\r\n <ComboboxItemIndicatorPrimitive>\r\n <CheckCircle2Icon className=\"size-5 shrink-0 text-fg-brand-primary\" />\r\n </ComboboxItemIndicatorPrimitive>\r\n </ComboboxItem>\r\n </ComboboxHighlightItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxSimple }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Mini checkbox (no extra dep) ───\r\n\r\nfunction MiniCheckbox({ checked }: { checked: boolean }) {\r\n return (\r\n <span\r\n data-checked={checked ? \"\" : undefined}\r\n className={cn(\r\n \"flex size-4 shrink-0 items-center justify-center rounded-[4px] border transition-colors\",\r\n checked\r\n ? \"border-border-brand bg-bg-brand-solid text-white\"\r\n : \"border-border-primary bg-bg-primary\"\r\n )}\r\n >\r\n {checked && (\r\n <svg viewBox=\"0 0 12 12\" className=\"size-3\" fill=\"none\">\r\n <path\r\n d=\"M2.5 6L4.75 8.25L9.5 3.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n )}\r\n </span>\r\n )\r\n}\r\n\r\n// ─── Clean item without default indicator (fix double checkbox bug) ───\r\n\r\nfunction FilterItem({\r\n ...props\r\n}: React.ComponentProps<typeof ComboboxItem>) {\r\n return (\r\n <ComboboxHighlightItem>\r\n <ComboboxItem\r\n {...props}\r\n withIndicator={false}\r\n />\r\n </ComboboxHighlightItem>\r\n )\r\n}\r\n\r\nfunction FilterItemIndicator(props: React.ComponentProps<typeof ComboboxItemIndicatorPrimitive>) {\r\n return <ComboboxItemIndicatorPrimitive {...props} />\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => {\r\n const checked = valueArray.some((v) => v.value === item.value)\r\n return (\r\n <FilterItem key={item.value} value={item}>\r\n <MiniCheckbox checked={checked} />\r\n <span className=\"truncate\">{item.label}</span>\r\n </FilterItem>\r\n )\r\n })}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <FilterItem key={item.value} value={item} className=\"justify-between\">\r\n <span className=\"truncate\">{item.label}</span>\r\n <FilterItemIndicator>\r\n <CheckCircle2Icon className=\"size-5 shrink-0 text-fg-brand-primary\" />\r\n </FilterItemIndicator>\r\n </FilterItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { CircleIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { UploadPicturesOnProfileIcon, VerifiedIcon } from \"../icons\"\r\nimport { Badge } from \"../ui/badge\"\r\n\r\nexport type ProfileAvatarStatus =\r\n | \"open-to-all\"\r\n | \"open-to-work\"\r\n | \"open-to-freelance\"\r\n | \"open-to-coach\"\r\n | undefined\r\n\r\nexport type ProfileAvatarVariant = \"profile\" | \"company\" | \"university\" | \"group\"\r\n\r\nconst profileAvatarStatus: {\r\n status: ProfileAvatarStatus\r\n label: string\r\n badgeColor?: React.ComponentProps<typeof Badge>[\"color\"]\r\n}[] = [\r\n {\r\n status: \"open-to-all\",\r\n label: \"Open to All Opportunities\",\r\n badgeColor: \"gray\",\r\n },\r\n {\r\n status: \"open-to-work\",\r\n label: \"Open to Work\",\r\n badgeColor: \"success\",\r\n },\r\n {\r\n status: \"open-to-freelance\",\r\n label: \"Open to Freelance\",\r\n badgeColor: \"warning\",\r\n },\r\n {\r\n status: \"open-to-coach\",\r\n label: \"Open to Coach\",\r\n badgeColor: \"blue-light\",\r\n },\r\n]\r\n\r\nconst profileAvatarVariants = cva(\"flex flex-col items-center relative\", {\r\n variants: {\r\n size: {\r\n xs: \"gap-0.5 w-6\",\r\n sm: \"gap-0.5 w-8\",\r\n md: \"gap-0.5 w-10\",\r\n lg: \"gap-1 w-12\",\r\n xl: \"gap-1 w-14\",\r\n \"2xl\": \"gap-2 w-16\",\r\n \"3xl\": \"gap-2 w-20\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarBadgeVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"p-0.5 h-2 font-semibold text-[5px] leading-2\",\r\n sm: \"p-1 h-2.5 font-semibold text-[6px] leading-2.5\",\r\n md: \"px-1 h-3.5 font-semibold text-[6px] leading-2.5\",\r\n lg: \"px-1 h-4 text-body-semibold-caption\",\r\n xl: \"px-1 h-6 text-body-semibold-xs\",\r\n \"2xl\": \"px-2 h-9 text-body-semibold-sm\",\r\n \"3xl\": \"px-2 h-10 text-label-semibold-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarPaddingVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"p-[1.5px]\",\r\n sm: \"p-xp-xxs\",\r\n md: \"p-[2.5px]\",\r\n lg: \"p-xp-xs\",\r\n xl: \"p-[3.5px]\",\r\n \"2xl\": \"p-1\",\r\n \"3xl\": \"p-1\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nfunction ProfileAvatar({\r\n avatarClassName,\r\n badgeClassName,\r\n imageSrc,\r\n avatarImageClassName,\r\n imageAlt,\r\n className,\r\n status,\r\n size,\r\n isVerified,\r\n onEdit,\r\n onClickAvatar,\r\n variant = \"profile\",\r\n isOnline,\r\n companyLogoSrc,\r\n bordered = true,\r\n badged = false,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n avatarClassName?: string\r\n badgeClassName?: string\r\n imageSrc?: string\r\n imageAlt?: string\r\n isVerified?: boolean\r\n avatarImageClassName?: string\r\n size?: VariantProps<typeof profileAvatarVariants>[\"size\"]\r\n status?: ProfileAvatarStatus\r\n onEdit?: () => void\r\n onClickAvatar?: () => void\r\n variant?: ProfileAvatarVariant\r\n isOnline?: boolean\r\n companyLogoSrc?: string\r\n bordered?: boolean\r\n badged?: boolean\r\n}) {\r\n const activeStatus = React.useMemo(() => {\r\n return profileAvatarStatus.find((s) => s.status === status)\r\n }, [status])\r\n\r\n const hasActiveStatus = !!status\r\n const Comp = bordered && hasActiveStatus && variant === \"profile\" ? \"div\" : Slot\r\n\r\n const fallbackImage = React.useMemo(() => {\r\n switch (variant) {\r\n case \"company\":\r\n return \"/images/fallback-company.jpeg\"\r\n case \"university\":\r\n return \"/images/fallback-university.jpeg\"\r\n case \"group\":\r\n return \"/images/fallback-user-group.jpeg\"\r\n default:\r\n return \"/images/fallback-user.jpeg\"\r\n }\r\n }, [variant])\r\n\r\n return (\r\n <div\r\n className={cn(profileAvatarVariants({ size, className }))}\r\n data-slot=\"profile-avatar\"\r\n {...props}\r\n >\r\n <Comp\r\n className={cn(\r\n \"rounded-xp-card-base\",\r\n bordered\r\n ? cn(\r\n status === \"open-to-work\" && \"bg-gradient-avatar-outline-opentowork\",\r\n status === \"open-to-freelance\" && \"bg-gradient-avatar-outline-opentoprofesional\",\r\n status === \"open-to-coach\" && \"bg-gradient-avatar-outline-opentocoach\",\r\n status === \"open-to-all\" && \"bg-gradient-avatar-outline-opentowork\",\r\n !status && variant === \"profile\" && \"bg-border-secondary\"\r\n )\r\n : undefined,\r\n bordered && variant === \"profile\" && profileAvatarPaddingVariants({ size })\r\n )}\r\n >\r\n <div className=\"relative group\">\r\n <div\r\n className={cn(\r\n \"relative flex size-8 shrink-0 overflow-hidden rounded-xp-card-base\",\r\n \"size-full\",\r\n bordered && hasActiveStatus && \"border-0\",\r\n avatarClassName\r\n )}\r\n onClick={onClickAvatar}\r\n >\r\n {imageSrc ? (\r\n // eslint-disable-next-line @next/next/no-img-element\r\n <img\r\n alt={imageAlt || \"Avatar\"}\r\n className={cn(\"aspect-square size-full bg-bg-primary object-cover\", avatarImageClassName)}\r\n src={imageSrc}\r\n />\r\n ) : (\r\n <div className=\"flex aspect-square size-full items-center justify-center bg-bg-tertiary text-label-semibold-2 text-text-quaternary\">\r\n {/* eslint-disable-next-line @next/next/no-img-element */}\r\n <img\r\n alt={imageAlt || \"Avatar Fallback\"}\r\n className=\"aspect-square size-full bg-bg-primary object-cover\"\r\n src={fallbackImage}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {onEdit && (\r\n <div\r\n className=\"absolute inset-0 flex opacity-0 hover:opacity-100 hover:bg-background-primary-subtle-press/25 rounded-xp-card-base transition-opacity duration-200 items-center justify-center cursor-pointer\"\r\n id=\"avatar-upload-trigger\"\r\n onClick={onEdit}\r\n >\r\n <div className=\"flex items-center p-2 hover:bg-background-primary-subtle-hover justify-center rounded-xp-card-base-sm bg-background-canvas-subtle\">\r\n <UploadPicturesOnProfileIcon className=\"size-6\" />\r\n </div>\r\n </div>\r\n )}\r\n {isOnline && !companyLogoSrc && (\r\n <CircleIcon className=\"text-bg-primary-replace fill-fg-success-secondary size-[11.5px] absolute -bottom-[3.5px] -right-[3.5px]\" />\r\n )}\r\n {companyLogoSrc !== undefined && (\r\n <div className=\"border border-bg-primary-replace size-[15px] rounded-xs absolute -bottom-[3.5px] -right-[3.5px] overflow-hidden bg-bg-primary\">\r\n {/* eslint-disable-next-line @next/next/no-img-element */}\r\n <img\r\n alt=\"Company Logo\"\r\n className=\"bg-bg-primary object-cover size-full\"\r\n src={companyLogoSrc}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </Comp>\r\n {badged &&\r\n activeStatus && (\r\n <Badge\r\n className={cn(profileAvatarBadgeVariants({ size, className: badgeClassName }))}\r\n color={activeStatus.badgeColor}\r\n size=\"sm\"\r\n >\r\n {activeStatus.label}\r\n </Badge>\r\n )}\r\n\r\n {isVerified && (\r\n <div className=\"absolute -bottom-1 -right-1\">\r\n <VerifiedIcon className=\"size-4 text-[#068BEE]\" />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { ProfileAvatar }\r\n"]}
1
+ {"version":3,"sources":["../../src/composites/combobox-chip.tsx","../../src/composites/combobox-simple.tsx","../../src/composites/filter-combobox.tsx","../../src/composites/profile-avatar.tsx"],"names":["ComboboxChip","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","V","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInputGroup","cn","inputVariants","ComboboxChips","ComboboxValue","visible","overflow","Fragment","ComboboxChipRemove","ComboboxInput","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxInfiniteScroll","ComboboxSimple","defaultValue","onValueChange","placeholder","icon","className","triggerClassName","contentClassName","disabled","size","ComboboxTrigger","ChevronDownIcon","ComboboxHighlightItem","ComboboxItemIndicator","CheckCircle2Icon","MiniCheckbox","checked","FilterItem","FilterItemIndicator","FilterCombobox","isMultiple","controlledArray","single","defaultArray","internalValue","setInternalValue","valueArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","arr","handleClear","triggerLabel","profileAvatarStatus","profileAvatarVariants","cva","profileAvatarBadgeVariants","profileAvatarPaddingVariants","ProfileAvatar","avatarClassName","badgeClassName","imageSrc","avatarImageClassName","imageAlt","status","isVerified","onEdit","onClickAvatar","variant","isOnline","companyLogoSrc","bordered","badged","activeStatus","Y","s","hasActiveStatus","Comp","Slot","fallbackImage","upload_pictures_on_profile_icon_default","CircleIcon","Badge","verified_icon_default"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxInput as ComboboxInputPrimitive,\r\n ComboboxInputGroup,\r\n} from \"../primitives/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxChip as ComboboxChipUI,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxValue,\r\n type ComboboxProps\r\n} from \"../ui/combobox\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { inputVariants } from \"../ui/input\"\r\n\r\ntype ComboboxChipProps<Value> = Omit<ComboboxProps<Value, true>, \"multiple\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items: ({ label: string; value: string; image?: string }[]) | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChip<Value extends { label: string; value: string; image?: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n return [...base, { label: trimmedInput, value: trimmedInput, tag: true } as unknown as Value]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n {/* Input box with chips inside */}\r\n <ComboboxInputGroup\r\n className={cn(\r\n inputVariants(),\r\n \"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text\"\r\n )}\r\n >\r\n {/* Chips inside the input box */}\r\n <ComboboxChips\r\n className={cn(\r\n \"contents\",\r\n maxVisible !== undefined && \"flex-nowrap overflow-hidden\"\r\n )}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChipUI\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {item?.image && (\r\n <img\r\n src={item.image}\r\n alt={item?.label || \"\"}\r\n className=\"size-4 rounded-full object-cover shrink-0 mr-1\"\r\n />\r\n )}\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChipUI>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChipUI className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChipUI>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n {/* Text input — shrinks to fit remaining space (inside Chips so backspace works) */}\r\n <ComboboxInputPrimitive\r\n render={\r\n <input\r\n className=\"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder\"\r\n placeholder={value.length === 0 ? inputPlaceholder : undefined}\r\n />\r\n }\r\n />\r\n </ComboboxChips>\r\n </ComboboxInputGroup>\r\n\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item as Value}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n {item.image && (\r\n <img\r\n src={item.image}\r\n alt={item.label}\r\n className=\"size-6 rounded-full object-cover shrink-0\"\r\n />\r\n )}\r\n <span className=\"truncate\">{item.label}</span>\r\n </div>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n <div className=\"flex items-center gap-1.5 w-full min-w-0\">\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary\">Create:</span>\r\n )}\r\n <span className=\"font-medium text-text-primary truncate\">\r\n {trimmedInput}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxChip }\r\nexport type { ComboboxChipProps }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon } from \"lucide-react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ComboboxItemIndicator as ComboboxItemIndicatorPrimitive } from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type ComboboxSimpleItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\nexport type ComboboxSimpleProps = {\r\n items: ComboboxSimpleItem[] | undefined\r\n value?: ComboboxSimpleItem | null\r\n defaultValue?: ComboboxSimpleItem | null\r\n onValueChange?: (value: ComboboxSimpleItem | null) => void\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n size?: VariantProps<typeof inputVariants>[\"size\"]\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction ComboboxSimple({\r\n items,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n size = \"md\",\r\n infiniteScroll,\r\n}: ComboboxSimpleProps) {\r\n return (\r\n <Combobox\r\n items={items}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={onValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n inputVariants({ size }),\r\n \"group flex cursor-pointer items-center gap-2 pr-3 text-left\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span className=\"size-4.5 shrink-0 text-fg-quaternary\">{icon}</span>\r\n )}\r\n <span className=\"flex-1 truncate\">\r\n <ComboboxValue>\r\n {(item) => (\r\n <span className={item ? \"text-text-primary\" : \"text-text-placeholder\"}>\r\n {item?.label ?? placeholder}\r\n </span>\r\n )}\r\n </ComboboxValue>\r\n </span>\r\n <ChevronDownIcon\r\n className=\"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180\"\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxHighlightItem key={item.value}>\r\n <ComboboxItem value={item} withIndicator={false} className=\"justify-between\">\r\n <span className=\"truncate\">{item.label}</span>\r\n <ComboboxItemIndicatorPrimitive>\r\n <CheckCircle2Icon className=\"size-5 shrink-0 text-fg-brand-primary\" />\r\n </ComboboxItemIndicatorPrimitive>\r\n </ComboboxItem>\r\n </ComboboxHighlightItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxSimple }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Mini checkbox (no extra dep) ───\r\n\r\nfunction MiniCheckbox({ checked }: { checked: boolean }) {\r\n return (\r\n <span\r\n data-checked={checked ? \"\" : undefined}\r\n className={cn(\r\n \"flex size-4 shrink-0 items-center justify-center rounded-[4px] border transition-colors\",\r\n checked\r\n ? \"border-border-brand bg-bg-brand-solid text-white\"\r\n : \"border-border-primary bg-bg-primary\"\r\n )}\r\n >\r\n {checked && (\r\n <svg viewBox=\"0 0 12 12\" className=\"size-3\" fill=\"none\">\r\n <path\r\n d=\"M2.5 6L4.75 8.25L9.5 3.5\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n )}\r\n </span>\r\n )\r\n}\r\n\r\n// ─── Clean item without default indicator (fix double checkbox bug) ───\r\n\r\nfunction FilterItem({\r\n ...props\r\n}: React.ComponentProps<typeof ComboboxItem>) {\r\n return (\r\n <ComboboxHighlightItem>\r\n <ComboboxItem\r\n {...props}\r\n withIndicator={false}\r\n />\r\n </ComboboxHighlightItem>\r\n )\r\n}\r\n\r\nfunction FilterItemIndicator(props: React.ComponentProps<typeof ComboboxItemIndicatorPrimitive>) {\r\n return <ComboboxItemIndicatorPrimitive {...props} />\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => {\r\n const checked = valueArray.some((v) => v.value === item.value)\r\n return (\r\n <FilterItem key={item.value} value={item}>\r\n <MiniCheckbox checked={checked} />\r\n <span className=\"truncate\">{item.label}</span>\r\n </FilterItem>\r\n )\r\n })}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <FilterItem key={item.value} value={item} className=\"justify-between\">\r\n <span className=\"truncate\">{item.label}</span>\r\n <FilterItemIndicator>\r\n <CheckCircle2Icon className=\"size-5 shrink-0 text-fg-brand-primary\" />\r\n </FilterItemIndicator>\r\n </FilterItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { CircleIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nimport { UploadPicturesOnProfileIcon, VerifiedIcon } from \"../icons\"\r\nimport { Badge } from \"../ui/badge\"\r\n\r\nexport type ProfileAvatarStatus =\r\n | \"open-to-all\"\r\n | \"open-to-work\"\r\n | \"open-to-freelance\"\r\n | \"open-to-coach\"\r\n | undefined\r\n\r\nexport type ProfileAvatarVariant = \"profile\" | \"company\" | \"university\" | \"group\"\r\n\r\nconst profileAvatarStatus: {\r\n status: ProfileAvatarStatus\r\n label: string\r\n badgeColor?: React.ComponentProps<typeof Badge>[\"color\"]\r\n}[] = [\r\n {\r\n status: \"open-to-all\",\r\n label: \"Open to All Opportunities\",\r\n badgeColor: \"gray\",\r\n },\r\n {\r\n status: \"open-to-work\",\r\n label: \"Open to Work\",\r\n badgeColor: \"success\",\r\n },\r\n {\r\n status: \"open-to-freelance\",\r\n label: \"Open to Freelance\",\r\n badgeColor: \"warning\",\r\n },\r\n {\r\n status: \"open-to-coach\",\r\n label: \"Open to Coach\",\r\n badgeColor: \"blue-light\",\r\n },\r\n]\r\n\r\nconst profileAvatarVariants = cva(\"flex flex-col items-center relative\", {\r\n variants: {\r\n size: {\r\n xs: \"gap-0.5 w-6\",\r\n sm: \"gap-0.5 w-8\",\r\n md: \"gap-0.5 w-10\",\r\n lg: \"gap-1 w-12\",\r\n xl: \"gap-1 w-14\",\r\n \"2xl\": \"gap-2 w-16\",\r\n \"3xl\": \"gap-2 w-20\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarBadgeVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"p-0.5 h-2 font-semibold text-[5px] leading-2\",\r\n sm: \"p-1 h-2.5 font-semibold text-[6px] leading-2.5\",\r\n md: \"px-1 h-3.5 font-semibold text-[6px] leading-2.5\",\r\n lg: \"px-1 h-4 text-body-semibold-caption\",\r\n xl: \"px-1 h-6 text-body-semibold-xs\",\r\n \"2xl\": \"px-2 h-9 text-body-semibold-sm\",\r\n \"3xl\": \"px-2 h-10 text-label-semibold-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nconst profileAvatarPaddingVariants = cva(undefined, {\r\n variants: {\r\n size: {\r\n xs: \"p-[1.5px]\",\r\n sm: \"p-xp-xxs\",\r\n md: \"p-[2.5px]\",\r\n lg: \"p-xp-xs\",\r\n xl: \"p-[3.5px]\",\r\n \"2xl\": \"p-1\",\r\n \"3xl\": \"p-1\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n },\r\n})\r\n\r\nfunction ProfileAvatar({\r\n avatarClassName,\r\n badgeClassName,\r\n imageSrc,\r\n avatarImageClassName,\r\n imageAlt,\r\n className,\r\n status,\r\n size,\r\n isVerified,\r\n onEdit,\r\n onClickAvatar,\r\n variant = \"profile\",\r\n isOnline,\r\n companyLogoSrc,\r\n bordered = true,\r\n badged = false,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n avatarClassName?: string\r\n badgeClassName?: string\r\n imageSrc?: string\r\n imageAlt?: string\r\n isVerified?: boolean\r\n avatarImageClassName?: string\r\n size?: VariantProps<typeof profileAvatarVariants>[\"size\"]\r\n status?: ProfileAvatarStatus\r\n onEdit?: () => void\r\n onClickAvatar?: () => void\r\n variant?: ProfileAvatarVariant\r\n isOnline?: boolean\r\n companyLogoSrc?: string\r\n bordered?: boolean\r\n badged?: boolean\r\n}) {\r\n const activeStatus = React.useMemo(() => {\r\n return profileAvatarStatus.find((s) => s.status === status)\r\n }, [status])\r\n\r\n const hasActiveStatus = !!status\r\n const Comp = bordered && hasActiveStatus && variant === \"profile\" ? \"div\" : Slot\r\n\r\n const fallbackImage = React.useMemo(() => {\r\n switch (variant) {\r\n case \"company\":\r\n return \"/images/fallback-company.jpeg\"\r\n case \"university\":\r\n return \"/images/fallback-university.jpeg\"\r\n case \"group\":\r\n return \"/images/fallback-user-group.jpeg\"\r\n default:\r\n return \"/images/fallback-user.jpeg\"\r\n }\r\n }, [variant])\r\n\r\n return (\r\n <div\r\n className={cn(profileAvatarVariants({ size, className }))}\r\n data-slot=\"profile-avatar\"\r\n {...props}\r\n >\r\n <Comp\r\n className={cn(\r\n \"rounded-xp-card-base\",\r\n bordered\r\n ? cn(\r\n status === \"open-to-work\" && \"bg-gradient-avatar-outline-opentowork\",\r\n status === \"open-to-freelance\" && \"bg-gradient-avatar-outline-opentoprofesional\",\r\n status === \"open-to-coach\" && \"bg-gradient-avatar-outline-opentocoach\",\r\n status === \"open-to-all\" && \"bg-gradient-avatar-outline-opentowork\",\r\n !status && variant === \"profile\" && \"bg-border-secondary\"\r\n )\r\n : undefined,\r\n bordered && variant === \"profile\" && profileAvatarPaddingVariants({ size })\r\n )}\r\n >\r\n <div className=\"relative group\">\r\n <div\r\n className={cn(\r\n \"relative flex size-8 shrink-0 overflow-hidden rounded-xp-card-base\",\r\n \"size-full\",\r\n bordered && hasActiveStatus && \"border-0\",\r\n avatarClassName\r\n )}\r\n onClick={onClickAvatar}\r\n >\r\n {imageSrc ? (\r\n // eslint-disable-next-line @next/next/no-img-element\r\n <img\r\n alt={imageAlt || \"Avatar\"}\r\n className={cn(\"aspect-square size-full bg-bg-primary object-cover\", avatarImageClassName)}\r\n src={imageSrc}\r\n />\r\n ) : (\r\n <div className=\"flex aspect-square size-full items-center justify-center bg-bg-tertiary text-label-semibold-2 text-text-quaternary\">\r\n {/* eslint-disable-next-line @next/next/no-img-element */}\r\n <img\r\n alt={imageAlt || \"Avatar Fallback\"}\r\n className=\"aspect-square size-full bg-bg-primary object-cover\"\r\n src={fallbackImage}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {onEdit && (\r\n <div\r\n className=\"absolute inset-0 flex opacity-0 hover:opacity-100 hover:bg-background-primary-subtle-press/25 rounded-xp-card-base transition-opacity duration-200 items-center justify-center cursor-pointer\"\r\n id=\"avatar-upload-trigger\"\r\n onClick={onEdit}\r\n >\r\n <div className=\"flex items-center p-2 hover:bg-background-primary-subtle-hover justify-center rounded-xp-card-base-sm bg-background-canvas-subtle\">\r\n <UploadPicturesOnProfileIcon className=\"size-6\" />\r\n </div>\r\n </div>\r\n )}\r\n {isOnline && !companyLogoSrc && (\r\n <CircleIcon className=\"text-bg-primary-replace fill-fg-success-secondary size-[11.5px] absolute -bottom-[3.5px] -right-[3.5px]\" />\r\n )}\r\n {companyLogoSrc !== undefined && (\r\n <div className=\"border border-bg-primary-replace size-[15px] rounded-xs absolute -bottom-[3.5px] -right-[3.5px] overflow-hidden bg-bg-primary\">\r\n {/* eslint-disable-next-line @next/next/no-img-element */}\r\n <img\r\n alt=\"Company Logo\"\r\n className=\"bg-bg-primary object-cover size-full\"\r\n src={companyLogoSrc}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </Comp>\r\n {badged &&\r\n activeStatus && (\r\n <Badge\r\n className={cn(profileAvatarBadgeVariants({ size, className: badgeClassName }))}\r\n color={activeStatus.badgeColor}\r\n size=\"sm\"\r\n >\r\n {activeStatus.label}\r\n </Badge>\r\n )}\r\n\r\n {isVerified && (\r\n <div className=\"absolute -bottom-1 -right-1\">\r\n <VerifiedIcon className=\"size-4 text-[#068BEE]\" />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { ProfileAvatar }\r\n"]}
@@ -5,7 +5,7 @@ import { Button as Button$1 } from '@base-ui/react/button';
5
5
 
6
6
  declare const buttonVariants: (props?: ({
7
7
  color?: "default" | "destructive" | "gradient-ai" | "linear-green" | "linear-overlay" | "linear-destructive" | null | undefined;
8
- variant?: "link" | "primary" | "secondary" | "secondary-accent" | "tertiary" | "tertiary-accent" | null | undefined;
8
+ variant?: "primary" | "secondary" | "secondary-accent" | "tertiary" | "tertiary-accent" | "link" | null | undefined;
9
9
  icon?: boolean | null | undefined;
10
10
  size?: "sm" | "md" | "lg" | "xl" | null | undefined;
11
11
  } & class_variance_authority_types.ClassProp) | undefined) => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xploreu/components",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Shared UI components for XploreU apps",
5
5
  "license": "MIT",
6
6
  "author": {