@moondreamsdev/dreamer-ui 1.7.4-test.2 → 1.7.4-test.4
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.
package/dist/components.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),l=require("react"),p=require("./utils.cjs.js"),C=require("./QuestionMarkCircled-o1tqa8ZJ.cjs"),F=require("react-dom");function N({id:n,title:t,content:e,children:r,className:s="",disabled:a=!1,isOpen:i=!1,onToggle:u,triggerClassName:c="",bodyClassName:x=""}){const v=l.useId(),d=n||`accordion-item-${v}`,y=`${d}-header`,b=`${d}-panel`,f=()=>{!a&&u&&u()},j=m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),f())};return o.jsxs("div",{className:p.join("border-b border-gray-200",a&&"opacity-60 cursor-not-allowed",s),children:[o.jsxs("button",{id:y,type:"button",className:p.join("w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary",a?"cursor-not-allowed":"hover:bg-gray-50/10 cursor-pointer",c),"aria-expanded":i,"aria-controls":b,disabled:a,onClick:f,onKeyDown:j,children:[o.jsx("span",{children:t}),o.jsx("span",{className:p.join("transform transition-transform duration-300 ease-linear",i?"rotate-180":"rotate-0"),"aria-hidden":"true",children:o.jsx(C.ChevronDown,{size:18})})]}),o.jsx("div",{id:b,role:"region","aria-labelledby":y,className:p.join("transition-all duration-300 ease-linear px-4",i?"max-h-96 opacity-100 overflow-auto py-3":"max-h-0 opacity-0 overflow-hidden",x),children:i&&(r||e)})]})}function G({name:n,items:t=[],children:e,className:r="",itemClassName:s="",allowMultiple:a=!1,defaultOpenItems:i=[],triggersClassName:u="",bodiesClassName:c=""}){const x=l.useId(),v=n||`accordion-group-${x}`,[d,y]=l.useState(new Set(i)),b=m=>{y(h=>{const g=new Set(h);return g.has(m)?g.delete(m):(a||g.clear(),g.add(m)),g})},f=m=>`${x}-item-${m}`,j=m=>d.has(m);return o.jsxs("div",{id:v,className:r,children:[t.length>0&&t.map((m,h)=>{const g=m.id||f(h);return o.jsx(N,{id:g,title:m.title,content:m.content,disabled:m.disabled,isOpen:j(g),onToggle:()=>b(g),className:s,triggerClassName:u,bodyClassName:c},g)}),t.length===0&&e&&l.Children.map(e,(m,h)=>{if(l.isValidElement(m)&&m.type===N){const g=m.props.id||f(h);return l.createElement(N,{...m.props,key:g,id:g,className:p.join(s,m.props.className),isOpen:j(g),onToggle:()=>b(g),triggerClassName:p.join(u,m.props.triggerClassName),bodyClassName:p.join(c,m.props.bodyClassName)})}return null})]})}function L(){const[n,t]=l.useState(0);return l.useEffect(()=>{const e=setInterval(()=>{t(r=>(r+1)%3)},500);return()=>clearInterval(e)},[]),o.jsx("div",{className:"absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle",children:[0,1,2].map(e=>o.jsx("div",{className:p.join("rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current",n===e&&"transform -translate-y-1")},e))})}const H={base:"",primary:"bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80",tertiary:"text-primary hover:text-primary-foreground disabled:text-muted",outline:"border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted",link:"underline-offset-4 hover:underline disabled:underline disabled:text-muted",danger:"bg-danger text-danger-foreground hover:bg-danger/85 disabled:bg-muted disabled:text-muted-foreground"},K={stripped:"",fitted:"size-fit",sm:"px-2 py-1 text-sm",md:"px-4 py-2 text-base",lg:"px-6 py-3 text-lg",icon:"p-1 w-fit aspect-square",full:"p-2 w-full"},Q={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",full:"rounded-full"},$={variant:"primary",size:"md",rounded:"md"};function R({variant:n=$.variant,size:t,rounded:e=$.rounded,loading:r,linkTo:s,linkProps:a,type:i="button",className:u,...c}){let x;n==="link"&&!t?x="fitted":x=t||$.size;const d=p.join("appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all",H[n],K[x],Q[e],r&&"relative pointer-events-none",s&&"relative",u);return o.jsxs("button",{...c,role:s?"link":c.role,"aria-label":c["aria-label"]||(a==null?void 0:a["aria-label"]),"aria-description":c["aria-description"]||(a==null?void 0:a["aria-description"]),"aria-disabled":c.disabled||r,"aria-busy":r,type:i,className:d,children:[r&&o.jsx(L,{}),o.jsx("span",{className:p.join(r&&"invisible"),children:c.children}),s&&!c.disabled&&o.jsx("a",{...a,"aria-hidden":!0,href:s,target:(a==null?void 0:a.target)||"_blank",rel:(a==null?void 0:a.rel)||"noreferrer",className:"absolute inset-0"})]})}function U(n){const[t,e]=l.useState(""),r=l.useCallback(s=>{let a=s,i="";for(;a&&!i;){const u=window.getComputedStyle(a).backgroundColor;u&&u!=="transparent"&&u!=="rgba(0, 0, 0, 0)"&&(i=u),a=a.parentElement}return i||"transparent"},[]);return l.useEffect(()=>{const s=document.getElementById(n);if(s){const a=r(s.parentElement);e(a)}},[n,r]),t}function W({ref:n,id:t,size:e=20,color:r,filled:s=!1,rounded:a=!0,checked:i=!1,onCheckedChange:u,disabled:c,className:x="",...v}){const d=l.useId(),y=l.useMemo(()=>t||`checkbox-${d}`,[t,d]),b=U(y),[f,j]=l.useState(i);l.useEffect(()=>{j(i)},[i]);const m=()=>{c||(j(!f),u==null||u(!f))},h=w=>{w.key===" "&&(w.preventDefault(),m())},g=p.join("flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2",a&&"rounded",c&&"opacity-40 cursor-not-allowed",!c&&"cursor-pointer",x);return o.jsx("button",{id:y,type:"button",ref:n,tabIndex:0,role:"checkbox",onClick:m,"aria-checked":f,"aria-disabled":c,onKeyDownCapture:h,style:{width:e,height:e,color:r,backgroundColor:f&&s?"currentcolor":"transparent"},className:g,...v,children:f&&o.jsx(C.Check,{size:e,color:s?b:void 0})})}function X({children:n,className:t,linkTo:e,linkProps:r,onButtonClick:s,buttonProps:a,...i}){return e&&s&&console.warn('Clickable: Both "linkTo" and "onButtonClick" props are provided. Only "linkTo" will be used.'),o.jsxs("div",{className:p.join("relative w-fit",t),...i,children:[n,e&&o.jsx("a",{...r,href:e,className:p.join("absolute inset-0",r==null?void 0:r.className)}),!e&&s&&o.jsx("button",{...a,type:"button",onClick:s,className:p.join("absolute inset-0 cursor-pointer",a==null?void 0:a.className)})]})}function I({elementId:n,type:t,message:e}){return l.useEffect(()=>{const r=document.getElementById(n);if(r){if(!e&&t==="error"){r.removeAttribute("data-error");return}if(!e&&t==="success"){r.removeAttribute("data-success");return}return r.setAttribute("aria-describedby",`${n}-${t}-message`),r.setAttribute("aria-invalid",t==="error"?"true":"false"),t==="error"&&r.setAttribute("data-error","true"),t==="success"&&r.setAttribute("data-success","true"),()=>{r.removeAttribute("aria-describedby"),r.removeAttribute("aria-invalid"),r.removeAttribute("data-error"),r.removeAttribute("data-success")}}},[n,t,e]),e?o.jsxs("small",{className:p.join("mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start",t==="error"&&"text-danger",t==="success"&&"text-success"),role:"status",children:[t==="error"?o.jsx(C.ExclamationTriangle,{}):o.jsx(C.CheckCircled,{}),o.jsx("span",{id:`${n}-${t}-message`,children:e})]}):null}const _={base:"",default:"ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-danger not-disabled:data-success:ring-success",underline:"border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success",outline:"border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success"},J={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",full:"px-3 rounded-full"},S={variant:"default",rounded:"none"};function Y({variant:n=S.variant,rounded:t,displayOnlyMode:e=!1,errorMessage:r,successMessage:s,type:a="text",className:i,...u}){const c=l.useId(),[x,v]=l.useState(!1);let d=t;n==="outline"&&!t&&(d="md"),d=d||S.rounded;const f=p.join("appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all","file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors",!e&&_[n],!e&&J[d],a==="password"&&"pr-10",!e&&"px-2 py-1",e&&"pointer-events-none",i);return o.jsxs("div",{className:p.join(e&&"cursor-text"),style:{height:u.height,width:u.width},children:[o.jsxs("div",{className:p.join(a==="password"&&"relative"),children:[o.jsx("input",{...u,id:c,type:a==="password"&&x?"text":a,"aria-disabled":u.disabled,readOnly:e,"aria-readonly":e||u["aria-readonly"],"data-error":r?!0:void 0,"data-success":s?!0:void 0,className:f}),a==="password"&&o.jsx("button",{onClick:()=>v(!x),className:"absolute inset-y-0 right-0 px-2 hover:cursor-pointer","aria-label":"Toggle password visibility","data-state":x?"visible":"hidden",children:x?o.jsx(C.EyeClosed$1,{size:20}):o.jsx(C.EyeClosed,{size:20})})]}),!e&&o.jsx(I,{elementId:c,type:"error",message:r}),!e&&o.jsx(I,{elementId:c,type:"success",message:s})]})}function Z({display:n="inline",width:t="fit-content",className:e="",required:r,helpMessage:s,suffix:a,htmlFor:i,children:u,...c}){const x=l.useId(),v=p.join("font-medium",n,e),d=s?`${i??x}-help`:void 0;return o.jsxs("div",{style:{display:n==="inline"?"inline-flex":"flex",width:t},className:"relative",children:[o.jsxs("label",{className:v,htmlFor:i,...c,children:[u,r&&o.jsx("span",{className:"text-red-500 font-medium ml-1","aria-label":"required",children:"*"})]}),s&&o.jsx("span",{className:"text-gray-500 ml-1 size-fit -translate-y-1/3","aria-describedby":d,"aria-label":"Help information",title:s,children:o.jsx(C.QuestionMarkCircled,{})}),s&&o.jsx("div",{id:d,className:"sr-only",children:s}),a&&o.jsx("span",{className:"ml-1",children:a})]})}function k(...n){return n.filter(t=>typeof t=="string"&&t).join(" ").trim()||void 0}function M({isOpen:n}){const[t,e]=l.useState(!1),[r,s]=l.useState(!1);return l.useEffect(()=>{n?(s(!0),setTimeout(()=>e(!0),10)):(e(!1),setTimeout(()=>s(!1),150))},[n]),{show:t,shouldRender:r}}function O({isOpen:n,onClose:t}){l.useEffect(()=>{const e=r=>{r.key==="Escape"&&n&&t()};return document.addEventListener("keydown",e),n&&(document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",e),document.body.style.overflow="auto"}},[n,t])}function P({modalId:n,isOpen:t}){const e=l.useRef(null),r=l.useCallback(()=>{const s=document.getElementById(n);if(!s)return;const a=s.querySelectorAll('[data-modal-action="true"]');if(a.length>0){a[0].focus();return}const i=s.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(i.length>0){const u=Array.from(i).filter(c=>!(c instanceof HTMLButtonElement&&c.getAttribute("data-modal-close-button")==="true"));if(u.length>0){u[0].focus();return}i[0].focus();return}s.focus()},[n]);l.useEffect(()=>(t&&(e.current=document.activeElement,r()),()=>{document.body.style.overflow="auto",e.current instanceof HTMLElement&&e.current.focus()}),[t,r])}function ee({id:n,isOpen:t,onClose:e,title:r,children:s,contentOnly:a=!1,className:i,overlayClassName:u,hideCloseButton:c=!1,actions:x=[],disableCloseOnOverlayClick:v=!1,ariaLabelledBy:d,ariaDescribedBy:y}){const b=l.useId(),f=n||`modal-${b}`,j=n?`${n}-title`:`modal-title-${b}`,{show:m,shouldRender:h}=M({isOpen:t});if(P({modalId:f,isOpen:h}),O({isOpen:h,onClose:e}),!h)return null;const g=()=>r?l.isValidElement(r)?o.jsx("div",{className:"mb-4",children:r}):o.jsx("h2",{className:"mb-4 text-xl font-semibold",id:j,children:r}):null,w=()=>x.length===0?null:o.jsx("div",{className:"mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3",children:x.map((A,B)=>{const{label:q,className:T,...V}=A;return o.jsx(R,{className:T,type:"button",...V,"data-modal-action":"true",children:q},B)})});return o.jsx(o.Fragment,{children:F.createPortal(o.jsx("div",{"aria-labelledby":d??r?j:void 0,"aria-describedby":y,role:"dialog","aria-modal":"true",className:"fixed inset-0 z-[100] overflow-y-auto",children:o.jsxs("div",{className:"flex min-h-screen items-center justify-center p-4",children:[o.jsx("div",{className:k("fixed inset-0 bg-black/20 transition-all",u),onClick:()=>{v||e()}}),a&&o.jsx("div",{className:k("relative w-fit",i),children:s}),!a&&o.jsxs("div",{id:f,tabIndex:-1,className:k("relative w-full max-w-xl transform rounded-lg shadow-xl transition-all p-6 bg-inherit focus:border ease-in duration-75",m?"opacity-100 scale-100":"opacity-0 scale-90",i),children:[!c&&o.jsx("button",{onClick:e,"data-modal-close-button":"true",className:"rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0",children:o.jsx(C.X,{size:18})}),g(),s,w()]})]})}),document.body)})}function te({children:n,ref:t,...e}){if(l.isValidElement(n)){let r={...e};return n.props&&(r={...r,...n.props}),l.cloneElement(n,{...r,ref:s=>{typeof t=="function"?t(s):t&&(t.current=s)}})}return l.createElement("div",{...e,ref:t},n)}function z({itemId:n,checked:t,onChange:e,name:r,disabled:s=!1,className:a=""}){const i="relative inline-flex items-center justify-center rounded-full",u=()=>{s||e()},c=p.join(i,!t&&"hover:border-current/60",!s&&"border-current cursor-pointer",s&&"border-muted/60 cursor-not-allowed",a);return o.jsx("div",{id:n,role:"radio",tabIndex:-1,"aria-checked":t,"aria-disabled":s,"aria-description":`Radio button for ${r}`,"aria-labelledby":`${n}-label`,onClick:u,className:c,style:{width:"1em",height:"1em",padding:"0.1em",borderWidth:"0.06em"},children:t&&o.jsx("div",{className:p.join("size-full aspect-square rounded-full",s&&"bg-muted/60",!s&&"bg-current")})})}function E({value:n,children:t,className:e="",isSelected:r=!1,onChange:s,disabled:a=!1,hideInput:i=!1,description:u,name:c}){const v=`radio-${l.useId()}-${n}`,d=()=>{a||s==null||s(n)};return o.jsxs("div",{title:u,className:p.join("relative flex items-center",e,i&&`p-2 border-2 focus-within:border-dashed focus-within:${a?"border-current/50":"border-current/80"}`,i&&!r&&`border-transparent ${a?"":"not-focus-within:hover:border-border/60"}`,i&&r&&"border-border",a&&"opacity-60 cursor-not-allowed"),style:{gap:"0.5em"},children:[!i&&o.jsx(z,{itemId:v,name:c||"",checked:r,onChange:d,disabled:a,className:p.join(i&&"")}),o.jsx("div",{id:i?v:void 0,tabIndex:i?-1:void 0,role:i?"radio":void 0,onClick:i?d:void 0,"aria-checked":i?r?"true":"false":void 0,"aria-disabled":i?a:void 0,"aria-description":i?u||`Radio button for ${c}`:void 0,"aria-labelledby":i?`${v}-label`:void 0,className:p.join(i&&"size-full",typeof t=="object"&&"grow focus:outline-none"),children:o.jsx("label",{id:`${v}-label`,onClick:i?void 0:d,className:p.join(a&&"cursor-not-allowed",!a&&"cursor-pointer"),children:t})})]})}function re(n,t){const[e,r]=l.useState(t),[s,a]=l.useState(-1),[i,u]=l.useState(!1),c=l.useCallback((b,f)=>{var h;const j=b[f];j.hasAttribute("disabled")||j.getAttribute("aria-disabled")==="true"||((h=b[f])==null||h.click(),a(f))},[]),x=l.useCallback((b,f)=>{var m;if(b.preventDefault(),i||!f.length)return;const j=t!==-1?t:0;(m=f[j])==null||m.focus(),r(j),t!==-1&&c(f,j)},[t,i,c]),v=l.useCallback(b=>{var h;if(!b.shiftKey)return;b.preventDefault();const f=Array.from(document.querySelectorAll('a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])')).filter(g=>!g.hasAttribute("disabled")&&g.tabIndex>=0),j=f.findIndex(g=>g.id===n),m=j>0?j-1:f.length-1;(h=f[m])==null||h.focus()},[n]),d=l.useCallback((b,f)=>{var w;if(!f.length)return;const j=b.target;if(!f.some(A=>A.id===j.id))return;const h=e!==-1?e:0;let g=h;switch(b.key){case"ArrowUp":case"ArrowLeft":b.preventDefault(),g=h>0?h-1:f.length-1;break;case"ArrowDown":case"ArrowRight":b.preventDefault(),g=(h+1)%f.length;break;case" ":b.preventDefault(),c(f,h);return;case"Tab":v(b);return;default:return}(w=f[g])==null||w.focus(),r(g),s!==-1&&c(f,g)},[e,s,v,c]),y=l.useCallback(()=>{const b=document.querySelector(`[id="${n}"][role="radiogroup"]`);return b?Array.from(b.querySelectorAll('[role="radio"]')):[]},[n]);l.useEffect(()=>{const b=document.querySelector(`[id="${n}"][role="radiogroup"]`);if(!b)return;const f=y(),j=w=>x(w,f),m=w=>d(w,f),h=()=>u(!0),g=()=>u(!1);return document.addEventListener("keydown",m),b.addEventListener("focus",j),b.addEventListener("mousedown",h),document.addEventListener("mouseup",g),()=>{document.removeEventListener("keydown",m),b.removeEventListener("focus",j),b.removeEventListener("mousedown",h),document.removeEventListener("mouseup",g)}},[n,y,x,d])}function ne({options:n=[],value:t,onChange:e,name:r,children:s,className:a="",childrenClassName:i="",hideInputs:u=!1}){const c=l.useId(),x=r||`radio-group-${c}`;re(x,n.findIndex(d=>d===t));const v=l.useMemo(()=>n.reduce((d,y)=>(typeof y=="string"?d.some(b=>b.value===y)||d.push({label:y,value:y}):d.push(y),d),[]),[n]);return o.jsxs("div",{id:x,role:"radiogroup",tabIndex:0,className:p.join(a,"focus:outline-none"),children:[v.length>0&&v.map((d,y)=>o.jsx(E,{value:d.value,isSelected:t===d.value,onChange:e,name:x,disabled:d.disabled,description:d.description,hideInput:u,className:i,children:d.label},`${d.value}-${y}`)),v.length===0&&s&&l.Children.map(s,d=>l.isValidElement(d)&&d.type===E?o.jsx(E,{...d.props,className:p.join(i,d.props.className),hideInput:d.props.hideInput||u,isSelected:t===d.props.value,onChange:e,name:x,children:d.props.children}):null)]})}function se({elementId:n,maxLength:t}){const[e,r]=l.useState(0);return l.useEffect(()=>{const s=document.getElementById(n);if(!s)return;const a=()=>{const i=s.value.length;r(i);const u=i>=t;s.setAttribute("aria-describedby",`${n}-character-count`),s.setAttribute("aria-invalid",u?"true":"false"),u?s.setAttribute("data-error","true"):s.removeAttribute("data-error")};return a(),s.addEventListener("input",a),s.setAttribute("maxlength",String(t)),()=>{s.removeEventListener("input",a),s.removeAttribute("maxlength"),s.removeAttribute("aria-describedby"),s.removeAttribute("aria-invalid"),s.removeAttribute("data-error")}},[n,t]),o.jsx("small",{className:p.join("mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end",e>=t&&"text-danger",e<t&&"text-current"),role:"status",children:o.jsxs("span",{id:`${n}-character-count`,children:[e," / ",t," characters"]})})}function ae(n,t){l.useEffect(()=>{const e=document.getElementById(n);if(!e)return;if(!t){e.style.height="auto";return}const r=()=>{e.style.height="auto",e.style.height=`${e.scrollHeight}px`};return r(),e.addEventListener("input",r),e.addEventListener("resize",r),window.addEventListener("resize",r),()=>{e.removeEventListener("input",r),e.removeEventListener("resize",r),window.removeEventListener("resize",r)}},[n,t])}const oe={base:"","left-line":"border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success",outline:"border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success"},ie={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",full:"px-3 rounded-full"},D={variant:"outline",rounded:"none"};function de({variant:n=D.variant,rounded:t,displayOnlyMode:e=!1,errorMessage:r,successMessage:s,hideResizeHandle:a=!1,autoExpand:i=!1,characterLimit:u=0,className:c,...x}){const v=l.useId();ae(v,i||e);let d=t;n==="outline"&&!t&&(d="md"),d=d||D.rounded;let y=a;(e||n==="left-line"&&!a)&&(y=!0);const f=p.join("appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all",!e&&oe[n],!e&&ie[d],!e&&"px-2 py-1",e&&"pointer-events-none",y&&"no-resize-handle",c);return o.jsxs("div",{className:p.join("-space-y-1.5",e&&"cursor-text"),children:[o.jsx("textarea",{...x,id:v,"aria-disabled":x.disabled,readOnly:e,"aria-readonly":e||x["aria-readonly"],style:{resize:i?"none":void 0},className:f}),u>0&&o.jsx(se,{elementId:v,maxLength:u}),!e&&o.jsx(I,{elementId:v,type:"error",message:r}),!e&&o.jsx(I,{elementId:v,type:"success",message:s})]})}exports.Accordion=G;exports.AccordionItem=N;exports.Button=R;exports.ButtonLoadingDots=L;exports.Checkbox=W;exports.Clickable=X;exports.Input=Y;exports.Label=Z;exports.Modal=ee;exports.RadioGroup=ne;exports.RadioGroupItem=E;exports.RadioInput=z;exports.Slot=te;exports.Textarea=de;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),l=require("react"),p=require("./utils.cjs.js"),C=require("./QuestionMarkCircled-o1tqa8ZJ.cjs"),F=require("react-dom");function N({id:n,title:t,content:e,children:r,className:s="",disabled:a=!1,isOpen:i=!1,onToggle:u,triggerClassName:c="",bodyClassName:x=""}){const v=l.useId(),d=n||`accordion-item-${v}`,y=`${d}-header`,b=`${d}-panel`,f=()=>{!a&&u&&u()},j=m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),f())};return o.jsxs("div",{className:p.join("border-b border-gray-200",a&&"opacity-60 cursor-not-allowed",s),children:[o.jsxs("button",{id:y,type:"button",className:p.join("w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary",a?"cursor-not-allowed":"hover:bg-gray-50/10 cursor-pointer",c),"aria-expanded":i,"aria-controls":b,disabled:a,onClick:f,onKeyDown:j,children:[o.jsx("span",{children:t}),o.jsx("span",{className:p.join("transform transition-transform duration-300 ease-linear",i?"rotate-180":"rotate-0"),"aria-hidden":"true",children:o.jsx(C.ChevronDown,{size:18})})]}),o.jsx("div",{id:b,role:"region","aria-labelledby":y,className:p.join("transition-all duration-300 ease-linear px-4",i?"max-h-96 opacity-100 overflow-auto py-3":"max-h-0 opacity-0 overflow-hidden",x),children:i&&(r||e)})]})}function G({name:n,items:t=[],children:e,className:r="",itemClassName:s="",allowMultiple:a=!1,defaultOpenItems:i=[],triggersClassName:u="",bodiesClassName:c=""}){const x=l.useId(),v=n||`accordion-group-${x}`,[d,y]=l.useState(new Set(i)),b=m=>{y(h=>{const g=new Set(h);return g.has(m)?g.delete(m):(a||g.clear(),g.add(m)),g})},f=m=>`${x}-item-${m}`,j=m=>d.has(m);return o.jsxs("div",{id:v,className:r,children:[t.length>0&&t.map((m,h)=>{const g=m.id||f(h);return o.jsx(N,{id:g,title:m.title,content:m.content,disabled:m.disabled,isOpen:j(g),onToggle:()=>b(g),className:s,triggerClassName:u,bodyClassName:c},g)}),t.length===0&&e&&l.Children.map(e,(m,h)=>{if(l.isValidElement(m)&&m.type===N){const g=m.props.id||f(h);return l.createElement(N,{...m.props,key:g,id:g,className:p.join(s,m.props.className),isOpen:j(g),onToggle:()=>b(g),triggerClassName:p.join(u,m.props.triggerClassName),bodyClassName:p.join(c,m.props.bodyClassName)})}return null})]})}function L(){const[n,t]=l.useState(0);return l.useEffect(()=>{const e=setInterval(()=>{t(r=>(r+1)%3)},500);return()=>clearInterval(e)},[]),o.jsx("div",{className:"absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle",children:[0,1,2].map(e=>o.jsx("div",{className:p.join("rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current",n===e&&"transform -translate-y-1")},e))})}const H={base:"",primary:"bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80",tertiary:"text-primary hover:text-primary-foreground disabled:text-muted",outline:"border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted",link:"underline-offset-4 hover:underline disabled:underline disabled:text-muted",danger:"bg-danger text-danger-foreground hover:bg-danger/85 disabled:bg-muted disabled:text-muted-foreground"},K={stripped:"",fitted:"size-fit",sm:"px-2 py-1 text-sm",md:"px-4 py-2 text-base",lg:"px-6 py-3 text-lg",icon:"p-1 w-fit aspect-square",full:"p-2 w-full"},Q={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",full:"rounded-full"},$={variant:"primary",size:"md",rounded:"md"};function R({variant:n=$.variant,size:t,rounded:e=$.rounded,loading:r,linkTo:s,linkProps:a,type:i="button",className:u,...c}){let x;n==="link"&&!t?x="fitted":x=t||$.size;const d=p.join("appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all",H[n],K[x],Q[e],r&&"relative pointer-events-none",s&&"relative",u);return o.jsxs("button",{...c,role:s?"link":c.role,"aria-label":c["aria-label"]||(a==null?void 0:a["aria-label"]),"aria-description":c["aria-description"]||(a==null?void 0:a["aria-description"]),"aria-disabled":c.disabled||r,"aria-busy":r,type:i,className:d,children:[r&&o.jsx(L,{}),o.jsx("span",{className:p.join(r&&"invisible"),children:c.children}),s&&!c.disabled&&o.jsx("a",{...a,"aria-hidden":!0,href:s,target:(a==null?void 0:a.target)||"_blank",rel:(a==null?void 0:a.rel)||"noreferrer",className:"absolute inset-0"})]})}function U(n){const[t,e]=l.useState(""),r=l.useCallback(s=>{let a=s,i="";for(;a&&!i;){const u=window.getComputedStyle(a).backgroundColor;u&&u!=="transparent"&&u!=="rgba(0, 0, 0, 0)"&&(i=u),a=a.parentElement}return i||"transparent"},[]);return l.useEffect(()=>{const s=document.getElementById(n);if(s){const a=r(s.parentElement);e(a)}},[n,r]),t}function W({ref:n,id:t,size:e=20,color:r,filled:s=!1,rounded:a=!0,checked:i=!1,onCheckedChange:u,disabled:c,className:x="",...v}){const d=l.useId(),y=l.useMemo(()=>t||`checkbox-${d}`,[t,d]),b=U(y),[f,j]=l.useState(i);l.useEffect(()=>{j(i)},[i]);const m=()=>{c||(j(!f),u==null||u(!f))},h=w=>{w.key===" "&&(w.preventDefault(),m())},g=p.join("flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2",a&&"rounded",c&&"opacity-40 cursor-not-allowed",!c&&"cursor-pointer",x);return o.jsx("button",{id:y,type:"button",ref:n,tabIndex:0,role:"checkbox",onClick:m,"aria-checked":f,"aria-disabled":c,onKeyDownCapture:h,style:{width:e,height:e,color:r,backgroundColor:f&&s?"currentcolor":"transparent"},className:g,...v,children:f&&o.jsx(C.Check,{size:e,color:s?b:void 0})})}function X({children:n,className:t,linkTo:e,linkProps:r,onButtonClick:s,buttonProps:a,...i}){return e&&s&&console.warn('Clickable: Both "linkTo" and "onButtonClick" props are provided. Only "linkTo" will be used.'),o.jsxs("div",{className:p.join("relative w-fit",t),...i,children:[n,e&&o.jsx("a",{...r,href:e,className:p.join("absolute inset-0",r==null?void 0:r.className)}),!e&&s&&o.jsx("button",{...a,type:"button",onClick:s,className:p.join("absolute inset-0 cursor-pointer",a==null?void 0:a.className)})]})}function A({elementId:n,type:t,message:e}){return l.useEffect(()=>{const r=document.getElementById(n);if(r){if(!e&&t==="error"){r.removeAttribute("data-error");return}if(!e&&t==="success"){r.removeAttribute("data-success");return}return r.setAttribute("aria-describedby",`${n}-${t}-message`),r.setAttribute("aria-invalid",t==="error"?"true":"false"),t==="error"&&r.setAttribute("data-error","true"),t==="success"&&r.setAttribute("data-success","true"),()=>{r.removeAttribute("aria-describedby"),r.removeAttribute("aria-invalid"),r.removeAttribute("data-error"),r.removeAttribute("data-success")}}},[n,t,e]),e?o.jsxs("small",{className:p.join("mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start",t==="error"&&"text-danger",t==="success"&&"text-success"),role:"status",children:[t==="error"?o.jsx(C.ExclamationTriangle,{}):o.jsx(C.CheckCircled,{}),o.jsx("span",{id:`${n}-${t}-message`,children:e})]}):null}const _={base:"",default:"ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-danger not-disabled:data-success:ring-success",underline:"border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success",outline:"border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success"},J={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",full:"px-3 rounded-full"},S={variant:"default",rounded:"none"};function Y({variant:n=S.variant,rounded:t,displayOnlyMode:e=!1,errorMessage:r,successMessage:s,type:a="text",className:i,...u}){const c=l.useId(),[x,v]=l.useState(!1);let d=t;n==="outline"&&!t&&(d="md"),d=d||S.rounded;const f=p.join("appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all","file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors",!e&&_[n],!e&&J[d],a==="password"&&"pr-10",!e&&"px-2 py-1",e&&"pointer-events-none",i);return o.jsxs("div",{className:p.join(e&&"cursor-text"),style:{height:u.height,width:u.width},children:[o.jsxs("div",{className:p.join(a==="password"&&"relative"),children:[o.jsx("input",{...u,id:c,type:a==="password"&&x?"text":a,"aria-disabled":u.disabled,readOnly:e,"aria-readonly":e||u["aria-readonly"],"data-error":r?!0:void 0,"data-success":s?!0:void 0,className:f}),a==="password"&&o.jsx("button",{onClick:()=>v(!x),className:"absolute inset-y-0 right-0 px-2 hover:cursor-pointer","aria-label":"Toggle password visibility","data-state":x?"visible":"hidden",children:x?o.jsx(C.EyeClosed$1,{size:20}):o.jsx(C.EyeClosed,{size:20})})]}),!e&&o.jsx(A,{elementId:c,type:"error",message:r}),!e&&o.jsx(A,{elementId:c,type:"success",message:s})]})}function Z({display:n="inline",width:t="fit-content",className:e="",required:r,helpMessage:s,suffix:a,htmlFor:i,children:u,...c}){const x=l.useId(),v=p.join("font-medium",n,e),d=s?`${i??x}-help`:void 0;return o.jsxs("div",{style:{display:n==="inline"?"inline-flex":"flex",width:t},className:"relative",children:[o.jsxs("label",{className:v,htmlFor:i,...c,children:[u,r&&o.jsx("span",{className:"text-red-500 font-medium ml-1","aria-label":"required",children:"*"})]}),s&&o.jsx("span",{className:"text-gray-500 ml-1 size-fit -translate-y-1/3","aria-describedby":d,"aria-label":"Help information",title:s,children:o.jsx(C.QuestionMarkCircled,{})}),s&&o.jsx("div",{id:d,className:"sr-only",children:s}),a&&o.jsx("span",{className:"ml-1",children:a})]})}function k(...n){return n.filter(t=>typeof t=="string"&&t).join(" ").trim()||void 0}function M({isOpen:n}){console.log("calling useAnimationOpenClose");const[t,e]=l.useState(!1),[r,s]=l.useState(!1);return l.useEffect(()=>{n?(s(!0),setTimeout(()=>e(!0),10)):(e(!1),setTimeout(()=>s(!1),150))},[n]),{show:t,shouldRender:r}}function O({isOpen:n,onClose:t}){console.log("calling useDocumentChanges"),l.useEffect(()=>{const e=r=>{r.key==="Escape"&&n&&t()};return document.addEventListener("keydown",e),n&&(document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",e),document.body.style.overflow="auto"}},[n,t])}function P({modalId:n,isOpen:t}){const e=l.useRef(null),r=l.useCallback(()=>{const s=document.getElementById(n);if(!s)return;const a=s.querySelectorAll('[data-modal-action="true"]');if(a.length>0){a[0].focus();return}const i=s.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(i.length>0){const u=Array.from(i).filter(c=>!(c instanceof HTMLButtonElement&&c.getAttribute("data-modal-close-button")==="true"));if(u.length>0){u[0].focus();return}i[0].focus();return}s.focus()},[n]);l.useEffect(()=>(t&&(e.current=document.activeElement,r()),()=>{document.body.style.overflow="auto",e.current instanceof HTMLElement&&e.current.focus()}),[t,r])}function ee({id:n,isOpen:t,onClose:e,title:r,children:s,contentOnly:a=!1,className:i,overlayClassName:u,hideCloseButton:c=!1,actions:x=[],disableCloseOnOverlayClick:v=!1,ariaLabelledBy:d,ariaDescribedBy:y}){const b=l.useId(),f=n||`modal-${b}`,j=n?`${n}-title`:`modal-title-${b}`,{show:m,shouldRender:h}=M({isOpen:t});if(P({modalId:f,isOpen:h}),O({isOpen:h,onClose:e}),!h)return null;const g=()=>r?l.isValidElement(r)?o.jsx("div",{className:"mb-4",children:r}):o.jsx("h2",{className:"mb-4 text-xl font-semibold",id:j,children:r}):null,w=()=>x.length===0?null:o.jsx("div",{className:"mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3",children:x.map((I,B)=>{const{label:q,className:T,...V}=I;return o.jsx(R,{className:T,type:"button",...V,"data-modal-action":"true",children:q},B)})});return o.jsx(o.Fragment,{children:F.createPortal(o.jsx("div",{"aria-labelledby":d??r?j:void 0,"aria-describedby":y,role:"dialog","aria-modal":"true",className:"fixed inset-0 z-[100] overflow-y-auto",children:o.jsxs("div",{className:"flex min-h-screen items-center justify-center p-4",children:[o.jsx("div",{className:k("fixed inset-0 bg-black/20 transition-all",u),onClick:()=>{v||e()}}),a&&o.jsx("div",{className:k("relative w-fit",i),children:s}),!a&&o.jsxs("div",{id:f,tabIndex:-1,className:k("relative w-full max-w-xl transform rounded-lg shadow-xl transition-all p-6 bg-inherit focus:border ease-in duration-75",m?"opacity-100 scale-100":"opacity-0 scale-90",i),children:[!c&&o.jsx("button",{type:"button",onClick:e,"data-modal-close-button":"true",className:"rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0",children:o.jsx(C.X,{size:18})}),g(),s,w()]})]})}),document.body)})}function te({children:n,ref:t,...e}){if(l.isValidElement(n)){let r={...e};return n.props&&(r={...r,...n.props}),l.cloneElement(n,{...r,ref:s=>{typeof t=="function"?t(s):t&&(t.current=s)}})}return l.createElement("div",{...e,ref:t},n)}function z({itemId:n,checked:t,onChange:e,name:r,disabled:s=!1,className:a=""}){const i="relative inline-flex items-center justify-center rounded-full",u=()=>{s||e()},c=p.join(i,!t&&"hover:border-current/60",!s&&"border-current cursor-pointer",s&&"border-muted/60 cursor-not-allowed",a);return o.jsx("div",{id:n,role:"radio",tabIndex:-1,"aria-checked":t,"aria-disabled":s,"aria-description":`Radio button for ${r}`,"aria-labelledby":`${n}-label`,onClick:u,className:c,style:{width:"1em",height:"1em",padding:"0.1em",borderWidth:"0.06em"},children:t&&o.jsx("div",{className:p.join("size-full aspect-square rounded-full",s&&"bg-muted/60",!s&&"bg-current")})})}function E({value:n,children:t,className:e="",isSelected:r=!1,onChange:s,disabled:a=!1,hideInput:i=!1,description:u,name:c}){const v=`radio-${l.useId()}-${n}`,d=()=>{a||s==null||s(n)};return o.jsxs("div",{title:u,className:p.join("relative flex items-center",e,i&&`p-2 border-2 focus-within:border-dashed focus-within:${a?"border-current/50":"border-current/80"}`,i&&!r&&`border-transparent ${a?"":"not-focus-within:hover:border-border/60"}`,i&&r&&"border-border",a&&"opacity-60 cursor-not-allowed"),style:{gap:"0.5em"},children:[!i&&o.jsx(z,{itemId:v,name:c||"",checked:r,onChange:d,disabled:a,className:p.join(i&&"")}),o.jsx("div",{id:i?v:void 0,tabIndex:i?-1:void 0,role:i?"radio":void 0,onClick:i?d:void 0,"aria-checked":i?r?"true":"false":void 0,"aria-disabled":i?a:void 0,"aria-description":i?u||`Radio button for ${c}`:void 0,"aria-labelledby":i?`${v}-label`:void 0,className:p.join(i&&"size-full",typeof t=="object"&&"grow focus:outline-none"),children:o.jsx("label",{id:`${v}-label`,onClick:i?void 0:d,className:p.join(a&&"cursor-not-allowed",!a&&"cursor-pointer"),children:t})})]})}function re(n,t){const[e,r]=l.useState(t),[s,a]=l.useState(-1),[i,u]=l.useState(!1),c=l.useCallback((b,f)=>{var h;const j=b[f];j.hasAttribute("disabled")||j.getAttribute("aria-disabled")==="true"||((h=b[f])==null||h.click(),a(f))},[]),x=l.useCallback((b,f)=>{var m;if(b.preventDefault(),i||!f.length)return;const j=t!==-1?t:0;(m=f[j])==null||m.focus(),r(j),t!==-1&&c(f,j)},[t,i,c]),v=l.useCallback(b=>{var h;if(!b.shiftKey)return;b.preventDefault();const f=Array.from(document.querySelectorAll('a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])')).filter(g=>!g.hasAttribute("disabled")&&g.tabIndex>=0),j=f.findIndex(g=>g.id===n),m=j>0?j-1:f.length-1;(h=f[m])==null||h.focus()},[n]),d=l.useCallback((b,f)=>{var w;if(!f.length)return;const j=b.target;if(!f.some(I=>I.id===j.id))return;const h=e!==-1?e:0;let g=h;switch(b.key){case"ArrowUp":case"ArrowLeft":b.preventDefault(),g=h>0?h-1:f.length-1;break;case"ArrowDown":case"ArrowRight":b.preventDefault(),g=(h+1)%f.length;break;case" ":b.preventDefault(),c(f,h);return;case"Tab":v(b);return;default:return}(w=f[g])==null||w.focus(),r(g),s!==-1&&c(f,g)},[e,s,v,c]),y=l.useCallback(()=>{const b=document.querySelector(`[id="${n}"][role="radiogroup"]`);return b?Array.from(b.querySelectorAll('[role="radio"]')):[]},[n]);l.useEffect(()=>{const b=document.querySelector(`[id="${n}"][role="radiogroup"]`);if(!b)return;const f=y(),j=w=>x(w,f),m=w=>d(w,f),h=()=>u(!0),g=()=>u(!1);return document.addEventListener("keydown",m),b.addEventListener("focus",j),b.addEventListener("mousedown",h),document.addEventListener("mouseup",g),()=>{document.removeEventListener("keydown",m),b.removeEventListener("focus",j),b.removeEventListener("mousedown",h),document.removeEventListener("mouseup",g)}},[n,y,x,d])}function ne({options:n=[],value:t,onChange:e,name:r,children:s,className:a="",childrenClassName:i="",hideInputs:u=!1}){const c=l.useId(),x=r||`radio-group-${c}`;re(x,n.findIndex(d=>d===t));const v=l.useMemo(()=>n.reduce((d,y)=>(typeof y=="string"?d.some(b=>b.value===y)||d.push({label:y,value:y}):d.push(y),d),[]),[n]);return o.jsxs("div",{id:x,role:"radiogroup",tabIndex:0,className:p.join(a,"focus:outline-none"),children:[v.length>0&&v.map((d,y)=>o.jsx(E,{value:d.value,isSelected:t===d.value,onChange:e,name:x,disabled:d.disabled,description:d.description,hideInput:u,className:i,children:d.label},`${d.value}-${y}`)),v.length===0&&s&&l.Children.map(s,d=>l.isValidElement(d)&&d.type===E?o.jsx(E,{...d.props,className:p.join(i,d.props.className),hideInput:d.props.hideInput||u,isSelected:t===d.props.value,onChange:e,name:x,children:d.props.children}):null)]})}function se({elementId:n,maxLength:t}){const[e,r]=l.useState(0);return l.useEffect(()=>{const s=document.getElementById(n);if(!s)return;const a=()=>{const i=s.value.length;r(i);const u=i>=t;s.setAttribute("aria-describedby",`${n}-character-count`),s.setAttribute("aria-invalid",u?"true":"false"),u?s.setAttribute("data-error","true"):s.removeAttribute("data-error")};return a(),s.addEventListener("input",a),s.setAttribute("maxlength",String(t)),()=>{s.removeEventListener("input",a),s.removeAttribute("maxlength"),s.removeAttribute("aria-describedby"),s.removeAttribute("aria-invalid"),s.removeAttribute("data-error")}},[n,t]),o.jsx("small",{className:p.join("mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end",e>=t&&"text-danger",e<t&&"text-current"),role:"status",children:o.jsxs("span",{id:`${n}-character-count`,children:[e," / ",t," characters"]})})}function ae(n,t){l.useEffect(()=>{const e=document.getElementById(n);if(!e)return;if(!t){e.style.height="auto";return}const r=()=>{e.style.height="auto",e.style.height=`${e.scrollHeight}px`};return r(),e.addEventListener("input",r),e.addEventListener("resize",r),window.addEventListener("resize",r),()=>{e.removeEventListener("input",r),e.removeEventListener("resize",r),window.removeEventListener("resize",r)}},[n,t])}const oe={base:"","left-line":"border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success",outline:"border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success"},ie={none:"rounded-none",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",full:"px-3 rounded-full"},D={variant:"outline",rounded:"none"};function de({variant:n=D.variant,rounded:t,displayOnlyMode:e=!1,errorMessage:r,successMessage:s,hideResizeHandle:a=!1,autoExpand:i=!1,characterLimit:u=0,className:c,...x}){const v=l.useId();ae(v,i||e);let d=t;n==="outline"&&!t&&(d="md"),d=d||D.rounded;let y=a;(e||n==="left-line"&&!a)&&(y=!0);const f=p.join("appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all",!e&&oe[n],!e&&ie[d],!e&&"px-2 py-1",e&&"pointer-events-none",y&&"no-resize-handle",c);return o.jsxs("div",{className:p.join("-space-y-1.5",e&&"cursor-text"),children:[o.jsx("textarea",{...x,id:v,"aria-disabled":x.disabled,readOnly:e,"aria-readonly":e||x["aria-readonly"],style:{resize:i?"none":void 0},className:f}),u>0&&o.jsx(se,{elementId:v,maxLength:u}),!e&&o.jsx(A,{elementId:v,type:"error",message:r}),!e&&o.jsx(A,{elementId:v,type:"success",message:s})]})}exports.Accordion=G;exports.AccordionItem=N;exports.Button=R;exports.ButtonLoadingDots=L;exports.Checkbox=W;exports.Clickable=X;exports.Input=Y;exports.Label=Z;exports.Modal=ee;exports.RadioGroup=ne;exports.RadioGroupItem=E;exports.RadioInput=z;exports.Slot=te;exports.Textarea=de;
|
|
2
2
|
//# sourceMappingURL=components.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.cjs.js","sources":["../src/components/accordion/AccordionItem.tsx","../src/components/accordion/Accordion.tsx","../src/components/button/LoadingDots.tsx","../src/components/button/variants.ts","../src/components/button/Button.tsx","../src/components/checkbox/hooks.ts","../src/components/checkbox/Checkbox.tsx","../src/components/clickable/Clickable.tsx","../src/shared/forms/StatusHelpMessage.tsx","../src/components/input/variants.ts","../src/components/input/Input.tsx","../src/components/label/Label.tsx","utils.esm.js","../src/components/modal/hooks.ts","../src/components/modal/Modal.tsx","../src/components/slot/Slot.tsx","../src/components/radiogroup/RadioInput.tsx","../src/components/radiogroup/RadioGroupItem.tsx","../src/components/radiogroup/hooks.ts","../src/components/radiogroup/RadioGroup.tsx","../src/components/textarea/CharacterCount.tsx","../src/components/textarea/hooks.ts","../src/components/textarea/variants.ts","../src/components/textarea/Textarea.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ChevronDown } from '../../symbols';\nimport { join } from '../../utils';\nimport { AccordionOption } from './Accordion';\n\nexport interface AccordionItemProps extends Omit<AccordionOption, 'defaultOpen'> {\n children?: React.ReactNode;\n className?: string;\n isOpen?: boolean;\n onToggle?: () => void;\n triggerClassName?: string;\n bodyClassName?: string;\n}\n\nexport function AccordionItem({\n id,\n title,\n content,\n children,\n className = '',\n disabled = false,\n isOpen = false,\n onToggle,\n triggerClassName = '',\n bodyClassName = '',\n}: AccordionItemProps) {\n const fallbackId = useId();\n const itemId = id || `accordion-item-${fallbackId}`;\n const headerId = `${itemId}-header`;\n const panelId = `${itemId}-panel`;\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={join('border-b border-gray-200', disabled && 'opacity-60 cursor-not-allowed', className)}>\n <button\n id={headerId}\n type='button'\n className={join(\n 'w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary',\n disabled ? 'cursor-not-allowed' : 'hover:bg-gray-50/10 cursor-pointer',\n triggerClassName\n )}\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n >\n <span>{title}</span>\n <span\n className={join(\n 'transform transition-transform duration-300 ease-linear',\n isOpen ? 'rotate-180' : 'rotate-0'\n )}\n aria-hidden='true'\n >\n <ChevronDown size={18} />\n </span>\n </button>\n\n <div\n id={panelId}\n role='region'\n aria-labelledby={headerId}\n className={join(\n 'transition-all duration-300 ease-linear px-4',\n isOpen ? 'max-h-96 opacity-100 overflow-auto py-3' : 'max-h-0 opacity-0 overflow-hidden',\n bodyClassName\n )}\n >\n {isOpen && (children || content)}\n </div>\n </div>\n );\n}\n","import React, { useId, useState } from 'react';\nimport { join } from '../../utils';\nimport { AccordionItem, AccordionItemProps } from './AccordionItem';\n\nexport interface AccordionOption {\n id?: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n defaultOpen?: boolean;\n}\n\nexport interface AccordionProps {\n name?: string;\n items?: AccordionOption[];\n children?: React.ReactElement<AccordionItemProps>[] | React.ReactElement<AccordionItemProps>;\n className?: string;\n itemClassName?: string;\n allowMultiple?: boolean;\n defaultOpenItems?: string[];\n triggersClassName?: string;\n bodiesClassName?: string;\n}\n\nexport function Accordion({\n name,\n items = [],\n children,\n className = '',\n itemClassName = '',\n allowMultiple = false,\n defaultOpenItems = [],\n triggersClassName = '',\n bodiesClassName = '',\n}: AccordionProps) {\n const groupId = useId();\n const groupName = name || `accordion-group-${groupId}`;\n const [openItems, setOpenItems] = useState<Set<string>>(new Set(defaultOpenItems));\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n }\n\n return newOpenItems;\n });\n };\n\n const getItemId = (index: number) => `${groupId}-item-${index}`;\n const isItemOpen = (itemId: string) => openItems.has(itemId);\n\n return (\n <div id={groupName} className={className}>\n {/* Render from items prop */}\n {items.length > 0 &&\n items.map((item, index) => {\n const itemId = item.id || getItemId(index);\n return (\n <AccordionItem\n key={itemId}\n id={itemId}\n title={item.title}\n content={item.content}\n disabled={item.disabled}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n className={itemClassName}\n triggerClassName={triggersClassName}\n bodyClassName={bodiesClassName}\n />\n );\n })}\n\n {/* Render AccordionItem components */}\n {items.length === 0 &&\n children &&\n React.Children.map(children, (child, index) => {\n if (React.isValidElement<AccordionItemProps>(child) && child.type === AccordionItem) {\n const itemId = child.props.id || getItemId(index);\n return (\n <AccordionItem\n {...child.props}\n key={itemId}\n id={itemId}\n className={join(itemClassName, child.props.className)}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n triggerClassName={join(triggersClassName, child.props.triggerClassName)}\n bodyClassName={join(bodiesClassName, child.props.bodyClassName)}\n />\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\nexport default function LoadingDots() {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setActiveIndex((prevIndex) => (prevIndex + 1) % 3);\n }, 500);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div className='absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle'>\n {[0, 1, 2].map((index) => (\n <div\n key={index}\n className={join(\n 'rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current',\n activeIndex === index && 'transform -translate-y-1'\n )}\n />\n ))}\n </div>\n );\n}\n","export const buttonVariants = {\n base: '',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80',\n tertiary: 'text-primary hover:text-primary-foreground disabled:text-muted',\n outline: 'border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted',\n link: 'underline-offset-4 hover:underline disabled:underline disabled:text-muted',\n danger: 'bg-danger text-danger-foreground hover:bg-danger/85 disabled:bg-muted disabled:text-muted-foreground',\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariants;\n\nexport const sizeVariants = {\n stripped: '',\n fitted: 'size-fit',\n sm: 'px-2 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n icon: 'p-1 w-fit aspect-square',\n full: 'p-2 w-full',\n} as const;\nexport type ButtonSize = keyof typeof sizeVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n} as const;\nexport type ButtonRounded = keyof typeof roundedVariants;\n\nexport interface ButtonVariants {\n variant: ButtonVariant;\n size: ButtonSize;\n rounded: ButtonRounded;\n}\n\nexport const buttonDefaults: ButtonVariants = {\n variant: 'primary',\n size: 'md',\n rounded: 'md',\n} as const;\n","// Button.tsx\nimport { ButtonHTMLAttributes, Ref } from 'react';\nimport { join } from '../../utils';\nimport LoadingDots from './LoadingDots';\nimport { ButtonSize, ButtonVariants, buttonDefaults, buttonVariants, roundedVariants, sizeVariants } from './variants';\n\nexport interface ButtonProps extends Partial<ButtonVariants>, ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n loading?: boolean;\n linkTo?: string;\n linkProps?: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n}\n\nexport default function Button({\n variant = buttonDefaults.variant,\n size,\n rounded = buttonDefaults.rounded,\n loading,\n linkTo,\n linkProps,\n type = 'button',\n className,\n ...rest\n}: ButtonProps) {\n let adjustedSize: ButtonSize;\n if (variant === 'link' && !size) {\n // default links to fitted size\n adjustedSize = 'fitted';\n } else {\n adjustedSize = size || buttonDefaults.size;\n }\n\n const baseClasses =\n 'appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all';\n\n const buttonClasses = join(\n baseClasses,\n buttonVariants[variant],\n sizeVariants[adjustedSize],\n roundedVariants[rounded],\n loading && 'relative pointer-events-none',\n linkTo && 'relative',\n className\n );\n\n return (\n <button\n {...rest}\n role={linkTo ? 'link' : rest.role}\n aria-label={rest['aria-label'] || linkProps?.['aria-label']}\n aria-description={rest['aria-description'] || linkProps?.['aria-description']}\n aria-disabled={rest.disabled || loading}\n aria-busy={loading}\n type={type}\n className={buttonClasses}\n >\n {loading && <LoadingDots />}\n <span className={join(loading && 'invisible')}>{rest.children}</span>\n\n {linkTo && !rest.disabled && (\n <a\n {...linkProps}\n aria-hidden={true} // Hide from screen readers since the button is already accessible\n href={linkTo}\n target={linkProps?.target || '_blank'}\n rel={linkProps?.rel || 'noreferrer'}\n className='absolute inset-0'\n />\n )}\n </button>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useFilledBackgroundColor(id: string) {\n const [filledBackgroundColor, setFilledBackgroundColor] = useState<string>('');\n\n const getFirstNonTransparentBackgroundColor = useCallback((element: Element | null): string => {\n let currentElement = element;\n let color = '';\n while (currentElement && !color) {\n const backgroundColor = window.getComputedStyle(currentElement).backgroundColor;\n if (backgroundColor && backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)') {\n color = backgroundColor;\n }\n currentElement = currentElement.parentElement;\n }\n return color || 'transparent';\n }, []);\n\n useEffect(() => {\n const checkbox = document.getElementById(id);\n if (checkbox) {\n const backgroundColor = getFirstNonTransparentBackgroundColor(checkbox.parentElement);\n setFilledBackgroundColor(backgroundColor);\n }\n }, [id, getFirstNonTransparentBackgroundColor]);\n\n return filledBackgroundColor;\n}\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport Check from '../../symbols/Check';\nimport { join } from '../../utils';\nimport { useFilledBackgroundColor } from './hooks';\n\nexport interface CheckboxProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n size?: number;\n color?: string; // can be adjusted with tailwindcss by using `text-<color>`\n filled?: boolean;\n rounded?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport default function Checkbox({\n ref,\n id,\n size = 20,\n color,\n filled = false,\n rounded = true,\n checked = false,\n onCheckedChange,\n disabled,\n className = '',\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const checkboxId = useMemo(() => id || `checkbox-${generatedId}`, [id, generatedId]);\n const parentBackgroundColor = useFilledBackgroundColor(checkboxId);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleChange = () => {\n if (!disabled) {\n setIsChecked(!isChecked);\n onCheckedChange?.(!isChecked);\n }\n };\n\n const handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n handleChange();\n }\n };\n\n const checkboxClasses = join(\n 'flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2',\n rounded && 'rounded',\n disabled && 'opacity-40 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n return (\n <button\n id={checkboxId}\n type='button'\n ref={ref}\n tabIndex={0}\n role='checkbox'\n onClick={handleChange}\n aria-checked={isChecked}\n aria-disabled={disabled}\n onKeyDownCapture={handleOnKeyDown}\n style={{\n width: size,\n height: size,\n color: color,\n backgroundColor: isChecked && filled ? 'currentcolor' : 'transparent',\n }}\n className={checkboxClasses}\n {...props}\n >\n {isChecked && <Check size={size} color={filled ? parentBackgroundColor : undefined} />}\n </button>\n );\n}\n","import { join } from '../../utils';\n\ninterface ClickableProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {\n children: React.ReactNode;\n linkTo?: React.HTMLProps<HTMLAnchorElement>['href'];\n linkProps?: Omit<React.HTMLProps<HTMLAnchorElement>, 'href'>;\n onButtonClick?: React.HTMLProps<HTMLButtonElement>['onClick'];\n buttonProps?: Omit<React.HTMLProps<HTMLButtonElement>, 'onClick'>;\n}\n\nexport default function Clickable({\n children,\n className,\n linkTo,\n linkProps,\n onButtonClick,\n buttonProps,\n ...props\n}: ClickableProps) {\n if (linkTo && onButtonClick) {\n console.warn('Clickable: Both \"linkTo\" and \"onButtonClick\" props are provided. Only \"linkTo\" will be used.');\n }\n\n return (\n <div className={join('relative w-fit', className)} {...props}>\n {children}\n\n {/* Link */}\n {linkTo && (\n <a\n {...linkProps}\n href={linkTo}\n className={join('absolute inset-0', linkProps?.className)}\n />\n )}\n\n {/* Button */}\n {!linkTo && onButtonClick && (\n <button\n {...buttonProps}\n type='button'\n onClick={onButtonClick}\n className={join('absolute inset-0 cursor-pointer', buttonProps?.className)}\n />\n )}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { CheckCircled, ExclamationTriangle } from '../../symbols';\nimport { join } from '../../utils';\n\ninterface StatusHelpMessageProps {\n elementId: string;\n type: 'error' | 'success';\n message?: string;\n}\n\nexport default function StatusHelpMessage({ elementId, type, message }: StatusHelpMessageProps) {\n useEffect(() => {\n const element = document.getElementById(elementId) as HTMLElement;\n if (!element) {\n return;\n }\n if (!message && type === 'error') {\n element.removeAttribute('data-error');\n return;\n }\n if (!message && type === 'success') {\n element.removeAttribute('data-success');\n return;\n }\n\n element.setAttribute('aria-describedby', `${elementId}-${type}-message`);\n element.setAttribute('aria-invalid', type === 'error' ? 'true' : 'false');\n\n if (type === 'error') {\n element.setAttribute('data-error', 'true');\n }\n if (type === 'success') {\n element.setAttribute('data-success', 'true');\n }\n\n return () => {\n element.removeAttribute('aria-describedby');\n element.removeAttribute('aria-invalid');\n element.removeAttribute('data-error');\n element.removeAttribute('data-success');\n };\n }, [elementId, type, message]);\n\n if (!message) {\n return null;\n }\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start',\n type === 'error' && 'text-danger',\n type === 'success' && 'text-success'\n )}\n role='status'\n >\n {type === 'error' ? <ExclamationTriangle /> : <CheckCircled />}\n <span id={`${elementId}-${type}-message`}>{message}</span>\n </small>\n );\n}\n","export const inputVariants = {\n base: '',\n default:\n 'ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-danger not-disabled:data-success:ring-success',\n underline:\n 'border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type InputVariant = keyof typeof inputVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type InputRounded = keyof typeof roundedVariants;\n\nexport interface InputVariants {\n variant: InputVariant;\n rounded: InputRounded;\n}\n\nexport const inputDefaults: InputVariants = {\n variant: 'default',\n rounded: 'none',\n} as const;\n","import { Ref, useId, useState } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { EyeClosed, EyeOpened } from '../../symbols';\nimport { join } from '../../utils';\nimport './styles.css';\nimport { inputDefaults, inputVariants, InputVariants, roundedVariants } from './variants';\n\ninterface InputProps extends Partial<InputVariants>, React.InputHTMLAttributes<HTMLInputElement> {\n ref?: Ref<HTMLInputElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\nexport default function Input({\n variant = inputDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n type = 'text',\n className,\n ...rest\n}: InputProps) {\n const id = useId();\n const [showPassword, setShowPassword] = useState(false);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || inputDefaults.rounded;\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n const fileClasses =\n 'file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors';\n\n const inputClasses = join(\n baseClasses,\n fileClasses,\n !displayOnlyMode && inputVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n type === 'password' && 'pr-10',\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n className\n );\n\n return (\n <div className={join(displayOnlyMode && 'cursor-text')} style={{ height: rest.height, width: rest.width }}>\n <div className={join(type === 'password' && 'relative')}>\n <input\n {...rest}\n id={id}\n type={type === 'password' && showPassword ? 'text' : type}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n data-error={errorMessage ? true : undefined}\n data-success={successMessage ? true : undefined}\n className={inputClasses}\n />\n {type === 'password' && (\n <button\n onClick={() => setShowPassword(!showPassword)}\n className='absolute inset-y-0 right-0 px-2 hover:cursor-pointer'\n aria-label='Toggle password visibility'\n data-state={showPassword ? 'visible' : 'hidden'}\n >\n {showPassword ? <EyeOpened size={20} /> : <EyeClosed size={20} />}\n </button>\n )}\n </div>\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport { QuestionMarkCircled } from '../../symbols';\nimport { join } from '../../utils';\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n display?: 'block' | 'inline';\n width?: React.CSSProperties['width'];\n required?: boolean;\n helpMessage?: string;\n suffix?: React.ReactNode;\n}\n\nexport function Label({\n display = 'inline',\n width = 'fit-content',\n className = '',\n required,\n helpMessage,\n suffix,\n htmlFor,\n children,\n ...props\n}: LabelProps) {\n const id = useId();\n const labelClasses = join('font-medium', display, className);\n const helpId = helpMessage ? `${htmlFor ?? id}-help` : undefined;\n\n return (\n <div style={{ display: display === 'inline' ? 'inline-flex' : 'flex', width }} className='relative'>\n <label className={labelClasses} htmlFor={htmlFor} {...props}>\n {children}\n {required && (\n <span className='text-red-500 font-medium ml-1' aria-label='required'>\n *\n </span>\n )}\n </label>\n {helpMessage && (\n <span\n className='text-gray-500 ml-1 size-fit -translate-y-1/3'\n aria-describedby={helpId}\n aria-label='Help information'\n title={helpMessage}\n >\n <QuestionMarkCircled />\n </span>\n )}\n {helpMessage && (\n <div id={helpId} className='sr-only'>\n {helpMessage}\n </div>\n )}\n {suffix && <span className='ml-1'>{suffix}</span>}\n </div>\n );\n}\n","function n(...t) {\n return t.filter((s) => typeof s == \"string\" && s).join(\" \").trim() || void 0;\n}\nexport {\n n as join\n};\n//# sourceMappingURL=utils.esm.js.map\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { ModalProps } from './Modal';\n\nexport function useAnimationOpenClose({ isOpen }: Pick<ModalProps, 'isOpen'>) {\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 150);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\nexport function useDocumentChanges({ isOpen, onClose }: Pick<ModalProps, 'isOpen' | 'onClose'>) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n // Prevent background scrolling when modal is open\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'auto';\n };\n }, [isOpen, onClose]);\n}\n\nexport function useHandleFocus({ modalId, isOpen }: { modalId: string; isOpen: boolean }) {\n const previousActiveElement = useRef<Element | null>(null);\n\n const focusAppropriateElement = useCallback(() => {\n const modalElement = document.getElementById(modalId);\n if (!modalElement) return;\n\n // 1. First, try to focus on the first action button, if available\n const modalActions = modalElement.querySelectorAll('[data-modal-action=\"true\"]');\n if (modalActions.length > 0) {\n (modalActions[0] as HTMLElement).focus();\n return;\n }\n\n // 2. Then try first focusable element in content (giving preference to non-close button)\n const focusableElements = modalElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length > 0) {\n const allBesidesCloseButton = Array.from(focusableElements).filter((el) => {\n return !(el instanceof HTMLButtonElement && el.getAttribute('data-modal-close-button') === 'true');\n });\n\n if (allBesidesCloseButton.length > 0) {\n (allBesidesCloseButton[0] as HTMLElement).focus();\n return;\n }\n\n (focusableElements[0] as HTMLElement).focus();\n return;\n }\n\n // 3. Fallback to modal container\n modalElement.focus();\n }, [modalId]);\n\n useEffect(() => {\n if (isOpen) {\n // Store the currently focused element to restore focus later\n previousActiveElement.current = document.activeElement;\n\n focusAppropriateElement();\n }\n\n return () => {\n document.body.style.overflow = 'auto';\n\n // Restore focus to the previously focused element when modal closes\n if (previousActiveElement.current instanceof HTMLElement) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen, focusAppropriateElement]);\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from '../../symbols';\nimport { Button, ButtonProps } from '../button';\nimport { useAnimationOpenClose, useDocumentChanges, useHandleFocus } from './hooks';\n\ninterface ModalAction extends Omit<ButtonProps, 'children'> {\n label: string;\n}\n\nexport interface ModalProps {\n id?: string;\n isOpen: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children: React.ReactNode;\n contentOnly?: boolean;\n className?: string;\n overlayClassName?: string;\n hideCloseButton?: boolean;\n actions?: ModalAction[];\n disableCloseOnOverlayClick?: boolean;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n}\n\nexport function Modal({\n id,\n isOpen,\n onClose,\n title,\n children,\n contentOnly = false,\n className,\n overlayClassName,\n hideCloseButton = false,\n actions = [],\n disableCloseOnOverlayClick = false,\n ariaLabelledBy,\n ariaDescribedBy,\n}: ModalProps) {\n const generatedId = useId();\n const modalId = id || `modal-${generatedId}`;\n const titleId = id ? `${id}-title` : `modal-title-${generatedId}`;\n\n const { show, shouldRender } = useAnimationOpenClose({ isOpen });\n useHandleFocus({ modalId, isOpen: shouldRender });\n useDocumentChanges({ isOpen: shouldRender, onClose });\n\n if (!shouldRender) return null;\n\n const renderTitle = () => {\n if (!title) return null;\n\n if (React.isValidElement(title)) {\n return <div className='mb-4'>{title}</div>;\n }\n\n return (\n <h2 className='mb-4 text-xl font-semibold' id={titleId}>\n {title}\n </h2>\n );\n };\n\n const renderActions = () => {\n if (actions.length === 0) return null;\n\n return (\n <div className='mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3'>\n {actions.map((action, index) => {\n const { label, className, ...buttonProps } = action;\n return (\n <Button key={index} className={className} type='button' {...buttonProps} data-modal-action='true'>\n {label}\n </Button>\n );\n })}\n </div>\n );\n };\n\n return (\n <>\n {createPortal(\n <div\n aria-labelledby={ariaLabelledBy ?? title ? titleId : undefined}\n aria-describedby={ariaDescribedBy}\n role='dialog'\n aria-modal='true'\n className='fixed inset-0 z-[100] overflow-y-auto'\n >\n <div className='flex min-h-screen items-center justify-center p-4'>\n <div\n className={join('fixed inset-0 bg-black/20 transition-all', overlayClassName)}\n onClick={() => {\n if (!disableCloseOnOverlayClick) {\n onClose();\n }\n }}\n />\n\n {contentOnly && <div className={join('relative w-fit', className)}>{children}</div>}\n\n {!contentOnly && (\n <div\n id={modalId}\n tabIndex={-1}\n className={join(\n 'relative w-full max-w-xl transform rounded-lg shadow-xl transition-all p-6 bg-inherit focus:border ease-in duration-75',\n show ? 'opacity-100 scale-100' : 'opacity-0 scale-90',\n className\n )}\n >\n {!hideCloseButton && (\n <button\n onClick={onClose}\n data-modal-close-button='true'\n className='rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0'\n >\n <X size={18} />\n </button>\n )}\n\n {renderTitle()}\n\n {children}\n\n {renderActions()}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","import React, {\n cloneElement,\n createElement,\n HTMLAttributes,\n isValidElement,\n ReactElement,\n ReactNode,\n Ref,\n} from 'react';\n\ninterface SlotProps<T> extends HTMLAttributes<T> {\n children?: ReactNode;\n ref?: Ref<T>;\n}\n\nexport function Slot<T = HTMLElement>({ children, ref, ...props }: SlotProps<T>) {\n\n if (isValidElement(children)) {\n let allProps = { ...props };\n if (children.props) {\n allProps = { ...allProps, ...children.props };\n }\n return cloneElement(children, {\n ...allProps,\n ref: (node: T) => {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.RefObject<T>).current = node;\n }\n },\n } as unknown as ReactElement);\n }\n\n // If not asChild or no valid child, render as div\n return createElement('div', { ...props, ref }, children);\n}\n","import { join } from '../../utils';\n\nexport type RadioInputProps = {\n itemId: string;\n checked: boolean;\n onChange: () => void;\n name: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Custom RadioInput Component\nexport function RadioInput({ itemId, checked, onChange, name, disabled = false, className = '' }: RadioInputProps) {\n const baseClasses = 'relative inline-flex items-center justify-center rounded-full';\n\n const handleClick = () => {\n if (disabled) return;\n onChange();\n };\n\n const radioClasses = join(\n baseClasses,\n !checked && 'hover:border-current/60',\n !disabled && 'border-current cursor-pointer',\n disabled && 'border-muted/60 cursor-not-allowed',\n className\n );\n return (\n <div\n id={itemId}\n role='radio'\n tabIndex={-1} // necessary so that the radio button can be focused as div is not a focusable element\n aria-checked={checked}\n aria-disabled={disabled}\n aria-description={`Radio button for ${name}`}\n aria-labelledby={`${itemId}-label`}\n onClick={handleClick}\n className={radioClasses}\n style={{\n width: '1em',\n height: '1em',\n padding: '0.1em',\n borderWidth: '0.06em',\n }}\n >\n {checked && (\n <div\n className={join(`size-full aspect-square rounded-full`, disabled && 'bg-muted/60', !disabled && 'bg-current')}\n />\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { join } from '../../utils';\nimport { RadioInput } from './RadioInput';\n\nexport interface RadioGroupItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n isSelected?: boolean;\n onChange?: (value: string) => void;\n disabled?: boolean;\n name?: string;\n hideInput?: boolean;\n description?: string;\n}\n\nexport function RadioGroupItem({\n value,\n children,\n className = '',\n isSelected = false,\n onChange,\n disabled = false,\n hideInput = false,\n description,\n name,\n}: RadioGroupItemProps) {\n const id = useId();\n const itemId = `radio-${id}-${value}`;\n\n const handleChange = () => {\n if (!disabled) {\n onChange?.(value);\n }\n };\n\n return (\n <div\n title={description}\n className={join(\n 'relative flex items-center',\n className,\n // Uses text color for borders\n hideInput &&\n `p-2 border-2 focus-within:border-dashed focus-within:${\n disabled ? 'border-current/50' : 'border-current/80'\n }`,\n hideInput && !isSelected && `border-transparent ${disabled ? '' : 'not-focus-within:hover:border-border/60'}`,\n hideInput && isSelected && 'border-border',\n disabled && 'opacity-60 cursor-not-allowed'\n )}\n style={{\n gap: '0.5em',\n }}\n >\n {!hideInput && (\n <RadioInput\n itemId={itemId}\n name={name || ''}\n checked={isSelected}\n onChange={handleChange}\n disabled={disabled}\n className={join(hideInput && '')}\n />\n )}\n <div\n id={hideInput ? itemId : undefined}\n tabIndex={hideInput ? -1 : undefined}\n role={hideInput ? 'radio' : undefined}\n onClick={hideInput ? handleChange : undefined}\n aria-checked={!hideInput ? undefined : isSelected ? 'true' : 'false'}\n aria-disabled={hideInput ? disabled : undefined}\n aria-description={!hideInput ? undefined : description || `Radio button for ${name}`}\n aria-labelledby={hideInput ? `${itemId}-label` : undefined}\n className={join(hideInput && 'size-full', typeof children === 'object' && 'grow focus:outline-none')}\n >\n <label\n id={`${itemId}-label`}\n onClick={hideInput ? undefined : handleChange}\n className={join(disabled && 'cursor-not-allowed', !disabled && 'cursor-pointer')}\n >\n {children}\n </label>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useRadioFocus(id: string, selectedOptionIndex: number) {\n // Manage state locally to avoid race conditions, which can result in\n // the an option failing to be selected or incorrectly selected\n const [focusedIndex, setFocusedIndex] = useState<number>(selectedOptionIndex);\n const [clickedIndex, setClickedIndex] = useState<number>(-1);\n // Prevent onClicks from triggering focus events and automatically selecting the first option\n const [isMouseDown, setIsMouseDown] = useState<boolean>(false);\n\n const handleClicked = useCallback((options: HTMLElement[], index: number) => {\n const target = options[index] as HTMLElement;\n\n // Check if the target element is disabled\n const isDisabled = target.hasAttribute('disabled') || target.getAttribute('aria-disabled') === 'true';\n if (isDisabled) return;\n\n // Update the selected index\n options[index]?.click();\n setClickedIndex(index);\n }, []);\n\n const setInitialFocus = useCallback(\n (e: Event, options: HTMLElement[]) => {\n e.preventDefault();\n if (isMouseDown) return;\n if (!options.length) return;\n\n const indexToFocus = selectedOptionIndex !== -1 ? selectedOptionIndex : 0;\n options[indexToFocus]?.focus();\n setFocusedIndex(indexToFocus);\n\n // Only update the selected index if one is already set\n if (selectedOptionIndex !== -1) {\n handleClicked(options, indexToFocus);\n }\n },\n [selectedOptionIndex, isMouseDown, handleClicked]\n );\n\n /* Focus preceding element when Shift + Tab is pressed */\n const handleFocusPreceding = useCallback(\n (e: KeyboardEvent) => {\n // If the Shift key is not pressed while tab is entered, do nothing\n if (!e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n const focusableElements = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter((el) => !el.hasAttribute('disabled') && el.tabIndex >= 0);\n const currentIndex = focusableElements.findIndex((el) => el.id === id);\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[previousIndex]?.focus();\n },\n [id]\n );\n\n const handleKeyboardNavigation = useCallback(\n (e: KeyboardEvent, options: HTMLElement[]) => {\n if (!options.length) return;\n\n // Ensure we only toggle options part of radio group\n const target = e.target as HTMLElement;\n const isGroupOption = options.some((option) => option.id === target.id);\n if (!isGroupOption) return;\n\n const currentIndex = focusedIndex !== -1 ? focusedIndex : 0;\n let newIndex = currentIndex;\n\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n newIndex = (currentIndex + 1) % options.length;\n break;\n\n // Select the option when the space key is pressed\n case ' ':\n e.preventDefault();\n handleClicked(options, currentIndex);\n return;\n\n case 'Tab':\n handleFocusPreceding(e);\n return;\n\n default:\n return;\n }\n\n options[newIndex]?.focus();\n setFocusedIndex(newIndex);\n // Only update the selected index if one is already set\n if (clickedIndex !== -1) {\n handleClicked(options, newIndex);\n }\n },\n [focusedIndex, clickedIndex, handleFocusPreceding, handleClicked]\n );\n\n const getRadioOptions = useCallback((): HTMLElement[] => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return [];\n\n return Array.from(radioGroup.querySelectorAll('[role=\"radio\"]'));\n }, [id]);\n\n useEffect(() => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return;\n\n const options = getRadioOptions();\n const handleFocus = (e: Event) => setInitialFocus(e, options);\n const handleKeyDown = (e: KeyboardEvent) => handleKeyboardNavigation(e, options);\n const handleMouseDown = () => setIsMouseDown(true);\n const handleMouseUp = () => setIsMouseDown(false);\n\n document.addEventListener('keydown', handleKeyDown);\n radioGroup.addEventListener('focus', handleFocus);\n radioGroup.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp); // place on document since mouseup event can occur outside of radio group\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n radioGroup.removeEventListener('focus', handleFocus);\n radioGroup.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [id, getRadioOptions, setInitialFocus, handleKeyboardNavigation]);\n}\n","import React, { useId, useMemo } from 'react';\nimport { join } from '../../utils';\nimport { RadioGroupItem, RadioGroupItemProps } from './RadioGroupItem';\nimport { useRadioFocus } from './hooks';\n\nexport type RadioOption = { label: string; value: string; disabled?: boolean; description?: string };\n\nexport type RadioGroupProps = {\n options?: (string | RadioOption)[];\n value: string | undefined;\n onChange: (value: string) => void;\n name?: string;\n children?: React.ReactElement<RadioGroupItemProps>[] | React.ReactElement<RadioGroupItemProps>;\n className?: string;\n childrenClassName?: string;\n hideInputs?: boolean;\n};\n\nexport function RadioGroup({\n options = [],\n value,\n onChange,\n name,\n children,\n className = '',\n childrenClassName = '',\n hideInputs = false,\n}: RadioGroupProps) {\n const groupId = useId();\n const groupName = name || `radio-group-${groupId}`;\n useRadioFocus(\n groupName,\n options.findIndex((option) => option === value)\n );\n\n // Check for duplicates if string options are provided\n const processedOptions = useMemo(() => {\n return options.reduce<RadioOption[]>((acc, option) => {\n if (typeof option === 'string') {\n // Check if we already have this string option\n if (!acc.some((item) => item.value === option)) {\n acc.push({ label: option, value: option });\n }\n } else {\n acc.push(option);\n }\n return acc;\n }, []);\n }, [options]);\n\n return (\n <div id={groupName} role='radiogroup' tabIndex={0} className={join(className, 'focus:outline-none')}>\n {/* Render from options prop */}\n {processedOptions.length > 0 &&\n processedOptions.map((option, index) => (\n <RadioGroupItem\n key={`${option.value}-${index}`}\n value={option.value}\n isSelected={value === option.value}\n onChange={onChange}\n name={groupName}\n disabled={option.disabled}\n description={option.description}\n hideInput={hideInputs}\n className={childrenClassName}\n >\n {option.label}\n </RadioGroupItem>\n ))}\n\n {/* Render RadioGroupItem components */}\n {processedOptions.length === 0 &&\n children &&\n React.Children.map(children, (child) => {\n // TypeScript enforces that child is a RadioGroupItem\n if (React.isValidElement(child) && child.type === RadioGroupItem) {\n return (\n <RadioGroupItem\n {...child.props}\n className={join(childrenClassName, child.props.className)}\n hideInput={child.props.hideInput || hideInputs}\n isSelected={value === child.props.value}\n onChange={onChange}\n name={groupName}\n >\n {child.props.children}\n </RadioGroupItem>\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\ninterface CharacterCountProps {\n elementId: string;\n maxLength: number;\n}\n\nexport default function CharacterCount({ elementId, maxLength }: CharacterCountProps) {\n const [characterCount, setCharacterCount] = useState(0);\n\n useEffect(() => {\n const textarea = document.getElementById(elementId) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n const updateCharacterCount = () => {\n const updatedCharacterCount = textarea.value.length;\n setCharacterCount(updatedCharacterCount);\n const isError = updatedCharacterCount >= maxLength;\n textarea.setAttribute('aria-describedby', `${elementId}-character-count`);\n textarea.setAttribute('aria-invalid', isError ? 'true' : 'false');\n\n if (isError) {\n textarea.setAttribute('data-error', 'true');\n } else {\n textarea.removeAttribute('data-error');\n }\n };\n\n updateCharacterCount();\n textarea.addEventListener('input', updateCharacterCount);\n textarea.setAttribute('maxlength', String(maxLength));\n\n return () => {\n textarea.removeEventListener('input', updateCharacterCount);\n textarea.removeAttribute('maxlength');\n textarea.removeAttribute('aria-describedby');\n textarea.removeAttribute('aria-invalid');\n textarea.removeAttribute('data-error');\n };\n }, [elementId, maxLength]);\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end',\n characterCount >= maxLength && 'text-danger',\n characterCount < maxLength && 'text-current'\n )}\n role='status'\n >\n <span id={`${elementId}-character-count`}>\n {characterCount} / {maxLength} characters\n </span>\n </small>\n );\n}\n","import { useEffect } from 'react';\n\nexport function useAutoExpand(id: string, autoExpand: boolean) {\n useEffect(() => {\n const textarea = document.getElementById(id) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n if (!autoExpand) {\n textarea.style.height = 'auto';\n return;\n }\n\n const adjustHeight = () => {\n // necessary to reset the height to `auto` before calculating the new height\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n };\n\n adjustHeight();\n textarea.addEventListener('input', adjustHeight);\n textarea.addEventListener('resize', adjustHeight);\n window.addEventListener('resize', adjustHeight);\n\n return () => {\n textarea.removeEventListener('input', adjustHeight);\n textarea.removeEventListener('resize', adjustHeight);\n window.removeEventListener('resize', adjustHeight);\n };\n }, [id, autoExpand]);\n}\n","export const textareaVariants = {\n base: '',\n 'left-line':\n 'border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type TextareaVariant = keyof typeof textareaVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type TextareaRounded = keyof typeof roundedVariants;\n\nexport interface TextareaVariants {\n variant: TextareaVariant;\n rounded: TextareaRounded;\n}\n\nexport const textareaDefaults: TextareaVariants = {\n variant: 'outline',\n rounded: 'none',\n} as const;\n","import { Ref, useId } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { join } from '../../utils';\nimport CharacterCount from './CharacterCount';\nimport { useAutoExpand } from './hooks';\nimport './styles.css';\nimport { roundedVariants, textareaDefaults, textareaVariants, TextareaVariants } from './variants';\n\ninterface TextareaProps extends Partial<TextareaVariants>, React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n ref?: Ref<HTMLTextAreaElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n hideResizeHandle?: boolean; // only works for Webkit browsers\n autoExpand?: boolean;\n characterLimit?: number;\n}\n\nexport default function Textarea({\n variant = textareaDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n hideResizeHandle = false,\n autoExpand = false,\n characterLimit = 0,\n className,\n ...rest\n}: TextareaProps) {\n const id = useId();\n useAutoExpand(id, autoExpand || displayOnlyMode);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || textareaDefaults.rounded;\n\n let adjustedHideResizeHandle = hideResizeHandle;\n if (displayOnlyMode || (variant === 'left-line' && !hideResizeHandle)) {\n adjustedHideResizeHandle = true;\n }\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n\n const inputClasses = join(\n baseClasses,\n !displayOnlyMode && textareaVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n adjustedHideResizeHandle && 'no-resize-handle',\n\n className\n );\n\n return (\n <div className={join('-space-y-1.5', displayOnlyMode && 'cursor-text')}>\n <textarea\n {...rest}\n id={id}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n style={{\n resize: autoExpand ? 'none' : undefined,\n }}\n className={inputClasses}\n />\n {characterLimit > 0 && <CharacterCount elementId={id} maxLength={characterLimit} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n"],"names":["AccordionItem","id","title","content","children","className","disabled","isOpen","onToggle","triggerClassName","bodyClassName","fallbackId","useId","itemId","headerId","panelId","handleToggle","handleKeyDown","e","jsxs","join","jsx","ChevronDown","Accordion","name","items","itemClassName","allowMultiple","defaultOpenItems","triggersClassName","bodiesClassName","groupId","groupName","openItems","setOpenItems","useState","toggleItem","prev","newOpenItems","getItemId","index","isItemOpen","item","React","child","createElement","LoadingDots","activeIndex","setActiveIndex","useEffect","interval","prevIndex","buttonVariants","sizeVariants","roundedVariants","buttonDefaults","Button","variant","size","rounded","loading","linkTo","linkProps","type","rest","adjustedSize","buttonClasses","useFilledBackgroundColor","filledBackgroundColor","setFilledBackgroundColor","getFirstNonTransparentBackgroundColor","useCallback","element","currentElement","color","backgroundColor","checkbox","Checkbox","ref","filled","checked","onCheckedChange","props","generatedId","checkboxId","useMemo","parentBackgroundColor","isChecked","setIsChecked","handleChange","handleOnKeyDown","checkboxClasses","Check","Clickable","onButtonClick","buttonProps","StatusHelpMessage","elementId","message","ExclamationTriangle","CheckCircled","inputVariants","inputDefaults","Input","displayOnlyMode","errorMessage","successMessage","showPassword","setShowPassword","adjustedRound","inputClasses","EyeOpened","EyeClosed","Label","display","width","required","helpMessage","suffix","htmlFor","labelClasses","helpId","QuestionMarkCircled","n","t","s","useAnimationOpenClose","show","setShow","shouldRender","setShouldRender","useDocumentChanges","onClose","handleEscape","useHandleFocus","modalId","previousActiveElement","useRef","focusAppropriateElement","modalElement","modalActions","focusableElements","allBesidesCloseButton","el","Modal","contentOnly","overlayClassName","hideCloseButton","actions","disableCloseOnOverlayClick","ariaLabelledBy","ariaDescribedBy","titleId","renderTitle","renderActions","action","label","Fragment","createPortal","X","Slot","isValidElement","allProps","cloneElement","node","RadioInput","onChange","baseClasses","handleClick","radioClasses","RadioGroupItem","value","isSelected","hideInput","description","useRadioFocus","selectedOptionIndex","focusedIndex","setFocusedIndex","clickedIndex","setClickedIndex","isMouseDown","setIsMouseDown","handleClicked","options","target","_a","setInitialFocus","indexToFocus","handleFocusPreceding","currentIndex","previousIndex","handleKeyboardNavigation","option","newIndex","getRadioOptions","radioGroup","handleFocus","handleMouseDown","handleMouseUp","RadioGroup","childrenClassName","hideInputs","processedOptions","acc","CharacterCount","maxLength","characterCount","setCharacterCount","textarea","updateCharacterCount","updatedCharacterCount","isError","useAutoExpand","autoExpand","adjustHeight","textareaVariants","textareaDefaults","Textarea","hideResizeHandle","characterLimit","adjustedHideResizeHandle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.cjs.js","sources":["../src/components/accordion/AccordionItem.tsx","../src/components/accordion/Accordion.tsx","../src/components/button/LoadingDots.tsx","../src/components/button/variants.ts","../src/components/button/Button.tsx","../src/components/checkbox/hooks.ts","../src/components/checkbox/Checkbox.tsx","../src/components/clickable/Clickable.tsx","../src/shared/forms/StatusHelpMessage.tsx","../src/components/input/variants.ts","../src/components/input/Input.tsx","../src/components/label/Label.tsx","utils.esm.js","../src/components/modal/hooks.ts","../src/components/modal/Modal.tsx","../src/components/slot/Slot.tsx","../src/components/radiogroup/RadioInput.tsx","../src/components/radiogroup/RadioGroupItem.tsx","../src/components/radiogroup/hooks.ts","../src/components/radiogroup/RadioGroup.tsx","../src/components/textarea/CharacterCount.tsx","../src/components/textarea/hooks.ts","../src/components/textarea/variants.ts","../src/components/textarea/Textarea.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ChevronDown } from '../../symbols';\nimport { join } from '../../utils';\nimport { AccordionOption } from './Accordion';\n\nexport interface AccordionItemProps extends Omit<AccordionOption, 'defaultOpen'> {\n children?: React.ReactNode;\n className?: string;\n isOpen?: boolean;\n onToggle?: () => void;\n triggerClassName?: string;\n bodyClassName?: string;\n}\n\nexport function AccordionItem({\n id,\n title,\n content,\n children,\n className = '',\n disabled = false,\n isOpen = false,\n onToggle,\n triggerClassName = '',\n bodyClassName = '',\n}: AccordionItemProps) {\n const fallbackId = useId();\n const itemId = id || `accordion-item-${fallbackId}`;\n const headerId = `${itemId}-header`;\n const panelId = `${itemId}-panel`;\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={join('border-b border-gray-200', disabled && 'opacity-60 cursor-not-allowed', className)}>\n <button\n id={headerId}\n type='button'\n className={join(\n 'w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary',\n disabled ? 'cursor-not-allowed' : 'hover:bg-gray-50/10 cursor-pointer',\n triggerClassName\n )}\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n >\n <span>{title}</span>\n <span\n className={join(\n 'transform transition-transform duration-300 ease-linear',\n isOpen ? 'rotate-180' : 'rotate-0'\n )}\n aria-hidden='true'\n >\n <ChevronDown size={18} />\n </span>\n </button>\n\n <div\n id={panelId}\n role='region'\n aria-labelledby={headerId}\n className={join(\n 'transition-all duration-300 ease-linear px-4',\n isOpen ? 'max-h-96 opacity-100 overflow-auto py-3' : 'max-h-0 opacity-0 overflow-hidden',\n bodyClassName\n )}\n >\n {isOpen && (children || content)}\n </div>\n </div>\n );\n}\n","import React, { useId, useState } from 'react';\nimport { join } from '../../utils';\nimport { AccordionItem, AccordionItemProps } from './AccordionItem';\n\nexport interface AccordionOption {\n id?: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n defaultOpen?: boolean;\n}\n\nexport interface AccordionProps {\n name?: string;\n items?: AccordionOption[];\n children?: React.ReactElement<AccordionItemProps>[] | React.ReactElement<AccordionItemProps>;\n className?: string;\n itemClassName?: string;\n allowMultiple?: boolean;\n defaultOpenItems?: string[];\n triggersClassName?: string;\n bodiesClassName?: string;\n}\n\nexport function Accordion({\n name,\n items = [],\n children,\n className = '',\n itemClassName = '',\n allowMultiple = false,\n defaultOpenItems = [],\n triggersClassName = '',\n bodiesClassName = '',\n}: AccordionProps) {\n const groupId = useId();\n const groupName = name || `accordion-group-${groupId}`;\n const [openItems, setOpenItems] = useState<Set<string>>(new Set(defaultOpenItems));\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n }\n\n return newOpenItems;\n });\n };\n\n const getItemId = (index: number) => `${groupId}-item-${index}`;\n const isItemOpen = (itemId: string) => openItems.has(itemId);\n\n return (\n <div id={groupName} className={className}>\n {/* Render from items prop */}\n {items.length > 0 &&\n items.map((item, index) => {\n const itemId = item.id || getItemId(index);\n return (\n <AccordionItem\n key={itemId}\n id={itemId}\n title={item.title}\n content={item.content}\n disabled={item.disabled}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n className={itemClassName}\n triggerClassName={triggersClassName}\n bodyClassName={bodiesClassName}\n />\n );\n })}\n\n {/* Render AccordionItem components */}\n {items.length === 0 &&\n children &&\n React.Children.map(children, (child, index) => {\n if (React.isValidElement<AccordionItemProps>(child) && child.type === AccordionItem) {\n const itemId = child.props.id || getItemId(index);\n return (\n <AccordionItem\n {...child.props}\n key={itemId}\n id={itemId}\n className={join(itemClassName, child.props.className)}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n triggerClassName={join(triggersClassName, child.props.triggerClassName)}\n bodyClassName={join(bodiesClassName, child.props.bodyClassName)}\n />\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\nexport default function LoadingDots() {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setActiveIndex((prevIndex) => (prevIndex + 1) % 3);\n }, 500);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div className='absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle'>\n {[0, 1, 2].map((index) => (\n <div\n key={index}\n className={join(\n 'rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current',\n activeIndex === index && 'transform -translate-y-1'\n )}\n />\n ))}\n </div>\n );\n}\n","export const buttonVariants = {\n base: '',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80',\n tertiary: 'text-primary hover:text-primary-foreground disabled:text-muted',\n outline: 'border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted',\n link: 'underline-offset-4 hover:underline disabled:underline disabled:text-muted',\n danger: 'bg-danger text-danger-foreground hover:bg-danger/85 disabled:bg-muted disabled:text-muted-foreground',\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariants;\n\nexport const sizeVariants = {\n stripped: '',\n fitted: 'size-fit',\n sm: 'px-2 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n icon: 'p-1 w-fit aspect-square',\n full: 'p-2 w-full',\n} as const;\nexport type ButtonSize = keyof typeof sizeVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n} as const;\nexport type ButtonRounded = keyof typeof roundedVariants;\n\nexport interface ButtonVariants {\n variant: ButtonVariant;\n size: ButtonSize;\n rounded: ButtonRounded;\n}\n\nexport const buttonDefaults: ButtonVariants = {\n variant: 'primary',\n size: 'md',\n rounded: 'md',\n} as const;\n","// Button.tsx\nimport { ButtonHTMLAttributes, Ref } from 'react';\nimport { join } from '../../utils';\nimport LoadingDots from './LoadingDots';\nimport { ButtonSize, ButtonVariants, buttonDefaults, buttonVariants, roundedVariants, sizeVariants } from './variants';\n\nexport interface ButtonProps extends Partial<ButtonVariants>, ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n loading?: boolean;\n linkTo?: string;\n linkProps?: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n}\n\nexport default function Button({\n variant = buttonDefaults.variant,\n size,\n rounded = buttonDefaults.rounded,\n loading,\n linkTo,\n linkProps,\n type = 'button',\n className,\n ...rest\n}: ButtonProps) {\n let adjustedSize: ButtonSize;\n if (variant === 'link' && !size) {\n // default links to fitted size\n adjustedSize = 'fitted';\n } else {\n adjustedSize = size || buttonDefaults.size;\n }\n\n const baseClasses =\n 'appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all';\n\n const buttonClasses = join(\n baseClasses,\n buttonVariants[variant],\n sizeVariants[adjustedSize],\n roundedVariants[rounded],\n loading && 'relative pointer-events-none',\n linkTo && 'relative',\n className\n );\n\n return (\n <button\n {...rest}\n role={linkTo ? 'link' : rest.role}\n aria-label={rest['aria-label'] || linkProps?.['aria-label']}\n aria-description={rest['aria-description'] || linkProps?.['aria-description']}\n aria-disabled={rest.disabled || loading}\n aria-busy={loading}\n type={type}\n className={buttonClasses}\n >\n {loading && <LoadingDots />}\n <span className={join(loading && 'invisible')}>{rest.children}</span>\n\n {linkTo && !rest.disabled && (\n <a\n {...linkProps}\n aria-hidden={true} // Hide from screen readers since the button is already accessible\n href={linkTo}\n target={linkProps?.target || '_blank'}\n rel={linkProps?.rel || 'noreferrer'}\n className='absolute inset-0'\n />\n )}\n </button>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useFilledBackgroundColor(id: string) {\n const [filledBackgroundColor, setFilledBackgroundColor] = useState<string>('');\n\n const getFirstNonTransparentBackgroundColor = useCallback((element: Element | null): string => {\n let currentElement = element;\n let color = '';\n while (currentElement && !color) {\n const backgroundColor = window.getComputedStyle(currentElement).backgroundColor;\n if (backgroundColor && backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)') {\n color = backgroundColor;\n }\n currentElement = currentElement.parentElement;\n }\n return color || 'transparent';\n }, []);\n\n useEffect(() => {\n const checkbox = document.getElementById(id);\n if (checkbox) {\n const backgroundColor = getFirstNonTransparentBackgroundColor(checkbox.parentElement);\n setFilledBackgroundColor(backgroundColor);\n }\n }, [id, getFirstNonTransparentBackgroundColor]);\n\n return filledBackgroundColor;\n}\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport Check from '../../symbols/Check';\nimport { join } from '../../utils';\nimport { useFilledBackgroundColor } from './hooks';\n\nexport interface CheckboxProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n size?: number;\n color?: string; // can be adjusted with tailwindcss by using `text-<color>`\n filled?: boolean;\n rounded?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport default function Checkbox({\n ref,\n id,\n size = 20,\n color,\n filled = false,\n rounded = true,\n checked = false,\n onCheckedChange,\n disabled,\n className = '',\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const checkboxId = useMemo(() => id || `checkbox-${generatedId}`, [id, generatedId]);\n const parentBackgroundColor = useFilledBackgroundColor(checkboxId);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleChange = () => {\n if (!disabled) {\n setIsChecked(!isChecked);\n onCheckedChange?.(!isChecked);\n }\n };\n\n const handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n handleChange();\n }\n };\n\n const checkboxClasses = join(\n 'flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2',\n rounded && 'rounded',\n disabled && 'opacity-40 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n return (\n <button\n id={checkboxId}\n type='button'\n ref={ref}\n tabIndex={0}\n role='checkbox'\n onClick={handleChange}\n aria-checked={isChecked}\n aria-disabled={disabled}\n onKeyDownCapture={handleOnKeyDown}\n style={{\n width: size,\n height: size,\n color: color,\n backgroundColor: isChecked && filled ? 'currentcolor' : 'transparent',\n }}\n className={checkboxClasses}\n {...props}\n >\n {isChecked && <Check size={size} color={filled ? parentBackgroundColor : undefined} />}\n </button>\n );\n}\n","import { join } from '../../utils';\n\ninterface ClickableProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {\n children: React.ReactNode;\n linkTo?: React.HTMLProps<HTMLAnchorElement>['href'];\n linkProps?: Omit<React.HTMLProps<HTMLAnchorElement>, 'href'>;\n onButtonClick?: React.HTMLProps<HTMLButtonElement>['onClick'];\n buttonProps?: Omit<React.HTMLProps<HTMLButtonElement>, 'onClick'>;\n}\n\nexport default function Clickable({\n children,\n className,\n linkTo,\n linkProps,\n onButtonClick,\n buttonProps,\n ...props\n}: ClickableProps) {\n if (linkTo && onButtonClick) {\n console.warn('Clickable: Both \"linkTo\" and \"onButtonClick\" props are provided. Only \"linkTo\" will be used.');\n }\n\n return (\n <div className={join('relative w-fit', className)} {...props}>\n {children}\n\n {/* Link */}\n {linkTo && (\n <a\n {...linkProps}\n href={linkTo}\n className={join('absolute inset-0', linkProps?.className)}\n />\n )}\n\n {/* Button */}\n {!linkTo && onButtonClick && (\n <button\n {...buttonProps}\n type='button'\n onClick={onButtonClick}\n className={join('absolute inset-0 cursor-pointer', buttonProps?.className)}\n />\n )}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { CheckCircled, ExclamationTriangle } from '../../symbols';\nimport { join } from '../../utils';\n\ninterface StatusHelpMessageProps {\n elementId: string;\n type: 'error' | 'success';\n message?: string;\n}\n\nexport default function StatusHelpMessage({ elementId, type, message }: StatusHelpMessageProps) {\n useEffect(() => {\n const element = document.getElementById(elementId) as HTMLElement;\n if (!element) {\n return;\n }\n if (!message && type === 'error') {\n element.removeAttribute('data-error');\n return;\n }\n if (!message && type === 'success') {\n element.removeAttribute('data-success');\n return;\n }\n\n element.setAttribute('aria-describedby', `${elementId}-${type}-message`);\n element.setAttribute('aria-invalid', type === 'error' ? 'true' : 'false');\n\n if (type === 'error') {\n element.setAttribute('data-error', 'true');\n }\n if (type === 'success') {\n element.setAttribute('data-success', 'true');\n }\n\n return () => {\n element.removeAttribute('aria-describedby');\n element.removeAttribute('aria-invalid');\n element.removeAttribute('data-error');\n element.removeAttribute('data-success');\n };\n }, [elementId, type, message]);\n\n if (!message) {\n return null;\n }\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start',\n type === 'error' && 'text-danger',\n type === 'success' && 'text-success'\n )}\n role='status'\n >\n {type === 'error' ? <ExclamationTriangle /> : <CheckCircled />}\n <span id={`${elementId}-${type}-message`}>{message}</span>\n </small>\n );\n}\n","export const inputVariants = {\n base: '',\n default:\n 'ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-danger not-disabled:data-success:ring-success',\n underline:\n 'border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type InputVariant = keyof typeof inputVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type InputRounded = keyof typeof roundedVariants;\n\nexport interface InputVariants {\n variant: InputVariant;\n rounded: InputRounded;\n}\n\nexport const inputDefaults: InputVariants = {\n variant: 'default',\n rounded: 'none',\n} as const;\n","import { Ref, useId, useState } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { EyeClosed, EyeOpened } from '../../symbols';\nimport { join } from '../../utils';\nimport './styles.css';\nimport { inputDefaults, inputVariants, InputVariants, roundedVariants } from './variants';\n\ninterface InputProps extends Partial<InputVariants>, React.InputHTMLAttributes<HTMLInputElement> {\n ref?: Ref<HTMLInputElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\nexport default function Input({\n variant = inputDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n type = 'text',\n className,\n ...rest\n}: InputProps) {\n const id = useId();\n const [showPassword, setShowPassword] = useState(false);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || inputDefaults.rounded;\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n const fileClasses =\n 'file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors';\n\n const inputClasses = join(\n baseClasses,\n fileClasses,\n !displayOnlyMode && inputVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n type === 'password' && 'pr-10',\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n className\n );\n\n return (\n <div className={join(displayOnlyMode && 'cursor-text')} style={{ height: rest.height, width: rest.width }}>\n <div className={join(type === 'password' && 'relative')}>\n <input\n {...rest}\n id={id}\n type={type === 'password' && showPassword ? 'text' : type}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n data-error={errorMessage ? true : undefined}\n data-success={successMessage ? true : undefined}\n className={inputClasses}\n />\n {type === 'password' && (\n <button\n onClick={() => setShowPassword(!showPassword)}\n className='absolute inset-y-0 right-0 px-2 hover:cursor-pointer'\n aria-label='Toggle password visibility'\n data-state={showPassword ? 'visible' : 'hidden'}\n >\n {showPassword ? <EyeOpened size={20} /> : <EyeClosed size={20} />}\n </button>\n )}\n </div>\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport { QuestionMarkCircled } from '../../symbols';\nimport { join } from '../../utils';\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n display?: 'block' | 'inline';\n width?: React.CSSProperties['width'];\n required?: boolean;\n helpMessage?: string;\n suffix?: React.ReactNode;\n}\n\nexport function Label({\n display = 'inline',\n width = 'fit-content',\n className = '',\n required,\n helpMessage,\n suffix,\n htmlFor,\n children,\n ...props\n}: LabelProps) {\n const id = useId();\n const labelClasses = join('font-medium', display, className);\n const helpId = helpMessage ? `${htmlFor ?? id}-help` : undefined;\n\n return (\n <div style={{ display: display === 'inline' ? 'inline-flex' : 'flex', width }} className='relative'>\n <label className={labelClasses} htmlFor={htmlFor} {...props}>\n {children}\n {required && (\n <span className='text-red-500 font-medium ml-1' aria-label='required'>\n *\n </span>\n )}\n </label>\n {helpMessage && (\n <span\n className='text-gray-500 ml-1 size-fit -translate-y-1/3'\n aria-describedby={helpId}\n aria-label='Help information'\n title={helpMessage}\n >\n <QuestionMarkCircled />\n </span>\n )}\n {helpMessage && (\n <div id={helpId} className='sr-only'>\n {helpMessage}\n </div>\n )}\n {suffix && <span className='ml-1'>{suffix}</span>}\n </div>\n );\n}\n","function n(...t) {\n return t.filter((s) => typeof s == \"string\" && s).join(\" \").trim() || void 0;\n}\nexport {\n n as join\n};\n//# sourceMappingURL=utils.esm.js.map\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { ModalProps } from './Modal';\n\nexport function useAnimationOpenClose({ isOpen }: Pick<ModalProps, 'isOpen'>) {\n console.log('calling useAnimationOpenClose'); // REMOVE\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 150);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\nexport function useDocumentChanges({ isOpen, onClose }: Pick<ModalProps, 'isOpen' | 'onClose'>) {\n console.log('calling useDocumentChanges'); // REMOVE\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n // Prevent background scrolling when modal is open\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'auto';\n };\n }, [isOpen, onClose]);\n}\n\nexport function useHandleFocus({ modalId, isOpen }: { modalId: string; isOpen: boolean }) {\n const previousActiveElement = useRef<Element | null>(null);\n\n const focusAppropriateElement = useCallback(() => {\n const modalElement = document.getElementById(modalId);\n if (!modalElement) return;\n\n // 1. First, try to focus on the first action button, if available\n const modalActions = modalElement.querySelectorAll('[data-modal-action=\"true\"]');\n if (modalActions.length > 0) {\n (modalActions[0] as HTMLElement).focus();\n return;\n }\n\n // 2. Then try first focusable element in content (giving preference to non-close button)\n const focusableElements = modalElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length > 0) {\n const allBesidesCloseButton = Array.from(focusableElements).filter((el) => {\n return !(el instanceof HTMLButtonElement && el.getAttribute('data-modal-close-button') === 'true');\n });\n\n if (allBesidesCloseButton.length > 0) {\n (allBesidesCloseButton[0] as HTMLElement).focus();\n return;\n }\n\n (focusableElements[0] as HTMLElement).focus();\n return;\n }\n\n // 3. Fallback to modal container\n modalElement.focus();\n }, [modalId]);\n\n useEffect(() => {\n if (isOpen) {\n // Store the currently focused element to restore focus later\n previousActiveElement.current = document.activeElement;\n\n focusAppropriateElement();\n }\n\n return () => {\n document.body.style.overflow = 'auto';\n\n // Restore focus to the previously focused element when modal closes\n if (previousActiveElement.current instanceof HTMLElement) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen, focusAppropriateElement]);\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from '../../symbols';\nimport { Button, ButtonProps } from '../button';\nimport { useAnimationOpenClose, useDocumentChanges, useHandleFocus } from './hooks';\n\ninterface ModalAction extends Omit<ButtonProps, 'children'> {\n label: string;\n}\n\nexport interface ModalProps {\n id?: string;\n isOpen: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children: React.ReactNode;\n contentOnly?: boolean;\n className?: string;\n overlayClassName?: string;\n hideCloseButton?: boolean;\n actions?: ModalAction[];\n disableCloseOnOverlayClick?: boolean;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n}\n\nexport function Modal({\n id,\n isOpen,\n onClose,\n title,\n children,\n contentOnly = false,\n className,\n overlayClassName,\n hideCloseButton = false,\n actions = [],\n disableCloseOnOverlayClick = false,\n ariaLabelledBy,\n ariaDescribedBy,\n}: ModalProps) {\n const generatedId = useId();\n const modalId = id || `modal-${generatedId}`;\n const titleId = id ? `${id}-title` : `modal-title-${generatedId}`;\n\n const { show, shouldRender } = useAnimationOpenClose({ isOpen });\n useHandleFocus({ modalId, isOpen: shouldRender });\n useDocumentChanges({ isOpen: shouldRender, onClose });\n\n if (!shouldRender) return null;\n\n const renderTitle = () => {\n if (!title) return null;\n\n if (React.isValidElement(title)) {\n return <div className='mb-4'>{title}</div>;\n }\n\n return (\n <h2 className='mb-4 text-xl font-semibold' id={titleId}>\n {title}\n </h2>\n );\n };\n\n const renderActions = () => {\n if (actions.length === 0) return null;\n\n return (\n <div className='mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3'>\n {actions.map((action, index) => {\n const { label, className, ...buttonProps } = action;\n return (\n <Button key={index} className={className} type='button' {...buttonProps} data-modal-action='true'>\n {label}\n </Button>\n );\n })}\n </div>\n );\n };\n\n return (\n <>\n {createPortal(\n <div\n aria-labelledby={ariaLabelledBy ?? title ? titleId : undefined}\n aria-describedby={ariaDescribedBy}\n role='dialog'\n aria-modal='true'\n className='fixed inset-0 z-[100] overflow-y-auto'\n >\n <div className='flex min-h-screen items-center justify-center p-4'>\n <div\n className={join('fixed inset-0 bg-black/20 transition-all', overlayClassName)}\n onClick={() => {\n if (!disableCloseOnOverlayClick) {\n onClose();\n }\n }}\n />\n\n {contentOnly && <div className={join('relative w-fit', className)}>{children}</div>}\n\n {!contentOnly && (\n <div\n id={modalId}\n tabIndex={-1}\n className={join(\n 'relative w-full max-w-xl transform rounded-lg shadow-xl transition-all p-6 bg-inherit focus:border ease-in duration-75',\n show ? 'opacity-100 scale-100' : 'opacity-0 scale-90',\n className\n )}\n >\n {!hideCloseButton && (\n <button\n type='button'\n onClick={onClose}\n data-modal-close-button='true'\n className='rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0'\n >\n <X size={18} />\n </button>\n )}\n\n {renderTitle()}\n\n {children}\n\n {renderActions()}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","import React, {\n cloneElement,\n createElement,\n HTMLAttributes,\n isValidElement,\n ReactElement,\n ReactNode,\n Ref,\n} from 'react';\n\ninterface SlotProps<T> extends HTMLAttributes<T> {\n children?: ReactNode;\n ref?: Ref<T>;\n}\n\nexport function Slot<T = HTMLElement>({ children, ref, ...props }: SlotProps<T>) {\n\n if (isValidElement(children)) {\n let allProps = { ...props };\n if (children.props) {\n allProps = { ...allProps, ...children.props };\n }\n return cloneElement(children, {\n ...allProps,\n ref: (node: T) => {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.RefObject<T>).current = node;\n }\n },\n } as unknown as ReactElement);\n }\n\n // If not asChild or no valid child, render as div\n return createElement('div', { ...props, ref }, children);\n}\n","import { join } from '../../utils';\n\nexport type RadioInputProps = {\n itemId: string;\n checked: boolean;\n onChange: () => void;\n name: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Custom RadioInput Component\nexport function RadioInput({ itemId, checked, onChange, name, disabled = false, className = '' }: RadioInputProps) {\n const baseClasses = 'relative inline-flex items-center justify-center rounded-full';\n\n const handleClick = () => {\n if (disabled) return;\n onChange();\n };\n\n const radioClasses = join(\n baseClasses,\n !checked && 'hover:border-current/60',\n !disabled && 'border-current cursor-pointer',\n disabled && 'border-muted/60 cursor-not-allowed',\n className\n );\n return (\n <div\n id={itemId}\n role='radio'\n tabIndex={-1} // necessary so that the radio button can be focused as div is not a focusable element\n aria-checked={checked}\n aria-disabled={disabled}\n aria-description={`Radio button for ${name}`}\n aria-labelledby={`${itemId}-label`}\n onClick={handleClick}\n className={radioClasses}\n style={{\n width: '1em',\n height: '1em',\n padding: '0.1em',\n borderWidth: '0.06em',\n }}\n >\n {checked && (\n <div\n className={join(`size-full aspect-square rounded-full`, disabled && 'bg-muted/60', !disabled && 'bg-current')}\n />\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { join } from '../../utils';\nimport { RadioInput } from './RadioInput';\n\nexport interface RadioGroupItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n isSelected?: boolean;\n onChange?: (value: string) => void;\n disabled?: boolean;\n name?: string;\n hideInput?: boolean;\n description?: string;\n}\n\nexport function RadioGroupItem({\n value,\n children,\n className = '',\n isSelected = false,\n onChange,\n disabled = false,\n hideInput = false,\n description,\n name,\n}: RadioGroupItemProps) {\n const id = useId();\n const itemId = `radio-${id}-${value}`;\n\n const handleChange = () => {\n if (!disabled) {\n onChange?.(value);\n }\n };\n\n return (\n <div\n title={description}\n className={join(\n 'relative flex items-center',\n className,\n // Uses text color for borders\n hideInput &&\n `p-2 border-2 focus-within:border-dashed focus-within:${\n disabled ? 'border-current/50' : 'border-current/80'\n }`,\n hideInput && !isSelected && `border-transparent ${disabled ? '' : 'not-focus-within:hover:border-border/60'}`,\n hideInput && isSelected && 'border-border',\n disabled && 'opacity-60 cursor-not-allowed'\n )}\n style={{\n gap: '0.5em',\n }}\n >\n {!hideInput && (\n <RadioInput\n itemId={itemId}\n name={name || ''}\n checked={isSelected}\n onChange={handleChange}\n disabled={disabled}\n className={join(hideInput && '')}\n />\n )}\n <div\n id={hideInput ? itemId : undefined}\n tabIndex={hideInput ? -1 : undefined}\n role={hideInput ? 'radio' : undefined}\n onClick={hideInput ? handleChange : undefined}\n aria-checked={!hideInput ? undefined : isSelected ? 'true' : 'false'}\n aria-disabled={hideInput ? disabled : undefined}\n aria-description={!hideInput ? undefined : description || `Radio button for ${name}`}\n aria-labelledby={hideInput ? `${itemId}-label` : undefined}\n className={join(hideInput && 'size-full', typeof children === 'object' && 'grow focus:outline-none')}\n >\n <label\n id={`${itemId}-label`}\n onClick={hideInput ? undefined : handleChange}\n className={join(disabled && 'cursor-not-allowed', !disabled && 'cursor-pointer')}\n >\n {children}\n </label>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useRadioFocus(id: string, selectedOptionIndex: number) {\n // Manage state locally to avoid race conditions, which can result in\n // the an option failing to be selected or incorrectly selected\n const [focusedIndex, setFocusedIndex] = useState<number>(selectedOptionIndex);\n const [clickedIndex, setClickedIndex] = useState<number>(-1);\n // Prevent onClicks from triggering focus events and automatically selecting the first option\n const [isMouseDown, setIsMouseDown] = useState<boolean>(false);\n\n const handleClicked = useCallback((options: HTMLElement[], index: number) => {\n const target = options[index] as HTMLElement;\n\n // Check if the target element is disabled\n const isDisabled = target.hasAttribute('disabled') || target.getAttribute('aria-disabled') === 'true';\n if (isDisabled) return;\n\n // Update the selected index\n options[index]?.click();\n setClickedIndex(index);\n }, []);\n\n const setInitialFocus = useCallback(\n (e: Event, options: HTMLElement[]) => {\n e.preventDefault();\n if (isMouseDown) return;\n if (!options.length) return;\n\n const indexToFocus = selectedOptionIndex !== -1 ? selectedOptionIndex : 0;\n options[indexToFocus]?.focus();\n setFocusedIndex(indexToFocus);\n\n // Only update the selected index if one is already set\n if (selectedOptionIndex !== -1) {\n handleClicked(options, indexToFocus);\n }\n },\n [selectedOptionIndex, isMouseDown, handleClicked]\n );\n\n /* Focus preceding element when Shift + Tab is pressed */\n const handleFocusPreceding = useCallback(\n (e: KeyboardEvent) => {\n // If the Shift key is not pressed while tab is entered, do nothing\n if (!e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n const focusableElements = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter((el) => !el.hasAttribute('disabled') && el.tabIndex >= 0);\n const currentIndex = focusableElements.findIndex((el) => el.id === id);\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[previousIndex]?.focus();\n },\n [id]\n );\n\n const handleKeyboardNavigation = useCallback(\n (e: KeyboardEvent, options: HTMLElement[]) => {\n if (!options.length) return;\n\n // Ensure we only toggle options part of radio group\n const target = e.target as HTMLElement;\n const isGroupOption = options.some((option) => option.id === target.id);\n if (!isGroupOption) return;\n\n const currentIndex = focusedIndex !== -1 ? focusedIndex : 0;\n let newIndex = currentIndex;\n\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n newIndex = (currentIndex + 1) % options.length;\n break;\n\n // Select the option when the space key is pressed\n case ' ':\n e.preventDefault();\n handleClicked(options, currentIndex);\n return;\n\n case 'Tab':\n handleFocusPreceding(e);\n return;\n\n default:\n return;\n }\n\n options[newIndex]?.focus();\n setFocusedIndex(newIndex);\n // Only update the selected index if one is already set\n if (clickedIndex !== -1) {\n handleClicked(options, newIndex);\n }\n },\n [focusedIndex, clickedIndex, handleFocusPreceding, handleClicked]\n );\n\n const getRadioOptions = useCallback((): HTMLElement[] => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return [];\n\n return Array.from(radioGroup.querySelectorAll('[role=\"radio\"]'));\n }, [id]);\n\n useEffect(() => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return;\n\n const options = getRadioOptions();\n const handleFocus = (e: Event) => setInitialFocus(e, options);\n const handleKeyDown = (e: KeyboardEvent) => handleKeyboardNavigation(e, options);\n const handleMouseDown = () => setIsMouseDown(true);\n const handleMouseUp = () => setIsMouseDown(false);\n\n document.addEventListener('keydown', handleKeyDown);\n radioGroup.addEventListener('focus', handleFocus);\n radioGroup.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp); // place on document since mouseup event can occur outside of radio group\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n radioGroup.removeEventListener('focus', handleFocus);\n radioGroup.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [id, getRadioOptions, setInitialFocus, handleKeyboardNavigation]);\n}\n","import React, { useId, useMemo } from 'react';\nimport { join } from '../../utils';\nimport { RadioGroupItem, RadioGroupItemProps } from './RadioGroupItem';\nimport { useRadioFocus } from './hooks';\n\nexport type RadioOption = { label: string; value: string; disabled?: boolean; description?: string };\n\nexport type RadioGroupProps = {\n options?: (string | RadioOption)[];\n value: string | undefined;\n onChange: (value: string) => void;\n name?: string;\n children?: React.ReactElement<RadioGroupItemProps>[] | React.ReactElement<RadioGroupItemProps>;\n className?: string;\n childrenClassName?: string;\n hideInputs?: boolean;\n};\n\nexport function RadioGroup({\n options = [],\n value,\n onChange,\n name,\n children,\n className = '',\n childrenClassName = '',\n hideInputs = false,\n}: RadioGroupProps) {\n const groupId = useId();\n const groupName = name || `radio-group-${groupId}`;\n useRadioFocus(\n groupName,\n options.findIndex((option) => option === value)\n );\n\n // Check for duplicates if string options are provided\n const processedOptions = useMemo(() => {\n return options.reduce<RadioOption[]>((acc, option) => {\n if (typeof option === 'string') {\n // Check if we already have this string option\n if (!acc.some((item) => item.value === option)) {\n acc.push({ label: option, value: option });\n }\n } else {\n acc.push(option);\n }\n return acc;\n }, []);\n }, [options]);\n\n return (\n <div id={groupName} role='radiogroup' tabIndex={0} className={join(className, 'focus:outline-none')}>\n {/* Render from options prop */}\n {processedOptions.length > 0 &&\n processedOptions.map((option, index) => (\n <RadioGroupItem\n key={`${option.value}-${index}`}\n value={option.value}\n isSelected={value === option.value}\n onChange={onChange}\n name={groupName}\n disabled={option.disabled}\n description={option.description}\n hideInput={hideInputs}\n className={childrenClassName}\n >\n {option.label}\n </RadioGroupItem>\n ))}\n\n {/* Render RadioGroupItem components */}\n {processedOptions.length === 0 &&\n children &&\n React.Children.map(children, (child) => {\n // TypeScript enforces that child is a RadioGroupItem\n if (React.isValidElement(child) && child.type === RadioGroupItem) {\n return (\n <RadioGroupItem\n {...child.props}\n className={join(childrenClassName, child.props.className)}\n hideInput={child.props.hideInput || hideInputs}\n isSelected={value === child.props.value}\n onChange={onChange}\n name={groupName}\n >\n {child.props.children}\n </RadioGroupItem>\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\ninterface CharacterCountProps {\n elementId: string;\n maxLength: number;\n}\n\nexport default function CharacterCount({ elementId, maxLength }: CharacterCountProps) {\n const [characterCount, setCharacterCount] = useState(0);\n\n useEffect(() => {\n const textarea = document.getElementById(elementId) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n const updateCharacterCount = () => {\n const updatedCharacterCount = textarea.value.length;\n setCharacterCount(updatedCharacterCount);\n const isError = updatedCharacterCount >= maxLength;\n textarea.setAttribute('aria-describedby', `${elementId}-character-count`);\n textarea.setAttribute('aria-invalid', isError ? 'true' : 'false');\n\n if (isError) {\n textarea.setAttribute('data-error', 'true');\n } else {\n textarea.removeAttribute('data-error');\n }\n };\n\n updateCharacterCount();\n textarea.addEventListener('input', updateCharacterCount);\n textarea.setAttribute('maxlength', String(maxLength));\n\n return () => {\n textarea.removeEventListener('input', updateCharacterCount);\n textarea.removeAttribute('maxlength');\n textarea.removeAttribute('aria-describedby');\n textarea.removeAttribute('aria-invalid');\n textarea.removeAttribute('data-error');\n };\n }, [elementId, maxLength]);\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end',\n characterCount >= maxLength && 'text-danger',\n characterCount < maxLength && 'text-current'\n )}\n role='status'\n >\n <span id={`${elementId}-character-count`}>\n {characterCount} / {maxLength} characters\n </span>\n </small>\n );\n}\n","import { useEffect } from 'react';\n\nexport function useAutoExpand(id: string, autoExpand: boolean) {\n useEffect(() => {\n const textarea = document.getElementById(id) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n if (!autoExpand) {\n textarea.style.height = 'auto';\n return;\n }\n\n const adjustHeight = () => {\n // necessary to reset the height to `auto` before calculating the new height\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n };\n\n adjustHeight();\n textarea.addEventListener('input', adjustHeight);\n textarea.addEventListener('resize', adjustHeight);\n window.addEventListener('resize', adjustHeight);\n\n return () => {\n textarea.removeEventListener('input', adjustHeight);\n textarea.removeEventListener('resize', adjustHeight);\n window.removeEventListener('resize', adjustHeight);\n };\n }, [id, autoExpand]);\n}\n","export const textareaVariants = {\n base: '',\n 'left-line':\n 'border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type TextareaVariant = keyof typeof textareaVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type TextareaRounded = keyof typeof roundedVariants;\n\nexport interface TextareaVariants {\n variant: TextareaVariant;\n rounded: TextareaRounded;\n}\n\nexport const textareaDefaults: TextareaVariants = {\n variant: 'outline',\n rounded: 'none',\n} as const;\n","import { Ref, useId } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { join } from '../../utils';\nimport CharacterCount from './CharacterCount';\nimport { useAutoExpand } from './hooks';\nimport './styles.css';\nimport { roundedVariants, textareaDefaults, textareaVariants, TextareaVariants } from './variants';\n\ninterface TextareaProps extends Partial<TextareaVariants>, React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n ref?: Ref<HTMLTextAreaElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n hideResizeHandle?: boolean; // only works for Webkit browsers\n autoExpand?: boolean;\n characterLimit?: number;\n}\n\nexport default function Textarea({\n variant = textareaDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n hideResizeHandle = false,\n autoExpand = false,\n characterLimit = 0,\n className,\n ...rest\n}: TextareaProps) {\n const id = useId();\n useAutoExpand(id, autoExpand || displayOnlyMode);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || textareaDefaults.rounded;\n\n let adjustedHideResizeHandle = hideResizeHandle;\n if (displayOnlyMode || (variant === 'left-line' && !hideResizeHandle)) {\n adjustedHideResizeHandle = true;\n }\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n\n const inputClasses = join(\n baseClasses,\n !displayOnlyMode && textareaVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n adjustedHideResizeHandle && 'no-resize-handle',\n\n className\n );\n\n return (\n <div className={join('-space-y-1.5', displayOnlyMode && 'cursor-text')}>\n <textarea\n {...rest}\n id={id}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n style={{\n resize: autoExpand ? 'none' : undefined,\n }}\n className={inputClasses}\n />\n {characterLimit > 0 && <CharacterCount elementId={id} maxLength={characterLimit} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n"],"names":["AccordionItem","id","title","content","children","className","disabled","isOpen","onToggle","triggerClassName","bodyClassName","fallbackId","useId","itemId","headerId","panelId","handleToggle","handleKeyDown","e","jsxs","join","jsx","ChevronDown","Accordion","name","items","itemClassName","allowMultiple","defaultOpenItems","triggersClassName","bodiesClassName","groupId","groupName","openItems","setOpenItems","useState","toggleItem","prev","newOpenItems","getItemId","index","isItemOpen","item","React","child","createElement","LoadingDots","activeIndex","setActiveIndex","useEffect","interval","prevIndex","buttonVariants","sizeVariants","roundedVariants","buttonDefaults","Button","variant","size","rounded","loading","linkTo","linkProps","type","rest","adjustedSize","buttonClasses","useFilledBackgroundColor","filledBackgroundColor","setFilledBackgroundColor","getFirstNonTransparentBackgroundColor","useCallback","element","currentElement","color","backgroundColor","checkbox","Checkbox","ref","filled","checked","onCheckedChange","props","generatedId","checkboxId","useMemo","parentBackgroundColor","isChecked","setIsChecked","handleChange","handleOnKeyDown","checkboxClasses","Check","Clickable","onButtonClick","buttonProps","StatusHelpMessage","elementId","message","ExclamationTriangle","CheckCircled","inputVariants","inputDefaults","Input","displayOnlyMode","errorMessage","successMessage","showPassword","setShowPassword","adjustedRound","inputClasses","EyeOpened","EyeClosed","Label","display","width","required","helpMessage","suffix","htmlFor","labelClasses","helpId","QuestionMarkCircled","n","t","s","useAnimationOpenClose","show","setShow","shouldRender","setShouldRender","useDocumentChanges","onClose","handleEscape","useHandleFocus","modalId","previousActiveElement","useRef","focusAppropriateElement","modalElement","modalActions","focusableElements","allBesidesCloseButton","el","Modal","contentOnly","overlayClassName","hideCloseButton","actions","disableCloseOnOverlayClick","ariaLabelledBy","ariaDescribedBy","titleId","renderTitle","renderActions","action","label","Fragment","createPortal","X","Slot","isValidElement","allProps","cloneElement","node","RadioInput","onChange","baseClasses","handleClick","radioClasses","RadioGroupItem","value","isSelected","hideInput","description","useRadioFocus","selectedOptionIndex","focusedIndex","setFocusedIndex","clickedIndex","setClickedIndex","isMouseDown","setIsMouseDown","handleClicked","options","target","_a","setInitialFocus","indexToFocus","handleFocusPreceding","currentIndex","previousIndex","handleKeyboardNavigation","option","newIndex","getRadioOptions","radioGroup","handleFocus","handleMouseDown","handleMouseUp","RadioGroup","childrenClassName","hideInputs","processedOptions","acc","CharacterCount","maxLength","characterCount","setCharacterCount","textarea","updateCharacterCount","updatedCharacterCount","isError","useAutoExpand","autoExpand","adjustHeight","textareaVariants","textareaDefaults","Textarea","hideResizeHandle","characterLimit","adjustedHideResizeHandle"],"mappings":"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"}
|
package/dist/components.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as w, jsx as d, Fragment as G } from "react/jsx-runtime";
|
|
2
2
|
import I, { useId as A, useState as C, createElement as V, useEffect as E, useCallback as $, useMemo as F, useRef as Q, isValidElement as U, cloneElement as W } from "react";
|
|
3
3
|
import { join as p } from "./utils.esm.js";
|
|
4
|
-
import { b as X, C as _, E as J, a as Y, d as Z, c as
|
|
4
|
+
import { b as X, C as _, E as J, a as Y, d as Z, c as O, Q as M, X as P } from "./QuestionMarkCircled-JRFAPLtT.js";
|
|
5
5
|
import { createPortal as ee } from "react-dom";
|
|
6
6
|
function L({
|
|
7
7
|
id: n,
|
|
@@ -413,7 +413,7 @@ function $e({
|
|
|
413
413
|
className: "absolute inset-y-0 right-0 px-2 hover:cursor-pointer",
|
|
414
414
|
"aria-label": "Toggle password visibility",
|
|
415
415
|
"data-state": b ? "visible" : "hidden",
|
|
416
|
-
children: b ? /* @__PURE__ */ d(Z, { size: 20 }) : /* @__PURE__ */ d(
|
|
416
|
+
children: b ? /* @__PURE__ */ d(Z, { size: 20 }) : /* @__PURE__ */ d(O, { size: 20 })
|
|
417
417
|
}
|
|
418
418
|
)
|
|
419
419
|
] }),
|
|
@@ -445,7 +445,7 @@ function Ie({
|
|
|
445
445
|
"aria-describedby": i,
|
|
446
446
|
"aria-label": "Help information",
|
|
447
447
|
title: a,
|
|
448
|
-
children: /* @__PURE__ */ d(
|
|
448
|
+
children: /* @__PURE__ */ d(M, {})
|
|
449
449
|
}
|
|
450
450
|
),
|
|
451
451
|
a && /* @__PURE__ */ d("div", { id: i, className: "sr-only", children: a }),
|
|
@@ -456,13 +456,14 @@ function z(...n) {
|
|
|
456
456
|
return n.filter((r) => typeof r == "string" && r).join(" ").trim() || void 0;
|
|
457
457
|
}
|
|
458
458
|
function le({ isOpen: n }) {
|
|
459
|
+
console.log("calling useAnimationOpenClose");
|
|
459
460
|
const [r, e] = C(!1), [t, a] = C(!1);
|
|
460
461
|
return E(() => {
|
|
461
462
|
n ? (a(!0), setTimeout(() => e(!0), 10)) : (e(!1), setTimeout(() => a(!1), 150));
|
|
462
463
|
}, [n]), { show: r, shouldRender: t };
|
|
463
464
|
}
|
|
464
465
|
function ue({ isOpen: n, onClose: r }) {
|
|
465
|
-
E(() => {
|
|
466
|
+
console.log("calling useDocumentChanges"), E(() => {
|
|
466
467
|
const e = (t) => {
|
|
467
468
|
t.key === "Escape" && n && r();
|
|
468
469
|
};
|
|
@@ -553,6 +554,7 @@ function De({
|
|
|
553
554
|
!u && /* @__PURE__ */ d(
|
|
554
555
|
"button",
|
|
555
556
|
{
|
|
557
|
+
type: "button",
|
|
556
558
|
onClick: e,
|
|
557
559
|
"data-modal-close-button": "true",
|
|
558
560
|
className: "rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.esm.js","sources":["../src/components/accordion/AccordionItem.tsx","../src/components/accordion/Accordion.tsx","../src/components/button/LoadingDots.tsx","../src/components/button/variants.ts","../src/components/button/Button.tsx","../src/components/checkbox/hooks.ts","../src/components/checkbox/Checkbox.tsx","../src/components/clickable/Clickable.tsx","../src/shared/forms/StatusHelpMessage.tsx","../src/components/input/variants.ts","../src/components/input/Input.tsx","../src/components/label/Label.tsx","utils.esm.js","../src/components/modal/hooks.ts","../src/components/modal/Modal.tsx","../src/components/slot/Slot.tsx","../src/components/radiogroup/RadioInput.tsx","../src/components/radiogroup/RadioGroupItem.tsx","../src/components/radiogroup/hooks.ts","../src/components/radiogroup/RadioGroup.tsx","../src/components/textarea/CharacterCount.tsx","../src/components/textarea/hooks.ts","../src/components/textarea/variants.ts","../src/components/textarea/Textarea.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ChevronDown } from '../../symbols';\nimport { join } from '../../utils';\nimport { AccordionOption } from './Accordion';\n\nexport interface AccordionItemProps extends Omit<AccordionOption, 'defaultOpen'> {\n children?: React.ReactNode;\n className?: string;\n isOpen?: boolean;\n onToggle?: () => void;\n triggerClassName?: string;\n bodyClassName?: string;\n}\n\nexport function AccordionItem({\n id,\n title,\n content,\n children,\n className = '',\n disabled = false,\n isOpen = false,\n onToggle,\n triggerClassName = '',\n bodyClassName = '',\n}: AccordionItemProps) {\n const fallbackId = useId();\n const itemId = id || `accordion-item-${fallbackId}`;\n const headerId = `${itemId}-header`;\n const panelId = `${itemId}-panel`;\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={join('border-b border-gray-200', disabled && 'opacity-60 cursor-not-allowed', className)}>\n <button\n id={headerId}\n type='button'\n className={join(\n 'w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary',\n disabled ? 'cursor-not-allowed' : 'hover:bg-gray-50/10 cursor-pointer',\n triggerClassName\n )}\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n >\n <span>{title}</span>\n <span\n className={join(\n 'transform transition-transform duration-300 ease-linear',\n isOpen ? 'rotate-180' : 'rotate-0'\n )}\n aria-hidden='true'\n >\n <ChevronDown size={18} />\n </span>\n </button>\n\n <div\n id={panelId}\n role='region'\n aria-labelledby={headerId}\n className={join(\n 'transition-all duration-300 ease-linear px-4',\n isOpen ? 'max-h-96 opacity-100 overflow-auto py-3' : 'max-h-0 opacity-0 overflow-hidden',\n bodyClassName\n )}\n >\n {isOpen && (children || content)}\n </div>\n </div>\n );\n}\n","import React, { useId, useState } from 'react';\nimport { join } from '../../utils';\nimport { AccordionItem, AccordionItemProps } from './AccordionItem';\n\nexport interface AccordionOption {\n id?: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n defaultOpen?: boolean;\n}\n\nexport interface AccordionProps {\n name?: string;\n items?: AccordionOption[];\n children?: React.ReactElement<AccordionItemProps>[] | React.ReactElement<AccordionItemProps>;\n className?: string;\n itemClassName?: string;\n allowMultiple?: boolean;\n defaultOpenItems?: string[];\n triggersClassName?: string;\n bodiesClassName?: string;\n}\n\nexport function Accordion({\n name,\n items = [],\n children,\n className = '',\n itemClassName = '',\n allowMultiple = false,\n defaultOpenItems = [],\n triggersClassName = '',\n bodiesClassName = '',\n}: AccordionProps) {\n const groupId = useId();\n const groupName = name || `accordion-group-${groupId}`;\n const [openItems, setOpenItems] = useState<Set<string>>(new Set(defaultOpenItems));\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n }\n\n return newOpenItems;\n });\n };\n\n const getItemId = (index: number) => `${groupId}-item-${index}`;\n const isItemOpen = (itemId: string) => openItems.has(itemId);\n\n return (\n <div id={groupName} className={className}>\n {/* Render from items prop */}\n {items.length > 0 &&\n items.map((item, index) => {\n const itemId = item.id || getItemId(index);\n return (\n <AccordionItem\n key={itemId}\n id={itemId}\n title={item.title}\n content={item.content}\n disabled={item.disabled}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n className={itemClassName}\n triggerClassName={triggersClassName}\n bodyClassName={bodiesClassName}\n />\n );\n })}\n\n {/* Render AccordionItem components */}\n {items.length === 0 &&\n children &&\n React.Children.map(children, (child, index) => {\n if (React.isValidElement<AccordionItemProps>(child) && child.type === AccordionItem) {\n const itemId = child.props.id || getItemId(index);\n return (\n <AccordionItem\n {...child.props}\n key={itemId}\n id={itemId}\n className={join(itemClassName, child.props.className)}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n triggerClassName={join(triggersClassName, child.props.triggerClassName)}\n bodyClassName={join(bodiesClassName, child.props.bodyClassName)}\n />\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\nexport default function LoadingDots() {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setActiveIndex((prevIndex) => (prevIndex + 1) % 3);\n }, 500);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div className='absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle'>\n {[0, 1, 2].map((index) => (\n <div\n key={index}\n className={join(\n 'rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current',\n activeIndex === index && 'transform -translate-y-1'\n )}\n />\n ))}\n </div>\n );\n}\n","export const buttonVariants = {\n base: '',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80',\n tertiary: 'text-primary hover:text-primary-foreground disabled:text-muted',\n outline: 'border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted',\n link: 'underline-offset-4 hover:underline disabled:underline disabled:text-muted',\n danger: 'bg-danger text-danger-foreground hover:bg-danger/85 disabled:bg-muted disabled:text-muted-foreground',\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariants;\n\nexport const sizeVariants = {\n stripped: '',\n fitted: 'size-fit',\n sm: 'px-2 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n icon: 'p-1 w-fit aspect-square',\n full: 'p-2 w-full',\n} as const;\nexport type ButtonSize = keyof typeof sizeVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n} as const;\nexport type ButtonRounded = keyof typeof roundedVariants;\n\nexport interface ButtonVariants {\n variant: ButtonVariant;\n size: ButtonSize;\n rounded: ButtonRounded;\n}\n\nexport const buttonDefaults: ButtonVariants = {\n variant: 'primary',\n size: 'md',\n rounded: 'md',\n} as const;\n","// Button.tsx\nimport { ButtonHTMLAttributes, Ref } from 'react';\nimport { join } from '../../utils';\nimport LoadingDots from './LoadingDots';\nimport { ButtonSize, ButtonVariants, buttonDefaults, buttonVariants, roundedVariants, sizeVariants } from './variants';\n\nexport interface ButtonProps extends Partial<ButtonVariants>, ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n loading?: boolean;\n linkTo?: string;\n linkProps?: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n}\n\nexport default function Button({\n variant = buttonDefaults.variant,\n size,\n rounded = buttonDefaults.rounded,\n loading,\n linkTo,\n linkProps,\n type = 'button',\n className,\n ...rest\n}: ButtonProps) {\n let adjustedSize: ButtonSize;\n if (variant === 'link' && !size) {\n // default links to fitted size\n adjustedSize = 'fitted';\n } else {\n adjustedSize = size || buttonDefaults.size;\n }\n\n const baseClasses =\n 'appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all';\n\n const buttonClasses = join(\n baseClasses,\n buttonVariants[variant],\n sizeVariants[adjustedSize],\n roundedVariants[rounded],\n loading && 'relative pointer-events-none',\n linkTo && 'relative',\n className\n );\n\n return (\n <button\n {...rest}\n role={linkTo ? 'link' : rest.role}\n aria-label={rest['aria-label'] || linkProps?.['aria-label']}\n aria-description={rest['aria-description'] || linkProps?.['aria-description']}\n aria-disabled={rest.disabled || loading}\n aria-busy={loading}\n type={type}\n className={buttonClasses}\n >\n {loading && <LoadingDots />}\n <span className={join(loading && 'invisible')}>{rest.children}</span>\n\n {linkTo && !rest.disabled && (\n <a\n {...linkProps}\n aria-hidden={true} // Hide from screen readers since the button is already accessible\n href={linkTo}\n target={linkProps?.target || '_blank'}\n rel={linkProps?.rel || 'noreferrer'}\n className='absolute inset-0'\n />\n )}\n </button>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useFilledBackgroundColor(id: string) {\n const [filledBackgroundColor, setFilledBackgroundColor] = useState<string>('');\n\n const getFirstNonTransparentBackgroundColor = useCallback((element: Element | null): string => {\n let currentElement = element;\n let color = '';\n while (currentElement && !color) {\n const backgroundColor = window.getComputedStyle(currentElement).backgroundColor;\n if (backgroundColor && backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)') {\n color = backgroundColor;\n }\n currentElement = currentElement.parentElement;\n }\n return color || 'transparent';\n }, []);\n\n useEffect(() => {\n const checkbox = document.getElementById(id);\n if (checkbox) {\n const backgroundColor = getFirstNonTransparentBackgroundColor(checkbox.parentElement);\n setFilledBackgroundColor(backgroundColor);\n }\n }, [id, getFirstNonTransparentBackgroundColor]);\n\n return filledBackgroundColor;\n}\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport Check from '../../symbols/Check';\nimport { join } from '../../utils';\nimport { useFilledBackgroundColor } from './hooks';\n\nexport interface CheckboxProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n size?: number;\n color?: string; // can be adjusted with tailwindcss by using `text-<color>`\n filled?: boolean;\n rounded?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport default function Checkbox({\n ref,\n id,\n size = 20,\n color,\n filled = false,\n rounded = true,\n checked = false,\n onCheckedChange,\n disabled,\n className = '',\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const checkboxId = useMemo(() => id || `checkbox-${generatedId}`, [id, generatedId]);\n const parentBackgroundColor = useFilledBackgroundColor(checkboxId);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleChange = () => {\n if (!disabled) {\n setIsChecked(!isChecked);\n onCheckedChange?.(!isChecked);\n }\n };\n\n const handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n handleChange();\n }\n };\n\n const checkboxClasses = join(\n 'flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2',\n rounded && 'rounded',\n disabled && 'opacity-40 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n return (\n <button\n id={checkboxId}\n type='button'\n ref={ref}\n tabIndex={0}\n role='checkbox'\n onClick={handleChange}\n aria-checked={isChecked}\n aria-disabled={disabled}\n onKeyDownCapture={handleOnKeyDown}\n style={{\n width: size,\n height: size,\n color: color,\n backgroundColor: isChecked && filled ? 'currentcolor' : 'transparent',\n }}\n className={checkboxClasses}\n {...props}\n >\n {isChecked && <Check size={size} color={filled ? parentBackgroundColor : undefined} />}\n </button>\n );\n}\n","import { join } from '../../utils';\n\ninterface ClickableProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {\n children: React.ReactNode;\n linkTo?: React.HTMLProps<HTMLAnchorElement>['href'];\n linkProps?: Omit<React.HTMLProps<HTMLAnchorElement>, 'href'>;\n onButtonClick?: React.HTMLProps<HTMLButtonElement>['onClick'];\n buttonProps?: Omit<React.HTMLProps<HTMLButtonElement>, 'onClick'>;\n}\n\nexport default function Clickable({\n children,\n className,\n linkTo,\n linkProps,\n onButtonClick,\n buttonProps,\n ...props\n}: ClickableProps) {\n if (linkTo && onButtonClick) {\n console.warn('Clickable: Both \"linkTo\" and \"onButtonClick\" props are provided. Only \"linkTo\" will be used.');\n }\n\n return (\n <div className={join('relative w-fit', className)} {...props}>\n {children}\n\n {/* Link */}\n {linkTo && (\n <a\n {...linkProps}\n href={linkTo}\n className={join('absolute inset-0', linkProps?.className)}\n />\n )}\n\n {/* Button */}\n {!linkTo && onButtonClick && (\n <button\n {...buttonProps}\n type='button'\n onClick={onButtonClick}\n className={join('absolute inset-0 cursor-pointer', buttonProps?.className)}\n />\n )}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { CheckCircled, ExclamationTriangle } from '../../symbols';\nimport { join } from '../../utils';\n\ninterface StatusHelpMessageProps {\n elementId: string;\n type: 'error' | 'success';\n message?: string;\n}\n\nexport default function StatusHelpMessage({ elementId, type, message }: StatusHelpMessageProps) {\n useEffect(() => {\n const element = document.getElementById(elementId) as HTMLElement;\n if (!element) {\n return;\n }\n if (!message && type === 'error') {\n element.removeAttribute('data-error');\n return;\n }\n if (!message && type === 'success') {\n element.removeAttribute('data-success');\n return;\n }\n\n element.setAttribute('aria-describedby', `${elementId}-${type}-message`);\n element.setAttribute('aria-invalid', type === 'error' ? 'true' : 'false');\n\n if (type === 'error') {\n element.setAttribute('data-error', 'true');\n }\n if (type === 'success') {\n element.setAttribute('data-success', 'true');\n }\n\n return () => {\n element.removeAttribute('aria-describedby');\n element.removeAttribute('aria-invalid');\n element.removeAttribute('data-error');\n element.removeAttribute('data-success');\n };\n }, [elementId, type, message]);\n\n if (!message) {\n return null;\n }\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start',\n type === 'error' && 'text-danger',\n type === 'success' && 'text-success'\n )}\n role='status'\n >\n {type === 'error' ? <ExclamationTriangle /> : <CheckCircled />}\n <span id={`${elementId}-${type}-message`}>{message}</span>\n </small>\n );\n}\n","export const inputVariants = {\n base: '',\n default:\n 'ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-danger not-disabled:data-success:ring-success',\n underline:\n 'border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type InputVariant = keyof typeof inputVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type InputRounded = keyof typeof roundedVariants;\n\nexport interface InputVariants {\n variant: InputVariant;\n rounded: InputRounded;\n}\n\nexport const inputDefaults: InputVariants = {\n variant: 'default',\n rounded: 'none',\n} as const;\n","import { Ref, useId, useState } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { EyeClosed, EyeOpened } from '../../symbols';\nimport { join } from '../../utils';\nimport './styles.css';\nimport { inputDefaults, inputVariants, InputVariants, roundedVariants } from './variants';\n\ninterface InputProps extends Partial<InputVariants>, React.InputHTMLAttributes<HTMLInputElement> {\n ref?: Ref<HTMLInputElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\nexport default function Input({\n variant = inputDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n type = 'text',\n className,\n ...rest\n}: InputProps) {\n const id = useId();\n const [showPassword, setShowPassword] = useState(false);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || inputDefaults.rounded;\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n const fileClasses =\n 'file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors';\n\n const inputClasses = join(\n baseClasses,\n fileClasses,\n !displayOnlyMode && inputVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n type === 'password' && 'pr-10',\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n className\n );\n\n return (\n <div className={join(displayOnlyMode && 'cursor-text')} style={{ height: rest.height, width: rest.width }}>\n <div className={join(type === 'password' && 'relative')}>\n <input\n {...rest}\n id={id}\n type={type === 'password' && showPassword ? 'text' : type}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n data-error={errorMessage ? true : undefined}\n data-success={successMessage ? true : undefined}\n className={inputClasses}\n />\n {type === 'password' && (\n <button\n onClick={() => setShowPassword(!showPassword)}\n className='absolute inset-y-0 right-0 px-2 hover:cursor-pointer'\n aria-label='Toggle password visibility'\n data-state={showPassword ? 'visible' : 'hidden'}\n >\n {showPassword ? <EyeOpened size={20} /> : <EyeClosed size={20} />}\n </button>\n )}\n </div>\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport { QuestionMarkCircled } from '../../symbols';\nimport { join } from '../../utils';\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n display?: 'block' | 'inline';\n width?: React.CSSProperties['width'];\n required?: boolean;\n helpMessage?: string;\n suffix?: React.ReactNode;\n}\n\nexport function Label({\n display = 'inline',\n width = 'fit-content',\n className = '',\n required,\n helpMessage,\n suffix,\n htmlFor,\n children,\n ...props\n}: LabelProps) {\n const id = useId();\n const labelClasses = join('font-medium', display, className);\n const helpId = helpMessage ? `${htmlFor ?? id}-help` : undefined;\n\n return (\n <div style={{ display: display === 'inline' ? 'inline-flex' : 'flex', width }} className='relative'>\n <label className={labelClasses} htmlFor={htmlFor} {...props}>\n {children}\n {required && (\n <span className='text-red-500 font-medium ml-1' aria-label='required'>\n *\n </span>\n )}\n </label>\n {helpMessage && (\n <span\n className='text-gray-500 ml-1 size-fit -translate-y-1/3'\n aria-describedby={helpId}\n aria-label='Help information'\n title={helpMessage}\n >\n <QuestionMarkCircled />\n </span>\n )}\n {helpMessage && (\n <div id={helpId} className='sr-only'>\n {helpMessage}\n </div>\n )}\n {suffix && <span className='ml-1'>{suffix}</span>}\n </div>\n );\n}\n","function n(...t) {\n return t.filter((s) => typeof s == \"string\" && s).join(\" \").trim() || void 0;\n}\nexport {\n n as join\n};\n//# sourceMappingURL=utils.esm.js.map\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { ModalProps } from './Modal';\n\nexport function useAnimationOpenClose({ isOpen }: Pick<ModalProps, 'isOpen'>) {\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 150);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\nexport function useDocumentChanges({ isOpen, onClose }: Pick<ModalProps, 'isOpen' | 'onClose'>) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n // Prevent background scrolling when modal is open\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'auto';\n };\n }, [isOpen, onClose]);\n}\n\nexport function useHandleFocus({ modalId, isOpen }: { modalId: string; isOpen: boolean }) {\n const previousActiveElement = useRef<Element | null>(null);\n\n const focusAppropriateElement = useCallback(() => {\n const modalElement = document.getElementById(modalId);\n if (!modalElement) return;\n\n // 1. First, try to focus on the first action button, if available\n const modalActions = modalElement.querySelectorAll('[data-modal-action=\"true\"]');\n if (modalActions.length > 0) {\n (modalActions[0] as HTMLElement).focus();\n return;\n }\n\n // 2. Then try first focusable element in content (giving preference to non-close button)\n const focusableElements = modalElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length > 0) {\n const allBesidesCloseButton = Array.from(focusableElements).filter((el) => {\n return !(el instanceof HTMLButtonElement && el.getAttribute('data-modal-close-button') === 'true');\n });\n\n if (allBesidesCloseButton.length > 0) {\n (allBesidesCloseButton[0] as HTMLElement).focus();\n return;\n }\n\n (focusableElements[0] as HTMLElement).focus();\n return;\n }\n\n // 3. Fallback to modal container\n modalElement.focus();\n }, [modalId]);\n\n useEffect(() => {\n if (isOpen) {\n // Store the currently focused element to restore focus later\n previousActiveElement.current = document.activeElement;\n\n focusAppropriateElement();\n }\n\n return () => {\n document.body.style.overflow = 'auto';\n\n // Restore focus to the previously focused element when modal closes\n if (previousActiveElement.current instanceof HTMLElement) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen, focusAppropriateElement]);\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from '../../symbols';\nimport { Button, ButtonProps } from '../button';\nimport { useAnimationOpenClose, useDocumentChanges, useHandleFocus } from './hooks';\n\ninterface ModalAction extends Omit<ButtonProps, 'children'> {\n label: string;\n}\n\nexport interface ModalProps {\n id?: string;\n isOpen: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children: React.ReactNode;\n contentOnly?: boolean;\n className?: string;\n overlayClassName?: string;\n hideCloseButton?: boolean;\n actions?: ModalAction[];\n disableCloseOnOverlayClick?: boolean;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n}\n\nexport function Modal({\n id,\n isOpen,\n onClose,\n title,\n children,\n contentOnly = false,\n className,\n overlayClassName,\n hideCloseButton = false,\n actions = [],\n disableCloseOnOverlayClick = false,\n ariaLabelledBy,\n ariaDescribedBy,\n}: ModalProps) {\n const generatedId = useId();\n const modalId = id || `modal-${generatedId}`;\n const titleId = id ? `${id}-title` : `modal-title-${generatedId}`;\n\n const { show, shouldRender } = useAnimationOpenClose({ isOpen });\n useHandleFocus({ modalId, isOpen: shouldRender });\n useDocumentChanges({ isOpen: shouldRender, onClose });\n\n if (!shouldRender) return null;\n\n const renderTitle = () => {\n if (!title) return null;\n\n if (React.isValidElement(title)) {\n return <div className='mb-4'>{title}</div>;\n }\n\n return (\n <h2 className='mb-4 text-xl font-semibold' id={titleId}>\n {title}\n </h2>\n );\n };\n\n const renderActions = () => {\n if (actions.length === 0) return null;\n\n return (\n <div className='mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3'>\n {actions.map((action, index) => {\n const { label, className, ...buttonProps } = action;\n return (\n <Button key={index} className={className} type='button' {...buttonProps} data-modal-action='true'>\n {label}\n </Button>\n );\n })}\n </div>\n );\n };\n\n return (\n <>\n {createPortal(\n <div\n aria-labelledby={ariaLabelledBy ?? title ? titleId : undefined}\n aria-describedby={ariaDescribedBy}\n role='dialog'\n aria-modal='true'\n className='fixed inset-0 z-[100] overflow-y-auto'\n >\n <div className='flex min-h-screen items-center justify-center p-4'>\n <div\n className={join('fixed inset-0 bg-black/20 transition-all', overlayClassName)}\n onClick={() => {\n if (!disableCloseOnOverlayClick) {\n onClose();\n }\n }}\n />\n\n {contentOnly && <div className={join('relative w-fit', className)}>{children}</div>}\n\n {!contentOnly && (\n <div\n id={modalId}\n tabIndex={-1}\n className={join(\n 'relative w-full max-w-xl transform rounded-lg shadow-xl transition-all p-6 bg-inherit focus:border ease-in duration-75',\n show ? 'opacity-100 scale-100' : 'opacity-0 scale-90',\n className\n )}\n >\n {!hideCloseButton && (\n <button\n onClick={onClose}\n data-modal-close-button='true'\n className='rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0'\n >\n <X size={18} />\n </button>\n )}\n\n {renderTitle()}\n\n {children}\n\n {renderActions()}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","import React, {\n cloneElement,\n createElement,\n HTMLAttributes,\n isValidElement,\n ReactElement,\n ReactNode,\n Ref,\n} from 'react';\n\ninterface SlotProps<T> extends HTMLAttributes<T> {\n children?: ReactNode;\n ref?: Ref<T>;\n}\n\nexport function Slot<T = HTMLElement>({ children, ref, ...props }: SlotProps<T>) {\n\n if (isValidElement(children)) {\n let allProps = { ...props };\n if (children.props) {\n allProps = { ...allProps, ...children.props };\n }\n return cloneElement(children, {\n ...allProps,\n ref: (node: T) => {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.RefObject<T>).current = node;\n }\n },\n } as unknown as ReactElement);\n }\n\n // If not asChild or no valid child, render as div\n return createElement('div', { ...props, ref }, children);\n}\n","import { join } from '../../utils';\n\nexport type RadioInputProps = {\n itemId: string;\n checked: boolean;\n onChange: () => void;\n name: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Custom RadioInput Component\nexport function RadioInput({ itemId, checked, onChange, name, disabled = false, className = '' }: RadioInputProps) {\n const baseClasses = 'relative inline-flex items-center justify-center rounded-full';\n\n const handleClick = () => {\n if (disabled) return;\n onChange();\n };\n\n const radioClasses = join(\n baseClasses,\n !checked && 'hover:border-current/60',\n !disabled && 'border-current cursor-pointer',\n disabled && 'border-muted/60 cursor-not-allowed',\n className\n );\n return (\n <div\n id={itemId}\n role='radio'\n tabIndex={-1} // necessary so that the radio button can be focused as div is not a focusable element\n aria-checked={checked}\n aria-disabled={disabled}\n aria-description={`Radio button for ${name}`}\n aria-labelledby={`${itemId}-label`}\n onClick={handleClick}\n className={radioClasses}\n style={{\n width: '1em',\n height: '1em',\n padding: '0.1em',\n borderWidth: '0.06em',\n }}\n >\n {checked && (\n <div\n className={join(`size-full aspect-square rounded-full`, disabled && 'bg-muted/60', !disabled && 'bg-current')}\n />\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { join } from '../../utils';\nimport { RadioInput } from './RadioInput';\n\nexport interface RadioGroupItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n isSelected?: boolean;\n onChange?: (value: string) => void;\n disabled?: boolean;\n name?: string;\n hideInput?: boolean;\n description?: string;\n}\n\nexport function RadioGroupItem({\n value,\n children,\n className = '',\n isSelected = false,\n onChange,\n disabled = false,\n hideInput = false,\n description,\n name,\n}: RadioGroupItemProps) {\n const id = useId();\n const itemId = `radio-${id}-${value}`;\n\n const handleChange = () => {\n if (!disabled) {\n onChange?.(value);\n }\n };\n\n return (\n <div\n title={description}\n className={join(\n 'relative flex items-center',\n className,\n // Uses text color for borders\n hideInput &&\n `p-2 border-2 focus-within:border-dashed focus-within:${\n disabled ? 'border-current/50' : 'border-current/80'\n }`,\n hideInput && !isSelected && `border-transparent ${disabled ? '' : 'not-focus-within:hover:border-border/60'}`,\n hideInput && isSelected && 'border-border',\n disabled && 'opacity-60 cursor-not-allowed'\n )}\n style={{\n gap: '0.5em',\n }}\n >\n {!hideInput && (\n <RadioInput\n itemId={itemId}\n name={name || ''}\n checked={isSelected}\n onChange={handleChange}\n disabled={disabled}\n className={join(hideInput && '')}\n />\n )}\n <div\n id={hideInput ? itemId : undefined}\n tabIndex={hideInput ? -1 : undefined}\n role={hideInput ? 'radio' : undefined}\n onClick={hideInput ? handleChange : undefined}\n aria-checked={!hideInput ? undefined : isSelected ? 'true' : 'false'}\n aria-disabled={hideInput ? disabled : undefined}\n aria-description={!hideInput ? undefined : description || `Radio button for ${name}`}\n aria-labelledby={hideInput ? `${itemId}-label` : undefined}\n className={join(hideInput && 'size-full', typeof children === 'object' && 'grow focus:outline-none')}\n >\n <label\n id={`${itemId}-label`}\n onClick={hideInput ? undefined : handleChange}\n className={join(disabled && 'cursor-not-allowed', !disabled && 'cursor-pointer')}\n >\n {children}\n </label>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useRadioFocus(id: string, selectedOptionIndex: number) {\n // Manage state locally to avoid race conditions, which can result in\n // the an option failing to be selected or incorrectly selected\n const [focusedIndex, setFocusedIndex] = useState<number>(selectedOptionIndex);\n const [clickedIndex, setClickedIndex] = useState<number>(-1);\n // Prevent onClicks from triggering focus events and automatically selecting the first option\n const [isMouseDown, setIsMouseDown] = useState<boolean>(false);\n\n const handleClicked = useCallback((options: HTMLElement[], index: number) => {\n const target = options[index] as HTMLElement;\n\n // Check if the target element is disabled\n const isDisabled = target.hasAttribute('disabled') || target.getAttribute('aria-disabled') === 'true';\n if (isDisabled) return;\n\n // Update the selected index\n options[index]?.click();\n setClickedIndex(index);\n }, []);\n\n const setInitialFocus = useCallback(\n (e: Event, options: HTMLElement[]) => {\n e.preventDefault();\n if (isMouseDown) return;\n if (!options.length) return;\n\n const indexToFocus = selectedOptionIndex !== -1 ? selectedOptionIndex : 0;\n options[indexToFocus]?.focus();\n setFocusedIndex(indexToFocus);\n\n // Only update the selected index if one is already set\n if (selectedOptionIndex !== -1) {\n handleClicked(options, indexToFocus);\n }\n },\n [selectedOptionIndex, isMouseDown, handleClicked]\n );\n\n /* Focus preceding element when Shift + Tab is pressed */\n const handleFocusPreceding = useCallback(\n (e: KeyboardEvent) => {\n // If the Shift key is not pressed while tab is entered, do nothing\n if (!e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n const focusableElements = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter((el) => !el.hasAttribute('disabled') && el.tabIndex >= 0);\n const currentIndex = focusableElements.findIndex((el) => el.id === id);\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[previousIndex]?.focus();\n },\n [id]\n );\n\n const handleKeyboardNavigation = useCallback(\n (e: KeyboardEvent, options: HTMLElement[]) => {\n if (!options.length) return;\n\n // Ensure we only toggle options part of radio group\n const target = e.target as HTMLElement;\n const isGroupOption = options.some((option) => option.id === target.id);\n if (!isGroupOption) return;\n\n const currentIndex = focusedIndex !== -1 ? focusedIndex : 0;\n let newIndex = currentIndex;\n\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n newIndex = (currentIndex + 1) % options.length;\n break;\n\n // Select the option when the space key is pressed\n case ' ':\n e.preventDefault();\n handleClicked(options, currentIndex);\n return;\n\n case 'Tab':\n handleFocusPreceding(e);\n return;\n\n default:\n return;\n }\n\n options[newIndex]?.focus();\n setFocusedIndex(newIndex);\n // Only update the selected index if one is already set\n if (clickedIndex !== -1) {\n handleClicked(options, newIndex);\n }\n },\n [focusedIndex, clickedIndex, handleFocusPreceding, handleClicked]\n );\n\n const getRadioOptions = useCallback((): HTMLElement[] => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return [];\n\n return Array.from(radioGroup.querySelectorAll('[role=\"radio\"]'));\n }, [id]);\n\n useEffect(() => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return;\n\n const options = getRadioOptions();\n const handleFocus = (e: Event) => setInitialFocus(e, options);\n const handleKeyDown = (e: KeyboardEvent) => handleKeyboardNavigation(e, options);\n const handleMouseDown = () => setIsMouseDown(true);\n const handleMouseUp = () => setIsMouseDown(false);\n\n document.addEventListener('keydown', handleKeyDown);\n radioGroup.addEventListener('focus', handleFocus);\n radioGroup.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp); // place on document since mouseup event can occur outside of radio group\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n radioGroup.removeEventListener('focus', handleFocus);\n radioGroup.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [id, getRadioOptions, setInitialFocus, handleKeyboardNavigation]);\n}\n","import React, { useId, useMemo } from 'react';\nimport { join } from '../../utils';\nimport { RadioGroupItem, RadioGroupItemProps } from './RadioGroupItem';\nimport { useRadioFocus } from './hooks';\n\nexport type RadioOption = { label: string; value: string; disabled?: boolean; description?: string };\n\nexport type RadioGroupProps = {\n options?: (string | RadioOption)[];\n value: string | undefined;\n onChange: (value: string) => void;\n name?: string;\n children?: React.ReactElement<RadioGroupItemProps>[] | React.ReactElement<RadioGroupItemProps>;\n className?: string;\n childrenClassName?: string;\n hideInputs?: boolean;\n};\n\nexport function RadioGroup({\n options = [],\n value,\n onChange,\n name,\n children,\n className = '',\n childrenClassName = '',\n hideInputs = false,\n}: RadioGroupProps) {\n const groupId = useId();\n const groupName = name || `radio-group-${groupId}`;\n useRadioFocus(\n groupName,\n options.findIndex((option) => option === value)\n );\n\n // Check for duplicates if string options are provided\n const processedOptions = useMemo(() => {\n return options.reduce<RadioOption[]>((acc, option) => {\n if (typeof option === 'string') {\n // Check if we already have this string option\n if (!acc.some((item) => item.value === option)) {\n acc.push({ label: option, value: option });\n }\n } else {\n acc.push(option);\n }\n return acc;\n }, []);\n }, [options]);\n\n return (\n <div id={groupName} role='radiogroup' tabIndex={0} className={join(className, 'focus:outline-none')}>\n {/* Render from options prop */}\n {processedOptions.length > 0 &&\n processedOptions.map((option, index) => (\n <RadioGroupItem\n key={`${option.value}-${index}`}\n value={option.value}\n isSelected={value === option.value}\n onChange={onChange}\n name={groupName}\n disabled={option.disabled}\n description={option.description}\n hideInput={hideInputs}\n className={childrenClassName}\n >\n {option.label}\n </RadioGroupItem>\n ))}\n\n {/* Render RadioGroupItem components */}\n {processedOptions.length === 0 &&\n children &&\n React.Children.map(children, (child) => {\n // TypeScript enforces that child is a RadioGroupItem\n if (React.isValidElement(child) && child.type === RadioGroupItem) {\n return (\n <RadioGroupItem\n {...child.props}\n className={join(childrenClassName, child.props.className)}\n hideInput={child.props.hideInput || hideInputs}\n isSelected={value === child.props.value}\n onChange={onChange}\n name={groupName}\n >\n {child.props.children}\n </RadioGroupItem>\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\ninterface CharacterCountProps {\n elementId: string;\n maxLength: number;\n}\n\nexport default function CharacterCount({ elementId, maxLength }: CharacterCountProps) {\n const [characterCount, setCharacterCount] = useState(0);\n\n useEffect(() => {\n const textarea = document.getElementById(elementId) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n const updateCharacterCount = () => {\n const updatedCharacterCount = textarea.value.length;\n setCharacterCount(updatedCharacterCount);\n const isError = updatedCharacterCount >= maxLength;\n textarea.setAttribute('aria-describedby', `${elementId}-character-count`);\n textarea.setAttribute('aria-invalid', isError ? 'true' : 'false');\n\n if (isError) {\n textarea.setAttribute('data-error', 'true');\n } else {\n textarea.removeAttribute('data-error');\n }\n };\n\n updateCharacterCount();\n textarea.addEventListener('input', updateCharacterCount);\n textarea.setAttribute('maxlength', String(maxLength));\n\n return () => {\n textarea.removeEventListener('input', updateCharacterCount);\n textarea.removeAttribute('maxlength');\n textarea.removeAttribute('aria-describedby');\n textarea.removeAttribute('aria-invalid');\n textarea.removeAttribute('data-error');\n };\n }, [elementId, maxLength]);\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end',\n characterCount >= maxLength && 'text-danger',\n characterCount < maxLength && 'text-current'\n )}\n role='status'\n >\n <span id={`${elementId}-character-count`}>\n {characterCount} / {maxLength} characters\n </span>\n </small>\n );\n}\n","import { useEffect } from 'react';\n\nexport function useAutoExpand(id: string, autoExpand: boolean) {\n useEffect(() => {\n const textarea = document.getElementById(id) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n if (!autoExpand) {\n textarea.style.height = 'auto';\n return;\n }\n\n const adjustHeight = () => {\n // necessary to reset the height to `auto` before calculating the new height\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n };\n\n adjustHeight();\n textarea.addEventListener('input', adjustHeight);\n textarea.addEventListener('resize', adjustHeight);\n window.addEventListener('resize', adjustHeight);\n\n return () => {\n textarea.removeEventListener('input', adjustHeight);\n textarea.removeEventListener('resize', adjustHeight);\n window.removeEventListener('resize', adjustHeight);\n };\n }, [id, autoExpand]);\n}\n","export const textareaVariants = {\n base: '',\n 'left-line':\n 'border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type TextareaVariant = keyof typeof textareaVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type TextareaRounded = keyof typeof roundedVariants;\n\nexport interface TextareaVariants {\n variant: TextareaVariant;\n rounded: TextareaRounded;\n}\n\nexport const textareaDefaults: TextareaVariants = {\n variant: 'outline',\n rounded: 'none',\n} as const;\n","import { Ref, useId } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { join } from '../../utils';\nimport CharacterCount from './CharacterCount';\nimport { useAutoExpand } from './hooks';\nimport './styles.css';\nimport { roundedVariants, textareaDefaults, textareaVariants, TextareaVariants } from './variants';\n\ninterface TextareaProps extends Partial<TextareaVariants>, React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n ref?: Ref<HTMLTextAreaElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n hideResizeHandle?: boolean; // only works for Webkit browsers\n autoExpand?: boolean;\n characterLimit?: number;\n}\n\nexport default function Textarea({\n variant = textareaDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n hideResizeHandle = false,\n autoExpand = false,\n characterLimit = 0,\n className,\n ...rest\n}: TextareaProps) {\n const id = useId();\n useAutoExpand(id, autoExpand || displayOnlyMode);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || textareaDefaults.rounded;\n\n let adjustedHideResizeHandle = hideResizeHandle;\n if (displayOnlyMode || (variant === 'left-line' && !hideResizeHandle)) {\n adjustedHideResizeHandle = true;\n }\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n\n const inputClasses = join(\n baseClasses,\n !displayOnlyMode && textareaVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n adjustedHideResizeHandle && 'no-resize-handle',\n\n className\n );\n\n return (\n <div className={join('-space-y-1.5', displayOnlyMode && 'cursor-text')}>\n <textarea\n {...rest}\n id={id}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n style={{\n resize: autoExpand ? 'none' : undefined,\n }}\n className={inputClasses}\n />\n {characterLimit > 0 && <CharacterCount elementId={id} maxLength={characterLimit} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n"],"names":["AccordionItem","id","title","content","children","className","disabled","isOpen","onToggle","triggerClassName","bodyClassName","fallbackId","useId","itemId","headerId","panelId","handleToggle","handleKeyDown","e","jsxs","join","jsx","ChevronDown","Accordion","name","items","itemClassName","allowMultiple","defaultOpenItems","triggersClassName","bodiesClassName","groupId","groupName","openItems","setOpenItems","useState","toggleItem","prev","newOpenItems","getItemId","index","isItemOpen","item","React","child","createElement","LoadingDots","activeIndex","setActiveIndex","useEffect","interval","prevIndex","buttonVariants","sizeVariants","roundedVariants","buttonDefaults","Button","variant","size","rounded","loading","linkTo","linkProps","type","rest","adjustedSize","buttonClasses","useFilledBackgroundColor","filledBackgroundColor","setFilledBackgroundColor","getFirstNonTransparentBackgroundColor","useCallback","element","currentElement","color","backgroundColor","checkbox","Checkbox","ref","filled","checked","onCheckedChange","props","generatedId","checkboxId","useMemo","parentBackgroundColor","isChecked","setIsChecked","handleChange","handleOnKeyDown","checkboxClasses","Check","Clickable","onButtonClick","buttonProps","StatusHelpMessage","elementId","message","ExclamationTriangle","CheckCircled","inputVariants","inputDefaults","Input","displayOnlyMode","errorMessage","successMessage","showPassword","setShowPassword","adjustedRound","inputClasses","EyeOpened","EyeClosed","Label","display","width","required","helpMessage","suffix","htmlFor","labelClasses","helpId","QuestionMarkCircled","n","t","s","useAnimationOpenClose","show","setShow","shouldRender","setShouldRender","useDocumentChanges","onClose","handleEscape","useHandleFocus","modalId","previousActiveElement","useRef","focusAppropriateElement","modalElement","modalActions","focusableElements","allBesidesCloseButton","el","Modal","contentOnly","overlayClassName","hideCloseButton","actions","disableCloseOnOverlayClick","ariaLabelledBy","ariaDescribedBy","titleId","renderTitle","renderActions","action","label","Fragment","createPortal","X","Slot","isValidElement","allProps","cloneElement","node","RadioInput","onChange","baseClasses","handleClick","radioClasses","RadioGroupItem","value","isSelected","hideInput","description","useRadioFocus","selectedOptionIndex","focusedIndex","setFocusedIndex","clickedIndex","setClickedIndex","isMouseDown","setIsMouseDown","handleClicked","options","target","_a","setInitialFocus","indexToFocus","handleFocusPreceding","currentIndex","previousIndex","handleKeyboardNavigation","option","newIndex","getRadioOptions","radioGroup","handleFocus","handleMouseDown","handleMouseUp","RadioGroup","childrenClassName","hideInputs","processedOptions","acc","CharacterCount","maxLength","characterCount","setCharacterCount","textarea","updateCharacterCount","updatedCharacterCount","isError","useAutoExpand","autoExpand","adjustHeight","textareaVariants","textareaDefaults","Textarea","hideResizeHandle","characterLimit","adjustedHideResizeHandle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.esm.js","sources":["../src/components/accordion/AccordionItem.tsx","../src/components/accordion/Accordion.tsx","../src/components/button/LoadingDots.tsx","../src/components/button/variants.ts","../src/components/button/Button.tsx","../src/components/checkbox/hooks.ts","../src/components/checkbox/Checkbox.tsx","../src/components/clickable/Clickable.tsx","../src/shared/forms/StatusHelpMessage.tsx","../src/components/input/variants.ts","../src/components/input/Input.tsx","../src/components/label/Label.tsx","utils.esm.js","../src/components/modal/hooks.ts","../src/components/modal/Modal.tsx","../src/components/slot/Slot.tsx","../src/components/radiogroup/RadioInput.tsx","../src/components/radiogroup/RadioGroupItem.tsx","../src/components/radiogroup/hooks.ts","../src/components/radiogroup/RadioGroup.tsx","../src/components/textarea/CharacterCount.tsx","../src/components/textarea/hooks.ts","../src/components/textarea/variants.ts","../src/components/textarea/Textarea.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ChevronDown } from '../../symbols';\nimport { join } from '../../utils';\nimport { AccordionOption } from './Accordion';\n\nexport interface AccordionItemProps extends Omit<AccordionOption, 'defaultOpen'> {\n children?: React.ReactNode;\n className?: string;\n isOpen?: boolean;\n onToggle?: () => void;\n triggerClassName?: string;\n bodyClassName?: string;\n}\n\nexport function AccordionItem({\n id,\n title,\n content,\n children,\n className = '',\n disabled = false,\n isOpen = false,\n onToggle,\n triggerClassName = '',\n bodyClassName = '',\n}: AccordionItemProps) {\n const fallbackId = useId();\n const itemId = id || `accordion-item-${fallbackId}`;\n const headerId = `${itemId}-header`;\n const panelId = `${itemId}-panel`;\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <div className={join('border-b border-gray-200', disabled && 'opacity-60 cursor-not-allowed', className)}>\n <button\n id={headerId}\n type='button'\n className={join(\n 'w-full text-left py-3 px-4 flex justify-between items-center focus:outline focus:outline-secondary',\n disabled ? 'cursor-not-allowed' : 'hover:bg-gray-50/10 cursor-pointer',\n triggerClassName\n )}\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n >\n <span>{title}</span>\n <span\n className={join(\n 'transform transition-transform duration-300 ease-linear',\n isOpen ? 'rotate-180' : 'rotate-0'\n )}\n aria-hidden='true'\n >\n <ChevronDown size={18} />\n </span>\n </button>\n\n <div\n id={panelId}\n role='region'\n aria-labelledby={headerId}\n className={join(\n 'transition-all duration-300 ease-linear px-4',\n isOpen ? 'max-h-96 opacity-100 overflow-auto py-3' : 'max-h-0 opacity-0 overflow-hidden',\n bodyClassName\n )}\n >\n {isOpen && (children || content)}\n </div>\n </div>\n );\n}\n","import React, { useId, useState } from 'react';\nimport { join } from '../../utils';\nimport { AccordionItem, AccordionItemProps } from './AccordionItem';\n\nexport interface AccordionOption {\n id?: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n defaultOpen?: boolean;\n}\n\nexport interface AccordionProps {\n name?: string;\n items?: AccordionOption[];\n children?: React.ReactElement<AccordionItemProps>[] | React.ReactElement<AccordionItemProps>;\n className?: string;\n itemClassName?: string;\n allowMultiple?: boolean;\n defaultOpenItems?: string[];\n triggersClassName?: string;\n bodiesClassName?: string;\n}\n\nexport function Accordion({\n name,\n items = [],\n children,\n className = '',\n itemClassName = '',\n allowMultiple = false,\n defaultOpenItems = [],\n triggersClassName = '',\n bodiesClassName = '',\n}: AccordionProps) {\n const groupId = useId();\n const groupName = name || `accordion-group-${groupId}`;\n const [openItems, setOpenItems] = useState<Set<string>>(new Set(defaultOpenItems));\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n }\n\n return newOpenItems;\n });\n };\n\n const getItemId = (index: number) => `${groupId}-item-${index}`;\n const isItemOpen = (itemId: string) => openItems.has(itemId);\n\n return (\n <div id={groupName} className={className}>\n {/* Render from items prop */}\n {items.length > 0 &&\n items.map((item, index) => {\n const itemId = item.id || getItemId(index);\n return (\n <AccordionItem\n key={itemId}\n id={itemId}\n title={item.title}\n content={item.content}\n disabled={item.disabled}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n className={itemClassName}\n triggerClassName={triggersClassName}\n bodyClassName={bodiesClassName}\n />\n );\n })}\n\n {/* Render AccordionItem components */}\n {items.length === 0 &&\n children &&\n React.Children.map(children, (child, index) => {\n if (React.isValidElement<AccordionItemProps>(child) && child.type === AccordionItem) {\n const itemId = child.props.id || getItemId(index);\n return (\n <AccordionItem\n {...child.props}\n key={itemId}\n id={itemId}\n className={join(itemClassName, child.props.className)}\n isOpen={isItemOpen(itemId)}\n onToggle={() => toggleItem(itemId)}\n triggerClassName={join(triggersClassName, child.props.triggerClassName)}\n bodyClassName={join(bodiesClassName, child.props.bodyClassName)}\n />\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\nexport default function LoadingDots() {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setActiveIndex((prevIndex) => (prevIndex + 1) % 3);\n }, 500);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div className='absolute inset-0 inline-flex items-center justify-center gap-x-2 align-middle'>\n {[0, 1, 2].map((index) => (\n <div\n key={index}\n className={join(\n 'rounded-full transition-all duration-500 ease-in-out size-[0.35em] bg-current',\n activeIndex === index && 'transform -translate-y-1'\n )}\n />\n ))}\n </div>\n );\n}\n","export const buttonVariants = {\n base: '',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85 disabled:bg-muted disabled:text-muted-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/85 disabled:bg-muted/80 disabled:text-muted-foreground/80',\n tertiary: 'text-primary hover:text-primary-foreground disabled:text-muted',\n outline: 'border border-primary text-primary hover:border-primary-foreground hover:text-primary-foreground disabled:border-muted disabled:text-muted',\n link: 'underline-offset-4 hover:underline disabled:underline disabled:text-muted',\n danger: 'bg-danger text-danger-foreground hover:bg-danger/85 disabled:bg-muted disabled:text-muted-foreground',\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariants;\n\nexport const sizeVariants = {\n stripped: '',\n fitted: 'size-fit',\n sm: 'px-2 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n icon: 'p-1 w-fit aspect-square',\n full: 'p-2 w-full',\n} as const;\nexport type ButtonSize = keyof typeof sizeVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n} as const;\nexport type ButtonRounded = keyof typeof roundedVariants;\n\nexport interface ButtonVariants {\n variant: ButtonVariant;\n size: ButtonSize;\n rounded: ButtonRounded;\n}\n\nexport const buttonDefaults: ButtonVariants = {\n variant: 'primary',\n size: 'md',\n rounded: 'md',\n} as const;\n","// Button.tsx\nimport { ButtonHTMLAttributes, Ref } from 'react';\nimport { join } from '../../utils';\nimport LoadingDots from './LoadingDots';\nimport { ButtonSize, ButtonVariants, buttonDefaults, buttonVariants, roundedVariants, sizeVariants } from './variants';\n\nexport interface ButtonProps extends Partial<ButtonVariants>, ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n loading?: boolean;\n linkTo?: string;\n linkProps?: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n}\n\nexport default function Button({\n variant = buttonDefaults.variant,\n size,\n rounded = buttonDefaults.rounded,\n loading,\n linkTo,\n linkProps,\n type = 'button',\n className,\n ...rest\n}: ButtonProps) {\n let adjustedSize: ButtonSize;\n if (variant === 'link' && !size) {\n // default links to fitted size\n adjustedSize = 'fitted';\n } else {\n adjustedSize = size || buttonDefaults.size;\n }\n\n const baseClasses =\n 'appearance-none focus:outline-none focus:ring not-disabled:hover:cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed transition-all';\n\n const buttonClasses = join(\n baseClasses,\n buttonVariants[variant],\n sizeVariants[adjustedSize],\n roundedVariants[rounded],\n loading && 'relative pointer-events-none',\n linkTo && 'relative',\n className\n );\n\n return (\n <button\n {...rest}\n role={linkTo ? 'link' : rest.role}\n aria-label={rest['aria-label'] || linkProps?.['aria-label']}\n aria-description={rest['aria-description'] || linkProps?.['aria-description']}\n aria-disabled={rest.disabled || loading}\n aria-busy={loading}\n type={type}\n className={buttonClasses}\n >\n {loading && <LoadingDots />}\n <span className={join(loading && 'invisible')}>{rest.children}</span>\n\n {linkTo && !rest.disabled && (\n <a\n {...linkProps}\n aria-hidden={true} // Hide from screen readers since the button is already accessible\n href={linkTo}\n target={linkProps?.target || '_blank'}\n rel={linkProps?.rel || 'noreferrer'}\n className='absolute inset-0'\n />\n )}\n </button>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useFilledBackgroundColor(id: string) {\n const [filledBackgroundColor, setFilledBackgroundColor] = useState<string>('');\n\n const getFirstNonTransparentBackgroundColor = useCallback((element: Element | null): string => {\n let currentElement = element;\n let color = '';\n while (currentElement && !color) {\n const backgroundColor = window.getComputedStyle(currentElement).backgroundColor;\n if (backgroundColor && backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)') {\n color = backgroundColor;\n }\n currentElement = currentElement.parentElement;\n }\n return color || 'transparent';\n }, []);\n\n useEffect(() => {\n const checkbox = document.getElementById(id);\n if (checkbox) {\n const backgroundColor = getFirstNonTransparentBackgroundColor(checkbox.parentElement);\n setFilledBackgroundColor(backgroundColor);\n }\n }, [id, getFirstNonTransparentBackgroundColor]);\n\n return filledBackgroundColor;\n}\n","import React, { Ref, useEffect, useId, useMemo, useState } from 'react';\nimport Check from '../../symbols/Check';\nimport { join } from '../../utils';\nimport { useFilledBackgroundColor } from './hooks';\n\nexport interface CheckboxProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n size?: number;\n color?: string; // can be adjusted with tailwindcss by using `text-<color>`\n filled?: boolean;\n rounded?: boolean;\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport default function Checkbox({\n ref,\n id,\n size = 20,\n color,\n filled = false,\n rounded = true,\n checked = false,\n onCheckedChange,\n disabled,\n className = '',\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const checkboxId = useMemo(() => id || `checkbox-${generatedId}`, [id, generatedId]);\n const parentBackgroundColor = useFilledBackgroundColor(checkboxId);\n const [isChecked, setIsChecked] = useState(checked);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const handleChange = () => {\n if (!disabled) {\n setIsChecked(!isChecked);\n onCheckedChange?.(!isChecked);\n }\n };\n\n const handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n handleChange();\n }\n };\n\n const checkboxClasses = join(\n 'flex items-center justify-center border outline outline-transparent focus:outline-current focus:outline-offset-2',\n rounded && 'rounded',\n disabled && 'opacity-40 cursor-not-allowed',\n !disabled && 'cursor-pointer',\n className\n );\n\n return (\n <button\n id={checkboxId}\n type='button'\n ref={ref}\n tabIndex={0}\n role='checkbox'\n onClick={handleChange}\n aria-checked={isChecked}\n aria-disabled={disabled}\n onKeyDownCapture={handleOnKeyDown}\n style={{\n width: size,\n height: size,\n color: color,\n backgroundColor: isChecked && filled ? 'currentcolor' : 'transparent',\n }}\n className={checkboxClasses}\n {...props}\n >\n {isChecked && <Check size={size} color={filled ? parentBackgroundColor : undefined} />}\n </button>\n );\n}\n","import { join } from '../../utils';\n\ninterface ClickableProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {\n children: React.ReactNode;\n linkTo?: React.HTMLProps<HTMLAnchorElement>['href'];\n linkProps?: Omit<React.HTMLProps<HTMLAnchorElement>, 'href'>;\n onButtonClick?: React.HTMLProps<HTMLButtonElement>['onClick'];\n buttonProps?: Omit<React.HTMLProps<HTMLButtonElement>, 'onClick'>;\n}\n\nexport default function Clickable({\n children,\n className,\n linkTo,\n linkProps,\n onButtonClick,\n buttonProps,\n ...props\n}: ClickableProps) {\n if (linkTo && onButtonClick) {\n console.warn('Clickable: Both \"linkTo\" and \"onButtonClick\" props are provided. Only \"linkTo\" will be used.');\n }\n\n return (\n <div className={join('relative w-fit', className)} {...props}>\n {children}\n\n {/* Link */}\n {linkTo && (\n <a\n {...linkProps}\n href={linkTo}\n className={join('absolute inset-0', linkProps?.className)}\n />\n )}\n\n {/* Button */}\n {!linkTo && onButtonClick && (\n <button\n {...buttonProps}\n type='button'\n onClick={onButtonClick}\n className={join('absolute inset-0 cursor-pointer', buttonProps?.className)}\n />\n )}\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { CheckCircled, ExclamationTriangle } from '../../symbols';\nimport { join } from '../../utils';\n\ninterface StatusHelpMessageProps {\n elementId: string;\n type: 'error' | 'success';\n message?: string;\n}\n\nexport default function StatusHelpMessage({ elementId, type, message }: StatusHelpMessageProps) {\n useEffect(() => {\n const element = document.getElementById(elementId) as HTMLElement;\n if (!element) {\n return;\n }\n if (!message && type === 'error') {\n element.removeAttribute('data-error');\n return;\n }\n if (!message && type === 'success') {\n element.removeAttribute('data-success');\n return;\n }\n\n element.setAttribute('aria-describedby', `${elementId}-${type}-message`);\n element.setAttribute('aria-invalid', type === 'error' ? 'true' : 'false');\n\n if (type === 'error') {\n element.setAttribute('data-error', 'true');\n }\n if (type === 'success') {\n element.setAttribute('data-success', 'true');\n }\n\n return () => {\n element.removeAttribute('aria-describedby');\n element.removeAttribute('aria-invalid');\n element.removeAttribute('data-error');\n element.removeAttribute('data-success');\n };\n }, [elementId, type, message]);\n\n if (!message) {\n return null;\n }\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-start',\n type === 'error' && 'text-danger',\n type === 'success' && 'text-success'\n )}\n role='status'\n >\n {type === 'error' ? <ExclamationTriangle /> : <CheckCircled />}\n <span id={`${elementId}-${type}-message`}>{message}</span>\n </small>\n );\n}\n","export const inputVariants = {\n base: '',\n default:\n 'ring ring-transparent focus:ring-primary-foreground not-disabled:data-error:ring-danger not-disabled:data-success:ring-success',\n underline:\n 'border-b border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type InputVariant = keyof typeof inputVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type InputRounded = keyof typeof roundedVariants;\n\nexport interface InputVariants {\n variant: InputVariant;\n rounded: InputRounded;\n}\n\nexport const inputDefaults: InputVariants = {\n variant: 'default',\n rounded: 'none',\n} as const;\n","import { Ref, useId, useState } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { EyeClosed, EyeOpened } from '../../symbols';\nimport { join } from '../../utils';\nimport './styles.css';\nimport { inputDefaults, inputVariants, InputVariants, roundedVariants } from './variants';\n\ninterface InputProps extends Partial<InputVariants>, React.InputHTMLAttributes<HTMLInputElement> {\n ref?: Ref<HTMLInputElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n}\n\nexport default function Input({\n variant = inputDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n type = 'text',\n className,\n ...rest\n}: InputProps) {\n const id = useId();\n const [showPassword, setShowPassword] = useState(false);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || inputDefaults.rounded;\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n const fileClasses =\n 'file:mr-2 file:border-0 file:rounded-md file:px-1.5 file:py-1 file:bg-primary hover:file:bg-primary/85 file:text-sm file:font-medium file:text-foreground file:transition-colors';\n\n const inputClasses = join(\n baseClasses,\n fileClasses,\n !displayOnlyMode && inputVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n type === 'password' && 'pr-10',\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n className\n );\n\n return (\n <div className={join(displayOnlyMode && 'cursor-text')} style={{ height: rest.height, width: rest.width }}>\n <div className={join(type === 'password' && 'relative')}>\n <input\n {...rest}\n id={id}\n type={type === 'password' && showPassword ? 'text' : type}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n data-error={errorMessage ? true : undefined}\n data-success={successMessage ? true : undefined}\n className={inputClasses}\n />\n {type === 'password' && (\n <button\n onClick={() => setShowPassword(!showPassword)}\n className='absolute inset-y-0 right-0 px-2 hover:cursor-pointer'\n aria-label='Toggle password visibility'\n data-state={showPassword ? 'visible' : 'hidden'}\n >\n {showPassword ? <EyeOpened size={20} /> : <EyeClosed size={20} />}\n </button>\n )}\n </div>\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport { QuestionMarkCircled } from '../../symbols';\nimport { join } from '../../utils';\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n display?: 'block' | 'inline';\n width?: React.CSSProperties['width'];\n required?: boolean;\n helpMessage?: string;\n suffix?: React.ReactNode;\n}\n\nexport function Label({\n display = 'inline',\n width = 'fit-content',\n className = '',\n required,\n helpMessage,\n suffix,\n htmlFor,\n children,\n ...props\n}: LabelProps) {\n const id = useId();\n const labelClasses = join('font-medium', display, className);\n const helpId = helpMessage ? `${htmlFor ?? id}-help` : undefined;\n\n return (\n <div style={{ display: display === 'inline' ? 'inline-flex' : 'flex', width }} className='relative'>\n <label className={labelClasses} htmlFor={htmlFor} {...props}>\n {children}\n {required && (\n <span className='text-red-500 font-medium ml-1' aria-label='required'>\n *\n </span>\n )}\n </label>\n {helpMessage && (\n <span\n className='text-gray-500 ml-1 size-fit -translate-y-1/3'\n aria-describedby={helpId}\n aria-label='Help information'\n title={helpMessage}\n >\n <QuestionMarkCircled />\n </span>\n )}\n {helpMessage && (\n <div id={helpId} className='sr-only'>\n {helpMessage}\n </div>\n )}\n {suffix && <span className='ml-1'>{suffix}</span>}\n </div>\n );\n}\n","function n(...t) {\n return t.filter((s) => typeof s == \"string\" && s).join(\" \").trim() || void 0;\n}\nexport {\n n as join\n};\n//# sourceMappingURL=utils.esm.js.map\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { ModalProps } from './Modal';\n\nexport function useAnimationOpenClose({ isOpen }: Pick<ModalProps, 'isOpen'>) {\n console.log('calling useAnimationOpenClose'); // REMOVE\n const [show, setShow] = useState(false);\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setShouldRender(true);\n setTimeout(() => setShow(true), 10);\n } else {\n setShow(false);\n setTimeout(() => setShouldRender(false), 150);\n }\n }, [isOpen]);\n\n return { show, shouldRender };\n}\n\nexport function useDocumentChanges({ isOpen, onClose }: Pick<ModalProps, 'isOpen' | 'onClose'>) {\n console.log('calling useDocumentChanges'); // REMOVE\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n // Prevent background scrolling when modal is open\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = 'auto';\n };\n }, [isOpen, onClose]);\n}\n\nexport function useHandleFocus({ modalId, isOpen }: { modalId: string; isOpen: boolean }) {\n const previousActiveElement = useRef<Element | null>(null);\n\n const focusAppropriateElement = useCallback(() => {\n const modalElement = document.getElementById(modalId);\n if (!modalElement) return;\n\n // 1. First, try to focus on the first action button, if available\n const modalActions = modalElement.querySelectorAll('[data-modal-action=\"true\"]');\n if (modalActions.length > 0) {\n (modalActions[0] as HTMLElement).focus();\n return;\n }\n\n // 2. Then try first focusable element in content (giving preference to non-close button)\n const focusableElements = modalElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (focusableElements.length > 0) {\n const allBesidesCloseButton = Array.from(focusableElements).filter((el) => {\n return !(el instanceof HTMLButtonElement && el.getAttribute('data-modal-close-button') === 'true');\n });\n\n if (allBesidesCloseButton.length > 0) {\n (allBesidesCloseButton[0] as HTMLElement).focus();\n return;\n }\n\n (focusableElements[0] as HTMLElement).focus();\n return;\n }\n\n // 3. Fallback to modal container\n modalElement.focus();\n }, [modalId]);\n\n useEffect(() => {\n if (isOpen) {\n // Store the currently focused element to restore focus later\n previousActiveElement.current = document.activeElement;\n\n focusAppropriateElement();\n }\n\n return () => {\n document.body.style.overflow = 'auto';\n\n // Restore focus to the previously focused element when modal closes\n if (previousActiveElement.current instanceof HTMLElement) {\n previousActiveElement.current.focus();\n }\n };\n }, [isOpen, focusAppropriateElement]);\n}\n","import { join } from '@moondreamsdev/dreamer-ui/utils';\nimport React, { useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from '../../symbols';\nimport { Button, ButtonProps } from '../button';\nimport { useAnimationOpenClose, useDocumentChanges, useHandleFocus } from './hooks';\n\ninterface ModalAction extends Omit<ButtonProps, 'children'> {\n label: string;\n}\n\nexport interface ModalProps {\n id?: string;\n isOpen: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children: React.ReactNode;\n contentOnly?: boolean;\n className?: string;\n overlayClassName?: string;\n hideCloseButton?: boolean;\n actions?: ModalAction[];\n disableCloseOnOverlayClick?: boolean;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n}\n\nexport function Modal({\n id,\n isOpen,\n onClose,\n title,\n children,\n contentOnly = false,\n className,\n overlayClassName,\n hideCloseButton = false,\n actions = [],\n disableCloseOnOverlayClick = false,\n ariaLabelledBy,\n ariaDescribedBy,\n}: ModalProps) {\n const generatedId = useId();\n const modalId = id || `modal-${generatedId}`;\n const titleId = id ? `${id}-title` : `modal-title-${generatedId}`;\n\n const { show, shouldRender } = useAnimationOpenClose({ isOpen });\n useHandleFocus({ modalId, isOpen: shouldRender });\n useDocumentChanges({ isOpen: shouldRender, onClose });\n\n if (!shouldRender) return null;\n\n const renderTitle = () => {\n if (!title) return null;\n\n if (React.isValidElement(title)) {\n return <div className='mb-4'>{title}</div>;\n }\n\n return (\n <h2 className='mb-4 text-xl font-semibold' id={titleId}>\n {title}\n </h2>\n );\n };\n\n const renderActions = () => {\n if (actions.length === 0) return null;\n\n return (\n <div className='mt-6 not-sm:grid gap-y-2 sm:flex sm:justify-start sm:flex-row-reverse sm:gap-x-3'>\n {actions.map((action, index) => {\n const { label, className, ...buttonProps } = action;\n return (\n <Button key={index} className={className} type='button' {...buttonProps} data-modal-action='true'>\n {label}\n </Button>\n );\n })}\n </div>\n );\n };\n\n return (\n <>\n {createPortal(\n <div\n aria-labelledby={ariaLabelledBy ?? title ? titleId : undefined}\n aria-describedby={ariaDescribedBy}\n role='dialog'\n aria-modal='true'\n className='fixed inset-0 z-[100] overflow-y-auto'\n >\n <div className='flex min-h-screen items-center justify-center p-4'>\n <div\n className={join('fixed inset-0 bg-black/20 transition-all', overlayClassName)}\n onClick={() => {\n if (!disableCloseOnOverlayClick) {\n onClose();\n }\n }}\n />\n\n {contentOnly && <div className={join('relative w-fit', className)}>{children}</div>}\n\n {!contentOnly && (\n <div\n id={modalId}\n tabIndex={-1}\n className={join(\n 'relative w-full max-w-xl transform rounded-lg shadow-xl transition-all p-6 bg-inherit focus:border ease-in duration-75',\n show ? 'opacity-100 scale-100' : 'opacity-0 scale-90',\n className\n )}\n >\n {!hideCloseButton && (\n <button\n type='button'\n onClick={onClose}\n data-modal-close-button='true'\n className='rounded-md p-0.5 top-2.5 right-2.5 absolute opacity-80 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-gray-500 leading-0'\n >\n <X size={18} />\n </button>\n )}\n\n {renderTitle()}\n\n {children}\n\n {renderActions()}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","import React, {\n cloneElement,\n createElement,\n HTMLAttributes,\n isValidElement,\n ReactElement,\n ReactNode,\n Ref,\n} from 'react';\n\ninterface SlotProps<T> extends HTMLAttributes<T> {\n children?: ReactNode;\n ref?: Ref<T>;\n}\n\nexport function Slot<T = HTMLElement>({ children, ref, ...props }: SlotProps<T>) {\n\n if (isValidElement(children)) {\n let allProps = { ...props };\n if (children.props) {\n allProps = { ...allProps, ...children.props };\n }\n return cloneElement(children, {\n ...allProps,\n ref: (node: T) => {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.RefObject<T>).current = node;\n }\n },\n } as unknown as ReactElement);\n }\n\n // If not asChild or no valid child, render as div\n return createElement('div', { ...props, ref }, children);\n}\n","import { join } from '../../utils';\n\nexport type RadioInputProps = {\n itemId: string;\n checked: boolean;\n onChange: () => void;\n name: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Custom RadioInput Component\nexport function RadioInput({ itemId, checked, onChange, name, disabled = false, className = '' }: RadioInputProps) {\n const baseClasses = 'relative inline-flex items-center justify-center rounded-full';\n\n const handleClick = () => {\n if (disabled) return;\n onChange();\n };\n\n const radioClasses = join(\n baseClasses,\n !checked && 'hover:border-current/60',\n !disabled && 'border-current cursor-pointer',\n disabled && 'border-muted/60 cursor-not-allowed',\n className\n );\n return (\n <div\n id={itemId}\n role='radio'\n tabIndex={-1} // necessary so that the radio button can be focused as div is not a focusable element\n aria-checked={checked}\n aria-disabled={disabled}\n aria-description={`Radio button for ${name}`}\n aria-labelledby={`${itemId}-label`}\n onClick={handleClick}\n className={radioClasses}\n style={{\n width: '1em',\n height: '1em',\n padding: '0.1em',\n borderWidth: '0.06em',\n }}\n >\n {checked && (\n <div\n className={join(`size-full aspect-square rounded-full`, disabled && 'bg-muted/60', !disabled && 'bg-current')}\n />\n )}\n </div>\n );\n}\n","import { useId } from 'react';\nimport { join } from '../../utils';\nimport { RadioInput } from './RadioInput';\n\nexport interface RadioGroupItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n isSelected?: boolean;\n onChange?: (value: string) => void;\n disabled?: boolean;\n name?: string;\n hideInput?: boolean;\n description?: string;\n}\n\nexport function RadioGroupItem({\n value,\n children,\n className = '',\n isSelected = false,\n onChange,\n disabled = false,\n hideInput = false,\n description,\n name,\n}: RadioGroupItemProps) {\n const id = useId();\n const itemId = `radio-${id}-${value}`;\n\n const handleChange = () => {\n if (!disabled) {\n onChange?.(value);\n }\n };\n\n return (\n <div\n title={description}\n className={join(\n 'relative flex items-center',\n className,\n // Uses text color for borders\n hideInput &&\n `p-2 border-2 focus-within:border-dashed focus-within:${\n disabled ? 'border-current/50' : 'border-current/80'\n }`,\n hideInput && !isSelected && `border-transparent ${disabled ? '' : 'not-focus-within:hover:border-border/60'}`,\n hideInput && isSelected && 'border-border',\n disabled && 'opacity-60 cursor-not-allowed'\n )}\n style={{\n gap: '0.5em',\n }}\n >\n {!hideInput && (\n <RadioInput\n itemId={itemId}\n name={name || ''}\n checked={isSelected}\n onChange={handleChange}\n disabled={disabled}\n className={join(hideInput && '')}\n />\n )}\n <div\n id={hideInput ? itemId : undefined}\n tabIndex={hideInput ? -1 : undefined}\n role={hideInput ? 'radio' : undefined}\n onClick={hideInput ? handleChange : undefined}\n aria-checked={!hideInput ? undefined : isSelected ? 'true' : 'false'}\n aria-disabled={hideInput ? disabled : undefined}\n aria-description={!hideInput ? undefined : description || `Radio button for ${name}`}\n aria-labelledby={hideInput ? `${itemId}-label` : undefined}\n className={join(hideInput && 'size-full', typeof children === 'object' && 'grow focus:outline-none')}\n >\n <label\n id={`${itemId}-label`}\n onClick={hideInput ? undefined : handleChange}\n className={join(disabled && 'cursor-not-allowed', !disabled && 'cursor-pointer')}\n >\n {children}\n </label>\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport function useRadioFocus(id: string, selectedOptionIndex: number) {\n // Manage state locally to avoid race conditions, which can result in\n // the an option failing to be selected or incorrectly selected\n const [focusedIndex, setFocusedIndex] = useState<number>(selectedOptionIndex);\n const [clickedIndex, setClickedIndex] = useState<number>(-1);\n // Prevent onClicks from triggering focus events and automatically selecting the first option\n const [isMouseDown, setIsMouseDown] = useState<boolean>(false);\n\n const handleClicked = useCallback((options: HTMLElement[], index: number) => {\n const target = options[index] as HTMLElement;\n\n // Check if the target element is disabled\n const isDisabled = target.hasAttribute('disabled') || target.getAttribute('aria-disabled') === 'true';\n if (isDisabled) return;\n\n // Update the selected index\n options[index]?.click();\n setClickedIndex(index);\n }, []);\n\n const setInitialFocus = useCallback(\n (e: Event, options: HTMLElement[]) => {\n e.preventDefault();\n if (isMouseDown) return;\n if (!options.length) return;\n\n const indexToFocus = selectedOptionIndex !== -1 ? selectedOptionIndex : 0;\n options[indexToFocus]?.focus();\n setFocusedIndex(indexToFocus);\n\n // Only update the selected index if one is already set\n if (selectedOptionIndex !== -1) {\n handleClicked(options, indexToFocus);\n }\n },\n [selectedOptionIndex, isMouseDown, handleClicked]\n );\n\n /* Focus preceding element when Shift + Tab is pressed */\n const handleFocusPreceding = useCallback(\n (e: KeyboardEvent) => {\n // If the Shift key is not pressed while tab is entered, do nothing\n if (!e.shiftKey) {\n return;\n }\n\n e.preventDefault();\n const focusableElements = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'a, button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter((el) => !el.hasAttribute('disabled') && el.tabIndex >= 0);\n const currentIndex = focusableElements.findIndex((el) => el.id === id);\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[previousIndex]?.focus();\n },\n [id]\n );\n\n const handleKeyboardNavigation = useCallback(\n (e: KeyboardEvent, options: HTMLElement[]) => {\n if (!options.length) return;\n\n // Ensure we only toggle options part of radio group\n const target = e.target as HTMLElement;\n const isGroupOption = options.some((option) => option.id === target.id);\n if (!isGroupOption) return;\n\n const currentIndex = focusedIndex !== -1 ? focusedIndex : 0;\n let newIndex = currentIndex;\n\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n newIndex = (currentIndex + 1) % options.length;\n break;\n\n // Select the option when the space key is pressed\n case ' ':\n e.preventDefault();\n handleClicked(options, currentIndex);\n return;\n\n case 'Tab':\n handleFocusPreceding(e);\n return;\n\n default:\n return;\n }\n\n options[newIndex]?.focus();\n setFocusedIndex(newIndex);\n // Only update the selected index if one is already set\n if (clickedIndex !== -1) {\n handleClicked(options, newIndex);\n }\n },\n [focusedIndex, clickedIndex, handleFocusPreceding, handleClicked]\n );\n\n const getRadioOptions = useCallback((): HTMLElement[] => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return [];\n\n return Array.from(radioGroup.querySelectorAll('[role=\"radio\"]'));\n }, [id]);\n\n useEffect(() => {\n const radioGroup = document.querySelector(`[id=\"${id}\"][role=\"radiogroup\"]`);\n if (!radioGroup) return;\n\n const options = getRadioOptions();\n const handleFocus = (e: Event) => setInitialFocus(e, options);\n const handleKeyDown = (e: KeyboardEvent) => handleKeyboardNavigation(e, options);\n const handleMouseDown = () => setIsMouseDown(true);\n const handleMouseUp = () => setIsMouseDown(false);\n\n document.addEventListener('keydown', handleKeyDown);\n radioGroup.addEventListener('focus', handleFocus);\n radioGroup.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp); // place on document since mouseup event can occur outside of radio group\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n radioGroup.removeEventListener('focus', handleFocus);\n radioGroup.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [id, getRadioOptions, setInitialFocus, handleKeyboardNavigation]);\n}\n","import React, { useId, useMemo } from 'react';\nimport { join } from '../../utils';\nimport { RadioGroupItem, RadioGroupItemProps } from './RadioGroupItem';\nimport { useRadioFocus } from './hooks';\n\nexport type RadioOption = { label: string; value: string; disabled?: boolean; description?: string };\n\nexport type RadioGroupProps = {\n options?: (string | RadioOption)[];\n value: string | undefined;\n onChange: (value: string) => void;\n name?: string;\n children?: React.ReactElement<RadioGroupItemProps>[] | React.ReactElement<RadioGroupItemProps>;\n className?: string;\n childrenClassName?: string;\n hideInputs?: boolean;\n};\n\nexport function RadioGroup({\n options = [],\n value,\n onChange,\n name,\n children,\n className = '',\n childrenClassName = '',\n hideInputs = false,\n}: RadioGroupProps) {\n const groupId = useId();\n const groupName = name || `radio-group-${groupId}`;\n useRadioFocus(\n groupName,\n options.findIndex((option) => option === value)\n );\n\n // Check for duplicates if string options are provided\n const processedOptions = useMemo(() => {\n return options.reduce<RadioOption[]>((acc, option) => {\n if (typeof option === 'string') {\n // Check if we already have this string option\n if (!acc.some((item) => item.value === option)) {\n acc.push({ label: option, value: option });\n }\n } else {\n acc.push(option);\n }\n return acc;\n }, []);\n }, [options]);\n\n return (\n <div id={groupName} role='radiogroup' tabIndex={0} className={join(className, 'focus:outline-none')}>\n {/* Render from options prop */}\n {processedOptions.length > 0 &&\n processedOptions.map((option, index) => (\n <RadioGroupItem\n key={`${option.value}-${index}`}\n value={option.value}\n isSelected={value === option.value}\n onChange={onChange}\n name={groupName}\n disabled={option.disabled}\n description={option.description}\n hideInput={hideInputs}\n className={childrenClassName}\n >\n {option.label}\n </RadioGroupItem>\n ))}\n\n {/* Render RadioGroupItem components */}\n {processedOptions.length === 0 &&\n children &&\n React.Children.map(children, (child) => {\n // TypeScript enforces that child is a RadioGroupItem\n if (React.isValidElement(child) && child.type === RadioGroupItem) {\n return (\n <RadioGroupItem\n {...child.props}\n className={join(childrenClassName, child.props.className)}\n hideInput={child.props.hideInput || hideInputs}\n isSelected={value === child.props.value}\n onChange={onChange}\n name={groupName}\n >\n {child.props.children}\n </RadioGroupItem>\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { join } from '../../utils';\n\ninterface CharacterCountProps {\n elementId: string;\n maxLength: number;\n}\n\nexport default function CharacterCount({ elementId, maxLength }: CharacterCountProps) {\n const [characterCount, setCharacterCount] = useState(0);\n\n useEffect(() => {\n const textarea = document.getElementById(elementId) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n const updateCharacterCount = () => {\n const updatedCharacterCount = textarea.value.length;\n setCharacterCount(updatedCharacterCount);\n const isError = updatedCharacterCount >= maxLength;\n textarea.setAttribute('aria-describedby', `${elementId}-character-count`);\n textarea.setAttribute('aria-invalid', isError ? 'true' : 'false');\n\n if (isError) {\n textarea.setAttribute('data-error', 'true');\n } else {\n textarea.removeAttribute('data-error');\n }\n };\n\n updateCharacterCount();\n textarea.addEventListener('input', updateCharacterCount);\n textarea.setAttribute('maxlength', String(maxLength));\n\n return () => {\n textarea.removeEventListener('input', updateCharacterCount);\n textarea.removeAttribute('maxlength');\n textarea.removeAttribute('aria-describedby');\n textarea.removeAttribute('aria-invalid');\n textarea.removeAttribute('data-error');\n };\n }, [elementId, maxLength]);\n\n return (\n <small\n className={join(\n 'mt-0.5 text-sm inline-flex items-center gap-1 w-full justify-end',\n characterCount >= maxLength && 'text-danger',\n characterCount < maxLength && 'text-current'\n )}\n role='status'\n >\n <span id={`${elementId}-character-count`}>\n {characterCount} / {maxLength} characters\n </span>\n </small>\n );\n}\n","import { useEffect } from 'react';\n\nexport function useAutoExpand(id: string, autoExpand: boolean) {\n useEffect(() => {\n const textarea = document.getElementById(id) as HTMLTextAreaElement;\n if (!textarea) {\n return;\n }\n\n if (!autoExpand) {\n textarea.style.height = 'auto';\n return;\n }\n\n const adjustHeight = () => {\n // necessary to reset the height to `auto` before calculating the new height\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n };\n\n adjustHeight();\n textarea.addEventListener('input', adjustHeight);\n textarea.addEventListener('resize', adjustHeight);\n window.addEventListener('resize', adjustHeight);\n\n return () => {\n textarea.removeEventListener('input', adjustHeight);\n textarea.removeEventListener('resize', adjustHeight);\n window.removeEventListener('resize', adjustHeight);\n };\n }, [id, autoExpand]);\n}\n","export const textareaVariants = {\n base: '',\n 'left-line':\n 'border-l border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n outline:\n 'border border-border focus:border-primary-foreground disabled:border-muted/30 not-disabled:data-error:border-danger not-disabled:data-success:border-success',\n} as const;\nexport type TextareaVariant = keyof typeof textareaVariants;\n\nexport const roundedVariants = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'px-3 rounded-full',\n} as const;\nexport type TextareaRounded = keyof typeof roundedVariants;\n\nexport interface TextareaVariants {\n variant: TextareaVariant;\n rounded: TextareaRounded;\n}\n\nexport const textareaDefaults: TextareaVariants = {\n variant: 'outline',\n rounded: 'none',\n} as const;\n","import { Ref, useId } from 'react';\nimport { StatusHelpMessage } from '../../shared/forms';\nimport { join } from '../../utils';\nimport CharacterCount from './CharacterCount';\nimport { useAutoExpand } from './hooks';\nimport './styles.css';\nimport { roundedVariants, textareaDefaults, textareaVariants, TextareaVariants } from './variants';\n\ninterface TextareaProps extends Partial<TextareaVariants>, React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n ref?: Ref<HTMLTextAreaElement>;\n displayOnlyMode?: boolean;\n errorMessage?: string;\n successMessage?: string;\n hideResizeHandle?: boolean; // only works for Webkit browsers\n autoExpand?: boolean;\n characterLimit?: number;\n}\n\nexport default function Textarea({\n variant = textareaDefaults.variant,\n rounded,\n displayOnlyMode = false,\n errorMessage,\n successMessage,\n hideResizeHandle = false,\n autoExpand = false,\n characterLimit = 0,\n className,\n ...rest\n}: TextareaProps) {\n const id = useId();\n useAutoExpand(id, autoExpand || displayOnlyMode);\n\n // Default `round` of `md` for `outline` variant\n let adjustedRound = rounded;\n if (variant === 'outline' && !rounded) {\n adjustedRound = 'md';\n }\n adjustedRound = adjustedRound || textareaDefaults.rounded;\n\n let adjustedHideResizeHandle = hideResizeHandle;\n if (displayOnlyMode || (variant === 'left-line' && !hideResizeHandle)) {\n adjustedHideResizeHandle = true;\n }\n\n const baseClasses =\n 'appearance-none w-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder:text-muted/70 hide-number-input-arrows transition-all';\n\n const inputClasses = join(\n baseClasses,\n !displayOnlyMode && textareaVariants[variant],\n !displayOnlyMode && roundedVariants[adjustedRound],\n !displayOnlyMode && 'px-2 py-1',\n displayOnlyMode && 'pointer-events-none',\n adjustedHideResizeHandle && 'no-resize-handle',\n\n className\n );\n\n return (\n <div className={join('-space-y-1.5', displayOnlyMode && 'cursor-text')}>\n <textarea\n {...rest}\n id={id}\n aria-disabled={rest.disabled}\n readOnly={displayOnlyMode}\n aria-readonly={displayOnlyMode || rest['aria-readonly']}\n style={{\n resize: autoExpand ? 'none' : undefined,\n }}\n className={inputClasses}\n />\n {characterLimit > 0 && <CharacterCount elementId={id} maxLength={characterLimit} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='error' message={errorMessage} />}\n {!displayOnlyMode && <StatusHelpMessage elementId={id} type='success' message={successMessage} />}\n </div>\n );\n}\n"],"names":["AccordionItem","id","title","content","children","className","disabled","isOpen","onToggle","triggerClassName","bodyClassName","fallbackId","useId","itemId","headerId","panelId","handleToggle","handleKeyDown","e","jsxs","join","jsx","ChevronDown","Accordion","name","items","itemClassName","allowMultiple","defaultOpenItems","triggersClassName","bodiesClassName","groupId","groupName","openItems","setOpenItems","useState","toggleItem","prev","newOpenItems","getItemId","index","isItemOpen","item","React","child","createElement","LoadingDots","activeIndex","setActiveIndex","useEffect","interval","prevIndex","buttonVariants","sizeVariants","roundedVariants","buttonDefaults","Button","variant","size","rounded","loading","linkTo","linkProps","type","rest","adjustedSize","buttonClasses","useFilledBackgroundColor","filledBackgroundColor","setFilledBackgroundColor","getFirstNonTransparentBackgroundColor","useCallback","element","currentElement","color","backgroundColor","checkbox","Checkbox","ref","filled","checked","onCheckedChange","props","generatedId","checkboxId","useMemo","parentBackgroundColor","isChecked","setIsChecked","handleChange","handleOnKeyDown","checkboxClasses","Check","Clickable","onButtonClick","buttonProps","StatusHelpMessage","elementId","message","ExclamationTriangle","CheckCircled","inputVariants","inputDefaults","Input","displayOnlyMode","errorMessage","successMessage","showPassword","setShowPassword","adjustedRound","inputClasses","EyeOpened","EyeClosed","Label","display","width","required","helpMessage","suffix","htmlFor","labelClasses","helpId","QuestionMarkCircled","n","t","s","useAnimationOpenClose","show","setShow","shouldRender","setShouldRender","useDocumentChanges","onClose","handleEscape","useHandleFocus","modalId","previousActiveElement","useRef","focusAppropriateElement","modalElement","modalActions","focusableElements","allBesidesCloseButton","el","Modal","contentOnly","overlayClassName","hideCloseButton","actions","disableCloseOnOverlayClick","ariaLabelledBy","ariaDescribedBy","titleId","renderTitle","renderActions","action","label","Fragment","createPortal","X","Slot","isValidElement","allProps","cloneElement","node","RadioInput","onChange","baseClasses","handleClick","radioClasses","RadioGroupItem","value","isSelected","hideInput","description","useRadioFocus","selectedOptionIndex","focusedIndex","setFocusedIndex","clickedIndex","setClickedIndex","isMouseDown","setIsMouseDown","handleClicked","options","target","_a","setInitialFocus","indexToFocus","handleFocusPreceding","currentIndex","previousIndex","handleKeyboardNavigation","option","newIndex","getRadioOptions","radioGroup","handleFocus","handleMouseDown","handleMouseUp","RadioGroup","childrenClassName","hideInputs","processedOptions","acc","CharacterCount","maxLength","characterCount","setCharacterCount","textarea","updateCharacterCount","updatedCharacterCount","isError","useAutoExpand","autoExpand","adjustHeight","textareaVariants","textareaDefaults","Textarea","hideResizeHandle","characterLimit","adjustedHideResizeHandle"],"mappings":"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"}
|