@tomny-dev/uzi 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,1926 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("react");c=s(c,1);let l=require("@radix-ui/react-slot"),u=require("react/jsx-runtime"),d=require("@radix-ui/react-avatar");d=s(d,1);let f=require("@radix-ui/react-dialog");f=s(f,1);let p=require("@radix-ui/react-toast");p=s(p,1);let m=require("@radix-ui/react-dropdown-menu");m=s(m,1);let h=require("@radix-ui/react-select");h=s(h,1);function g(...e){return e.filter(Boolean).join(` `)}var _={button:`uzi-button-module__button__5dzDN`,sizeSm:`uzi-button-module__sizeSm__jb544`,sizeMd:`uzi-button-module__sizeMd__lIo8M`,sizeLg:`uzi-button-module__sizeLg__QSSuW`,sizeIcon:`uzi-button-module__sizeIcon__Aa9tN`,variantPrimary:`uzi-button-module__variantPrimary__zp2Pg`,variantSecondary:`uzi-button-module__variantSecondary__oX5CB`,variantOutline:`uzi-button-module__variantOutline__uXfiP`,variantGhost:`uzi-button-module__variantGhost__-OEB8`,variantDestructive:`uzi-button-module__variantDestructive__5IeYA`,variantLink:`uzi-button-module__variantLink__Olx4I`},v={default:`variantPrimary`,primary:`variantPrimary`,secondary:`variantSecondary`,outline:`variantOutline`,ghost:`variantGhost`,destructive:`variantDestructive`,link:`variantLink`},y={default:`sizeMd`,sm:`sizeSm`,md:`sizeMd`,lg:`sizeLg`,icon:`sizeIcon`};function b({as:e,variant:t=`default`,size:n=`default`,className:r,children:i,asChild:a=!1,...o}){let s=g(_.button,_[v[t]],_[y[n]],r);return a?(0,u.jsx)(l.Slot,{className:s,...o,children:i}):e===`a`?(0,u.jsx)(`a`,{className:s,...o,children:i}):(0,u.jsx)(`button`,{type:`button`,className:s,...o,children:i})}var x={avatar:`uzi-avatar-module__avatar__yPIOs`,"size-sm":`uzi-avatar-module__size-sm__v5riJ`,"size-md":`uzi-avatar-module__size-md__g7IQS`,"size-lg":`uzi-avatar-module__size-lg__Ca4xk`,"size-xl":`uzi-avatar-module__size-xl__K0Dfk`,image:`uzi-avatar-module__image__Ngo7A`,fallback:`uzi-avatar-module__fallback__Tf3oZ`};function S({className:e,size:t=`md`,...n}){let r=t===`sm`?x[`size-sm`]:t===`lg`?x[`size-lg`]:t===`xl`?x[`size-xl`]:x[`size-md`];return(0,u.jsx)(d.Root,{className:g(x.avatar,r,e),...n})}function C({className:e,...t}){return(0,u.jsx)(d.Image,{className:g(x.image,e),...t})}function w({className:e,...t}){return(0,u.jsx)(d.Fallback,{className:g(x.fallback,e),...t})}var T={card:`uzi-card-module__card__ZPFTz`,"tone-default":`uzi-card-module__tone-default__7Ujf9`,"tone-muted":`uzi-card-module__tone-muted__RQy5B`,"tone-contrast":`uzi-card-module__tone-contrast__JpFxL`,interactive:`uzi-card-module__interactive__zlPML`,"padding-none":`uzi-card-module__padding-none__LXdx-`,"padding-sm":`uzi-card-module__padding-sm__-Ub1s`,"padding-md":`uzi-card-module__padding-md__kUf46`,"padding-lg":`uzi-card-module__padding-lg__a5mWP`};function E({as:e,tone:t=`default`,padding:n=`md`,interactive:r=!1,className:i,children:a,...o}){let s=e??`div`,c={default:null,muted:`tone-muted`,contrast:`tone-contrast`};return(0,u.jsx)(s,{className:g(T.card,c[t]?T[c[t]]:null,T[{none:`padding-none`,sm:`padding-sm`,md:`padding-md`,lg:`padding-lg`}[n]],r&&T.interactive,i),...o,children:a})}var D={pill:`uzi-pill-module__pill__uCKcP`,"size-sm":`uzi-pill-module__size-sm__JANOQ`,"size-md":`uzi-pill-module__size-md__fdsqR`,"tone-success":`uzi-pill-module__tone-success__kW2Kf`,"tone-warning":`uzi-pill-module__tone-warning__Rc5-s`,"tone-info":`uzi-pill-module__tone-info__0vQrj`,"tone-danger":`uzi-pill-module__tone-danger__gzNOa`,icon:`uzi-pill-module__icon__KQ8zg`,content:`uzi-pill-module__content__T7AG1`};function O({as:e,tone:t=`neutral`,size:n=`md`,icon:r,className:i,children:a,...o}){return(0,u.jsxs)(e??`span`,{className:g(D.pill,D[`tone-${t}`],D[`size-${n}`],i),...o,children:[r?(0,u.jsx)(`span`,{className:D.icon,"aria-hidden":`true`,children:r}):null,(0,u.jsx)(`span`,{className:D.content,children:a})]})}var k={portalLayer:`uzi-modal-module__portalLayer__t7blc`,backdrop:`uzi-modal-module__backdrop__IMd3b`,backdropFadeIn:`uzi-modal-module__backdropFadeIn__GNJdx`,backdropFadeOut:`uzi-modal-module__backdropFadeOut__R-3K5`,overlayContent:`uzi-modal-module__overlayContent__0DtbP`,modalContentIn:`uzi-modal-module__modalContentIn__fub8M`,modalContentOut:`uzi-modal-module__modalContentOut__elTJ3`,modal:`uzi-modal-module__modal__Mao59`,"size-sm":`uzi-modal-module__size-sm__Uu9je`,"size-md":`uzi-modal-module__size-md__TiiWy`,"size-lg":`uzi-modal-module__size-lg__BrTIO`,"size-xl":`uzi-modal-module__size-xl__sj0mh`,header:`uzi-modal-module__header__PmCaO`,titles:`uzi-modal-module__titles__IboyQ`,title:`uzi-modal-module__title__Zd7pL`,subtitle:`uzi-modal-module__subtitle__t-LRK`,closeButton:`uzi-modal-module__closeButton__GTiZr`,body:`uzi-modal-module__body__km6FQ`,footer:`uzi-modal-module__footer__jWLTv`};function A({open:e,onClose:t,className:n,children:r}){return(0,u.jsx)(f.Root,{open:e,onOpenChange:e=>{e||t()},children:(0,u.jsx)(f.Portal,{children:(0,u.jsxs)(`div`,{className:k.portalLayer,children:[(0,u.jsx)(f.Overlay,{className:g(k.backdrop,n)}),(0,u.jsx)(f.Content,{className:k.overlayContent,children:r})]})})})}function j({open:e,onClose:t,title:n,subtitle:r,size:i=`md`,children:a,footer:o}){return(0,u.jsx)(A,{open:e,onClose:t,children:(0,u.jsxs)(`div`,{className:g(k.modal,k[`size-${i}`]),children:[(0,u.jsxs)(`div`,{className:k.header,children:[(0,u.jsxs)(`div`,{className:k.titles,children:[(0,u.jsx)(f.Title,{className:k.title,children:n}),r?(0,u.jsx)(f.Description,{className:k.subtitle,children:r}):null]}),(0,u.jsx)(f.Close,{asChild:!0,children:(0,u.jsx)(`button`,{className:k.closeButton,"aria-label":`Close`,children:(0,u.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,u.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),(0,u.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]})})})]}),(0,u.jsx)(`div`,{className:k.body,children:a}),o&&(0,u.jsx)(`div`,{className:k.footer,children:o})]})})}var M={alert:`uzi-alert-module__alert__7Bt6c`,success:`uzi-alert-module__success__apdFG`,error:`uzi-alert-module__error__KLgi1`,warning:`uzi-alert-module__warning__F4fpk`,info:`uzi-alert-module__info__1IKHt`};function N({tone:e,children:t,className:n}){return(0,u.jsx)(`div`,{className:g(M.alert,M[e],n),role:`alert`,children:t})}var P={stack:`uzi-toast-module__stack__SRrda`,topRight:`uzi-toast-module__topRight__WiZzM`,topLeft:`uzi-toast-module__topLeft__SzFS9`,topCenter:`uzi-toast-module__topCenter__X5W-x`,bottomRight:`uzi-toast-module__bottomRight__DMtoS`,bottomLeft:`uzi-toast-module__bottomLeft__ZZ7VF`,bottomCenter:`uzi-toast-module__bottomCenter__QNJrM`,toast:`uzi-toast-module__toast__HNUcj`,toastSlideIn:`uzi-toast-module__toastSlideIn__BTXfm`,toastSlideOut:`uzi-toast-module__toastSlideOut__mBX-G`,toastSwipeOut:`uzi-toast-module__toastSwipeOut__R-jk2`,icon:`uzi-toast-module__icon__LIAqr`,body:`uzi-toast-module__body__9vzs7`,message:`uzi-toast-module__message__TBY65`,actions:`uzi-toast-module__actions__Iykd9`,actionButton:`uzi-toast-module__actionButton__cvUr0`,controls:`uzi-toast-module__controls__LqA4Q`,iconButton:`uzi-toast-module__iconButton__FOsOp`,iconButtonError:`uzi-toast-module__iconButtonError__NJsLX`},F={position:`top-right`,maxToasts:5,defaultDuration:4e3,pauseOnHover:!0,pauseOnFocusLoss:!0},I=(0,c.createContext)(void 0),ee=0,te=()=>`toast-${++ee}-${Date.now()}`;function L({children:e,config:t}){let[n,r]=(0,c.useState)([]),[i,a]=(0,c.useState)(!1),o=(0,c.useMemo)(()=>({...F,...t}),[t]),s=(0,c.useCallback)((e,t={})=>{let n=te();return r(r=>{let i=[...r,{id:n,message:e,type:t.type??`info`,duration:t.duration??(t.type===`error`?6e3:o.defaultDuration),dismissible:t.dismissible??!0,copyable:t.copyable??!1,action:t.action}];return i.length>o.maxToasts&&i.shift(),i}),n},[o.defaultDuration,o.maxToasts]),l=(0,c.useCallback)((e,t)=>s(e,{...t,type:`success`}),[s]),d=(0,c.useCallback)((e,t)=>s(e,{copyable:!0,...t,type:`error`}),[s]),f=(0,c.useCallback)((e,t)=>s(e,{...t,type:`warning`}),[s]),m=(0,c.useCallback)((e,t)=>s(e,{...t,type:`info`}),[s]),h=(0,c.useCallback)(e=>{r(t=>t.filter(t=>t.id!==e))},[]),g=(0,c.useCallback)(()=>r([]),[]);(0,c.useEffect)(()=>{if(!o.pauseOnFocusLoss)return;let e=()=>a(document.visibilityState!==`visible`);return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[o.pauseOnFocusLoss]);let _=(0,c.useMemo)(()=>({toasts:n,push:s,success:l,error:d,warning:f,info:m,dismiss:h,dismissAll:g}),[n,s,l,d,f,m,h,g]);return(0,u.jsx)(I.Provider,{value:_,children:(0,u.jsxs)(p.Provider,{swipeDirection:`right`,children:[e,(0,u.jsx)(re,{toasts:n,position:o.position,pauseOnHover:o.pauseOnHover,isPaused:i,onDismiss:h,onPauseChange:a})]})})}function ne(){let e=(0,c.useContext)(I);if(!e)throw Error(`useToast must be used within a ToastProvider`);return e}function re({toasts:e,position:t,pauseOnHover:n,isPaused:r,onDismiss:i,onPauseChange:a}){let o=(()=>{switch(t){case`top-left`:return`topLeft`;case`top-center`:return`topCenter`;case`bottom-right`:return`bottomRight`;case`bottom-left`:return`bottomLeft`;case`bottom-center`:return`bottomCenter`;default:return`topRight`}})();return(0,u.jsxs)(u.Fragment,{children:[e.map(e=>(0,u.jsx)(ie,{toast:e,isPaused:r,onDismiss:i},e.id)),(0,u.jsx)(p.Viewport,{className:g(P.stack,P[o]),label:`Notifications`,onMouseEnter:()=>n&&a(!0),onMouseLeave:()=>n&&a(!1)})]})}function ie({toast:e,isPaused:t,onDismiss:n}){let[r,i]=(0,c.useState)(!0),[a,o]=(0,c.useState)(`idle`),s=(0,c.useRef)(null),l=(0,c.useRef)(null),d=(0,c.useRef)(0),f=(0,c.useRef)(e.duration??0),m=(0,c.useRef)(!1),h=ae(e.type),_={"--toast-bg":h.background,"--toast-border":h.border,"--toast-accent":h.accent,"--toast-text":h.text,"--toast-action-bg":h.actionBg,"--toast-action-border":h.actionBorder},v=()=>{l.current&&=(window.clearTimeout(l.current),null)},y=(0,c.useCallback)(()=>{m.current||(m.current=!0,i(!1),v(),window.setTimeout(()=>n(e.id),160))},[n,e.id]),b=(0,c.useCallback)(e=>{if(!e||e<=0){y();return}d.current=performance.now(),v(),l.current=window.setTimeout(()=>y(),e)},[y]);(0,c.useEffect)(()=>{if(!(!e.duration||e.duration<=0))return b(e.duration),v},[b,e.duration]),(0,c.useEffect)(()=>{if(!(!e.duration||e.duration<=0))if(t){let e=performance.now()-d.current;f.current=Math.max(0,f.current-e),v()}else b(f.current)},[t,b,e.duration]),(0,c.useEffect)(()=>()=>{s.current&&window.clearTimeout(s.current)},[]);let x=(0,c.useCallback)(async()=>{s.current&&window.clearTimeout(s.current);try{if(!navigator.clipboard)throw Error(`Clipboard API unavailable`);await navigator.clipboard.writeText(e.message),o(`copied`)}catch{o(`failed`)}s.current=window.setTimeout(()=>o(`idle`),1800)},[e.message]),S=oe(e.type);return(0,u.jsxs)(p.Root,{open:r,onOpenChange:e=>{e||y()},duration:2147483647,className:P.toast,style:_,children:[(0,u.jsx)(`span`,{className:P.icon,"aria-hidden":!0,children:S}),(0,u.jsxs)(`div`,{className:P.body,children:[(0,u.jsx)(p.Description,{className:P.message,children:e.message}),e.action&&(0,u.jsx)(`div`,{className:P.actions,children:(0,u.jsx)(p.Action,{asChild:!0,altText:e.action.label,children:(0,u.jsx)(`button`,{type:`button`,className:P.actionButton,onClick:()=>{e.action?.onClick(),y()},children:e.action.label})})})]}),(0,u.jsxs)(`div`,{className:P.controls,children:[e.copyable&&(0,u.jsx)(`button`,{type:`button`,className:g(P.iconButton,a===`failed`&&P.iconButtonError),"aria-label":`Copy message`,onClick:x,children:a===`copied`?(0,u.jsx)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 13 13`,fill:`none`,"aria-hidden":!0,children:(0,u.jsx)(`path`,{d:`M2 6.5l3 3 6-6`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})}):a===`failed`?(0,u.jsx)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 13 13`,fill:`none`,"aria-hidden":!0,children:(0,u.jsx)(`path`,{d:`M10 3L3 10M3 3l7 7`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})}):(0,u.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 13 13`,fill:`none`,"aria-hidden":!0,children:[(0,u.jsx)(`rect`,{x:`4.5`,y:`1.5`,width:`7`,height:`7`,rx:`1.5`,stroke:`currentColor`,strokeWidth:`1.25`}),(0,u.jsx)(`path`,{d:`M1.5 5.5v5a1.5 1.5 0 001.5 1.5h5`,stroke:`currentColor`,strokeWidth:`1.25`,strokeLinecap:`round`})]})}),e.dismissible!==!1&&(0,u.jsx)(p.Close,{asChild:!0,children:(0,u.jsx)(`button`,{type:`button`,className:P.iconButton,"aria-label":`Dismiss notification`,children:(0,u.jsx)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 13 13`,fill:`none`,"aria-hidden":!0,children:(0,u.jsx)(`path`,{d:`M10 3L3 10M3 3l7 7`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})})]})]})}function ae(e){switch(e){case`success`:return{background:`color-mix(in srgb, var(--success) 12%, var(--popover))`,border:`color-mix(in srgb, var(--success) 30%, transparent)`,accent:`var(--success)`,text:`var(--popover-foreground)`,actionBg:`color-mix(in srgb, var(--success) 14%, transparent)`,actionBorder:`color-mix(in srgb, var(--success) 35%, transparent)`};case`error`:return{background:`color-mix(in srgb, var(--destructive) 12%, var(--popover))`,border:`color-mix(in srgb, var(--destructive) 30%, transparent)`,accent:`var(--destructive)`,text:`var(--popover-foreground)`,actionBg:`color-mix(in srgb, var(--destructive) 14%, transparent)`,actionBorder:`color-mix(in srgb, var(--destructive) 35%, transparent)`};case`warning`:return{background:`color-mix(in srgb, var(--warning) 12%, var(--popover))`,border:`color-mix(in srgb, var(--warning) 30%, transparent)`,accent:`var(--warning)`,text:`var(--popover-foreground)`,actionBg:`color-mix(in srgb, var(--warning) 14%, transparent)`,actionBorder:`color-mix(in srgb, var(--warning) 35%, transparent)`};default:return{background:`color-mix(in srgb, var(--primary) 12%, var(--popover))`,border:`color-mix(in srgb, var(--primary) 30%, transparent)`,accent:`var(--primary)`,text:`var(--popover-foreground)`,actionBg:`color-mix(in srgb, var(--primary) 14%, transparent)`,actionBorder:`color-mix(in srgb, var(--primary) 35%, transparent)`}}}function oe(e){switch(e){case`success`:return(0,u.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":!0,children:(0,u.jsx)(`path`,{d:`M3 8l3.5 3.5L13 4.5`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`})});case`error`:return(0,u.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":!0,children:(0,u.jsx)(`path`,{d:`M4 4l8 8M12 4l-8 8`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`})});case`warning`:return(0,u.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":!0,children:(0,u.jsx)(`path`,{d:`M8 3v6M8 11.5v1`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`})});default:return(0,u.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":!0,children:(0,u.jsx)(`path`,{d:`M8 7v5M8 4.5v.5`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`})})}}var se={input:`uzi-input-module__input__-ipHD`},R=c.forwardRef(({className:e,type:t,...n},r)=>(0,u.jsx)(`input`,{ref:r,type:t,className:g(se.input,e),...n}));R.displayName=`Input`;var ce={label:`uzi-label-module__label__gKflt`},z=c.forwardRef(({className:e,...t},n)=>(0,u.jsx)(`label`,{ref:n,className:g(ce.label,e),...t}));z.displayName=`Label`;var le={checkbox:`uzi-checkbox-module__checkbox__zAB1y`},B=c.forwardRef(({className:e,...t},n)=>(0,u.jsx)(`input`,{ref:n,type:`checkbox`,className:g(le.checkbox,e),...t}));B.displayName=`Checkbox`;var V={wrapper:`uzi-multi-select-module__wrapper__Izj2x`,wrapperFullWidth:`uzi-multi-select-module__wrapperFullWidth__eH8pf`,trigger:`uzi-multi-select-module__trigger__r3816`,value:`uzi-multi-select-module__value__PuUmG`,placeholder:`uzi-multi-select-module__placeholder__dJIU-`,chip:`uzi-multi-select-module__chip__46Ms-`,chipSummary:`uzi-multi-select-module__chipSummary__zLwi8`,chevron:`uzi-multi-select-module__chevron__SWK5l`,menu:`uzi-multi-select-module__menu__q8auA`,menuFadeIn:`uzi-multi-select-module__menuFadeIn__Plo7-`,option:`uzi-multi-select-module__option__-Ioqk`,optionDisabled:`uzi-multi-select-module__optionDisabled__qtCi8`,optionSelected:`uzi-multi-select-module__optionSelected__74IO8`,optionLabel:`uzi-multi-select-module__optionLabel__cVoN7`,indicator:`uzi-multi-select-module__indicator__NO-WE`,indicatorSelected:`uzi-multi-select-module__indicatorSelected__9sEAy`,indicatorDisabled:`uzi-multi-select-module__indicatorDisabled__vqdiH`},H=c.forwardRef(({options:e,value:t,onChange:n,placeholder:r=`Select options`,fullWidth:i=!0,maxVisibleValues:a=2,className:o,disabled:s=!1,name:l,"aria-label":d,"aria-labelledby":f},p)=>{let h=c.useMemo(()=>new Set(t),[t]),_=c.useMemo(()=>e.filter(e=>h.has(e.value)),[e,h]),v=c.useCallback(e=>{if(h.has(e)){n(t.filter(t=>t!==e));return}n([...t,e])},[n,h,t]),y=Math.max(1,a),b=_.slice(0,y),x=Math.max(0,_.length-b.length);return(0,u.jsx)(m.Root,{modal:!1,children:(0,u.jsxs)(`div`,{className:g(V.wrapper,i&&V.wrapperFullWidth,o),children:[(0,u.jsx)(m.Trigger,{asChild:!0,children:(0,u.jsxs)(`button`,{ref:p,type:`button`,className:V.trigger,"aria-label":d,"aria-labelledby":f,disabled:s,children:[(0,u.jsx)(`span`,{className:V.value,children:_.length===0?(0,u.jsx)(`span`,{className:V.placeholder,children:r}):(0,u.jsxs)(u.Fragment,{children:[b.map(e=>(0,u.jsx)(`span`,{className:V.chip,children:e.label},e.value)),x>0?(0,u.jsxs)(`span`,{className:g(V.chip,V.chipSummary),children:[`+`,x]}):null]})}),(0,u.jsx)(`span`,{className:V.chevron,"aria-hidden":`true`,children:(0,u.jsx)(`svg`,{viewBox:`0 0 10 10`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,width:`10`,height:`10`,children:(0,u.jsx)(`path`,{d:`M2 3.5L5 6.5L8 3.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]})}),l?t.map(e=>(0,u.jsx)(`input`,{type:`hidden`,name:l,value:e},e)):null,(0,u.jsx)(m.Portal,{children:(0,u.jsx)(m.Content,{className:V.menu,sideOffset:4,align:`start`,children:e.map(e=>{let t=h.has(e.value);return(0,u.jsxs)(m.CheckboxItem,{className:g(V.option,t&&V.optionSelected,e.disabled&&V.optionDisabled),checked:t,disabled:e.disabled,onCheckedChange:()=>v(e.value),onSelect:e=>e.preventDefault(),children:[(0,u.jsx)(`span`,{className:g(V.indicator,t&&V.indicatorSelected,e.disabled&&V.indicatorDisabled),"aria-hidden":`true`,children:(0,u.jsx)(m.ItemIndicator,{forceMount:!0,children:(0,u.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`16`,height:`16`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:(0,u.jsx)(`path`,{d:`M3.5 8.5 6.5 11.5 12.5 4.5`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})})}),(0,u.jsx)(`span`,{className:V.optionLabel,children:e.label})]},e.value)})})})]})})});H.displayName=`MultiSelect`;var U={wrapper:`uzi-select-module__wrapper__7szq0`,wrapperFullWidth:`uzi-select-module__wrapperFullWidth__IyOIG`,trigger:`uzi-select-module__trigger__ldh8w`,value:`uzi-select-module__value__FTUJh`,chevron:`uzi-select-module__chevron__U6HXS`,content:`uzi-select-module__content__pOWWy`,selectFadeIn:`uzi-select-module__selectFadeIn__Z-yKX`,viewport:`uzi-select-module__viewport__VGZM6`,item:`uzi-select-module__item__6uM6-`,indicator:`uzi-select-module__indicator__ZHcg5`,indicatorIcon:`uzi-select-module__indicatorIcon__kOV2G`},W=`__uzi_select_empty__`,G=c.forwardRef(({options:e,value:t,onChange:n,placeholder:r,allowEmptyOption:i=!1,fullWidth:a=!0,className:o,id:s,name:c,disabled:l,required:d,autoComplete:f,form:p,title:m,"aria-label":_,"aria-labelledby":v,onBlur:y,onFocus:b},x)=>(0,u.jsx)(`div`,{className:g(U.wrapper,a&&U.wrapperFullWidth,o),children:(0,u.jsxs)(h.Root,{value:t,onValueChange:e=>n(e===W?``:e),name:c,disabled:l,required:d,autoComplete:f,form:p,children:[(0,u.jsxs)(h.Trigger,{ref:x,id:s,className:U.trigger,title:m,"aria-label":_,"aria-labelledby":v,onBlur:y,onFocus:b,children:[(0,u.jsx)(h.Value,{className:U.value,placeholder:r}),(0,u.jsx)(h.Icon,{className:U.chevron,"aria-hidden":`true`,children:(0,u.jsx)(`svg`,{viewBox:`0 0 10 10`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,width:`10`,height:`10`,children:(0,u.jsx)(`path`,{d:`M2 3.5L5 6.5L8 3.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]}),(0,u.jsx)(h.Portal,{children:(0,u.jsx)(h.Content,{className:U.content,position:`popper`,sideOffset:4,align:`start`,children:(0,u.jsxs)(h.Viewport,{className:U.viewport,children:[r&&i?(0,u.jsxs)(h.Item,{value:W,className:U.item,children:[(0,u.jsx)(`span`,{className:U.indicator,children:(0,u.jsx)(h.ItemIndicator,{children:(0,u.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`16`,height:`16`,"aria-hidden":`true`,className:U.indicatorIcon,children:(0,u.jsx)(`path`,{d:`M3.5 8.5 6.5 11.5 12.5 4.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})})}),(0,u.jsx)(h.ItemText,{children:r})]}):null,e.map(e=>(0,u.jsxs)(h.Item,{value:e.value,disabled:e.disabled,className:U.item,children:[(0,u.jsx)(`span`,{className:U.indicator,children:(0,u.jsx)(h.ItemIndicator,{children:(0,u.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`16`,height:`16`,"aria-hidden":`true`,className:U.indicatorIcon,children:(0,u.jsx)(`path`,{d:`M3.5 8.5 6.5 11.5 12.5 4.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})})}),(0,u.jsx)(h.ItemText,{children:e.label})]},e.value))]})})})]})}));G.displayName=`Select`;var K=c.forwardRef(({options:e,value:t,onChange:n,placeholder:r=`All`,allowClear:i=!0,...a},o)=>(0,u.jsx)(G,{ref:o,options:e,value:t,onChange:n,placeholder:r,allowEmptyOption:i,fullWidth:!1,...a}));K.displayName=`Dropdown`;var q={content:`uzi-dropdown-menu-module__content__n-ElH`,menuFadeIn:`uzi-dropdown-menu-module__menuFadeIn__ITxMo`,item:`uzi-dropdown-menu-module__item__tBNtW`,itemDestructive:`uzi-dropdown-menu-module__itemDestructive__oWmKd`,insetItem:`uzi-dropdown-menu-module__insetItem__g7ONJ`,indicator:`uzi-dropdown-menu-module__indicator__5qwFh`,indicatorIcon:`uzi-dropdown-menu-module__indicatorIcon__nhJMw`,radioDot:`uzi-dropdown-menu-module__radioDot__GWUVT`,label:`uzi-dropdown-menu-module__label__sFnNR`,separator:`uzi-dropdown-menu-module__separator__PgUob`,chevron:`uzi-dropdown-menu-module__chevron__kxfiF`};function ue(e){return(0,u.jsx)(m.Root,{...e})}function de(e){return(0,u.jsx)(m.Trigger,{...e})}function fe(e){return(0,u.jsx)(m.Group,{...e})}function pe(e){return(0,u.jsx)(m.Portal,{...e})}function me(e){return(0,u.jsx)(m.Sub,{...e})}function he(e){return(0,u.jsx)(m.RadioGroup,{...e})}function ge({className:e,sideOffset:t=4,...n}){return(0,u.jsx)(m.Portal,{children:(0,u.jsx)(m.Content,{sideOffset:t,className:g(q.content,e),...n})})}function _e({className:e,inset:t,variant:n=`default`,...r}){return(0,u.jsx)(m.Item,{"data-inset":t?`true`:void 0,className:g(q.item,n===`destructive`&&q.itemDestructive,e),...r})}function ve({className:e,children:t,...n}){return(0,u.jsxs)(m.CheckboxItem,{className:g(q.item,q.insetItem,e),...n,children:[(0,u.jsx)(`span`,{className:q.indicator,children:(0,u.jsx)(m.ItemIndicator,{children:(0,u.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`16`,height:`16`,"aria-hidden":`true`,className:q.indicatorIcon,children:(0,u.jsx)(`path`,{d:`M3.5 8.5 6.5 11.5 12.5 4.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})})}),t]})}function ye({className:e,children:t,...n}){return(0,u.jsxs)(m.RadioItem,{className:g(q.item,q.insetItem,e),...n,children:[(0,u.jsx)(`span`,{className:q.indicator,children:(0,u.jsx)(m.ItemIndicator,{children:(0,u.jsx)(`span`,{className:q.radioDot})})}),t]})}function be({className:e,inset:t,...n}){return(0,u.jsx)(m.Label,{"data-inset":t?`true`:void 0,className:g(q.label,e),...n})}function xe({className:e,...t}){return(0,u.jsx)(m.Separator,{className:g(q.separator,e),...t})}function Se({className:e,inset:t,children:n,...r}){return(0,u.jsxs)(m.SubTrigger,{"data-inset":t?`true`:void 0,className:g(q.item,e),...r,children:[n,(0,u.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`16`,height:`16`,"aria-hidden":`true`,className:q.chevron,children:(0,u.jsx)(`path`,{d:`M6 3.5 10.5 8 6 12.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`})})]})}function Ce({className:e,...t}){return(0,u.jsx)(m.SubContent,{className:g(q.content,e),...t})}var we=[`light`,`dark`,`system`],Te=[`blue`,`cyan`,`violet`,`emerald`,`amber`,`rose`],Ee=`uzi-theme`,De=`uzi-accent`,Oe=Ee,ke=De,Ae=`data-uzi-theme`,je=`data-uzi-accent`,J=(0,c.createContext)(void 0);function Me(e){return we.includes(e)}function Ne(e){return Te.includes(e)}function Pe(){return typeof window>`u`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function Fe({children:e,theme:t,defaultTheme:n=`system`,accent:r,defaultAccent:i=`blue`,onThemeChange:a,onAccentChange:o,storageKey:s=Oe,accentStorageKey:l=ke,disableStorage:d=!1,toastConfig:f}){let[p,m]=(0,c.useState)(n),[h,g]=(0,c.useState)(i),[_,v]=(0,c.useState)(`light`);(0,c.useEffect)(()=>{if(v(Pe()),!d){let e=window.localStorage.getItem(s);Me(e)&&m(e);let t=window.localStorage.getItem(l);Ne(t)&&g(t)}},[d,s,l]);let y=t!==void 0,b=r!==void 0,x=y?t:p,S=b?r:h,C=x===`system`?_:x;(0,c.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>v(e.matches?`dark`:`light`);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,c.useEffect)(()=>{if(typeof document>`u`)return;let e=document.documentElement;e.setAttribute(Ae,C),e.setAttribute(je,S),e.style.colorScheme=C,e.classList.toggle(`dark`,C===`dark`)},[S,C]);let w=(0,c.useCallback)(e=>{y||m(e),!d&&typeof window<`u`&&window.localStorage.setItem(s,e),a?.(e)},[d,y,a,s]),T=(0,c.useCallback)(e=>{b||g(e),!d&&typeof window<`u`&&window.localStorage.setItem(l,e),o?.(e)},[l,d,b,o]),E=(0,c.useCallback)(()=>{w(C===`dark`?`light`:`dark`)},[C,w]),D=(0,c.useMemo)(()=>({theme:x,resolvedTheme:C,accent:S,setTheme:w,setAccent:T,toggleTheme:E}),[S,x,C,T,w,E]);return(0,u.jsx)(J.Provider,{value:D,children:(0,u.jsx)(L,{config:f,children:e})})}function Ie(){let e=(0,c.useContext)(J);if(!e)throw Error(`useTheme must be used within a ThemeProvider`);return e}var Le={withLabel:`uzi-theme-toggle-button-module__withLabel__KqtDj`};function Re(){return(0,u.jsx)(`svg`,{viewBox:`0 0 24 24`,"aria-hidden":`true`,width:`16`,height:`16`,fill:`none`,children:(0,u.jsx)(`path`,{d:`M20 15.2A8.5 8.5 0 0 1 8.8 4 9 9 0 1 0 20 15.2Z`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function ze(){return(0,u.jsxs)(`svg`,{viewBox:`0 0 24 24`,"aria-hidden":`true`,width:`16`,height:`16`,fill:`none`,children:[(0,u.jsx)(`circle`,{cx:`12`,cy:`12`,r:`4`,stroke:`currentColor`,strokeWidth:`1.8`}),(0,u.jsx)(`path`,{d:`M12 2.75v2.5M12 18.75v2.5M21.25 12h-2.5M5.25 12h-2.5M18.54 5.46l-1.77 1.77M7.23 16.77l-1.77 1.77M18.54 18.54l-1.77-1.77M7.23 7.23 5.46 5.46`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`})]})}function Be({showLabel:e=!1,lightLabel:t=`Light mode`,darkLabel:n=`Dark mode`,className:r,onClick:i,...a}){let{resolvedTheme:o,toggleTheme:s}=Ie(),c=o===`dark`?t:n;return(0,u.jsxs)(b,{type:`button`,variant:`ghost`,size:e?`sm`:`icon`,className:g(e&&Le.withLabel,r),"aria-label":`Switch to ${c.toLowerCase()}`,title:`Switch to ${c.toLowerCase()}`,onClick:e=>{i?.(e),e.defaultPrevented||s()},...a,children:[o===`dark`?(0,u.jsx)(ze,{}):(0,u.jsx)(Re,{}),e&&(0,u.jsx)(`span`,{children:c})]})}var Y={topBar:`uzi-top-bar-module__topBar__MJ-7S`,topBarStatic:`uzi-top-bar-module__topBarStatic__JvEwt`,topBarInner:`uzi-top-bar-module__topBarInner__PBbi8`,topBarStart:`uzi-top-bar-module__topBarStart__DrdN2`,topBarBrand:`uzi-top-bar-module__topBarBrand__80VV3`,topBarBrandContent:`uzi-top-bar-module__topBarBrandContent__O4Uto`,topBarCenter:`uzi-top-bar-module__topBarCenter__Kwxg-`,topBarCenterGroup:`uzi-top-bar-module__topBarCenterGroup__7Ishp`,topBarActions:`uzi-top-bar-module__topBarActions__mgMd8`};function Ve({leading:e,brand:t,brandHref:n,brandingLocation:r=`left`,start:i,center:a,actions:o,showThemeToggle:s=!1,themeToggleProps:c,className:l,innerClassName:d,isSticky:f,sticky:p=!0,children:m,...h}){let _=f??p,v=t?n?(0,u.jsx)(`a`,{href:n,className:Y.topBarBrand,children:(0,u.jsx)(`span`,{className:Y.topBarBrandContent,children:t})}):(0,u.jsx)(`div`,{className:Y.topBarBrand,children:(0,u.jsx)(`span`,{className:Y.topBarBrandContent,children:t})}):null;return(0,u.jsx)(`header`,{className:g(Y.topBar,!_&&Y.topBarStatic,l),...h,children:(0,u.jsxs)(`div`,{className:g(Y.topBarInner,d),children:[(0,u.jsxs)(`div`,{className:Y.topBarStart,children:[e,r===`left`&&v,i]}),v&&r===`center`||a||m?(0,u.jsx)(`div`,{className:Y.topBarCenter,children:(0,u.jsxs)(`div`,{className:Y.topBarCenterGroup,children:[r===`center`&&v,a??m]})}):null,(0,u.jsxs)(`div`,{className:Y.topBarActions,children:[s&&(0,u.jsx)(Be,{...c}),o]})]})})}var X={appShell:`uzi-app-shell-module__appShell__S0cVI`,appShellAnimated:`uzi-app-shell-module__appShellAnimated__-CRIl`,appShellOpen:`uzi-app-shell-module__appShellOpen__1rZUl`,appShellCollapsed:`uzi-app-shell-module__appShellCollapsed__fSasN`,appShellTopbar:`uzi-app-shell-module__appShellTopbar__rgXsW`,appShellTopbarLeft:`uzi-app-shell-module__appShellTopbarLeft__-EVuB`,appShellTopbarStart:`uzi-app-shell-module__appShellTopbarStart__XXQpq`,appShellTopbarRight:`uzi-app-shell-module__appShellTopbarRight__l1G57`,appShellBrand:`uzi-app-shell-module__appShellBrand__TXwyN`,appShellHamburger:`uzi-app-shell-module__appShellHamburger__BciFA`,appShellSidebar:`uzi-app-shell-module__appShellSidebar__oY7uj`,appShellMain:`uzi-app-shell-module__appShellMain__eHP2r`,appShellBackdrop:`uzi-app-shell-module__appShellBackdrop__y31xs`,appShellSidebarOpen:`uzi-app-shell-module__appShellSidebarOpen__Z5AIo`},He=960;function Ue(){return typeof window>`u`?!1:window.innerWidth>=He}function We({children:e,sidebar:t,brand:n,brandHref:r,topbarStart:i,topbarEnd:a,showThemeToggle:o=!1,themeToggleProps:s,topBarBrandingLocation:l=`left`,className:d,sidebarClassName:f,topbarClassName:p,mainClassName:m,sidebarWidth:h,closeSidebarOnChangeKey:_,hamburgerLabel:v=`Toggle navigation`,onSidebarToggle:y}){let[b,x]=(0,c.useState)(!1),[S,C]=(0,c.useState)(!1),[w,T]=(0,c.useState)(!1),E=(0,c.useRef)(!1),D=(0,c.useRef)(_),O=(0,c.useRef)(null),k=(0,c.useRef)(null),A=(0,c.useRef)(null),j=(0,c.useId)();(0,c.useEffect)(()=>{let e=Ue();x(e),C(e),E.current=e;let t=window.requestAnimationFrame(()=>{T(!0)}),n=()=>{let e=Ue();x(e),e!==E.current&&(C(e),E.current=e)};return window.addEventListener(`resize`,n),()=>{window.cancelAnimationFrame(t),window.removeEventListener(`resize`,n)}},[]),(0,c.useEffect)(()=>{if(b||!S)return;let e=A.current,t=()=>C(!1),n=e=>{let n=e.target;n&&(O.current?.contains(n)||k.current?.contains(n)||t())},r=window.setTimeout(()=>{document.addEventListener(`pointerdown`,n),window.addEventListener(`scroll`,t,{passive:!0}),e?.addEventListener(`scroll`,t,{passive:!0}),document.addEventListener(`touchmove`,t,{passive:!0})},10);return()=>{window.clearTimeout(r),document.removeEventListener(`pointerdown`,n),window.removeEventListener(`scroll`,t),e?.removeEventListener(`scroll`,t),document.removeEventListener(`touchmove`,t)}},[S,b]),(0,c.useEffect)(()=>{!b&&D.current!==_&&C(!1),D.current=_},[_,b]),(0,c.useEffect)(()=>{y?.(S)},[S,y]);let M=()=>C(e=>!e),N=h===void 0?void 0:typeof h==`number`?`${h}px`:h,P=N?{"--app-shell-sidebar-width":N}:void 0,F=g(X.appShell,w&&X.appShellAnimated,S?X.appShellOpen:X.appShellCollapsed,d),I=g(X.appShellSidebar,S&&X.appShellSidebarOpen,f);return(0,u.jsxs)(`div`,{className:F,style:P,"data-app-shell":!0,"data-desktop":b?`true`:`false`,"data-sidebar-open":S?`true`:`false`,children:[(0,u.jsx)(Ve,{className:g(X.appShellTopbar,p),leading:(0,u.jsx)(`button`,{ref:k,type:`button`,className:X.appShellHamburger,onClick:M,"aria-label":v,"aria-expanded":S,"aria-controls":j,children:(0,u.jsx)(`svg`,{viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M3 6h18M3 12h18M3 18h18`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`})})}),brand:n,brandHref:r,brandingLocation:l,start:i,actions:a,showThemeToggle:o,themeToggleProps:s}),!b&&S&&(0,u.jsx)(`div`,{className:X.appShellBackdrop,onClick:()=>C(!1),onTouchStart:()=>C(!1),"aria-hidden":`true`}),(0,u.jsx)(`aside`,{ref:O,id:j,className:I,"aria-label":`Sidebar navigation`,children:t}),(0,u.jsx)(`main`,{ref:A,className:g(X.appShellMain,m),children:e})]})}var Z={sidebarNav:`uzi-sidebar-nav-module__sidebarNav__eUI5c`,sidebarNavCollapsed:`uzi-sidebar-nav-module__sidebarNavCollapsed__xTM9s`,header:`uzi-sidebar-nav-module__header__Y4NLy`,footer:`uzi-sidebar-nav-module__footer__GjWky`,sections:`uzi-sidebar-nav-module__sections__mXuGQ`,section:`uzi-sidebar-nav-module__section__yjtCY`,sectionItems:`uzi-sidebar-nav-module__sectionItems__tNcph`,sectionLabel:`uzi-sidebar-nav-module__sectionLabel__Wx94m`,item:`uzi-sidebar-nav-module__item__uMHkJ`,itemActive:`uzi-sidebar-nav-module__itemActive__wBbiS`,itemCollapsed:`uzi-sidebar-nav-module__itemCollapsed__jLJN-`,itemDisabled:`uzi-sidebar-nav-module__itemDisabled__Yf8Il`,icon:`uzi-sidebar-nav-module__icon__tyrUg`,itemBody:`uzi-sidebar-nav-module__itemBody__wI0iy`,labelRow:`uzi-sidebar-nav-module__labelRow__D8sEJ`,label:`uzi-sidebar-nav-module__label__A-nt6`,description:`uzi-sidebar-nav-module__description__Xf3Si`,badge:`uzi-sidebar-nav-module__badge__-hnFd`},Ge=(e,t)=>e.active===void 0?!e.href||!t?!1:e.href===`/`?t===`/`:t.startsWith(e.href):e.active,Ke=(e,t)=>{if(e.active!==void 0)return e.active;if(!e.href||!t)return!1;if(e.href===`/`)return t===`/`;let n=e.href.endsWith(`/`)?e.href.slice(0,-1):e.href;return n===t||t.startsWith(`${n}/`)},qe=(e,t)=>e===`/`?t===`/`:t.startsWith(e),Je=(e,t)=>e===`/`?t===`/`:(e.endsWith(`/`)?e.slice(0,-1):e)===t,Ye=e=>e.endsWith(`/`)?e.length-1:e.length,Xe=(e,t)=>{let n=new Set;if(!t)return n;let r=e.filter(e=>e.disabled||!e.href?!1:e.exact?Je(e.href,t):qe(e.href,t));if(r.length===0)return n;let i=0;for(let e of r){if(!e.href)continue;let t=Ye(e.href);t>i&&(i=t)}for(let e of r)e.href&&Ye(e.href)===i&&n.add(e.href);return n};function Ze({items:e=[],sections:t,currentPath:n,getIsActive:r,matchStrategy:i=`prefix`,onItemClick:a,header:o,footer:s,ariaLabel:l=`Sidebar navigation`,collapsed:d=!1,iconSize:f,className:p,itemClassName:m,sectionClassName:h}){let _=(0,c.useMemo)(()=>t?.length?t:[{id:`default`,items:e}],[t,e]),v=(0,c.useMemo)(()=>_.flatMap(e=>e.items),[_]),y=(0,c.useMemo)(()=>{if(i===`most-specific`){let e=Xe(v,n);return t=>t.active===void 0?t.href?e.has(t.href):!1:t.active}else return(e,t)=>e.active===void 0?e.exact?Ke(e,t):Ge(e,t):e.active},[i,v,n]),b=r??y,x=f===void 0?void 0:{"--sidebar-nav-icon-size":typeof f==`number`?`${f}px`:f};return(0,u.jsxs)(`nav`,{className:g(Z.sidebarNav,d&&Z.sidebarNavCollapsed,p),"aria-label":l,style:x,children:[o?(0,u.jsx)(`div`,{className:Z.header,children:o}):null,(0,u.jsx)(`div`,{className:Z.sections,children:_.map((e,t)=>(0,u.jsxs)(`div`,{className:g(Z.section,h),children:[e.label&&!d?(0,u.jsx)(`div`,{className:Z.sectionLabel,children:e.label}):null,(0,u.jsx)(`div`,{className:Z.sectionItems,children:e.items.map((r,i)=>(0,u.jsx)(Qe,{item:r,active:b(r,n),collapsed:d,itemClassName:m,onItemClick:a},`${e.id??t}-${r.href??r.title??i}`))})]},e.id??`section-${t}`))}),s?(0,u.jsx)(`div`,{className:Z.footer,children:s}):null]})}function Qe({item:e,active:t,collapsed:n,itemClassName:r,onItemClick:i}){let a=e.rel??(e.target===`_blank`?`noreferrer`:void 0),o=e.title??(typeof e.label==`string`?e.label:void 0),s=g(Z.item,t&&Z.itemActive,n&&Z.itemCollapsed,e.disabled&&Z.itemDisabled,r),c=(0,u.jsxs)(u.Fragment,{children:[e.icon&&(0,u.jsx)(`span`,{className:Z.icon,children:e.icon}),n?null:(0,u.jsxs)(`span`,{className:Z.itemBody,children:[(0,u.jsxs)(`span`,{className:Z.labelRow,children:[(0,u.jsx)(`span`,{className:Z.label,children:e.label}),e.badge&&(0,u.jsx)(`span`,{className:Z.badge,children:e.badge})]}),e.description?(0,u.jsx)(`span`,{className:Z.description,children:e.description}):null]})]}),l=()=>{e.disabled||(e.onClick?.(),i?.(e))};return e.href?e.disabled?(0,u.jsx)(`div`,{className:s,"aria-current":t?`page`:void 0,"aria-disabled":`true`,title:n?o:void 0,children:c}):(0,u.jsx)(`a`,{className:s,href:e.href,target:e.target,rel:a,"aria-current":t?`page`:void 0,title:n?o:void 0,onClick:l,children:c}):(0,u.jsx)(`button`,{type:`button`,className:s,"aria-current":t?`page`:void 0,"aria-disabled":e.disabled?`true`:void 0,disabled:e.disabled,title:n?o:void 0,onClick:l,children:c})}var $e={skeleton:`uzi-skeleton-module__skeleton__fula5`,"skeleton-pulse":`uzi-skeleton-module__skeleton-pulse__Yp45W`,"radius-sm":`uzi-skeleton-module__radius-sm__FdccD`,"radius-md":`uzi-skeleton-module__radius-md__zH3RE`,"radius-lg":`uzi-skeleton-module__radius-lg__YVrHw`,"radius-full":`uzi-skeleton-module__radius-full__5o2m0`};function et({width:e,height:t,radius:n=`md`,className:r,style:i,...a}){return(0,u.jsx)(`div`,{className:g($e.skeleton,$e[`radius-${n}`],r),style:{width:e,height:t,...i},"aria-hidden":`true`,...a})}var Q={track:`uzi-progress-module__track__gM0oV`,fill:`uzi-progress-module__fill__aLAbp`,"tone-default":`uzi-progress-module__tone-default__fhf7o`,"tone-success":`uzi-progress-module__tone-success__FsGHD`,"tone-warning":`uzi-progress-module__tone-warning__UAttL`,"tone-danger":`uzi-progress-module__tone-danger__-L-Ee`};function tt({value:e,tone:t=`default`,className:n,"aria-label":r,...i}){let a=Math.max(0,Math.min(100,e));return(0,u.jsx)(`div`,{className:g(Q.track,n),role:`progressbar`,"aria-valuenow":a,"aria-valuemin":0,"aria-valuemax":100,"aria-label":r,...i,children:(0,u.jsx)(`div`,{className:g(Q.fill,Q[`tone-${t}`]),style:{width:`${a}%`}})})}var $={track:`uzi-segmented-toggle-module__track__M4fjm`,option:`uzi-segmented-toggle-module__option__7cEZJ`,label:`uzi-segmented-toggle-module__label__bDAIv`};function nt({options:e,value:t,onChange:n,"aria-label":r,"aria-labelledby":i,className:a}){let o=c.useRef([]),s=e.findIndex(e=>e.value===t),l=e.findIndex(e=>!e.disabled),d=-1;for(let t=e.length-1;t>=0;--t)if(!e[t]?.disabled){d=t;break}let f=s>=0&&!e[s]?.disabled?s:l,p=e=>{o.current[e]?.focus()},m=(t,n)=>{if(e.length===0)return-1;let r=t;for(let t=0;t<e.length;t+=1)if(r=(r+n+e.length)%e.length,!e[r]?.disabled)return r;return t},h=r=>{let i=e[r];!i||i.disabled||i.value===t||n(i.value)},_=(e,t)=>{switch(e.key){case`ArrowRight`:case`ArrowDown`:{e.preventDefault();let n=m(t,1);p(n),h(n);break}case`ArrowLeft`:case`ArrowUp`:{e.preventDefault();let n=m(t,-1);p(n),h(n);break}case`Home`:e.preventDefault(),p(l),l>=0&&h(l);break;case`End`:e.preventDefault(),d>=0&&(p(d),h(d));break;default:break}};return(0,u.jsx)(`div`,{className:g($.track,a),role:`radiogroup`,"aria-label":r,"aria-labelledby":i,children:e.map((e,r)=>(0,u.jsx)(`button`,{ref:e=>{o.current[r]=e},type:`button`,role:`radio`,"aria-checked":e.value===t,disabled:e.disabled,tabIndex:e.disabled?-1:r===f?0:-1,onClick:()=>{e.value!==t&&n(e.value)},onKeyDown:e=>_(e,r),className:g($.option),children:(0,u.jsx)(`span`,{className:$.label,children:e.label})},e.value))})}exports.Alert=N,exports.AppShell=We,exports.Avatar=S,exports.AvatarFallback=w,exports.AvatarImage=C,exports.Button=b,exports.Card=E,exports.Checkbox=B,exports.Dropdown=K,exports.DropdownMenu=ue,exports.DropdownMenuCheckboxItem=ve,exports.DropdownMenuContent=ge,exports.DropdownMenuGroup=fe,exports.DropdownMenuItem=_e,exports.DropdownMenuLabel=be,exports.DropdownMenuPortal=pe,exports.DropdownMenuRadioGroup=he,exports.DropdownMenuRadioItem=ye,exports.DropdownMenuSeparator=xe,exports.DropdownMenuSub=me,exports.DropdownMenuSubContent=Ce,exports.DropdownMenuSubTrigger=Se,exports.DropdownMenuTrigger=de,exports.Input=R,exports.Label=z,exports.Modal=j,exports.ModalOverlay=A,exports.MultiSelect=H,exports.Pill=O,exports.Progress=tt,exports.SegmentedToggle=nt,exports.Select=G,exports.SidebarNav=Ze,exports.Skeleton=et,exports.ThemeProvider=Fe,exports.ThemeToggleButton=Be,exports.ToastProvider=L,exports.TopBar=Ve,exports.cx=g,exports.useTheme=Ie,exports.useToast=ne;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region \0rolldown/runtime.js
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
+ get: ((k) => from[k]).bind(null, key),
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
+ value: mod,
21
+ enumerable: true
22
+ }) : target, mod));
23
+ //#endregion
24
+ let react = require("react");
25
+ react = __toESM(react, 1);
26
+ let _radix_ui_react_slot = require("@radix-ui/react-slot");
27
+ let react_jsx_runtime = require("react/jsx-runtime");
28
+ let _radix_ui_react_avatar = require("@radix-ui/react-avatar");
29
+ _radix_ui_react_avatar = __toESM(_radix_ui_react_avatar, 1);
30
+ let _radix_ui_react_dialog = require("@radix-ui/react-dialog");
31
+ _radix_ui_react_dialog = __toESM(_radix_ui_react_dialog, 1);
32
+ let _radix_ui_react_toast = require("@radix-ui/react-toast");
33
+ _radix_ui_react_toast = __toESM(_radix_ui_react_toast, 1);
34
+ let _radix_ui_react_dropdown_menu = require("@radix-ui/react-dropdown-menu");
35
+ _radix_ui_react_dropdown_menu = __toESM(_radix_ui_react_dropdown_menu, 1);
36
+ let _radix_ui_react_select = require("@radix-ui/react-select");
37
+ _radix_ui_react_select = __toESM(_radix_ui_react_select, 1);
38
+ //#region src/utils/cx.ts
39
+ function cx(...values) {
40
+ return values.filter(Boolean).join(" ");
41
+ }
42
+ var button_module_default = {
43
+ button: "uzi-button-module__button__5dzDN",
44
+ sizeSm: "uzi-button-module__sizeSm__jb544",
45
+ sizeMd: "uzi-button-module__sizeMd__lIo8M",
46
+ sizeLg: "uzi-button-module__sizeLg__QSSuW",
47
+ sizeIcon: "uzi-button-module__sizeIcon__Aa9tN",
48
+ variantPrimary: "uzi-button-module__variantPrimary__zp2Pg",
49
+ variantSecondary: "uzi-button-module__variantSecondary__oX5CB",
50
+ variantOutline: "uzi-button-module__variantOutline__uXfiP",
51
+ variantGhost: "uzi-button-module__variantGhost__-OEB8",
52
+ variantDestructive: "uzi-button-module__variantDestructive__5IeYA",
53
+ variantLink: "uzi-button-module__variantLink__Olx4I"
54
+ };
55
+ //#endregion
56
+ //#region src/components/button/Button.tsx
57
+ var variantClass = {
58
+ default: "variantPrimary",
59
+ primary: "variantPrimary",
60
+ secondary: "variantSecondary",
61
+ outline: "variantOutline",
62
+ ghost: "variantGhost",
63
+ destructive: "variantDestructive",
64
+ link: "variantLink"
65
+ };
66
+ var sizeClass = {
67
+ default: "sizeMd",
68
+ sm: "sizeSm",
69
+ md: "sizeMd",
70
+ lg: "sizeLg",
71
+ icon: "sizeIcon"
72
+ };
73
+ function Button({ as, variant = "default", size = "default", className, children, asChild = false, ...rest }) {
74
+ const classes = cx(button_module_default.button, button_module_default[variantClass[variant]], button_module_default[sizeClass[size]], className);
75
+ if (asChild) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_slot.Slot, {
76
+ className: classes,
77
+ ...rest,
78
+ children
79
+ });
80
+ if (as === "a") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
81
+ className: classes,
82
+ ...rest,
83
+ children
84
+ });
85
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
86
+ type: "button",
87
+ className: classes,
88
+ ...rest,
89
+ children
90
+ });
91
+ }
92
+ var avatar_module_default = {
93
+ avatar: "uzi-avatar-module__avatar__yPIOs",
94
+ "size-sm": "uzi-avatar-module__size-sm__v5riJ",
95
+ "size-md": "uzi-avatar-module__size-md__g7IQS",
96
+ "size-lg": "uzi-avatar-module__size-lg__Ca4xk",
97
+ "size-xl": "uzi-avatar-module__size-xl__K0Dfk",
98
+ image: "uzi-avatar-module__image__Ngo7A",
99
+ fallback: "uzi-avatar-module__fallback__Tf3oZ"
100
+ };
101
+ //#endregion
102
+ //#region src/components/avatar/Avatar.tsx
103
+ function Avatar({ className, size = "md", ...props }) {
104
+ const sizeClass = size === "sm" ? avatar_module_default["size-sm"] : size === "lg" ? avatar_module_default["size-lg"] : size === "xl" ? avatar_module_default["size-xl"] : avatar_module_default["size-md"];
105
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_avatar.Root, {
106
+ className: cx(avatar_module_default.avatar, sizeClass, className),
107
+ ...props
108
+ });
109
+ }
110
+ function AvatarImage({ className, ...props }) {
111
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_avatar.Image, {
112
+ className: cx(avatar_module_default.image, className),
113
+ ...props
114
+ });
115
+ }
116
+ function AvatarFallback({ className, ...props }) {
117
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_avatar.Fallback, {
118
+ className: cx(avatar_module_default.fallback, className),
119
+ ...props
120
+ });
121
+ }
122
+ var card_module_default = {
123
+ card: "uzi-card-module__card__ZPFTz",
124
+ "tone-default": "uzi-card-module__tone-default__7Ujf9",
125
+ "tone-muted": "uzi-card-module__tone-muted__RQy5B",
126
+ "tone-contrast": "uzi-card-module__tone-contrast__JpFxL",
127
+ interactive: "uzi-card-module__interactive__zlPML",
128
+ "padding-none": "uzi-card-module__padding-none__LXdx-",
129
+ "padding-sm": "uzi-card-module__padding-sm__-Ub1s",
130
+ "padding-md": "uzi-card-module__padding-md__kUf46",
131
+ "padding-lg": "uzi-card-module__padding-lg__a5mWP"
132
+ };
133
+ //#endregion
134
+ //#region src/components/card/Card.tsx
135
+ function Card({ as, tone = "default", padding = "md", interactive = false, className, children, ...rest }) {
136
+ const Component = as ?? "div";
137
+ const TONE_CLASS = {
138
+ default: null,
139
+ muted: "tone-muted",
140
+ contrast: "tone-contrast"
141
+ };
142
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Component, {
143
+ className: cx(card_module_default.card, TONE_CLASS[tone] ? card_module_default[TONE_CLASS[tone]] : null, card_module_default[{
144
+ none: "padding-none",
145
+ sm: "padding-sm",
146
+ md: "padding-md",
147
+ lg: "padding-lg"
148
+ }[padding]], interactive && card_module_default.interactive, className),
149
+ ...rest,
150
+ children
151
+ });
152
+ }
153
+ var pill_module_default = {
154
+ pill: "uzi-pill-module__pill__uCKcP",
155
+ "size-sm": "uzi-pill-module__size-sm__JANOQ",
156
+ "size-md": "uzi-pill-module__size-md__fdsqR",
157
+ "tone-success": "uzi-pill-module__tone-success__kW2Kf",
158
+ "tone-warning": "uzi-pill-module__tone-warning__Rc5-s",
159
+ "tone-info": "uzi-pill-module__tone-info__0vQrj",
160
+ "tone-danger": "uzi-pill-module__tone-danger__gzNOa",
161
+ icon: "uzi-pill-module__icon__KQ8zg",
162
+ content: "uzi-pill-module__content__T7AG1"
163
+ };
164
+ //#endregion
165
+ //#region src/components/pill/Pill.tsx
166
+ function Pill({ as, tone = "neutral", size = "md", icon, className, children, ...rest }) {
167
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(as ?? "span", {
168
+ className: cx(pill_module_default.pill, pill_module_default[`tone-${tone}`], pill_module_default[`size-${size}`], className),
169
+ ...rest,
170
+ children: [icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
171
+ className: pill_module_default.icon,
172
+ "aria-hidden": "true",
173
+ children: icon
174
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
175
+ className: pill_module_default.content,
176
+ children
177
+ })]
178
+ });
179
+ }
180
+ var modal_module_default = {
181
+ portalLayer: "uzi-modal-module__portalLayer__t7blc",
182
+ backdrop: "uzi-modal-module__backdrop__IMd3b",
183
+ backdropFadeIn: "uzi-modal-module__backdropFadeIn__GNJdx",
184
+ backdropFadeOut: "uzi-modal-module__backdropFadeOut__R-3K5",
185
+ overlayContent: "uzi-modal-module__overlayContent__0DtbP",
186
+ modalContentIn: "uzi-modal-module__modalContentIn__fub8M",
187
+ modalContentOut: "uzi-modal-module__modalContentOut__elTJ3",
188
+ modal: "uzi-modal-module__modal__Mao59",
189
+ "size-sm": "uzi-modal-module__size-sm__Uu9je",
190
+ "size-md": "uzi-modal-module__size-md__TiiWy",
191
+ "size-lg": "uzi-modal-module__size-lg__BrTIO",
192
+ "size-xl": "uzi-modal-module__size-xl__sj0mh",
193
+ header: "uzi-modal-module__header__PmCaO",
194
+ titles: "uzi-modal-module__titles__IboyQ",
195
+ title: "uzi-modal-module__title__Zd7pL",
196
+ subtitle: "uzi-modal-module__subtitle__t-LRK",
197
+ closeButton: "uzi-modal-module__closeButton__GTiZr",
198
+ body: "uzi-modal-module__body__km6FQ",
199
+ footer: "uzi-modal-module__footer__jWLTv"
200
+ };
201
+ //#endregion
202
+ //#region src/components/modal/Modal.tsx
203
+ function ModalOverlay({ open, onClose, className, children }) {
204
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Root, {
205
+ open,
206
+ onOpenChange: (nextOpen) => {
207
+ if (!nextOpen) onClose();
208
+ },
209
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
210
+ className: modal_module_default.portalLayer,
211
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Overlay, { className: cx(modal_module_default.backdrop, className) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Content, {
212
+ className: modal_module_default.overlayContent,
213
+ children
214
+ })]
215
+ }) })
216
+ });
217
+ }
218
+ function Modal({ open, onClose, title, subtitle, size = "md", children, footer }) {
219
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalOverlay, {
220
+ open,
221
+ onClose,
222
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
223
+ className: cx(modal_module_default.modal, modal_module_default[`size-${size}`]),
224
+ children: [
225
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
226
+ className: modal_module_default.header,
227
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
228
+ className: modal_module_default.titles,
229
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Title, {
230
+ className: modal_module_default.title,
231
+ children: title
232
+ }), subtitle ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Description, {
233
+ className: modal_module_default.subtitle,
234
+ children: subtitle
235
+ }) : null]
236
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Close, {
237
+ asChild: true,
238
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
239
+ className: modal_module_default.closeButton,
240
+ "aria-label": "Close",
241
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
242
+ width: "14",
243
+ height: "14",
244
+ viewBox: "0 0 24 24",
245
+ fill: "none",
246
+ stroke: "currentColor",
247
+ strokeWidth: "2.5",
248
+ strokeLinecap: "round",
249
+ strokeLinejoin: "round",
250
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
251
+ x1: "18",
252
+ y1: "6",
253
+ x2: "6",
254
+ y2: "18"
255
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
256
+ x1: "6",
257
+ y1: "6",
258
+ x2: "18",
259
+ y2: "18"
260
+ })]
261
+ })
262
+ })
263
+ })]
264
+ }),
265
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
266
+ className: modal_module_default.body,
267
+ children
268
+ }),
269
+ footer && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
270
+ className: modal_module_default.footer,
271
+ children: footer
272
+ })
273
+ ]
274
+ })
275
+ });
276
+ }
277
+ var alert_module_default = {
278
+ alert: "uzi-alert-module__alert__7Bt6c",
279
+ success: "uzi-alert-module__success__apdFG",
280
+ error: "uzi-alert-module__error__KLgi1",
281
+ warning: "uzi-alert-module__warning__F4fpk",
282
+ info: "uzi-alert-module__info__1IKHt"
283
+ };
284
+ //#endregion
285
+ //#region src/components/alert/Alert.tsx
286
+ function Alert({ tone, children, className }) {
287
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
288
+ className: cx(alert_module_default.alert, alert_module_default[tone], className),
289
+ role: "alert",
290
+ children
291
+ });
292
+ }
293
+ var toast_module_default = {
294
+ stack: "uzi-toast-module__stack__SRrda",
295
+ topRight: "uzi-toast-module__topRight__WiZzM",
296
+ topLeft: "uzi-toast-module__topLeft__SzFS9",
297
+ topCenter: "uzi-toast-module__topCenter__X5W-x",
298
+ bottomRight: "uzi-toast-module__bottomRight__DMtoS",
299
+ bottomLeft: "uzi-toast-module__bottomLeft__ZZ7VF",
300
+ bottomCenter: "uzi-toast-module__bottomCenter__QNJrM",
301
+ toast: "uzi-toast-module__toast__HNUcj",
302
+ toastSlideIn: "uzi-toast-module__toastSlideIn__BTXfm",
303
+ toastSlideOut: "uzi-toast-module__toastSlideOut__mBX-G",
304
+ toastSwipeOut: "uzi-toast-module__toastSwipeOut__R-jk2",
305
+ icon: "uzi-toast-module__icon__LIAqr",
306
+ body: "uzi-toast-module__body__9vzs7",
307
+ message: "uzi-toast-module__message__TBY65",
308
+ actions: "uzi-toast-module__actions__Iykd9",
309
+ actionButton: "uzi-toast-module__actionButton__cvUr0",
310
+ controls: "uzi-toast-module__controls__LqA4Q",
311
+ iconButton: "uzi-toast-module__iconButton__FOsOp",
312
+ iconButtonError: "uzi-toast-module__iconButtonError__NJsLX"
313
+ };
314
+ //#endregion
315
+ //#region src/components/toast/ToastContext.tsx
316
+ /** Default provider configuration. */
317
+ var DEFAULT_CONFIG = {
318
+ position: "top-right",
319
+ maxToasts: 5,
320
+ defaultDuration: 4e3,
321
+ pauseOnHover: true,
322
+ pauseOnFocusLoss: true
323
+ };
324
+ var ToastContext = (0, react.createContext)(void 0);
325
+ var toastIdCounter = 0;
326
+ var generateToastId = () => `toast-${++toastIdCounter}-${Date.now()}`;
327
+ /**
328
+ * Toast notification context provider.
329
+ *
330
+ * @remarks
331
+ * Wrap your app (or a section) to enable `useToast` calls. Supports configurable placement,
332
+ * maximum visible toasts, and pause behavior on hover or window blur.
333
+ *
334
+ * @param props.children - React subtree that can consume the toast context.
335
+ * @param props.config - Optional provider configuration overrides.
336
+ */
337
+ function ToastProvider({ children, config }) {
338
+ const [toasts, setToasts] = (0, react.useState)([]);
339
+ const [isPaused, setIsPaused] = (0, react.useState)(false);
340
+ const merged = (0, react.useMemo)(() => ({
341
+ ...DEFAULT_CONFIG,
342
+ ...config
343
+ }), [config]);
344
+ const push = (0, react.useCallback)((message, options = {}) => {
345
+ const id = generateToastId();
346
+ setToasts((prev) => {
347
+ const next = [...prev, {
348
+ id,
349
+ message,
350
+ type: options.type ?? "info",
351
+ duration: options.duration ?? (options.type === "error" ? 6e3 : merged.defaultDuration),
352
+ dismissible: options.dismissible ?? true,
353
+ copyable: options.copyable ?? false,
354
+ action: options.action
355
+ }];
356
+ if (next.length > merged.maxToasts) next.shift();
357
+ return next;
358
+ });
359
+ return id;
360
+ }, [merged.defaultDuration, merged.maxToasts]);
361
+ const success = (0, react.useCallback)((message, options) => push(message, {
362
+ ...options,
363
+ type: "success"
364
+ }), [push]);
365
+ const error = (0, react.useCallback)((message, options) => push(message, {
366
+ copyable: true,
367
+ ...options,
368
+ type: "error"
369
+ }), [push]);
370
+ const warning = (0, react.useCallback)((message, options) => push(message, {
371
+ ...options,
372
+ type: "warning"
373
+ }), [push]);
374
+ const info = (0, react.useCallback)((message, options) => push(message, {
375
+ ...options,
376
+ type: "info"
377
+ }), [push]);
378
+ const dismiss = (0, react.useCallback)((id) => {
379
+ setToasts((prev) => prev.filter((t) => t.id !== id));
380
+ }, []);
381
+ const dismissAll = (0, react.useCallback)(() => setToasts([]), []);
382
+ (0, react.useEffect)(() => {
383
+ if (!merged.pauseOnFocusLoss) return;
384
+ const handleVisibility = () => setIsPaused(document.visibilityState !== "visible");
385
+ document.addEventListener("visibilitychange", handleVisibility);
386
+ return () => document.removeEventListener("visibilitychange", handleVisibility);
387
+ }, [merged.pauseOnFocusLoss]);
388
+ const value = (0, react.useMemo)(() => ({
389
+ toasts,
390
+ push,
391
+ success,
392
+ error,
393
+ warning,
394
+ info,
395
+ dismiss,
396
+ dismissAll
397
+ }), [
398
+ toasts,
399
+ push,
400
+ success,
401
+ error,
402
+ warning,
403
+ info,
404
+ dismiss,
405
+ dismissAll
406
+ ]);
407
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToastContext.Provider, {
408
+ value,
409
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_toast.Provider, {
410
+ swipeDirection: "right",
411
+ children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToastContainer, {
412
+ toasts,
413
+ position: merged.position,
414
+ pauseOnHover: merged.pauseOnHover,
415
+ isPaused,
416
+ onDismiss: dismiss,
417
+ onPauseChange: setIsPaused
418
+ })]
419
+ })
420
+ });
421
+ }
422
+ /**
423
+ * Hook to access the toast API.
424
+ *
425
+ * @remarks
426
+ * Exposes `push`, intent helpers (`success`, `error`, `warning`, `info`), and dismissal helpers.
427
+ * Must be called within a `ToastProvider`.
428
+ *
429
+ * @throws Error if used outside of a `ToastProvider`.
430
+ */
431
+ function useToast() {
432
+ const ctx = (0, react.useContext)(ToastContext);
433
+ if (!ctx) throw new Error("useToast must be used within a ToastProvider");
434
+ return ctx;
435
+ }
436
+ /** Renders the positioned toast stack. */
437
+ function ToastContainer({ toasts, position, pauseOnHover, isPaused, onDismiss, onPauseChange }) {
438
+ const posClass = (() => {
439
+ switch (position) {
440
+ case "top-left": return "topLeft";
441
+ case "top-center": return "topCenter";
442
+ case "bottom-right": return "bottomRight";
443
+ case "bottom-left": return "bottomLeft";
444
+ case "bottom-center": return "bottomCenter";
445
+ default: return "topRight";
446
+ }
447
+ })();
448
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [toasts.map((toast) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToastItem, {
449
+ toast,
450
+ isPaused,
451
+ onDismiss
452
+ }, toast.id)), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_toast.Viewport, {
453
+ className: cx(toast_module_default.stack, toast_module_default[posClass]),
454
+ label: "Notifications",
455
+ onMouseEnter: () => pauseOnHover && onPauseChange(true),
456
+ onMouseLeave: () => pauseOnHover && onPauseChange(false)
457
+ })] });
458
+ }
459
+ /** Individual toast item with timers and actions. */
460
+ function ToastItem({ toast, isPaused, onDismiss }) {
461
+ const [open, setOpen] = (0, react.useState)(true);
462
+ const [copyState, setCopyState] = (0, react.useState)("idle");
463
+ const copyTimerRef = (0, react.useRef)(null);
464
+ const timerRef = (0, react.useRef)(null);
465
+ const startRef = (0, react.useRef)(0);
466
+ const remainingRef = (0, react.useRef)(toast.duration ?? 0);
467
+ const closingRef = (0, react.useRef)(false);
468
+ const palette = getPalette(toast.type);
469
+ const styleVars = {
470
+ ["--toast-bg"]: palette.background,
471
+ ["--toast-border"]: palette.border,
472
+ ["--toast-accent"]: palette.accent,
473
+ ["--toast-text"]: palette.text,
474
+ ["--toast-action-bg"]: palette.actionBg,
475
+ ["--toast-action-border"]: palette.actionBorder
476
+ };
477
+ const stopTimer = () => {
478
+ if (timerRef.current) {
479
+ window.clearTimeout(timerRef.current);
480
+ timerRef.current = null;
481
+ }
482
+ };
483
+ const triggerDismiss = (0, react.useCallback)(() => {
484
+ if (closingRef.current) return;
485
+ closingRef.current = true;
486
+ setOpen(false);
487
+ stopTimer();
488
+ window.setTimeout(() => onDismiss(toast.id), 160);
489
+ }, [onDismiss, toast.id]);
490
+ const schedule = (0, react.useCallback)((delay) => {
491
+ if (!delay || delay <= 0) {
492
+ triggerDismiss();
493
+ return;
494
+ }
495
+ startRef.current = performance.now();
496
+ stopTimer();
497
+ timerRef.current = window.setTimeout(() => triggerDismiss(), delay);
498
+ }, [triggerDismiss]);
499
+ (0, react.useEffect)(() => {
500
+ if (!toast.duration || toast.duration <= 0) return void 0;
501
+ schedule(toast.duration);
502
+ return stopTimer;
503
+ }, [schedule, toast.duration]);
504
+ (0, react.useEffect)(() => {
505
+ if (!toast.duration || toast.duration <= 0) return;
506
+ if (isPaused) {
507
+ const elapsed = performance.now() - startRef.current;
508
+ remainingRef.current = Math.max(0, remainingRef.current - elapsed);
509
+ stopTimer();
510
+ } else schedule(remainingRef.current);
511
+ }, [
512
+ isPaused,
513
+ schedule,
514
+ toast.duration
515
+ ]);
516
+ (0, react.useEffect)(() => {
517
+ return () => {
518
+ if (copyTimerRef.current) window.clearTimeout(copyTimerRef.current);
519
+ };
520
+ }, []);
521
+ const handleCopy = (0, react.useCallback)(async () => {
522
+ if (copyTimerRef.current) window.clearTimeout(copyTimerRef.current);
523
+ try {
524
+ if (!navigator.clipboard) throw new Error("Clipboard API unavailable");
525
+ await navigator.clipboard.writeText(toast.message);
526
+ setCopyState("copied");
527
+ } catch {
528
+ setCopyState("failed");
529
+ }
530
+ copyTimerRef.current = window.setTimeout(() => setCopyState("idle"), 1800);
531
+ }, [toast.message]);
532
+ const icon = getIcon(toast.type);
533
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_toast.Root, {
534
+ open,
535
+ onOpenChange: (nextOpen) => {
536
+ if (!nextOpen) triggerDismiss();
537
+ },
538
+ duration: 2147483647,
539
+ className: toast_module_default.toast,
540
+ style: styleVars,
541
+ children: [
542
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
543
+ className: toast_module_default.icon,
544
+ "aria-hidden": true,
545
+ children: icon
546
+ }),
547
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
548
+ className: toast_module_default.body,
549
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_toast.Description, {
550
+ className: toast_module_default.message,
551
+ children: toast.message
552
+ }), toast.action && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
553
+ className: toast_module_default.actions,
554
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_toast.Action, {
555
+ asChild: true,
556
+ altText: toast.action.label,
557
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
558
+ type: "button",
559
+ className: toast_module_default.actionButton,
560
+ onClick: () => {
561
+ toast.action?.onClick();
562
+ triggerDismiss();
563
+ },
564
+ children: toast.action.label
565
+ })
566
+ })
567
+ })]
568
+ }),
569
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
570
+ className: toast_module_default.controls,
571
+ children: [toast.copyable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
572
+ type: "button",
573
+ className: cx(toast_module_default.iconButton, copyState === "failed" && toast_module_default.iconButtonError),
574
+ "aria-label": "Copy message",
575
+ onClick: handleCopy,
576
+ children: copyState === "copied" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
577
+ width: "13",
578
+ height: "13",
579
+ viewBox: "0 0 13 13",
580
+ fill: "none",
581
+ "aria-hidden": true,
582
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
583
+ d: "M2 6.5l3 3 6-6",
584
+ stroke: "currentColor",
585
+ strokeWidth: "1.5",
586
+ strokeLinecap: "round",
587
+ strokeLinejoin: "round"
588
+ })
589
+ }) : copyState === "failed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
590
+ width: "13",
591
+ height: "13",
592
+ viewBox: "0 0 13 13",
593
+ fill: "none",
594
+ "aria-hidden": true,
595
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
596
+ d: "M10 3L3 10M3 3l7 7",
597
+ stroke: "currentColor",
598
+ strokeWidth: "1.5",
599
+ strokeLinecap: "round"
600
+ })
601
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
602
+ width: "13",
603
+ height: "13",
604
+ viewBox: "0 0 13 13",
605
+ fill: "none",
606
+ "aria-hidden": true,
607
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
608
+ x: "4.5",
609
+ y: "1.5",
610
+ width: "7",
611
+ height: "7",
612
+ rx: "1.5",
613
+ stroke: "currentColor",
614
+ strokeWidth: "1.25"
615
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
616
+ d: "M1.5 5.5v5a1.5 1.5 0 001.5 1.5h5",
617
+ stroke: "currentColor",
618
+ strokeWidth: "1.25",
619
+ strokeLinecap: "round"
620
+ })]
621
+ })
622
+ }), toast.dismissible !== false && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_toast.Close, {
623
+ asChild: true,
624
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
625
+ type: "button",
626
+ className: toast_module_default.iconButton,
627
+ "aria-label": "Dismiss notification",
628
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
629
+ width: "13",
630
+ height: "13",
631
+ viewBox: "0 0 13 13",
632
+ fill: "none",
633
+ "aria-hidden": true,
634
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
635
+ d: "M10 3L3 10M3 3l7 7",
636
+ stroke: "currentColor",
637
+ strokeWidth: "1.5",
638
+ strokeLinecap: "round"
639
+ })
640
+ })
641
+ })
642
+ })]
643
+ })
644
+ ]
645
+ });
646
+ }
647
+ function getPalette(type) {
648
+ switch (type) {
649
+ case "success": return {
650
+ background: "color-mix(in srgb, var(--success) 12%, var(--popover))",
651
+ border: "color-mix(in srgb, var(--success) 30%, transparent)",
652
+ accent: "var(--success)",
653
+ text: "var(--popover-foreground)",
654
+ actionBg: "color-mix(in srgb, var(--success) 14%, transparent)",
655
+ actionBorder: "color-mix(in srgb, var(--success) 35%, transparent)"
656
+ };
657
+ case "error": return {
658
+ background: "color-mix(in srgb, var(--destructive) 12%, var(--popover))",
659
+ border: "color-mix(in srgb, var(--destructive) 30%, transparent)",
660
+ accent: "var(--destructive)",
661
+ text: "var(--popover-foreground)",
662
+ actionBg: "color-mix(in srgb, var(--destructive) 14%, transparent)",
663
+ actionBorder: "color-mix(in srgb, var(--destructive) 35%, transparent)"
664
+ };
665
+ case "warning": return {
666
+ background: "color-mix(in srgb, var(--warning) 12%, var(--popover))",
667
+ border: "color-mix(in srgb, var(--warning) 30%, transparent)",
668
+ accent: "var(--warning)",
669
+ text: "var(--popover-foreground)",
670
+ actionBg: "color-mix(in srgb, var(--warning) 14%, transparent)",
671
+ actionBorder: "color-mix(in srgb, var(--warning) 35%, transparent)"
672
+ };
673
+ default: return {
674
+ background: "color-mix(in srgb, var(--primary) 12%, var(--popover))",
675
+ border: "color-mix(in srgb, var(--primary) 30%, transparent)",
676
+ accent: "var(--primary)",
677
+ text: "var(--popover-foreground)",
678
+ actionBg: "color-mix(in srgb, var(--primary) 14%, transparent)",
679
+ actionBorder: "color-mix(in srgb, var(--primary) 35%, transparent)"
680
+ };
681
+ }
682
+ }
683
+ function getIcon(type) {
684
+ switch (type) {
685
+ case "success": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
686
+ width: "16",
687
+ height: "16",
688
+ viewBox: "0 0 16 16",
689
+ fill: "none",
690
+ "aria-hidden": true,
691
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
692
+ d: "M3 8l3.5 3.5L13 4.5",
693
+ stroke: "currentColor",
694
+ strokeWidth: "1.75",
695
+ strokeLinecap: "round",
696
+ strokeLinejoin: "round"
697
+ })
698
+ });
699
+ case "error": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
700
+ width: "16",
701
+ height: "16",
702
+ viewBox: "0 0 16 16",
703
+ fill: "none",
704
+ "aria-hidden": true,
705
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
706
+ d: "M4 4l8 8M12 4l-8 8",
707
+ stroke: "currentColor",
708
+ strokeWidth: "1.75",
709
+ strokeLinecap: "round"
710
+ })
711
+ });
712
+ case "warning": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
713
+ width: "16",
714
+ height: "16",
715
+ viewBox: "0 0 16 16",
716
+ fill: "none",
717
+ "aria-hidden": true,
718
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
719
+ d: "M8 3v6M8 11.5v1",
720
+ stroke: "currentColor",
721
+ strokeWidth: "1.75",
722
+ strokeLinecap: "round"
723
+ })
724
+ });
725
+ default: return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
726
+ width: "16",
727
+ height: "16",
728
+ viewBox: "0 0 16 16",
729
+ fill: "none",
730
+ "aria-hidden": true,
731
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
732
+ d: "M8 7v5M8 4.5v.5",
733
+ stroke: "currentColor",
734
+ strokeWidth: "1.75",
735
+ strokeLinecap: "round"
736
+ })
737
+ });
738
+ }
739
+ }
740
+ var input_module_default = { input: "uzi-input-module__input__-ipHD" };
741
+ //#endregion
742
+ //#region src/components/input/Input.tsx
743
+ var Input = react.forwardRef(({ className, type, ...props }, ref) => {
744
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
745
+ ref,
746
+ type,
747
+ className: cx(input_module_default.input, className),
748
+ ...props
749
+ });
750
+ });
751
+ Input.displayName = "Input";
752
+ var label_module_default = { label: "uzi-label-module__label__gKflt" };
753
+ //#endregion
754
+ //#region src/components/label/Label.tsx
755
+ var Label = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
756
+ ref,
757
+ className: cx(label_module_default.label, className),
758
+ ...props
759
+ }));
760
+ Label.displayName = "Label";
761
+ var checkbox_module_default = { checkbox: "uzi-checkbox-module__checkbox__zAB1y" };
762
+ //#endregion
763
+ //#region src/components/checkbox/Checkbox.tsx
764
+ var Checkbox = react.forwardRef(({ className, ...props }, ref) => {
765
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
766
+ ref,
767
+ type: "checkbox",
768
+ className: cx(checkbox_module_default.checkbox, className),
769
+ ...props
770
+ });
771
+ });
772
+ Checkbox.displayName = "Checkbox";
773
+ var multi_select_module_default = {
774
+ wrapper: "uzi-multi-select-module__wrapper__Izj2x",
775
+ wrapperFullWidth: "uzi-multi-select-module__wrapperFullWidth__eH8pf",
776
+ trigger: "uzi-multi-select-module__trigger__r3816",
777
+ value: "uzi-multi-select-module__value__PuUmG",
778
+ placeholder: "uzi-multi-select-module__placeholder__dJIU-",
779
+ chip: "uzi-multi-select-module__chip__46Ms-",
780
+ chipSummary: "uzi-multi-select-module__chipSummary__zLwi8",
781
+ chevron: "uzi-multi-select-module__chevron__SWK5l",
782
+ menu: "uzi-multi-select-module__menu__q8auA",
783
+ menuFadeIn: "uzi-multi-select-module__menuFadeIn__Plo7-",
784
+ option: "uzi-multi-select-module__option__-Ioqk",
785
+ optionDisabled: "uzi-multi-select-module__optionDisabled__qtCi8",
786
+ optionSelected: "uzi-multi-select-module__optionSelected__74IO8",
787
+ optionLabel: "uzi-multi-select-module__optionLabel__cVoN7",
788
+ indicator: "uzi-multi-select-module__indicator__NO-WE",
789
+ indicatorSelected: "uzi-multi-select-module__indicatorSelected__9sEAy",
790
+ indicatorDisabled: "uzi-multi-select-module__indicatorDisabled__vqdiH"
791
+ };
792
+ //#endregion
793
+ //#region src/components/multi-select/MultiSelect.tsx
794
+ var MultiSelect = react.forwardRef(({ options, value, onChange, placeholder = "Select options", fullWidth = true, maxVisibleValues = 2, className, disabled = false, name, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy }, ref) => {
795
+ const selectedSet = react.useMemo(() => new Set(value), [value]);
796
+ const selectedOptions = react.useMemo(() => options.filter((opt) => selectedSet.has(opt.value)), [options, selectedSet]);
797
+ const toggleValue = react.useCallback((nextValue) => {
798
+ if (selectedSet.has(nextValue)) {
799
+ onChange(value.filter((entry) => entry !== nextValue));
800
+ return;
801
+ }
802
+ onChange([...value, nextValue]);
803
+ }, [
804
+ onChange,
805
+ selectedSet,
806
+ value
807
+ ]);
808
+ const visibleCount = Math.max(1, maxVisibleValues);
809
+ const visibleOptions = selectedOptions.slice(0, visibleCount);
810
+ const overflowCount = Math.max(0, selectedOptions.length - visibleOptions.length);
811
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Root, {
812
+ modal: false,
813
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
814
+ className: cx(multi_select_module_default.wrapper, fullWidth && multi_select_module_default.wrapperFullWidth, className),
815
+ children: [
816
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Trigger, {
817
+ asChild: true,
818
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
819
+ ref,
820
+ type: "button",
821
+ className: multi_select_module_default.trigger,
822
+ "aria-label": ariaLabel,
823
+ "aria-labelledby": ariaLabelledBy,
824
+ disabled,
825
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
826
+ className: multi_select_module_default.value,
827
+ children: selectedOptions.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
828
+ className: multi_select_module_default.placeholder,
829
+ children: placeholder
830
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [visibleOptions.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
831
+ className: multi_select_module_default.chip,
832
+ children: option.label
833
+ }, option.value)), overflowCount > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
834
+ className: cx(multi_select_module_default.chip, multi_select_module_default.chipSummary),
835
+ children: ["+", overflowCount]
836
+ }) : null] })
837
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
838
+ className: multi_select_module_default.chevron,
839
+ "aria-hidden": "true",
840
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
841
+ viewBox: "0 0 10 10",
842
+ fill: "none",
843
+ xmlns: "http://www.w3.org/2000/svg",
844
+ width: "10",
845
+ height: "10",
846
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
847
+ d: "M2 3.5L5 6.5L8 3.5",
848
+ stroke: "currentColor",
849
+ strokeWidth: "1.5",
850
+ strokeLinecap: "round",
851
+ strokeLinejoin: "round"
852
+ })
853
+ })
854
+ })]
855
+ })
856
+ }),
857
+ name ? value.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
858
+ type: "hidden",
859
+ name,
860
+ value: entry
861
+ }, entry)) : null,
862
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Content, {
863
+ className: multi_select_module_default.menu,
864
+ sideOffset: 4,
865
+ align: "start",
866
+ children: options.map((option) => {
867
+ const selected = selectedSet.has(option.value);
868
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_dropdown_menu.CheckboxItem, {
869
+ className: cx(multi_select_module_default.option, selected && multi_select_module_default.optionSelected, option.disabled && multi_select_module_default.optionDisabled),
870
+ checked: selected,
871
+ disabled: option.disabled,
872
+ onCheckedChange: () => toggleValue(option.value),
873
+ onSelect: (event) => event.preventDefault(),
874
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
875
+ className: cx(multi_select_module_default.indicator, selected && multi_select_module_default.indicatorSelected, option.disabled && multi_select_module_default.indicatorDisabled),
876
+ "aria-hidden": "true",
877
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.ItemIndicator, {
878
+ forceMount: true,
879
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
880
+ viewBox: "0 0 16 16",
881
+ width: "16",
882
+ height: "16",
883
+ fill: "none",
884
+ xmlns: "http://www.w3.org/2000/svg",
885
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
886
+ d: "M3.5 8.5 6.5 11.5 12.5 4.5",
887
+ stroke: "currentColor",
888
+ strokeWidth: "1.8",
889
+ strokeLinecap: "round",
890
+ strokeLinejoin: "round"
891
+ })
892
+ })
893
+ })
894
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
895
+ className: multi_select_module_default.optionLabel,
896
+ children: option.label
897
+ })]
898
+ }, option.value);
899
+ })
900
+ }) })
901
+ ]
902
+ })
903
+ });
904
+ });
905
+ MultiSelect.displayName = "MultiSelect";
906
+ var select_module_default = {
907
+ wrapper: "uzi-select-module__wrapper__7szq0",
908
+ wrapperFullWidth: "uzi-select-module__wrapperFullWidth__IyOIG",
909
+ trigger: "uzi-select-module__trigger__ldh8w",
910
+ value: "uzi-select-module__value__FTUJh",
911
+ chevron: "uzi-select-module__chevron__U6HXS",
912
+ content: "uzi-select-module__content__pOWWy",
913
+ selectFadeIn: "uzi-select-module__selectFadeIn__Z-yKX",
914
+ viewport: "uzi-select-module__viewport__VGZM6",
915
+ item: "uzi-select-module__item__6uM6-",
916
+ indicator: "uzi-select-module__indicator__ZHcg5",
917
+ indicatorIcon: "uzi-select-module__indicatorIcon__kOV2G"
918
+ };
919
+ //#endregion
920
+ //#region src/components/select/Select.tsx
921
+ var EMPTY_OPTION_VALUE = "__uzi_select_empty__";
922
+ var Select = react.forwardRef(({ options, value, onChange, placeholder, allowEmptyOption = false, fullWidth = true, className, id, name, disabled, required, autoComplete, form, title, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, onBlur, onFocus }, ref) => {
923
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
924
+ className: cx(select_module_default.wrapper, fullWidth && select_module_default.wrapperFullWidth, className),
925
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_select.Root, {
926
+ value,
927
+ onValueChange: (nextValue) => onChange(nextValue === EMPTY_OPTION_VALUE ? "" : nextValue),
928
+ name,
929
+ disabled,
930
+ required,
931
+ autoComplete,
932
+ form,
933
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_select.Trigger, {
934
+ ref,
935
+ id,
936
+ className: select_module_default.trigger,
937
+ title,
938
+ "aria-label": ariaLabel,
939
+ "aria-labelledby": ariaLabelledBy,
940
+ onBlur,
941
+ onFocus,
942
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.Value, {
943
+ className: select_module_default.value,
944
+ placeholder
945
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.Icon, {
946
+ className: select_module_default.chevron,
947
+ "aria-hidden": "true",
948
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
949
+ viewBox: "0 0 10 10",
950
+ fill: "none",
951
+ xmlns: "http://www.w3.org/2000/svg",
952
+ width: "10",
953
+ height: "10",
954
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
955
+ d: "M2 3.5L5 6.5L8 3.5",
956
+ stroke: "currentColor",
957
+ strokeWidth: "1.5",
958
+ strokeLinecap: "round",
959
+ strokeLinejoin: "round"
960
+ })
961
+ })
962
+ })]
963
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.Content, {
964
+ className: select_module_default.content,
965
+ position: "popper",
966
+ sideOffset: 4,
967
+ align: "start",
968
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_select.Viewport, {
969
+ className: select_module_default.viewport,
970
+ children: [placeholder && allowEmptyOption ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_select.Item, {
971
+ value: EMPTY_OPTION_VALUE,
972
+ className: select_module_default.item,
973
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
974
+ className: select_module_default.indicator,
975
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
976
+ viewBox: "0 0 16 16",
977
+ width: "16",
978
+ height: "16",
979
+ "aria-hidden": "true",
980
+ className: select_module_default.indicatorIcon,
981
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
982
+ d: "M3.5 8.5 6.5 11.5 12.5 4.5",
983
+ fill: "none",
984
+ stroke: "currentColor",
985
+ strokeWidth: "1.8",
986
+ strokeLinecap: "round",
987
+ strokeLinejoin: "round"
988
+ })
989
+ }) })
990
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.ItemText, { children: placeholder })]
991
+ }) : null, options.map((opt) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_select.Item, {
992
+ value: opt.value,
993
+ disabled: opt.disabled,
994
+ className: select_module_default.item,
995
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
996
+ className: select_module_default.indicator,
997
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
998
+ viewBox: "0 0 16 16",
999
+ width: "16",
1000
+ height: "16",
1001
+ "aria-hidden": "true",
1002
+ className: select_module_default.indicatorIcon,
1003
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
1004
+ d: "M3.5 8.5 6.5 11.5 12.5 4.5",
1005
+ fill: "none",
1006
+ stroke: "currentColor",
1007
+ strokeWidth: "1.8",
1008
+ strokeLinecap: "round",
1009
+ strokeLinejoin: "round"
1010
+ })
1011
+ }) })
1012
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_select.ItemText, { children: opt.label })]
1013
+ }, opt.value))]
1014
+ })
1015
+ }) })]
1016
+ })
1017
+ });
1018
+ });
1019
+ Select.displayName = "Select";
1020
+ //#endregion
1021
+ //#region src/components/dropdown/Dropdown.tsx
1022
+ /**
1023
+ * @deprecated Use Select for value selection and DropdownMenu for action menus.
1024
+ * Dropdown remains as a compatibility alias during migration.
1025
+ */
1026
+ var Dropdown = react.forwardRef(({ options, value, onChange, placeholder = "All", allowClear = true, ...rest }, ref) => {
1027
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Select, {
1028
+ ref,
1029
+ options,
1030
+ value,
1031
+ onChange,
1032
+ placeholder,
1033
+ allowEmptyOption: allowClear,
1034
+ fullWidth: false,
1035
+ ...rest
1036
+ });
1037
+ });
1038
+ Dropdown.displayName = "Dropdown";
1039
+ var dropdown_menu_module_default = {
1040
+ content: "uzi-dropdown-menu-module__content__n-ElH",
1041
+ menuFadeIn: "uzi-dropdown-menu-module__menuFadeIn__ITxMo",
1042
+ item: "uzi-dropdown-menu-module__item__tBNtW",
1043
+ itemDestructive: "uzi-dropdown-menu-module__itemDestructive__oWmKd",
1044
+ insetItem: "uzi-dropdown-menu-module__insetItem__g7ONJ",
1045
+ indicator: "uzi-dropdown-menu-module__indicator__5qwFh",
1046
+ indicatorIcon: "uzi-dropdown-menu-module__indicatorIcon__nhJMw",
1047
+ radioDot: "uzi-dropdown-menu-module__radioDot__GWUVT",
1048
+ label: "uzi-dropdown-menu-module__label__sFnNR",
1049
+ separator: "uzi-dropdown-menu-module__separator__PgUob",
1050
+ chevron: "uzi-dropdown-menu-module__chevron__kxfiF"
1051
+ };
1052
+ //#endregion
1053
+ //#region src/components/dropdown-menu/DropdownMenu.tsx
1054
+ function DropdownMenu(props) {
1055
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Root, { ...props });
1056
+ }
1057
+ function DropdownMenuTrigger(props) {
1058
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Trigger, { ...props });
1059
+ }
1060
+ function DropdownMenuGroup(props) {
1061
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Group, { ...props });
1062
+ }
1063
+ function DropdownMenuPortal(props) {
1064
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Portal, { ...props });
1065
+ }
1066
+ function DropdownMenuSub(props) {
1067
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Sub, { ...props });
1068
+ }
1069
+ function DropdownMenuRadioGroup(props) {
1070
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.RadioGroup, { ...props });
1071
+ }
1072
+ function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
1073
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Content, {
1074
+ sideOffset,
1075
+ className: cx(dropdown_menu_module_default.content, className),
1076
+ ...props
1077
+ }) });
1078
+ }
1079
+ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
1080
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Item, {
1081
+ "data-inset": inset ? "true" : void 0,
1082
+ className: cx(dropdown_menu_module_default.item, variant === "destructive" && dropdown_menu_module_default.itemDestructive, className),
1083
+ ...props
1084
+ });
1085
+ }
1086
+ function DropdownMenuCheckboxItem({ className, children, ...props }) {
1087
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_dropdown_menu.CheckboxItem, {
1088
+ className: cx(dropdown_menu_module_default.item, dropdown_menu_module_default.insetItem, className),
1089
+ ...props,
1090
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1091
+ className: dropdown_menu_module_default.indicator,
1092
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1093
+ viewBox: "0 0 16 16",
1094
+ width: "16",
1095
+ height: "16",
1096
+ "aria-hidden": "true",
1097
+ className: dropdown_menu_module_default.indicatorIcon,
1098
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
1099
+ d: "M3.5 8.5 6.5 11.5 12.5 4.5",
1100
+ fill: "none",
1101
+ stroke: "currentColor",
1102
+ strokeWidth: "1.8",
1103
+ strokeLinecap: "round",
1104
+ strokeLinejoin: "round"
1105
+ })
1106
+ }) })
1107
+ }), children]
1108
+ });
1109
+ }
1110
+ function DropdownMenuRadioItem({ className, children, ...props }) {
1111
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_dropdown_menu.RadioItem, {
1112
+ className: cx(dropdown_menu_module_default.item, dropdown_menu_module_default.insetItem, className),
1113
+ ...props,
1114
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1115
+ className: dropdown_menu_module_default.indicator,
1116
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: dropdown_menu_module_default.radioDot }) })
1117
+ }), children]
1118
+ });
1119
+ }
1120
+ function DropdownMenuLabel({ className, inset, ...props }) {
1121
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Label, {
1122
+ "data-inset": inset ? "true" : void 0,
1123
+ className: cx(dropdown_menu_module_default.label, className),
1124
+ ...props
1125
+ });
1126
+ }
1127
+ function DropdownMenuSeparator({ className, ...props }) {
1128
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Separator, {
1129
+ className: cx(dropdown_menu_module_default.separator, className),
1130
+ ...props
1131
+ });
1132
+ }
1133
+ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
1134
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_dropdown_menu.SubTrigger, {
1135
+ "data-inset": inset ? "true" : void 0,
1136
+ className: cx(dropdown_menu_module_default.item, className),
1137
+ ...props,
1138
+ children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1139
+ viewBox: "0 0 16 16",
1140
+ width: "16",
1141
+ height: "16",
1142
+ "aria-hidden": "true",
1143
+ className: dropdown_menu_module_default.chevron,
1144
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
1145
+ d: "M6 3.5 10.5 8 6 12.5",
1146
+ fill: "none",
1147
+ stroke: "currentColor",
1148
+ strokeWidth: "1.6",
1149
+ strokeLinecap: "round",
1150
+ strokeLinejoin: "round"
1151
+ })
1152
+ })]
1153
+ });
1154
+ }
1155
+ function DropdownMenuSubContent({ className, ...props }) {
1156
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.SubContent, {
1157
+ className: cx(dropdown_menu_module_default.content, className),
1158
+ ...props
1159
+ });
1160
+ }
1161
+ //#endregion
1162
+ //#region src/theme/constants.ts
1163
+ var UZI_THEMES = [
1164
+ "light",
1165
+ "dark",
1166
+ "system"
1167
+ ];
1168
+ var UZI_ACCENTS = [
1169
+ "blue",
1170
+ "cyan",
1171
+ "violet",
1172
+ "emerald",
1173
+ "amber",
1174
+ "rose"
1175
+ ];
1176
+ var THEME_STORAGE_KEY$1 = "uzi-theme";
1177
+ var ACCENT_STORAGE_KEY$1 = "uzi-accent";
1178
+ //#endregion
1179
+ //#region src/theme/ThemeProvider.tsx
1180
+ var THEME_STORAGE_KEY = THEME_STORAGE_KEY$1;
1181
+ var ACCENT_STORAGE_KEY = ACCENT_STORAGE_KEY$1;
1182
+ var THEME_ATTRIBUTE = "data-uzi-theme";
1183
+ var ACCENT_ATTRIBUTE = "data-uzi-accent";
1184
+ var ThemeContext = (0, react.createContext)(void 0);
1185
+ function isTheme(value) {
1186
+ return UZI_THEMES.includes(value);
1187
+ }
1188
+ function isAccent(value) {
1189
+ return UZI_ACCENTS.includes(value);
1190
+ }
1191
+ function getSystemTheme() {
1192
+ if (typeof window === "undefined") return "light";
1193
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
1194
+ }
1195
+ function ThemeProvider({ children, theme, defaultTheme = "system", accent, defaultAccent = "blue", onThemeChange, onAccentChange, storageKey = THEME_STORAGE_KEY, accentStorageKey = ACCENT_STORAGE_KEY, disableStorage = false, toastConfig }) {
1196
+ const [internalTheme, setInternalTheme] = (0, react.useState)(defaultTheme);
1197
+ const [internalAccent, setInternalAccent] = (0, react.useState)(defaultAccent);
1198
+ const [systemTheme, setSystemTheme] = (0, react.useState)("light");
1199
+ (0, react.useEffect)(() => {
1200
+ setSystemTheme(getSystemTheme());
1201
+ if (!disableStorage) {
1202
+ const storedTheme = window.localStorage.getItem(storageKey);
1203
+ if (isTheme(storedTheme)) setInternalTheme(storedTheme);
1204
+ const storedAccent = window.localStorage.getItem(accentStorageKey);
1205
+ if (isAccent(storedAccent)) setInternalAccent(storedAccent);
1206
+ }
1207
+ }, [
1208
+ disableStorage,
1209
+ storageKey,
1210
+ accentStorageKey
1211
+ ]);
1212
+ const isThemeControlled = theme !== void 0;
1213
+ const isAccentControlled = accent !== void 0;
1214
+ const currentTheme = isThemeControlled ? theme : internalTheme;
1215
+ const currentAccent = isAccentControlled ? accent : internalAccent;
1216
+ const resolvedTheme = currentTheme === "system" ? systemTheme : currentTheme;
1217
+ (0, react.useEffect)(() => {
1218
+ if (typeof window === "undefined") return;
1219
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
1220
+ const handleChange = () => setSystemTheme(mediaQuery.matches ? "dark" : "light");
1221
+ handleChange();
1222
+ mediaQuery.addEventListener("change", handleChange);
1223
+ return () => mediaQuery.removeEventListener("change", handleChange);
1224
+ }, []);
1225
+ (0, react.useEffect)(() => {
1226
+ if (typeof document === "undefined") return;
1227
+ const root = document.documentElement;
1228
+ root.setAttribute(THEME_ATTRIBUTE, resolvedTheme);
1229
+ root.setAttribute(ACCENT_ATTRIBUTE, currentAccent);
1230
+ root.style.colorScheme = resolvedTheme;
1231
+ root.classList.toggle("dark", resolvedTheme === "dark");
1232
+ }, [currentAccent, resolvedTheme]);
1233
+ const setTheme = (0, react.useCallback)((nextTheme) => {
1234
+ if (!isThemeControlled) setInternalTheme(nextTheme);
1235
+ if (!disableStorage && typeof window !== "undefined") window.localStorage.setItem(storageKey, nextTheme);
1236
+ onThemeChange?.(nextTheme);
1237
+ }, [
1238
+ disableStorage,
1239
+ isThemeControlled,
1240
+ onThemeChange,
1241
+ storageKey
1242
+ ]);
1243
+ const setAccent = (0, react.useCallback)((nextAccent) => {
1244
+ if (!isAccentControlled) setInternalAccent(nextAccent);
1245
+ if (!disableStorage && typeof window !== "undefined") window.localStorage.setItem(accentStorageKey, nextAccent);
1246
+ onAccentChange?.(nextAccent);
1247
+ }, [
1248
+ accentStorageKey,
1249
+ disableStorage,
1250
+ isAccentControlled,
1251
+ onAccentChange
1252
+ ]);
1253
+ const toggleTheme = (0, react.useCallback)(() => {
1254
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
1255
+ }, [resolvedTheme, setTheme]);
1256
+ const value = (0, react.useMemo)(() => ({
1257
+ theme: currentTheme,
1258
+ resolvedTheme,
1259
+ accent: currentAccent,
1260
+ setTheme,
1261
+ setAccent,
1262
+ toggleTheme
1263
+ }), [
1264
+ currentAccent,
1265
+ currentTheme,
1266
+ resolvedTheme,
1267
+ setAccent,
1268
+ setTheme,
1269
+ toggleTheme
1270
+ ]);
1271
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThemeContext.Provider, {
1272
+ value,
1273
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToastProvider, {
1274
+ config: toastConfig,
1275
+ children
1276
+ })
1277
+ });
1278
+ }
1279
+ function useTheme() {
1280
+ const context = (0, react.useContext)(ThemeContext);
1281
+ if (!context) throw new Error("useTheme must be used within a ThemeProvider");
1282
+ return context;
1283
+ }
1284
+ var theme_toggle_button_module_default = { withLabel: "uzi-theme-toggle-button-module__withLabel__KqtDj" };
1285
+ //#endregion
1286
+ //#region src/components/theme-toggle-button/ThemeToggleButton.tsx
1287
+ function MoonIcon() {
1288
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1289
+ viewBox: "0 0 24 24",
1290
+ "aria-hidden": "true",
1291
+ width: "16",
1292
+ height: "16",
1293
+ fill: "none",
1294
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
1295
+ d: "M20 15.2A8.5 8.5 0 0 1 8.8 4 9 9 0 1 0 20 15.2Z",
1296
+ stroke: "currentColor",
1297
+ strokeWidth: "1.8",
1298
+ strokeLinecap: "round",
1299
+ strokeLinejoin: "round"
1300
+ })
1301
+ });
1302
+ }
1303
+ function SunIcon() {
1304
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
1305
+ viewBox: "0 0 24 24",
1306
+ "aria-hidden": "true",
1307
+ width: "16",
1308
+ height: "16",
1309
+ fill: "none",
1310
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
1311
+ cx: "12",
1312
+ cy: "12",
1313
+ r: "4",
1314
+ stroke: "currentColor",
1315
+ strokeWidth: "1.8"
1316
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
1317
+ d: "M12 2.75v2.5M12 18.75v2.5M21.25 12h-2.5M5.25 12h-2.5M18.54 5.46l-1.77 1.77M7.23 16.77l-1.77 1.77M18.54 18.54l-1.77-1.77M7.23 7.23 5.46 5.46",
1318
+ stroke: "currentColor",
1319
+ strokeWidth: "1.8",
1320
+ strokeLinecap: "round"
1321
+ })]
1322
+ });
1323
+ }
1324
+ function ThemeToggleButton({ showLabel = false, lightLabel = "Light mode", darkLabel = "Dark mode", className, onClick, ...rest }) {
1325
+ const { resolvedTheme, toggleTheme } = useTheme();
1326
+ const nextThemeLabel = resolvedTheme === "dark" ? lightLabel : darkLabel;
1327
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Button, {
1328
+ type: "button",
1329
+ variant: "ghost",
1330
+ size: showLabel ? "sm" : "icon",
1331
+ className: cx(showLabel && theme_toggle_button_module_default.withLabel, className),
1332
+ "aria-label": `Switch to ${nextThemeLabel.toLowerCase()}`,
1333
+ title: `Switch to ${nextThemeLabel.toLowerCase()}`,
1334
+ onClick: (event) => {
1335
+ onClick?.(event);
1336
+ if (!event.defaultPrevented) toggleTheme();
1337
+ },
1338
+ ...rest,
1339
+ children: [resolvedTheme === "dark" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SunIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MoonIcon, {}), showLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: nextThemeLabel })]
1340
+ });
1341
+ }
1342
+ var top_bar_module_default = {
1343
+ topBar: "uzi-top-bar-module__topBar__MJ-7S",
1344
+ topBarStatic: "uzi-top-bar-module__topBarStatic__JvEwt",
1345
+ topBarInner: "uzi-top-bar-module__topBarInner__PBbi8",
1346
+ topBarStart: "uzi-top-bar-module__topBarStart__DrdN2",
1347
+ topBarBrand: "uzi-top-bar-module__topBarBrand__80VV3",
1348
+ topBarBrandContent: "uzi-top-bar-module__topBarBrandContent__O4Uto",
1349
+ topBarCenter: "uzi-top-bar-module__topBarCenter__Kwxg-",
1350
+ topBarCenterGroup: "uzi-top-bar-module__topBarCenterGroup__7Ishp",
1351
+ topBarActions: "uzi-top-bar-module__topBarActions__mgMd8"
1352
+ };
1353
+ //#endregion
1354
+ //#region src/components/top-bar/TopBar.tsx
1355
+ function TopBar({ leading, brand, brandHref, brandingLocation = "left", start, center, actions, showThemeToggle = false, themeToggleProps, className, innerClassName, isSticky, sticky = true, children, ...rest }) {
1356
+ const shouldStick = isSticky ?? sticky;
1357
+ const brandNode = !brand ? null : brandHref ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
1358
+ href: brandHref,
1359
+ className: top_bar_module_default.topBarBrand,
1360
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1361
+ className: top_bar_module_default.topBarBrandContent,
1362
+ children: brand
1363
+ })
1364
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1365
+ className: top_bar_module_default.topBarBrand,
1366
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1367
+ className: top_bar_module_default.topBarBrandContent,
1368
+ children: brand
1369
+ })
1370
+ });
1371
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", {
1372
+ className: cx(top_bar_module_default.topBar, !shouldStick && top_bar_module_default.topBarStatic, className),
1373
+ ...rest,
1374
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1375
+ className: cx(top_bar_module_default.topBarInner, innerClassName),
1376
+ children: [
1377
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1378
+ className: top_bar_module_default.topBarStart,
1379
+ children: [
1380
+ leading,
1381
+ brandingLocation === "left" && brandNode,
1382
+ start
1383
+ ]
1384
+ }),
1385
+ brandNode && brandingLocation === "center" || center || children ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1386
+ className: top_bar_module_default.topBarCenter,
1387
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1388
+ className: top_bar_module_default.topBarCenterGroup,
1389
+ children: [brandingLocation === "center" && brandNode, center ?? children]
1390
+ })
1391
+ }) : null,
1392
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1393
+ className: top_bar_module_default.topBarActions,
1394
+ children: [showThemeToggle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThemeToggleButton, { ...themeToggleProps }), actions]
1395
+ })
1396
+ ]
1397
+ })
1398
+ });
1399
+ }
1400
+ var app_shell_module_default = {
1401
+ appShell: "uzi-app-shell-module__appShell__S0cVI",
1402
+ appShellAnimated: "uzi-app-shell-module__appShellAnimated__-CRIl",
1403
+ appShellOpen: "uzi-app-shell-module__appShellOpen__1rZUl",
1404
+ appShellCollapsed: "uzi-app-shell-module__appShellCollapsed__fSasN",
1405
+ appShellTopbar: "uzi-app-shell-module__appShellTopbar__rgXsW",
1406
+ appShellTopbarLeft: "uzi-app-shell-module__appShellTopbarLeft__-EVuB",
1407
+ appShellTopbarStart: "uzi-app-shell-module__appShellTopbarStart__XXQpq",
1408
+ appShellTopbarRight: "uzi-app-shell-module__appShellTopbarRight__l1G57",
1409
+ appShellBrand: "uzi-app-shell-module__appShellBrand__TXwyN",
1410
+ appShellHamburger: "uzi-app-shell-module__appShellHamburger__BciFA",
1411
+ appShellSidebar: "uzi-app-shell-module__appShellSidebar__oY7uj",
1412
+ appShellMain: "uzi-app-shell-module__appShellMain__eHP2r",
1413
+ appShellBackdrop: "uzi-app-shell-module__appShellBackdrop__y31xs",
1414
+ appShellSidebarOpen: "uzi-app-shell-module__appShellSidebarOpen__Z5AIo"
1415
+ };
1416
+ //#endregion
1417
+ //#region src/components/app-shell/AppShell.tsx
1418
+ var DESKTOP_BREAKPOINT = 960;
1419
+ function getIsDesktop() {
1420
+ if (typeof window === "undefined") return false;
1421
+ return window.innerWidth >= DESKTOP_BREAKPOINT;
1422
+ }
1423
+ /**
1424
+ * Responsive application shell with a collapsible sidebar and sticky top bar.
1425
+ *
1426
+ * - Sidebar opens by default on desktop, collapses on mobile.
1427
+ * - Closes on outside click/scroll/touch when in mobile mode.
1428
+ * - Provides optional hook to close the sidebar when a prop value changes
1429
+ * (e.g., route transitions).
1430
+ */
1431
+ function AppShell({ children, sidebar, brand, brandHref, topbarStart, topbarEnd, showThemeToggle = false, themeToggleProps, topBarBrandingLocation = "left", className, sidebarClassName, topbarClassName, mainClassName, sidebarWidth, closeSidebarOnChangeKey, hamburgerLabel = "Toggle navigation", onSidebarToggle }) {
1432
+ const [isDesktop, setIsDesktop] = (0, react.useState)(false);
1433
+ const [sidebarOpen, setSidebarOpen] = (0, react.useState)(false);
1434
+ const [transitionsReady, setTransitionsReady] = (0, react.useState)(false);
1435
+ const prevIsDesktopRef = (0, react.useRef)(false);
1436
+ const closeKeyRef = (0, react.useRef)(closeSidebarOnChangeKey);
1437
+ const sidebarRef = (0, react.useRef)(null);
1438
+ const hamburgerRef = (0, react.useRef)(null);
1439
+ const mainRef = (0, react.useRef)(null);
1440
+ const sidebarId = (0, react.useId)();
1441
+ (0, react.useEffect)(() => {
1442
+ const desktop = getIsDesktop();
1443
+ setIsDesktop(desktop);
1444
+ setSidebarOpen(desktop);
1445
+ prevIsDesktopRef.current = desktop;
1446
+ const transitionFrame = window.requestAnimationFrame(() => {
1447
+ setTransitionsReady(true);
1448
+ });
1449
+ const handleResize = () => {
1450
+ const nowDesktop = getIsDesktop();
1451
+ setIsDesktop(nowDesktop);
1452
+ if (nowDesktop !== prevIsDesktopRef.current) {
1453
+ setSidebarOpen(nowDesktop);
1454
+ prevIsDesktopRef.current = nowDesktop;
1455
+ }
1456
+ };
1457
+ window.addEventListener("resize", handleResize);
1458
+ return () => {
1459
+ window.cancelAnimationFrame(transitionFrame);
1460
+ window.removeEventListener("resize", handleResize);
1461
+ };
1462
+ }, []);
1463
+ (0, react.useEffect)(() => {
1464
+ if (isDesktop || !sidebarOpen) return;
1465
+ const mainElement = mainRef.current;
1466
+ const closeSidebar = () => setSidebarOpen(false);
1467
+ const onPointerDown = (e) => {
1468
+ const target = e.target;
1469
+ if (!target) return;
1470
+ if (sidebarRef.current?.contains(target)) return;
1471
+ if (hamburgerRef.current?.contains(target)) return;
1472
+ closeSidebar();
1473
+ };
1474
+ const timeoutId = window.setTimeout(() => {
1475
+ document.addEventListener("pointerdown", onPointerDown);
1476
+ window.addEventListener("scroll", closeSidebar, { passive: true });
1477
+ mainElement?.addEventListener("scroll", closeSidebar, { passive: true });
1478
+ document.addEventListener("touchmove", closeSidebar, { passive: true });
1479
+ }, 10);
1480
+ return () => {
1481
+ window.clearTimeout(timeoutId);
1482
+ document.removeEventListener("pointerdown", onPointerDown);
1483
+ window.removeEventListener("scroll", closeSidebar);
1484
+ mainElement?.removeEventListener("scroll", closeSidebar);
1485
+ document.removeEventListener("touchmove", closeSidebar);
1486
+ };
1487
+ }, [sidebarOpen, isDesktop]);
1488
+ (0, react.useEffect)(() => {
1489
+ if (!isDesktop && closeKeyRef.current !== closeSidebarOnChangeKey) setSidebarOpen(false);
1490
+ closeKeyRef.current = closeSidebarOnChangeKey;
1491
+ }, [closeSidebarOnChangeKey, isDesktop]);
1492
+ (0, react.useEffect)(() => {
1493
+ onSidebarToggle?.(sidebarOpen);
1494
+ }, [sidebarOpen, onSidebarToggle]);
1495
+ const toggleSidebar = () => setSidebarOpen((open) => !open);
1496
+ const sidebarWidthValue = sidebarWidth === void 0 ? void 0 : typeof sidebarWidth === "number" ? `${sidebarWidth}px` : sidebarWidth;
1497
+ const shellStyle = sidebarWidthValue ? { ["--app-shell-sidebar-width"]: sidebarWidthValue } : void 0;
1498
+ const shellClasses = cx(app_shell_module_default.appShell, transitionsReady && app_shell_module_default.appShellAnimated, sidebarOpen ? app_shell_module_default.appShellOpen : app_shell_module_default.appShellCollapsed, className);
1499
+ const sidebarClasses = cx(app_shell_module_default.appShellSidebar, sidebarOpen && app_shell_module_default.appShellSidebarOpen, sidebarClassName);
1500
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1501
+ className: shellClasses,
1502
+ style: shellStyle,
1503
+ "data-app-shell": true,
1504
+ "data-desktop": isDesktop ? "true" : "false",
1505
+ "data-sidebar-open": sidebarOpen ? "true" : "false",
1506
+ children: [
1507
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TopBar, {
1508
+ className: cx(app_shell_module_default.appShellTopbar, topbarClassName),
1509
+ leading: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1510
+ ref: hamburgerRef,
1511
+ type: "button",
1512
+ className: app_shell_module_default.appShellHamburger,
1513
+ onClick: toggleSidebar,
1514
+ "aria-label": hamburgerLabel,
1515
+ "aria-expanded": sidebarOpen,
1516
+ "aria-controls": sidebarId,
1517
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1518
+ viewBox: "0 0 24 24",
1519
+ "aria-hidden": "true",
1520
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
1521
+ d: "M3 6h18M3 12h18M3 18h18",
1522
+ stroke: "currentColor",
1523
+ strokeWidth: "2.5",
1524
+ strokeLinecap: "round"
1525
+ })
1526
+ })
1527
+ }),
1528
+ brand,
1529
+ brandHref,
1530
+ brandingLocation: topBarBrandingLocation,
1531
+ start: topbarStart,
1532
+ actions: topbarEnd,
1533
+ showThemeToggle,
1534
+ themeToggleProps
1535
+ }),
1536
+ !isDesktop && sidebarOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1537
+ className: app_shell_module_default.appShellBackdrop,
1538
+ onClick: () => setSidebarOpen(false),
1539
+ onTouchStart: () => setSidebarOpen(false),
1540
+ "aria-hidden": "true"
1541
+ }),
1542
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
1543
+ ref: sidebarRef,
1544
+ id: sidebarId,
1545
+ className: sidebarClasses,
1546
+ "aria-label": "Sidebar navigation",
1547
+ children: sidebar
1548
+ }),
1549
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("main", {
1550
+ ref: mainRef,
1551
+ className: cx(app_shell_module_default.appShellMain, mainClassName),
1552
+ children
1553
+ })
1554
+ ]
1555
+ });
1556
+ }
1557
+ var sidebar_nav_module_default = {
1558
+ sidebarNav: "uzi-sidebar-nav-module__sidebarNav__eUI5c",
1559
+ sidebarNavCollapsed: "uzi-sidebar-nav-module__sidebarNavCollapsed__xTM9s",
1560
+ header: "uzi-sidebar-nav-module__header__Y4NLy",
1561
+ footer: "uzi-sidebar-nav-module__footer__GjWky",
1562
+ sections: "uzi-sidebar-nav-module__sections__mXuGQ",
1563
+ section: "uzi-sidebar-nav-module__section__yjtCY",
1564
+ sectionItems: "uzi-sidebar-nav-module__sectionItems__tNcph",
1565
+ sectionLabel: "uzi-sidebar-nav-module__sectionLabel__Wx94m",
1566
+ item: "uzi-sidebar-nav-module__item__uMHkJ",
1567
+ itemActive: "uzi-sidebar-nav-module__itemActive__wBbiS",
1568
+ itemCollapsed: "uzi-sidebar-nav-module__itemCollapsed__jLJN-",
1569
+ itemDisabled: "uzi-sidebar-nav-module__itemDisabled__Yf8Il",
1570
+ icon: "uzi-sidebar-nav-module__icon__tyrUg",
1571
+ itemBody: "uzi-sidebar-nav-module__itemBody__wI0iy",
1572
+ labelRow: "uzi-sidebar-nav-module__labelRow__D8sEJ",
1573
+ label: "uzi-sidebar-nav-module__label__A-nt6",
1574
+ description: "uzi-sidebar-nav-module__description__Xf3Si",
1575
+ badge: "uzi-sidebar-nav-module__badge__-hnFd"
1576
+ };
1577
+ //#endregion
1578
+ //#region src/components/sidebar-nav/SidebarNav.tsx
1579
+ var isActivePrefix = (item, path) => {
1580
+ if (item.active !== void 0) return item.active;
1581
+ if (!item.href) return false;
1582
+ if (!path) return false;
1583
+ if (item.href === "/") return path === "/";
1584
+ return path.startsWith(item.href);
1585
+ };
1586
+ var isActiveExact = (item, path) => {
1587
+ if (item.active !== void 0) return item.active;
1588
+ if (!item.href) return false;
1589
+ if (!path) return false;
1590
+ if (item.href === "/") return path === "/";
1591
+ const normalizedHref = item.href.endsWith("/") ? item.href.slice(0, -1) : item.href;
1592
+ return normalizedHref === path || path.startsWith(`${normalizedHref}/`);
1593
+ };
1594
+ var isNaturalPrefixMatch = (href, path) => {
1595
+ if (href === "/") return path === "/";
1596
+ return path.startsWith(href);
1597
+ };
1598
+ var isNaturalExactMatch = (href, path) => {
1599
+ if (href === "/") return path === "/";
1600
+ return (href.endsWith("/") ? href.slice(0, -1) : href) === path;
1601
+ };
1602
+ var hrefLength = (href) => href.endsWith("/") ? href.length - 1 : href.length;
1603
+ var findMostSpecific = (items, currentPath) => {
1604
+ const result = /* @__PURE__ */ new Set();
1605
+ if (!currentPath) return result;
1606
+ const matchingItems = items.filter((item) => {
1607
+ if (item.disabled || !item.href) return false;
1608
+ return item.exact ? isNaturalExactMatch(item.href, currentPath) : isNaturalPrefixMatch(item.href, currentPath);
1609
+ });
1610
+ if (matchingItems.length === 0) return result;
1611
+ let maxLen = 0;
1612
+ for (const item of matchingItems) {
1613
+ if (!item.href) continue;
1614
+ const len = hrefLength(item.href);
1615
+ if (len > maxLen) maxLen = len;
1616
+ }
1617
+ for (const item of matchingItems) {
1618
+ if (!item.href) continue;
1619
+ if (hrefLength(item.href) === maxLen) result.add(item.href);
1620
+ }
1621
+ return result;
1622
+ };
1623
+ function SidebarNav({ items = [], sections, currentPath, getIsActive, matchStrategy = "prefix", onItemClick, header, footer, ariaLabel = "Sidebar navigation", collapsed = false, iconSize, className, itemClassName, sectionClassName }) {
1624
+ const resolvedSections = (0, react.useMemo)(() => {
1625
+ return sections?.length ? sections : [{
1626
+ id: "default",
1627
+ items
1628
+ }];
1629
+ }, [sections, items]);
1630
+ const allItems = (0, react.useMemo)(() => resolvedSections.flatMap((section) => section.items), [resolvedSections]);
1631
+ const defaultIsActiveFn = (0, react.useMemo)(() => {
1632
+ if (matchStrategy === "most-specific") {
1633
+ const mostSpecificHrefs = findMostSpecific(allItems, currentPath);
1634
+ return (item) => {
1635
+ if (item.active !== void 0) return item.active;
1636
+ if (!item.href) return false;
1637
+ return mostSpecificHrefs.has(item.href);
1638
+ };
1639
+ } else return (item, path) => {
1640
+ if (item.active !== void 0) return item.active;
1641
+ if (item.exact) return isActiveExact(item, path);
1642
+ return isActivePrefix(item, path);
1643
+ };
1644
+ }, [
1645
+ matchStrategy,
1646
+ allItems,
1647
+ currentPath
1648
+ ]);
1649
+ const resolvedGetIsActive = getIsActive ?? defaultIsActiveFn;
1650
+ const style = iconSize !== void 0 ? { ["--sidebar-nav-icon-size"]: typeof iconSize === "number" ? `${iconSize}px` : iconSize } : void 0;
1651
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("nav", {
1652
+ className: cx(sidebar_nav_module_default.sidebarNav, collapsed && sidebar_nav_module_default.sidebarNavCollapsed, className),
1653
+ "aria-label": ariaLabel,
1654
+ style,
1655
+ children: [
1656
+ header ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1657
+ className: sidebar_nav_module_default.header,
1658
+ children: header
1659
+ }) : null,
1660
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1661
+ className: sidebar_nav_module_default.sections,
1662
+ children: resolvedSections.map((section, sectionIndex) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1663
+ className: cx(sidebar_nav_module_default.section, sectionClassName),
1664
+ children: [section.label && !collapsed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1665
+ className: sidebar_nav_module_default.sectionLabel,
1666
+ children: section.label
1667
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1668
+ className: sidebar_nav_module_default.sectionItems,
1669
+ children: section.items.map((item, itemIndex) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarNavEntry, {
1670
+ item,
1671
+ active: resolvedGetIsActive(item, currentPath),
1672
+ collapsed,
1673
+ itemClassName,
1674
+ onItemClick
1675
+ }, `${section.id ?? sectionIndex}-${item.href ?? item.title ?? itemIndex}`))
1676
+ })]
1677
+ }, section.id ?? `section-${sectionIndex}`))
1678
+ }),
1679
+ footer ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1680
+ className: sidebar_nav_module_default.footer,
1681
+ children: footer
1682
+ }) : null
1683
+ ]
1684
+ });
1685
+ }
1686
+ function SidebarNavEntry({ item, active, collapsed, itemClassName, onItemClick }) {
1687
+ const rel = item.rel ?? (item.target === "_blank" ? "noreferrer" : void 0);
1688
+ const title = item.title ?? (typeof item.label === "string" ? item.label : void 0);
1689
+ const classes = cx(sidebar_nav_module_default.item, active && sidebar_nav_module_default.itemActive, collapsed && sidebar_nav_module_default.itemCollapsed, item.disabled && sidebar_nav_module_default.itemDisabled, itemClassName);
1690
+ const content = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [item.icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1691
+ className: sidebar_nav_module_default.icon,
1692
+ children: item.icon
1693
+ }), !collapsed ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1694
+ className: sidebar_nav_module_default.itemBody,
1695
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1696
+ className: sidebar_nav_module_default.labelRow,
1697
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1698
+ className: sidebar_nav_module_default.label,
1699
+ children: item.label
1700
+ }), item.badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1701
+ className: sidebar_nav_module_default.badge,
1702
+ children: item.badge
1703
+ })]
1704
+ }), item.description ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1705
+ className: sidebar_nav_module_default.description,
1706
+ children: item.description
1707
+ }) : null]
1708
+ }) : null] });
1709
+ const handleClick = () => {
1710
+ if (item.disabled) return;
1711
+ item.onClick?.();
1712
+ onItemClick?.(item);
1713
+ };
1714
+ if (!item.href) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1715
+ type: "button",
1716
+ className: classes,
1717
+ "aria-current": active ? "page" : void 0,
1718
+ "aria-disabled": item.disabled ? "true" : void 0,
1719
+ disabled: item.disabled,
1720
+ title: collapsed ? title : void 0,
1721
+ onClick: handleClick,
1722
+ children: content
1723
+ });
1724
+ if (item.disabled) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1725
+ className: classes,
1726
+ "aria-current": active ? "page" : void 0,
1727
+ "aria-disabled": "true",
1728
+ title: collapsed ? title : void 0,
1729
+ children: content
1730
+ });
1731
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
1732
+ className: classes,
1733
+ href: item.href,
1734
+ target: item.target,
1735
+ rel,
1736
+ "aria-current": active ? "page" : void 0,
1737
+ title: collapsed ? title : void 0,
1738
+ onClick: handleClick,
1739
+ children: content
1740
+ });
1741
+ }
1742
+ var skeleton_module_default = {
1743
+ skeleton: "uzi-skeleton-module__skeleton__fula5",
1744
+ "skeleton-pulse": "uzi-skeleton-module__skeleton-pulse__Yp45W",
1745
+ "radius-sm": "uzi-skeleton-module__radius-sm__FdccD",
1746
+ "radius-md": "uzi-skeleton-module__radius-md__zH3RE",
1747
+ "radius-lg": "uzi-skeleton-module__radius-lg__YVrHw",
1748
+ "radius-full": "uzi-skeleton-module__radius-full__5o2m0"
1749
+ };
1750
+ //#endregion
1751
+ //#region src/components/skeleton/Skeleton.tsx
1752
+ function Skeleton({ width, height, radius = "md", className, style, ...rest }) {
1753
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1754
+ className: cx(skeleton_module_default.skeleton, skeleton_module_default[`radius-${radius}`], className),
1755
+ style: {
1756
+ width,
1757
+ height,
1758
+ ...style
1759
+ },
1760
+ "aria-hidden": "true",
1761
+ ...rest
1762
+ });
1763
+ }
1764
+ var progress_module_default = {
1765
+ track: "uzi-progress-module__track__gM0oV",
1766
+ fill: "uzi-progress-module__fill__aLAbp",
1767
+ "tone-default": "uzi-progress-module__tone-default__fhf7o",
1768
+ "tone-success": "uzi-progress-module__tone-success__FsGHD",
1769
+ "tone-warning": "uzi-progress-module__tone-warning__UAttL",
1770
+ "tone-danger": "uzi-progress-module__tone-danger__-L-Ee"
1771
+ };
1772
+ //#endregion
1773
+ //#region src/components/progress/Progress.tsx
1774
+ function Progress({ value, tone = "default", className, "aria-label": ariaLabel, ...rest }) {
1775
+ const clamped = Math.max(0, Math.min(100, value));
1776
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1777
+ className: cx(progress_module_default.track, className),
1778
+ role: "progressbar",
1779
+ "aria-valuenow": clamped,
1780
+ "aria-valuemin": 0,
1781
+ "aria-valuemax": 100,
1782
+ "aria-label": ariaLabel,
1783
+ ...rest,
1784
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1785
+ className: cx(progress_module_default.fill, progress_module_default[`tone-${tone}`]),
1786
+ style: { width: `${clamped}%` }
1787
+ })
1788
+ });
1789
+ }
1790
+ var segmented_toggle_module_default = {
1791
+ track: "uzi-segmented-toggle-module__track__M4fjm",
1792
+ option: "uzi-segmented-toggle-module__option__7cEZJ",
1793
+ label: "uzi-segmented-toggle-module__label__bDAIv"
1794
+ };
1795
+ //#endregion
1796
+ //#region src/components/segmented-toggle/SegmentedToggle.tsx
1797
+ function SegmentedToggle({ options, value, onChange, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className }) {
1798
+ const itemRefs = react.useRef([]);
1799
+ const selectedIndex = options.findIndex((opt) => opt.value === value);
1800
+ const fallbackIndex = options.findIndex((opt) => !opt.disabled);
1801
+ let lastEnabledIndex = -1;
1802
+ for (let index = options.length - 1; index >= 0; index -= 1) if (!options[index]?.disabled) {
1803
+ lastEnabledIndex = index;
1804
+ break;
1805
+ }
1806
+ const tabbableIndex = selectedIndex >= 0 && !options[selectedIndex]?.disabled ? selectedIndex : fallbackIndex;
1807
+ const focusItem = (index) => {
1808
+ itemRefs.current[index]?.focus();
1809
+ };
1810
+ const findEnabledIndex = (startIndex, direction) => {
1811
+ if (options.length === 0) return -1;
1812
+ let nextIndex = startIndex;
1813
+ for (let i = 0; i < options.length; i += 1) {
1814
+ nextIndex = (nextIndex + direction + options.length) % options.length;
1815
+ if (!options[nextIndex]?.disabled) return nextIndex;
1816
+ }
1817
+ return startIndex;
1818
+ };
1819
+ const selectIndex = (index) => {
1820
+ const nextOption = options[index];
1821
+ if (!nextOption || nextOption.disabled || nextOption.value === value) return;
1822
+ onChange(nextOption.value);
1823
+ };
1824
+ const handleKeyDown = (event, index) => {
1825
+ switch (event.key) {
1826
+ case "ArrowRight":
1827
+ case "ArrowDown": {
1828
+ event.preventDefault();
1829
+ const nextIndex = findEnabledIndex(index, 1);
1830
+ focusItem(nextIndex);
1831
+ selectIndex(nextIndex);
1832
+ break;
1833
+ }
1834
+ case "ArrowLeft":
1835
+ case "ArrowUp": {
1836
+ event.preventDefault();
1837
+ const nextIndex = findEnabledIndex(index, -1);
1838
+ focusItem(nextIndex);
1839
+ selectIndex(nextIndex);
1840
+ break;
1841
+ }
1842
+ case "Home":
1843
+ event.preventDefault();
1844
+ focusItem(fallbackIndex);
1845
+ if (fallbackIndex >= 0) selectIndex(fallbackIndex);
1846
+ break;
1847
+ case "End":
1848
+ event.preventDefault();
1849
+ if (lastEnabledIndex >= 0) {
1850
+ focusItem(lastEnabledIndex);
1851
+ selectIndex(lastEnabledIndex);
1852
+ }
1853
+ break;
1854
+ default: break;
1855
+ }
1856
+ };
1857
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1858
+ className: cx(segmented_toggle_module_default.track, className),
1859
+ role: "radiogroup",
1860
+ "aria-label": ariaLabel,
1861
+ "aria-labelledby": ariaLabelledBy,
1862
+ children: options.map((opt, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1863
+ ref: (node) => {
1864
+ itemRefs.current[index] = node;
1865
+ },
1866
+ type: "button",
1867
+ role: "radio",
1868
+ "aria-checked": opt.value === value,
1869
+ disabled: opt.disabled,
1870
+ tabIndex: opt.disabled ? -1 : index === tabbableIndex ? 0 : -1,
1871
+ onClick: () => {
1872
+ if (opt.value !== value) onChange(opt.value);
1873
+ },
1874
+ onKeyDown: (event) => handleKeyDown(event, index),
1875
+ className: cx(segmented_toggle_module_default.option),
1876
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1877
+ className: segmented_toggle_module_default.label,
1878
+ children: opt.label
1879
+ })
1880
+ }, opt.value))
1881
+ });
1882
+ }
1883
+ //#endregion
1884
+ exports.Alert = Alert;
1885
+ exports.AppShell = AppShell;
1886
+ exports.Avatar = Avatar;
1887
+ exports.AvatarFallback = AvatarFallback;
1888
+ exports.AvatarImage = AvatarImage;
1889
+ exports.Button = Button;
1890
+ exports.Card = Card;
1891
+ exports.Checkbox = Checkbox;
1892
+ exports.Dropdown = Dropdown;
1893
+ exports.DropdownMenu = DropdownMenu;
1894
+ exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
1895
+ exports.DropdownMenuContent = DropdownMenuContent;
1896
+ exports.DropdownMenuGroup = DropdownMenuGroup;
1897
+ exports.DropdownMenuItem = DropdownMenuItem;
1898
+ exports.DropdownMenuLabel = DropdownMenuLabel;
1899
+ exports.DropdownMenuPortal = DropdownMenuPortal;
1900
+ exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
1901
+ exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
1902
+ exports.DropdownMenuSeparator = DropdownMenuSeparator;
1903
+ exports.DropdownMenuSub = DropdownMenuSub;
1904
+ exports.DropdownMenuSubContent = DropdownMenuSubContent;
1905
+ exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
1906
+ exports.DropdownMenuTrigger = DropdownMenuTrigger;
1907
+ exports.Input = Input;
1908
+ exports.Label = Label;
1909
+ exports.Modal = Modal;
1910
+ exports.ModalOverlay = ModalOverlay;
1911
+ exports.MultiSelect = MultiSelect;
1912
+ exports.Pill = Pill;
1913
+ exports.Progress = Progress;
1914
+ exports.SegmentedToggle = SegmentedToggle;
1915
+ exports.Select = Select;
1916
+ exports.SidebarNav = SidebarNav;
1917
+ exports.Skeleton = Skeleton;
1918
+ exports.ThemeProvider = ThemeProvider;
1919
+ exports.ThemeToggleButton = ThemeToggleButton;
1920
+ exports.ToastProvider = ToastProvider;
1921
+ exports.TopBar = TopBar;
1922
+ exports.cx = cx;
1923
+ exports.useTheme = useTheme;
1924
+ exports.useToast = useToast;
1925
+
2
1926
  //# sourceMappingURL=index.cjs.map