@rhammy/architect-core 1.0.0
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/CHANGELOG.md +178 -0
- package/LICENSE +21 -0
- package/README.md +355 -0
- package/dist/components/Accordion/Accordion.d.ts +34 -0
- package/dist/components/Accordion/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion/index.d.ts +3 -0
- package/dist/components/Accordion/index.d.ts.map +1 -0
- package/dist/components/Button/Button.d.ts +21 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/Button/index.d.ts +3 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +25 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/index.d.ts +3 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +48 -0
- package/dist/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog/index.d.ts +3 -0
- package/dist/components/Dialog/index.d.ts.map +1 -0
- package/dist/components/Dropdown/Dropdown.d.ts +28 -0
- package/dist/components/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/Dropdown/index.d.ts +3 -0
- package/dist/components/Dropdown/index.d.ts.map +1 -0
- package/dist/components/Input/ErrorMessage.d.ts +9 -0
- package/dist/components/Input/ErrorMessage.d.ts.map +1 -0
- package/dist/components/Input/FormField.d.ts +24 -0
- package/dist/components/Input/FormField.d.ts.map +1 -0
- package/dist/components/Input/Input.d.ts +27 -0
- package/dist/components/Input/Input.d.ts.map +1 -0
- package/dist/components/Input/Label.d.ts +13 -0
- package/dist/components/Input/Label.d.ts.map +1 -0
- package/dist/components/Input/index.d.ts +10 -0
- package/dist/components/Input/index.d.ts.map +1 -0
- package/dist/components/Radio/Radio.d.ts +36 -0
- package/dist/components/Radio/Radio.d.ts.map +1 -0
- package/dist/components/Radio/index.d.ts +3 -0
- package/dist/components/Radio/index.d.ts.map +1 -0
- package/dist/components/Select/Select.d.ts +38 -0
- package/dist/components/Select/Select.d.ts.map +1 -0
- package/dist/components/Select/index.d.ts +3 -0
- package/dist/components/Select/index.d.ts.map +1 -0
- package/dist/components/Switch/Switch.d.ts +19 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -0
- package/dist/components/Switch/index.d.ts +3 -0
- package/dist/components/Switch/index.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +35 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs/index.d.ts +3 -0
- package/dist/components/Tabs/index.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +25 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea/index.d.ts +3 -0
- package/dist/components/Textarea/index.d.ts.map +1 -0
- package/dist/components/Toast/Toast.d.ts +46 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -0
- package/dist/components/Toast/index.d.ts +3 -0
- package/dist/components/Toast/index.d.ts.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +31 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip/index.d.ts +3 -0
- package/dist/components/Tooltip/index.d.ts.map +1 -0
- package/dist/hooks/useClickOutside.d.ts +4 -0
- package/dist/hooks/useClickOutside.d.ts.map +1 -0
- package/dist/hooks/useControllableState.d.ts +19 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useEscapeKey.d.ts +13 -0
- package/dist/hooks/useEscapeKey.d.ts.map +1 -0
- package/dist/hooks/useFocusTrap.d.ts +15 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/hooks/useId.d.ts +10 -0
- package/dist/hooks/useId.d.ts.map +1 -0
- package/dist/index.cjs +23 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2342 -0
- package/dist/index.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/tests/setup.d.ts +2 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/dom.d.ts +31 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/focus.d.ts +26 -0
- package/dist/utils/focus.d.ts.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom hook for managing focus trap
|
|
3
|
+
* Used in Dialog, Modal, Dropdown, etc.
|
|
4
|
+
*/
|
|
5
|
+
interface UseFocusTrapOptions {
|
|
6
|
+
/** Whether the focus trap is active */
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
/** Whether to auto-focus the first element on mount */
|
|
9
|
+
autoFocus?: boolean;
|
|
10
|
+
/** Whether to restore focus when trap is disabled */
|
|
11
|
+
restoreFocus?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function useFocusTrap({ enabled, autoFocus, restoreFocus, }: UseFocusTrapOptions): import('react').RefObject<HTMLElement>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=useFocusTrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusTrap.d.ts","sourceRoot":"","sources":["../../src/hooks/useFocusTrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,mBAAmB;IAC3B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,SAAgB,EAChB,YAAmB,GACpB,EAAE,mBAAmB,0CA6BrB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom hook for generating stable unique IDs
|
|
3
|
+
* Essential for accessibility (aria-labelledby, aria-describedby, etc.)
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generate a unique ID that persists across renders
|
|
7
|
+
* Uses React 18's useId hook with fallback for older versions
|
|
8
|
+
*/
|
|
9
|
+
export declare function useId(prefix?: string): string;
|
|
10
|
+
//# sourceMappingURL=useId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../src/hooks/useId.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAgB,KAAK,CAAC,MAAM,SAAc,GAAG,MAAM,CAGlD"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),r=require("react"),U=require("react-dom");function M(e){if(!e)return[];const n=["a[href]","button:not([disabled])","textarea:not([disabled])","input:not([disabled])","select:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(",");return Array.from(e.querySelectorAll(n)).filter(t=>t.offsetWidth>0&&t.offsetHeight>0&&getComputedStyle(t).visibility!=="hidden")}function re(e){if(!e)return()=>{};const n=M(e),t=n[0],o=n[n.length-1],a=c=>{c.key==="Tab"&&(c.shiftKey?document.activeElement===t&&(c.preventDefault(),o==null||o.focus()):document.activeElement===o&&(c.preventDefault(),t==null||t.focus()))};return e.addEventListener("keydown",a),()=>{e.removeEventListener("keydown",a)}}function oe(e){var t;(t=M(e)[0])==null||t.focus()}function Ve(){const e=document.activeElement;return()=>{e==null||e.focus()}}function et(e){return e===document.activeElement}function se({enabled:e,autoFocus:n=!0,restoreFocus:t=!0}){const o=r.useRef(null),a=r.useRef(null);return r.useEffect(()=>{if(!e)return;a.current=document.activeElement,n&&o.current&&oe(o.current);const c=re(o.current);return()=>{c(),t&&a.current&&a.current.focus()}},[e,n,t]),o}function Y({enabled:e,onEscape:n}){r.useEffect(()=>{if(!e)return;const t=o=>{o.key==="Escape"&&(o.preventDefault(),n())};return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}},[e,n])}function ne({value:e,defaultValue:n,onChange:t}){const[o,a]=r.useState(n),c=e!==void 0,l=c?e:o,i=r.useRef(t);r.useEffect(()=>{i.current=t});const d=r.useCallback(f=>{var p;c||a(f),(p=i.current)==null||p.call(i,f)},[c]);return[l,d]}function L(e="architect"){const n=r.useId();return`${e}-${n}`}let te=0;function tt(e="architect"){return te+=1,`${e}-${te}`}function D(...e){return e.filter(Boolean).join(" ")}function G(e,n){return t=>{e==null||e(t),t.defaultPrevented||n==null||n(t)}}function ie(...e){return n=>{e.forEach(t=>{typeof t=="function"?t(n):t!=null&&(t.current=n)})}}const O=typeof window<"u";function rt(){return O?window:void 0}function ot(){return O?document:void 0}const ae=r.createContext(null);function W(){const e=r.useContext(ae);if(!e)throw new Error("Dialog components must be used within a Dialog");return e}const ce=({open:e,defaultOpen:n=!1,onOpenChange:t,onDismiss:o,closeOnOutsideClick:a=!0,closeOnEscape:c=!0,trapFocus:l=!0,restoreFocus:i=!0,role:d="dialog",children:f})=>{const[p,m]=ne({value:e,defaultValue:n,onChange:t}),b=L("dialog-title"),w=L("dialog-description"),u=g=>{m(g),!g&&o&&o()};r.useEffect(()=>{if(!p||!O)return;const g=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=g}},[p]);const y={open:p??!1,setOpen:u,titleId:b,descriptionId:w,closeOnOutsideClick:a,closeOnEscape:c,role:d};return s.jsx(ae.Provider,{value:y,children:f})};ce.displayName="Dialog";const le=r.forwardRef(({className:e,onClick:n,children:t,...o},a)=>{const{open:c,setOpen:l,closeOnOutsideClick:i}=W();if(!c||!O)return null;const d=f=>{i&&f.target===f.currentTarget&&l(!1)};return U.createPortal(s.jsx("div",{ref:a,className:e,onClick:G(n,d),"data-state":c?"open":"closed",...o,children:t}),document.body)});le.displayName="DialogOverlay";const de=r.forwardRef(({className:e,children:n,"aria-labelledby":t,"aria-describedby":o,...a},c)=>{const{open:l,setOpen:i,titleId:d,descriptionId:f,closeOnEscape:p,role:m}=W(),b=se({enabled:l,autoFocus:!0,restoreFocus:!0});return Y({enabled:l&&p,onEscape:()=>i(!1)}),l?s.jsx("div",{ref:ie(c,b),role:m,"aria-modal":"true","aria-labelledby":t||d,"aria-describedby":o||f,className:e,"data-state":l?"open":"closed",...a,children:n}):null});de.displayName="DialogContent";const ue=r.forwardRef(({className:e,level:n=2,children:t,...o},a)=>{const{titleId:c}=W(),l=`h${n}`;return s.jsx(l,{ref:a,id:c,className:e,...o,children:t})});ue.displayName="DialogTitle";const fe=r.forwardRef(({className:e,children:n,...t},o)=>{const{descriptionId:a}=W();return s.jsx("p",{ref:o,id:a,className:e,...t,children:n})});fe.displayName="DialogDescription";const pe=r.forwardRef(({className:e,onClick:n,children:t,...o},a)=>{const{setOpen:c}=W(),l=()=>{c(!1)};return s.jsx("button",{ref:a,type:"button",className:e,onClick:G(n,l),"aria-label":"Close dialog",...o,children:t})});pe.displayName="DialogClose";const xe=r.forwardRef(({children:e,className:n,loading:t=!1,disabled:o=!1,iconLeft:a,iconRight:c,loadingText:l="Loading",as:i="button",type:d="button","aria-label":f,"aria-describedby":p,onClick:m,...b},w)=>{const u=o||t,y=v=>{if(u){v.preventDefault();return}m==null||m(v)},g={"aria-label":f,"aria-describedby":p,"aria-disabled":u?!0:void 0,"aria-busy":t?!0:void 0},j={className:D(n),...g,...b};return i==="button"?s.jsxs("button",{...j,ref:w,type:d,disabled:u,onClick:y,"data-loading":t?"true":void 0,"data-disabled":u?"true":void 0,children:[t&&s.jsx("span",{className:"button-loader","aria-hidden":"true"}),!t&&a&&s.jsx("span",{className:"button-icon-left","aria-hidden":"true",children:a}),s.jsx("span",{className:"button-content",children:t?l:e}),!t&&c&&s.jsx("span",{className:"button-icon-right","aria-hidden":"true",children:c}),t&&s.jsx("span",{className:"sr-only",role:"status","aria-live":"polite",children:l})]}):i==="a"?s.jsxs("a",{...j,ref:w,onClick:y,role:"button",tabIndex:u?-1:0,"data-loading":t?"true":void 0,"data-disabled":u?"true":void 0,children:[t&&s.jsx("span",{className:"button-loader","aria-hidden":"true"}),!t&&a&&s.jsx("span",{className:"button-icon-left","aria-hidden":"true",children:a}),s.jsx("span",{className:"button-content",children:t?l:e}),!t&&c&&s.jsx("span",{className:"button-icon-right","aria-hidden":"true",children:c}),t&&s.jsx("span",{className:"sr-only",role:"status","aria-live":"polite",children:l})]}):s.jsxs("div",{...j,ref:w,role:"button",tabIndex:u?-1:0,onClick:y,onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&(v.preventDefault(),u||m==null||m(v))},"data-loading":t?"true":void 0,"data-disabled":u?"true":void 0,children:[t&&s.jsx("span",{className:"button-loader","aria-hidden":"true"}),!t&&a&&s.jsx("span",{className:"button-icon-left","aria-hidden":"true",children:a}),s.jsx("span",{className:"button-content",children:t?l:e}),!t&&c&&s.jsx("span",{className:"button-icon-right","aria-hidden":"true",children:c}),t&&s.jsx("span",{className:"sr-only",role:"status","aria-live":"polite",children:l})]})});xe.displayName="Button";const q=r.forwardRef(({className:e,invalid:n=!1,errorId:t,labelId:o,disabled:a=!1,required:c=!1,prefix:l,suffix:i,hideNumberSpinners:d=!1,hideDateIcon:f=!1,showPasswordToggle:p=!1,wrapperClassName:m,wrapperStyle:b,type:w="text","aria-describedby":u,"aria-labelledby":y,onClick:g,onFocus:j,...v},x)=>{const[h,k]=r.useState(!1),N=r.useRef(null),T=r.useCallback(A=>{N.current=A,typeof x=="function"?x(A):x&&(x.current=A)},[x]),E=r.useCallback(()=>{if(["date","time","datetime-local"].includes(w)&&N.current&&typeof N.current.showPicker=="function")try{N.current.showPicker()}catch(X){console.warn("showPicker() not supported:",X)}},[w]),I=r.useCallback(A=>{f&&["date","time","datetime-local"].includes(w)&&E(),g==null||g(A)},[f,w,E,g]),C=r.useCallback(A=>{f&&["date","time","datetime-local"].includes(w)&&E(),j==null||j(A)},[f,w,E,j]),z=[u,n&&t].filter(Boolean).join(" ")||void 0,B=y||o,$=p&&w==="password"&&h?"text":w,P=D(e,d&&w==="number"&&"input-hide-spinners",f&&["date","time","datetime-local"].includes(w)&&"input-hide-date-icon");return!l&&!i&&!(p&&w==="password")?s.jsx("input",{ref:T,type:$,className:P,disabled:a,required:c,"aria-invalid":n?"true":void 0,"aria-describedby":z,"aria-labelledby":B,"aria-required":c?"true":void 0,"data-invalid":n?"true":void 0,"data-disabled":a?"true":void 0,onClick:I,onFocus:C,...v}):s.jsxs("div",{className:D("input-wrapper",m),style:b,children:[l&&s.jsx("span",{className:"input-prefix","aria-hidden":"true",children:l}),s.jsx("input",{ref:T,type:$,className:P,disabled:a,required:c,"aria-invalid":n?"true":void 0,"aria-describedby":z,"aria-labelledby":B,"aria-required":c?"true":void 0,"data-invalid":n?"true":void 0,"data-disabled":a?"true":void 0,onClick:I,onFocus:C,...v}),i&&s.jsx("span",{className:"input-suffix","aria-hidden":"true",children:i}),p&&w==="password"&&s.jsx("button",{type:"button",className:"input-password-toggle",onClick:()=>k(A=>!A),"aria-label":h?"Hide password":"Show password",tabIndex:-1,children:h?s.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[s.jsx("path",{d:"M2 10s3-6 8-6 8 6 8 6-3 6-8 6-8-6-8-6z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),s.jsx("circle",{cx:"10",cy:"10",r:"3",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}):s.jsx("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:s.jsx("path",{d:"M14.12 14.12A8 8 0 0 1 2 10s3-6 8-6a8 8 0 0 1 4.12 1.12m2.83 2.83A8 8 0 0 1 18 10s-3 6-8 6a8 8 0 0 1-2.95-.55M1 1l18 18",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})})]})});q.displayName="Input";const Q=r.forwardRef(({children:e,className:n,required:t=!1,requiredIndicator:o="*",showRequiredIndicator:a=!0,...c},l)=>s.jsxs("label",{ref:l,className:D(n),...c,children:[e,t&&a&&s.jsx("span",{className:"label-required","aria-label":"required",role:"presentation",children:o})]}));Q.displayName="Label";const _=r.forwardRef(({children:e,className:n,show:t=!0,...o},a)=>!t||!e?null:s.jsx("p",{ref:a,className:D(n),role:"alert","aria-live":"polite",...o,children:e}));_.displayName="ErrorMessage";const me=r.forwardRef(({label:e,error:n,inputProps:t,labelProps:o,errorProps:a,required:c=!1,id:l,className:i,...d},f)=>{const p=L("form-field"),m=l||p,b=`${m}-error`,w=`${m}-label`,u=!!n;return s.jsxs("div",{className:i,...d,children:[s.jsx(Q,{id:w,htmlFor:m,required:c,...o,children:e}),s.jsx(q,{ref:f,id:m,labelId:w,errorId:b,invalid:u,required:c,...t}),s.jsx(_,{id:b,show:u,...a,children:n})]})});me.displayName="FormField";const be=r.createContext(null),J=()=>{const e=r.useContext(be);if(!e)throw new Error("Dropdown components must be used within Dropdown");return e},he=({children:e,open:n,defaultOpen:t=!1,onOpenChange:o,className:a,...c})=>{const[l,i]=r.useState(t),d=n!==void 0,f=d?n:l,p=r.useCallback(j=>{d||i(j),o==null||o(j)},[d,o]),m=L("dropdown-trigger"),b=L("dropdown-menu"),[w,u]=r.useState(-1),y=r.useRef([]),g={open:f,setOpen:p,triggerId:m,menuId:b,activeIndex:w,setActiveIndex:u,itemsRef:y};return s.jsx(be.Provider,{value:g,children:s.jsx("div",{className:D("dropdown",a),...c,children:e})})},we=r.forwardRef(({children:e,className:n,onClick:t,onKeyDown:o,...a},c)=>{const{open:l,setOpen:i,triggerId:d,menuId:f}=J(),p=b=>{i(!l),t==null||t(b)},m=b=>{(b.key==="ArrowDown"||b.key==="ArrowUp")&&(b.preventDefault(),i(!0)),o==null||o(b)};return s.jsx("button",{ref:c,id:d,type:"button","aria-haspopup":"true","aria-expanded":l,"aria-controls":f,className:D("dropdown-trigger",n),onClick:p,onKeyDown:m,...a,children:e})});we.displayName="DropdownTrigger";const ye=r.forwardRef(({children:e,className:n,portal:t=!0,placement:o="bottom",style:a,...c},l)=>{const{open:i,setOpen:d,menuId:f,triggerId:p,setActiveIndex:m,itemsRef:b}=J(),w=r.useRef(null),[u,y]=r.useState({top:0,left:0});r.useEffect(()=>{if(!i||!t)return;const x=()=>{const h=document.getElementById(p),k=w.current;if(!h)return;const N=h.getBoundingClientRect(),T=(k==null?void 0:k.offsetHeight)||0;let E;o==="top"?E=N.top+window.scrollY-T-4:E=N.bottom+window.scrollY+4,y({top:E,left:N.left+window.scrollX})};return x(),window.addEventListener("scroll",x,!0),window.addEventListener("resize",x),()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",x)}},[i,t,p,o]),Y({enabled:i,onEscape:()=>d(!1)}),r.useEffect(()=>{if(!i)return;const x=h=>{const k=h.target,N=document.getElementById(p),T=w.current;T&&!T.contains(k)&&N&&!N.contains(k)&&d(!1)};return document.addEventListener("mousedown",x),()=>document.removeEventListener("mousedown",x)},[i,d,p]);const g=x=>{var k,N,T;const h=b.current.filter(E=>E&&!E.hasAttribute("disabled"));switch(x.key){case"ArrowDown":x.preventDefault(),m(E=>{var C;const I=E+1>=h.length?0:E+1;return(C=h[I])==null||C.focus(),I});break;case"ArrowUp":x.preventDefault(),m(E=>{var C;const I=E-1<0?h.length-1:E-1;return(C=h[I])==null||C.focus(),I});break;case"Home":x.preventDefault(),m(0),(k=h[0])==null||k.focus();break;case"End":x.preventDefault(),m(h.length-1),(N=h[h.length-1])==null||N.focus();break;case"Escape":x.preventDefault(),d(!1),(T=document.getElementById(p))==null||T.focus();break}};if(r.useEffect(()=>{if(i){const x=b.current.filter(h=>h&&!h.hasAttribute("disabled"));x.length>0&&(m(0),setTimeout(()=>{var h;return(h=x[0])==null?void 0:h.focus()},0))}else m(-1)},[i,m]),!i)return null;const j=t?{...a,position:"absolute",top:`${u.top}px`,left:`${u.left}px`,zIndex:9999}:a,v=s.jsx("div",{ref:x=>{w.current=x,typeof l=="function"?l(x):l&&(l.current=x)},id:f,role:"menu","aria-labelledby":p,className:D("dropdown-menu",n),style:j,onKeyDown:g,...c,children:e});return t&&O?U.createPortal(v,document.body):v});ye.displayName="DropdownMenu";const ve=r.forwardRef(({children:e,className:n,disabled:t=!1,onClick:o,...a},c)=>{const{setOpen:l,itemsRef:i,activeIndex:d}=J(),f=r.useRef(null),[p,m]=r.useState(-1);r.useEffect(()=>{const u=f.current;if(u){const y=i.current.length;return i.current[y]=u,m(y),()=>{i.current[y]=null}}},[i]);const b=u=>{t||(o==null||o(u),l(!1))},w=u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),t||b(u))};return s.jsx("button",{ref:u=>{f.current=u,typeof c=="function"?c(u):c&&(c.current=u)},type:"button",role:"menuitem",tabIndex:-1,disabled:t,"aria-disabled":t?"true":void 0,className:D("dropdown-item",n),onClick:b,onKeyDown:w,"data-active":p===d?"true":void 0,...a,children:e})});ve.displayName="DropdownItem";he.displayName="Dropdown";const ge=r.createContext(null),Z=()=>{const e=r.useContext(ge);if(!e)throw new Error("Tabs components must be used within Tabs");return e},je=({children:e,value:n,defaultValue:t,onValueChange:o,orientation:a="horizontal",activationMode:c="automatic",className:l,...i})=>{const[d,f]=r.useState(t||""),p=n!==void 0,m=p?n:d,b=r.useCallback(v=>{p||f(v),o==null||o(v)},[p,o]),w=L("tabs"),u=r.useRef(new Map),y=r.useCallback((v,x)=>{u.current.set(v,x)},[]),g=r.useCallback(v=>{u.current.delete(v)},[]),j={selectedValue:m,setSelectedValue:b,orientation:a,activationMode:c,tabsId:w,registerTab:y,unregisterTab:g,tabs:u.current};return s.jsx(ge.Provider,{value:j,children:s.jsx("div",{className:D("tabs",l),"data-orientation":a,...i,children:e})})},ke=r.forwardRef(({children:e,className:n,...t},o)=>{const{orientation:a}=Z();return s.jsx("div",{ref:o,role:"tablist","aria-orientation":a,className:D("tabs-list",n),"data-orientation":a,...t,children:e})});ke.displayName="TabsList";const Ne=r.forwardRef(({children:e,className:n,value:t,disabled:o=!1,onKeyDown:a,...c},l)=>{const{selectedValue:i,setSelectedValue:d,orientation:f,activationMode:p,tabsId:m,registerTab:b,unregisterTab:w,tabs:u}=Z(),y=r.useRef(null),g=i===t;r.useEffect(()=>{const x=y.current;if(x)return b(t,x),()=>w(t)},[t,b,w]),r.useEffect(()=>{!i&&u.size>0&&Array.from(u.keys())[0]===t&&d(t)},[i,t,u,d]);const j=()=>{o||d(t)},v=x=>{if(o)return;const k=Array.from(u.keys()).filter(E=>{const I=u.get(E);return I&&!I.hasAttribute("disabled")}),N=k.indexOf(t);let T=N;if(f==="horizontal"?x.key==="ArrowLeft"?(x.preventDefault(),T=N-1<0?k.length-1:N-1):x.key==="ArrowRight"&&(x.preventDefault(),T=N+1>=k.length?0:N+1):x.key==="ArrowUp"?(x.preventDefault(),T=N-1<0?k.length-1:N-1):x.key==="ArrowDown"&&(x.preventDefault(),T=N+1>=k.length?0:N+1),x.key==="Home"?(x.preventDefault(),T=0):x.key==="End"&&(x.preventDefault(),T=k.length-1),T!==N){const E=k[T],I=u.get(E);I&&(I.focus(),p==="automatic"&&d(E))}p==="manual"&&(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),d(t)),a==null||a(x)};return s.jsx("button",{ref:x=>{y.current=x,typeof l=="function"?l(x):l&&(l.current=x)},type:"button",role:"tab",id:`${m}-tab-${t}`,"aria-selected":g,"aria-controls":`${m}-panel-${t}`,tabIndex:g?0:-1,disabled:o,className:D("tabs-trigger",n),"data-state":g?"active":"inactive","data-orientation":f,onClick:j,onKeyDown:v,...c,children:e})});Ne.displayName="TabsTrigger";const Ie=r.forwardRef(({children:e,className:n,value:t,...o},a)=>{const{selectedValue:c,tabsId:l}=Z(),i=c===t;return i?s.jsx("div",{ref:a,role:"tabpanel",id:`${l}-panel-${t}`,"aria-labelledby":`${l}-tab-${t}`,tabIndex:0,className:D("tabs-content",n),"data-state":i?"active":"inactive",...o,children:e}):null});Ie.displayName="TabsContent";je.displayName="Tabs";const Te=r.createContext(null),Ee=()=>{const e=r.useContext(Te);if(!e)throw new Error("Accordion components must be used within Accordion");return e},De=r.createContext(null),Re=()=>{const e=r.useContext(De);if(!e)throw new Error("AccordionTrigger and AccordionContent must be used within AccordionItem");return e},Se=({children:e,type:n="single",value:t,defaultValue:o,onValueChange:a,collapsible:c=!1,disabled:l=!1,className:i,...d})=>{const[f,p]=r.useState(o||(n==="single"?"":[])),m=t!==void 0,b=m?t:f,w=r.useCallback(g=>{let j;if(n==="single")b===g&&c?j="":j=g;else{const v=b||[];v.includes(g)?j=v.filter(x=>x!==g):j=[...v,g]}m||p(j),a==null||a(j)},[n,b,c,m,a]),u=L("accordion"),y={type:n,value:b,onValueChange:w,collapsible:c,disabled:l,accordionId:u};return s.jsx(Te.Provider,{value:y,children:s.jsx("div",{className:D("accordion",i),...d,children:e})})},Ce=r.forwardRef(({children:e,className:n,value:t,disabled:o=!1,...a},c)=>{const{type:l,value:i,disabled:d,accordionId:f}=Ee(),p=d||o,m=l==="single"?i===t:Array.isArray(i)&&i.includes(t),b=`${f}-trigger-${t}`,w=`${f}-content-${t}`,u={value:t,disabled:p,isOpen:m,triggerId:b,contentId:w};return s.jsx(De.Provider,{value:u,children:s.jsx("div",{ref:c,className:D("accordion-item",n),"data-state":m?"open":"closed","data-disabled":p?"true":void 0,...a,children:e})})});Ce.displayName="AccordionItem";const Ae=r.forwardRef(({children:e,className:n,...t},o)=>{const{onValueChange:a}=Ee(),{value:c,disabled:l,isOpen:i,triggerId:d,contentId:f}=Re(),p=()=>{l||a(c)};return s.jsx("h3",{className:"accordion-header",children:s.jsx("button",{ref:o,type:"button",id:d,"aria-expanded":i,"aria-controls":f,disabled:l,className:D("accordion-trigger",n),"data-state":i?"open":"closed",onClick:p,...t,children:e})})});Ae.displayName="AccordionTrigger";const $e=r.forwardRef(({children:e,className:n,...t},o)=>{const{isOpen:a,triggerId:c,contentId:l}=Re(),i=r.useRef(null),[d,f]=r.useState(a?void 0:0);return r.useEffect(()=>{const p=i.current;if(p)if(a){const m=p.scrollHeight;f(m);const b=setTimeout(()=>{f(void 0)},300);return()=>clearTimeout(b)}else{const m=p.scrollHeight;f(m),p.offsetHeight,requestAnimationFrame(()=>{f(0)})}},[a]),s.jsx("div",{ref:p=>{i.current=p,typeof o=="function"?o(p):o&&(o.current=p)},id:l,role:"region","aria-labelledby":c,className:D("accordion-content",n),"data-state":a?"open":"closed",style:{height:d!==void 0?`${d}px`:"auto",overflow:"hidden",transition:"height 300ms cubic-bezier(0.4, 0, 0.2, 1)"},...t,children:s.jsx("div",{className:"accordion-content-inner",children:e})})});$e.displayName="AccordionContent";Se.displayName="Accordion";const Le=r.createContext(null),Be=()=>{const e=r.useContext(Le);if(!e)throw new Error("Tooltip components must be used within Tooltip");return e},st=typeof window<"u",ze=({children:e,delayShow:n=200,delayHide:t=0,defaultOpen:o=!1,open:a,onOpenChange:c})=>{const[l,i]=r.useState(o),d=a!==void 0,f=d?a:l,p=r.useCallback(u=>{d||i(u),c==null||c(u)},[d,c]),m=L("tooltip"),b=r.useRef(null),w={open:f,setOpen:p,tooltipId:m,triggerRef:b,delayShow:n,delayHide:t};return s.jsx(Le.Provider,{value:w,children:e})},Pe=r.forwardRef(({children:e,className:n,asChild:t=!1,onMouseEnter:o,onMouseLeave:a,onFocus:c,onBlur:l,...i},d)=>{const{setOpen:f,tooltipId:p,triggerRef:m,delayShow:b,delayHide:w}=Be(),u=r.useRef(),y=r.useRef(),g=r.useCallback(h=>{clearTimeout(y.current),u.current=setTimeout(()=>{f(!0)},b),o==null||o(h)},[f,b,o]),j=r.useCallback(h=>{clearTimeout(u.current),y.current=setTimeout(()=>{f(!1)},w),a==null||a(h)},[f,w,a]),v=r.useCallback(h=>{clearTimeout(y.current),f(!0),c==null||c(h)},[f,c]),x=r.useCallback(h=>{clearTimeout(u.current),f(!1),l==null||l(h)},[f,l]);return r.useEffect(()=>()=>{clearTimeout(u.current),clearTimeout(y.current)},[]),t&&r.isValidElement(e)?r.cloneElement(e,{ref:h=>{m.current=h,typeof d=="function"?d(h):d&&(d.current=h)},"aria-describedby":p,onMouseEnter:g,onMouseLeave:j,onFocus:v,onBlur:x}):s.jsx("span",{ref:h=>{m.current=h,typeof d=="function"?d(h):d&&(d.current=h)},className:D("tooltip-trigger",n),"aria-describedby":p,onMouseEnter:g,onMouseLeave:j,onFocus:v,onBlur:x,...i,children:e})});Pe.displayName="TooltipTrigger";const Fe=r.forwardRef(({children:e,className:n,placement:t="top",portal:o=!0,style:a,...c},l)=>{const{open:i,tooltipId:d,triggerRef:f}=Be(),p=r.useRef(null),[m,b]=r.useState({top:0,left:0});if(r.useEffect(()=>{if(!i||!o)return;const y=()=>{const g=f.current,j=p.current;if(!g||!j)return;const v=g.getBoundingClientRect(),x=j.getBoundingClientRect();let h=0,k=0;switch(t){case"top":h=v.top+window.scrollY-x.height-8,k=v.left+window.scrollX+v.width/2-x.width/2;break;case"bottom":h=v.bottom+window.scrollY+8,k=v.left+window.scrollX+v.width/2-x.width/2;break;case"left":h=v.top+window.scrollY+v.height/2-x.height/2,k=v.left+window.scrollX-x.width-8;break;case"right":h=v.top+window.scrollY+v.height/2-x.height/2,k=v.right+window.scrollX+8;break}b({top:h,left:k})};return y(),window.addEventListener("scroll",y,!0),window.addEventListener("resize",y),()=>{window.removeEventListener("scroll",y,!0),window.removeEventListener("resize",y)}},[i,o,t,f]),!i)return null;const w=o?{...a,position:"absolute",top:`${m.top}px`,left:`${m.left}px`,zIndex:9999}:a,u=s.jsx("div",{ref:y=>{p.current=y,typeof l=="function"?l(y):l&&(l.current=y)},id:d,role:"tooltip",className:D("tooltip-content",n),"data-placement":t,style:w,...c,children:e});return o&&st?U.createPortal(u,document.body):u});Fe.displayName="TooltipContent";ze.displayName="Tooltip";const Oe=r.createContext(null),K=()=>{const e=r.useContext(Oe);if(!e)throw new Error("useToast must be used within ToastProvider");return e},nt=typeof window<"u";let it=0;const at=()=>`toast-${++it}`,ct=({children:e,position:n="bottom-right",maxToasts:t=5})=>{const[o,a]=r.useState([]),c=r.useCallback(d=>{const f=at(),p={...d,id:f,duration:d.duration??5e3,variant:d.variant??"default"};return a(m=>[...m,p].slice(-t)),f},[t]),l=r.useCallback(d=>{a(f=>f.filter(p=>p.id!==d))},[]),i={toasts:o,addToast:c,removeToast:l,position:n};return s.jsxs(Oe.Provider,{value:i,children:[e,s.jsx(lt,{})]})},lt=()=>{const{toasts:e,position:n}=K();if(!nt||e.length===0)return null;const t={"top-left":{top:16,left:16},"top-center":{top:16,left:"50%",transform:"translateX(-50%)"},"top-right":{top:16,right:16},"bottom-left":{bottom:16,left:16},"bottom-center":{bottom:16,left:"50%",transform:"translateX(-50%)"},"bottom-right":{bottom:16,right:16}};return U.createPortal(s.jsx("div",{className:"toast-container",style:{position:"fixed",zIndex:1e4,display:"flex",flexDirection:"column",gap:"8px",pointerEvents:"none",...t[n]},"aria-live":"polite","aria-atomic":"false",children:e.map(o=>s.jsx(He,{toast:o},o.id))}),document.body)},He=r.forwardRef(({toast:e},n)=>{const{removeToast:t}=K(),[o,a]=r.useState(!1);r.useEffect(()=>{if(e.duration&&e.duration>0){const i=setTimeout(()=>{c()},e.duration);return()=>clearTimeout(i)}},[e.duration,e.id]);const c=()=>{a(!0),setTimeout(()=>{var i;t(e.id),(i=e.onDismiss)==null||i.call(e)},200)},l={default:{backgroundColor:"#1f2937",color:"white",border:"1px solid #374151"},success:{backgroundColor:"#10b981",color:"white",border:"1px solid #059669"},error:{backgroundColor:"#ef4444",color:"white",border:"1px solid #dc2626"},warning:{backgroundColor:"#f59e0b",color:"#1f2937",border:"1px solid #d97706"},info:{backgroundColor:"#3b82f6",color:"white",border:"1px solid #2563eb"}};return s.jsxs("div",{ref:n,role:"status","aria-live":"polite",className:D("toast-item",`toast-${e.variant}`),"data-variant":e.variant,"data-exiting":o,style:{pointerEvents:"auto",minWidth:"300px",maxWidth:"500px",padding:"16px",borderRadius:"8px",boxShadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",display:"flex",alignItems:"flex-start",gap:"12px",animation:o?"toast-exit 200ms ease-out":"toast-enter 200ms ease-out",...l[e.variant||"default"]},children:[s.jsxs("div",{style:{flex:1},children:[e.title&&s.jsx("div",{style:{fontWeight:"600",fontSize:"14px",marginBottom:e.description?"4px":0},children:e.title}),e.description&&s.jsx("div",{style:{fontSize:"13px",opacity:.9},children:e.description})]}),s.jsx("button",{onClick:c,"aria-label":"Dismiss notification",style:{background:"transparent",border:"none",color:"inherit",cursor:"pointer",padding:"4px",display:"flex",alignItems:"center",justifyContent:"center",opacity:.7,transition:"opacity 0.2s"},onMouseEnter:i=>i.currentTarget.style.opacity="1",onMouseLeave:i=>i.currentTarget.style.opacity="0.7",children:s.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",children:s.jsx("path",{d:"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"})})}),s.jsx("style",{children:`
|
|
2
|
+
@keyframes toast-enter {
|
|
3
|
+
from {
|
|
4
|
+
opacity: 0;
|
|
5
|
+
transform: translateY(20px);
|
|
6
|
+
}
|
|
7
|
+
to {
|
|
8
|
+
opacity: 1;
|
|
9
|
+
transform: translateY(0);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
@keyframes toast-exit {
|
|
13
|
+
from {
|
|
14
|
+
opacity: 1;
|
|
15
|
+
transform: translateY(0);
|
|
16
|
+
}
|
|
17
|
+
to {
|
|
18
|
+
opacity: 0;
|
|
19
|
+
transform: translateY(20px);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
`})]})});He.displayName="ToastItem";const dt=()=>{const{addToast:e}=K(),n=r.useCallback(l=>e(l),[e]),t=r.useCallback((l,i)=>e({title:l,description:i,variant:"success"}),[e]),o=r.useCallback((l,i)=>e({title:l,description:i,variant:"error"}),[e]),a=r.useCallback((l,i)=>e({title:l,description:i,variant:"warning"}),[e]),c=r.useCallback((l,i)=>e({title:l,description:i,variant:"info"}),[e]);return{toast:n,success:t,error:o,warning:a,info:c}},Ue=r.forwardRef(({className:e,checked:n,defaultChecked:t,indeterminate:o=!1,disabled:a=!1,invalid:c=!1,label:l,helperText:i,errorMessage:d,onCheckedChange:f,onChange:p,id:m,...b},w)=>{const u=r.useCallback(h=>{p==null||p(h),f==null||f(h.target.checked)},[p,f]),y=r.useRef(null);r.useEffect(()=>{y.current&&(y.current.indeterminate=o)},[o]),r.useImperativeHandle(w,()=>y.current);const g=m||`checkbox-${r.useId()}`,j=i?`${g}-helper`:void 0,v=d?`${g}-error`:void 0,x=[j,v].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{className:D("checkbox-wrapper",e),children:[s.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"8px"},children:[s.jsx("input",{ref:y,type:"checkbox",id:g,checked:n,defaultChecked:t,disabled:a,"aria-invalid":c,"aria-describedby":x,onChange:u,className:"checkbox-input","data-invalid":c?"true":void 0,"data-indeterminate":o?"true":void 0,...b}),l&&s.jsx("label",{htmlFor:g,className:"checkbox-label",style:{cursor:a?"not-allowed":"pointer",opacity:a?.6:1},children:l})]}),i&&!d&&s.jsx("div",{id:j,className:"checkbox-helper-text",style:{fontSize:"13px",color:"#6b7280",marginTop:"4px",marginLeft:"28px"},children:i}),d&&s.jsx("div",{id:v,className:"checkbox-error-message",role:"alert",style:{fontSize:"13px",color:"#ef4444",marginTop:"4px",marginLeft:"28px"},children:d})]})});Ue.displayName="Checkbox";const We=r.createContext(null),ut=()=>{const e=r.useContext(We);if(!e)throw new Error("Radio must be used within RadioGroup");return e},Ye=r.forwardRef(({className:e,name:n,value:t,defaultValue:o,disabled:a=!1,invalid:c=!1,label:l,helperText:i,errorMessage:d,onValueChange:f,children:p,...m},b)=>{const[w,u]=r.useState(o),y=t!==void 0,g=y?t:w,j=r.useCallback(T=>{y||u(T),f==null||f(T)},[y,f]),v=r.useId(),x=i?`${v}-helper`:void 0,h=d?`${v}-error`:void 0,k=[x,h].filter(Boolean).join(" ")||void 0,N={name:n,value:g,disabled:a,onChange:j};return s.jsxs("div",{ref:b,className:D("radio-group",e),...m,children:[l&&s.jsx("div",{className:"radio-group-label",style:{fontSize:"14px",fontWeight:"500",marginBottom:"12px",color:a?"#9ca3af":"#1f2937"},children:l}),s.jsx(We.Provider,{value:N,children:s.jsx("div",{role:"radiogroup","aria-invalid":c,"aria-describedby":k,style:{display:"flex",flexDirection:"column",gap:"8px"},children:p})}),i&&!d&&s.jsx("div",{id:x,className:"radio-group-helper-text",style:{fontSize:"13px",color:"#6b7280",marginTop:"8px"},children:i}),d&&s.jsx("div",{id:h,className:"radio-group-error-message",role:"alert",style:{fontSize:"13px",color:"#ef4444",marginTop:"8px"},children:d})]})});Ye.displayName="RadioGroup";const Ke=r.forwardRef(({className:e,value:n,label:t,disabled:o,onChange:a,...c},l)=>{const i=ut(),d=o||i.disabled,f=i.value===n,p=r.useCallback(b=>{var w;a==null||a(b),(w=i.onChange)==null||w.call(i,n)},[a,i,n]),m=`${i.name}-${n}`;return s.jsx("div",{className:D("radio-wrapper",e),children:s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[s.jsx("input",{ref:l,type:"radio",id:m,name:i.name,value:n,checked:f,disabled:d,onChange:p,className:"radio-input",...c}),t&&s.jsx("label",{htmlFor:m,className:"radio-label",style:{cursor:d?"not-allowed":"pointer",opacity:d?.6:1,fontSize:"14px"},children:t})]})})});Ke.displayName="Radio";function ft(e,n){r.useEffect(()=>{const t=Array.isArray(e)?e:[e],o=a=>{const c=a.target;t.every(i=>!i.current||!i.current.contains(c))&&n()};return document.addEventListener("mousedown",o),document.addEventListener("touchstart",o),()=>{document.removeEventListener("mousedown",o),document.removeEventListener("touchstart",o)}},[e,n])}const pt=typeof window<"u",Xe=r.forwardRef(({className:e,options:n,value:t,defaultValue:o,placeholder:a="Select an option",disabled:c=!1,invalid:l=!1,multiple:i=!1,searchable:d=!1,label:f,helperText:p,errorMessage:m,onValueChange:b,renderValue:w,...u},y)=>{const[g,j]=r.useState(o||(i?[]:"")),v=t!==void 0,x=v?t:g,[h,k]=r.useState(!1),[N,T]=r.useState(""),[E,I]=r.useState(0),C=r.useRef(null),z=r.useRef(null),B=r.useRef(null);r.useImperativeHandle(y,()=>C.current),ft([C,z],()=>k(!1)),Y({enabled:h,onEscape:()=>k(!1)});const $=d?n.filter(R=>R.label.toLowerCase().includes(N.toLowerCase())):n;r.useEffect(()=>{h&&d&&B.current&&B.current.focus()},[h,d]),r.useEffect(()=>{h||(T(""),I(0))},[h]);const P=r.useCallback(R=>{v||j(R),b==null||b(R)},[v,b]),A=r.useCallback(R=>{if(i){const S=x||[],H=S.includes(R)?S.filter(Ze=>Ze!==R):[...S,R];P(H)}else P(R),k(!1)},[i,x,P]),X=r.useCallback(R=>{if(!c)switch(R.key){case"Enter":case" ":if(!h)R.preventDefault(),k(!0);else if(!d){R.preventDefault();const S=$[E];S&&!S.disabled&&A(S.value)}break;case"ArrowDown":R.preventDefault(),h?I(S=>S<$.length-1?S+1:S):k(!0);break;case"ArrowUp":R.preventDefault(),h&&I(S=>S>0?S-1:S);break;case"Home":h&&(R.preventDefault(),I(0));break;case"End":h&&(R.preventDefault(),I($.length-1));break;case"Escape":h&&(R.preventDefault(),k(!1));break}},[c,h,d,E,$,A]),Qe=()=>{if(w)return w(x);if(i){const S=n.filter(H=>x.includes(H.value));return S.length>0?S.map(H=>H.label).join(", "):a}const R=n.find(S=>S.value===x);return R?R.label:a},_e=R=>i?x.includes(R):x===R,F=r.useId(),V=p?`${F}-helper`:void 0,ee=m?`${F}-error`:void 0,Je=[V,ee].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{className:D("select-wrapper",e),children:[f&&s.jsx("label",{htmlFor:F,className:"select-label",style:{display:"block",fontSize:"14px",fontWeight:"500",marginBottom:"8px",color:c?"#9ca3af":"#1f2937"},children:f}),s.jsxs("button",{ref:C,id:F,type:"button",role:"combobox","aria-expanded":h,"aria-haspopup":"listbox","aria-controls":`${F}-listbox`,"aria-invalid":l,"aria-describedby":Je,disabled:c,onClick:()=>!c&&k(!h),onKeyDown:X,className:"select-trigger","data-invalid":l?"true":void 0,style:{width:"100%",padding:"8px 12px",fontSize:"14px",textAlign:"left",backgroundColor:c?"#f3f4f6":"white",border:`1px solid ${l?"#ef4444":"#d1d5db"}`,borderRadius:"6px",cursor:c?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"8px"},...u,children:[s.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:Qe()}),s.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",style:{transition:"transform 0.2s",transform:h?"rotate(180deg)":"rotate(0deg)"},children:s.jsx("path",{d:"M4 6l4 4 4-4",stroke:"currentColor",strokeWidth:"2",fill:"none"})})]}),h&&pt&&U.createPortal(s.jsx(Me,{ref:z,id:`${F}-listbox`,triggerRef:C,options:$,searchable:d,searchQuery:N,onSearchChange:T,searchInputRef:B,highlightedIndex:E,onSelect:A,isSelected:_e,multiple:i}),document.body),p&&!m&&s.jsx("div",{id:V,className:"select-helper-text",style:{fontSize:"13px",color:"#6b7280",marginTop:"4px"},children:p}),m&&s.jsx("div",{id:ee,className:"select-error-message",role:"alert",style:{fontSize:"13px",color:"#ef4444",marginTop:"4px"},children:m})]})});Xe.displayName="Select";const Me=r.forwardRef(({id:e,triggerRef:n,options:t,searchable:o,searchQuery:a,onSearchChange:c,searchInputRef:l,highlightedIndex:i,onSelect:d,isSelected:f,multiple:p},m)=>{const[b,w]=r.useState({top:0,left:0,width:0});return r.useEffect(()=>{const u=()=>{if(!n.current)return;const y=n.current.getBoundingClientRect();w({top:y.bottom+window.scrollY+4,left:y.left+window.scrollX,width:y.width})};return u(),window.addEventListener("scroll",u,!0),window.addEventListener("resize",u),()=>{window.removeEventListener("scroll",u,!0),window.removeEventListener("resize",u)}},[n]),s.jsxs("div",{ref:m,id:e,role:"listbox","aria-multiselectable":p,className:"select-dropdown",style:{position:"absolute",top:`${b.top}px`,left:`${b.left}px`,width:`${b.width}px`,maxHeight:"300px",backgroundColor:"white",border:"1px solid #d1d5db",borderRadius:"6px",boxShadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1)",zIndex:1e4,overflow:"auto"},children:[o&&s.jsx("div",{style:{padding:"8px",borderBottom:"1px solid #e5e7eb"},children:s.jsx("input",{ref:l,type:"text",placeholder:"Search...",value:a,onChange:u=>c(u.target.value),style:{width:"100%",padding:"6px 8px",fontSize:"14px",border:"1px solid #d1d5db",borderRadius:"4px"}})}),s.jsx("div",{style:{padding:"4px"},children:t.length===0?s.jsx("div",{style:{padding:"8px 12px",fontSize:"14px",color:"#6b7280"},children:"No options found"}):t.map((u,y)=>s.jsxs("div",{role:"option","aria-selected":f(u.value),"aria-disabled":u.disabled,onClick:()=>!u.disabled&&d(u.value),style:{padding:"8px 12px",fontSize:"14px",cursor:u.disabled?"not-allowed":"pointer",backgroundColor:y===i?"#f3f4f6":f(u.value)?"#eff6ff":"transparent",color:u.disabled?"#9ca3af":"#1f2937",borderRadius:"4px",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[s.jsx("span",{children:u.label}),f(u.value)&&s.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",children:s.jsx("path",{d:"M13.5 3.5L6 11 2.5 7.5l1-1L6 9l6.5-6.5 1 1z"})})]},u.value))})]})});Me.displayName="SelectDropdown";const Ge=r.forwardRef(({className:e,label:n,helperText:t,errorMessage:o,invalid:a=!1,disabled:c=!1,maxLength:l,showCount:i=!1,autoResize:d=!1,minRows:f=3,maxRows:p,value:m,onChange:b,id:w,...u},y)=>{const g=r.useRef(null),[j,v]=r.useState(0);r.useImperativeHandle(y,()=>g.current);const x=r.useCallback(()=>{const I=g.current;if(!I||!d)return;I.style.height="auto";const C=parseInt(getComputedStyle(I).lineHeight),z=f*C,B=p?p*C:1/0,$=Math.min(Math.max(I.scrollHeight,z),B);I.style.height=`${$}px`},[d,f,p]);r.useEffect(()=>{d&&x()},[m,d,x]);const h=r.useCallback(I=>{v(I.target.value.length),b==null||b(I),d&&x()},[b,d,x]);r.useEffect(()=>{m!==void 0&&v(String(m).length)},[m]);const k=w||r.useId(),N=t?`${k}-helper`:void 0,T=o?`${k}-error`:void 0,E=[N,T].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{className:D("textarea-wrapper",e),children:[n&&s.jsx("label",{htmlFor:k,className:"textarea-label",style:{display:"block",fontSize:"14px",fontWeight:"500",marginBottom:"8px",color:c?"#9ca3af":"#1f2937"},children:n}),s.jsx("textarea",{ref:g,id:k,disabled:c,"aria-invalid":a,"aria-describedby":E,maxLength:l,value:m,onChange:h,className:"textarea-input","data-invalid":a?"true":void 0,style:{width:"100%",padding:"8px 12px",fontSize:"14px",lineHeight:"1.5",backgroundColor:c?"#f3f4f6":"white",border:`1px solid ${a?"#ef4444":"#d1d5db"}`,borderRadius:"6px",resize:d?"none":"vertical",fontFamily:"inherit"},...u}),s.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginTop:"4px"},children:[s.jsxs("div",{style:{flex:1},children:[t&&!o&&s.jsx("div",{id:N,className:"textarea-helper-text",style:{fontSize:"13px",color:"#6b7280"},children:t}),o&&s.jsx("div",{id:T,className:"textarea-error-message",role:"alert",style:{fontSize:"13px",color:"#ef4444"},children:o})]}),i&&l&&s.jsxs("div",{className:"textarea-count",style:{fontSize:"13px",color:j>l?"#ef4444":"#6b7280",marginLeft:"8px"},children:[j,"/",l]})]})]})});Ge.displayName="Textarea";const qe=r.forwardRef(({className:e,checked:n,defaultChecked:t,disabled:o=!1,label:a,helperText:c,onCheckedChange:l,onChange:i,id:d,...f},p)=>{const m=r.useCallback(u=>{i==null||i(u),l==null||l(u.target.checked)},[i,l]),b=d||r.useId(),w=c?`${b}-helper`:void 0;return s.jsxs("div",{className:D("switch-wrapper",e),children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px"},children:[s.jsxs("label",{htmlFor:b,className:"switch-container",style:{position:"relative",display:"inline-block",width:"44px",height:"24px",cursor:o?"not-allowed":"pointer",opacity:o?.6:1},children:[s.jsx("input",{ref:p,type:"checkbox",id:b,role:"switch",checked:n,defaultChecked:t,disabled:o,"aria-describedby":w,onChange:m,className:"switch-input",style:{opacity:0,width:0,height:0,position:"absolute"},...f}),s.jsx("span",{className:"switch-slider","data-checked":n,style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:n?"#0066FF":"#d1d5db",borderRadius:"24px",transition:"background-color 0.2s"},children:s.jsx("span",{className:"switch-thumb",style:{position:"absolute",top:"2px",left:n?"22px":"2px",width:"20px",height:"20px",backgroundColor:"white",borderRadius:"50%",transition:"left 0.2s",boxShadow:"0 2px 4px rgba(0, 0, 0, 0.2)"}})})]}),a&&s.jsx("label",{htmlFor:b,className:"switch-label",style:{cursor:o?"not-allowed":"pointer",opacity:o?.6:1,fontSize:"14px",userSelect:"none"},children:a})]}),c&&s.jsx("div",{id:w,className:"switch-helper-text",style:{fontSize:"13px",color:"#6b7280",marginTop:"4px",marginLeft:"56px"},children:c})]})});qe.displayName="Switch";const xt={Enter:"Enter",Space:" ",Escape:"Escape",ArrowUp:"ArrowUp",ArrowDown:"ArrowDown",ArrowLeft:"ArrowLeft",ArrowRight:"ArrowRight",Tab:"Tab",Home:"Home",End:"End"};exports.Accordion=Se;exports.AccordionContent=$e;exports.AccordionItem=Ce;exports.AccordionTrigger=Ae;exports.Button=xe;exports.Checkbox=Ue;exports.Dialog=ce;exports.DialogClose=pe;exports.DialogContent=de;exports.DialogDescription=fe;exports.DialogOverlay=le;exports.DialogTitle=ue;exports.Dropdown=he;exports.DropdownItem=ve;exports.DropdownMenu=ye;exports.DropdownTrigger=we;exports.ErrorMessage=_;exports.FormField=me;exports.Input=q;exports.Keys=xt;exports.Label=Q;exports.Radio=Ke;exports.RadioGroup=Ye;exports.Select=Xe;exports.Switch=qe;exports.Tabs=je;exports.TabsContent=Ie;exports.TabsList=ke;exports.TabsTrigger=Ne;exports.Textarea=Ge;exports.ToastProvider=ct;exports.Tooltip=ze;exports.TooltipContent=Fe;exports.TooltipTrigger=Pe;exports.cn=D;exports.composeEventHandlers=G;exports.composeRefs=ie;exports.createFocusRestorer=Ve;exports.createFocusTrap=re;exports.focusFirstElement=oe;exports.generateId=tt;exports.getDocument=ot;exports.getFocusableElements=M;exports.getWindow=rt;exports.isBrowser=O;exports.isFocused=et;exports.useControllableState=ne;exports.useEscapeKey=Y;exports.useFocusTrap=se;exports.useId=L;exports.useToast=K;exports.useToastNotification=dt;
|
|
23
|
+
//# sourceMappingURL=index.cjs.map
|