@tribepad/themis 1.0.7 → 1.0.9

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.
Files changed (102) hide show
  1. package/dist/elements/AlertDialog/index.js +1 -1
  2. package/dist/elements/AlertDialog/index.js.map +1 -1
  3. package/dist/elements/AlertDialog/index.mjs +1 -1
  4. package/dist/elements/AlertDialog/index.mjs.map +1 -1
  5. package/dist/elements/Breadcrumbs/index.js +1 -1
  6. package/dist/elements/Breadcrumbs/index.js.map +1 -1
  7. package/dist/elements/Breadcrumbs/index.mjs +1 -1
  8. package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
  9. package/dist/elements/Chart/ChartContext.d.ts.map +1 -1
  10. package/dist/elements/Chart/ChartLineSeries.d.ts.map +1 -1
  11. package/dist/elements/Chart/index.js +1 -1
  12. package/dist/elements/Chart/index.js.map +1 -1
  13. package/dist/elements/Chart/index.mjs +1 -1
  14. package/dist/elements/Chart/index.mjs.map +1 -1
  15. package/dist/elements/DatePicker/index.js +1 -1
  16. package/dist/elements/DatePicker/index.js.map +1 -1
  17. package/dist/elements/DatePicker/index.mjs +1 -1
  18. package/dist/elements/DatePicker/index.mjs.map +1 -1
  19. package/dist/elements/FileField/index.js +1 -1
  20. package/dist/elements/FileField/index.js.map +1 -1
  21. package/dist/elements/FileField/index.mjs +1 -1
  22. package/dist/elements/FileField/index.mjs.map +1 -1
  23. package/dist/elements/Modal/Modal.styles.d.ts +2 -0
  24. package/dist/elements/Modal/Modal.styles.d.ts.map +1 -1
  25. package/dist/elements/Modal/index.js +1 -1
  26. package/dist/elements/Modal/index.js.map +1 -1
  27. package/dist/elements/Modal/index.mjs +1 -1
  28. package/dist/elements/Modal/index.mjs.map +1 -1
  29. package/dist/elements/NumberField/NumberField.d.ts.map +1 -1
  30. package/dist/elements/NumberField/NumberField.types.d.ts +12 -0
  31. package/dist/elements/NumberField/NumberField.types.d.ts.map +1 -1
  32. package/dist/elements/NumberField/index.js +1 -1
  33. package/dist/elements/NumberField/index.js.map +1 -1
  34. package/dist/elements/NumberField/index.mjs +1 -1
  35. package/dist/elements/NumberField/index.mjs.map +1 -1
  36. package/dist/elements/OTPInput/OTPInput.d.ts +1 -1
  37. package/dist/elements/Resizable/index.js +1 -1
  38. package/dist/elements/Resizable/index.js.map +1 -1
  39. package/dist/elements/Resizable/index.mjs +1 -1
  40. package/dist/elements/Resizable/index.mjs.map +1 -1
  41. package/dist/elements/Switch/Switch.d.ts +11 -4
  42. package/dist/elements/Switch/Switch.d.ts.map +1 -1
  43. package/dist/elements/Switch/Switch.types.d.ts +5 -0
  44. package/dist/elements/Switch/Switch.types.d.ts.map +1 -1
  45. package/dist/elements/Switch/index.js +1 -1
  46. package/dist/elements/Switch/index.js.map +1 -1
  47. package/dist/elements/Switch/index.mjs +1 -1
  48. package/dist/elements/Switch/index.mjs.map +1 -1
  49. package/dist/elements/Tabs/Tabs.d.ts +1 -1
  50. package/dist/elements/Tabs/Tabs.d.ts.map +1 -1
  51. package/dist/elements/Tabs/Tabs.types.d.ts +1 -0
  52. package/dist/elements/Tabs/Tabs.types.d.ts.map +1 -1
  53. package/dist/elements/Tabs/index.js +1 -1
  54. package/dist/elements/Tabs/index.js.map +1 -1
  55. package/dist/elements/Tabs/index.mjs +1 -1
  56. package/dist/elements/Tabs/index.mjs.map +1 -1
  57. package/dist/elements/index.js +1 -1
  58. package/dist/elements/index.js.map +1 -1
  59. package/dist/elements/index.mjs +1 -1
  60. package/dist/elements/index.mjs.map +1 -1
  61. package/dist/hooks/index.d.ts +2 -0
  62. package/dist/hooks/index.d.ts.map +1 -0
  63. package/dist/hooks/index.js +2 -0
  64. package/dist/hooks/index.js.map +1 -0
  65. package/dist/hooks/index.mjs +2 -0
  66. package/dist/hooks/index.mjs.map +1 -0
  67. package/dist/hooks/useReducedMotion.d.ts +9 -0
  68. package/dist/hooks/useReducedMotion.d.ts.map +1 -0
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +2 -2
  72. package/dist/index.js.map +1 -1
  73. package/dist/index.mjs +2 -2
  74. package/dist/index.mjs.map +1 -1
  75. package/dist/styles/animations.css +172 -0
  76. package/dist/styles/index.js +1 -1
  77. package/dist/styles/index.js.map +1 -1
  78. package/dist/styles/index.mjs +1 -1
  79. package/dist/styles/index.mjs.map +1 -1
  80. package/dist/styles/shared-variants.d.ts +23 -0
  81. package/dist/styles/shared-variants.d.ts.map +1 -1
  82. package/dist/tailwind-source.css +1 -0
  83. package/dist/types/animation.d.ts +24 -0
  84. package/dist/types/animation.d.ts.map +1 -0
  85. package/dist/types/index.d.ts +2 -0
  86. package/dist/types/index.d.ts.map +1 -0
  87. package/dist/types/index.js +2 -0
  88. package/dist/types/index.js.map +1 -0
  89. package/dist/types/index.mjs +2 -0
  90. package/dist/types/index.mjs.map +1 -0
  91. package/dist/utils/index.d.ts +1 -0
  92. package/dist/utils/index.d.ts.map +1 -1
  93. package/dist/utils/index.js +1 -1
  94. package/dist/utils/index.js.map +1 -1
  95. package/dist/utils/index.mjs +1 -1
  96. package/dist/utils/index.mjs.map +1 -1
  97. package/dist/utils/shouldAnimate.d.ts +12 -0
  98. package/dist/utils/shouldAnimate.d.ts.map +1 -0
  99. package/package.json +34 -2
  100. package/src/elements/NumberField/NumberField.stories.tsx +100 -0
  101. package/src/elements/Switch/Switch.stories.tsx +60 -0
  102. package/src/elements/Tabs/Tabs.stories.tsx +101 -0
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {createContext,memo,forwardRef,useId,useState,useRef,useCallback,useContext,useEffect}from'react';import {Button,FileTrigger,ProgressBar}from'react-aria-components';import {Loader2,Zap,Upload,X,FileIcon,AudioLines,VideoIcon,ImageIcon}from'lucide-react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function b(...e){return twMerge(clsx(e))}var pe=cva("inline-flex justify-center min-h-[44px] min-w-[44px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",{variants:{fullWidth:{true:"w-full",false:""},inVerticalGroup:{true:"items-stretch",false:"items-center"}},defaultVariants:{fullWidth:false,inVerticalGroup:false}}),me=cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 relative cursor-pointer",{variants:{variant:{default:"bg-[var(--primary-action)] text-[var(--primary-action-foreground)] shadow-md hover:bg-[var(--primary-action-hover)] data-[pressed]:bg-[var(--primary-action)]/80",destructive:"bg-[var(--destructive-background)] text-[var(--destructive-foreground)] shadow-md hover:bg-[var(--destructive-background)]/90 data-[pressed]:bg-[var(--destructive-background)]/80",outline:"border border-[var(--input-border)] bg-[var(--page-background)] hover:bg-[var(--input-border)] data-[pressed]:bg-[var(--input-border)]",secondary:"bg-[var(--secondary)] text-[var(--secondary-foreground)] shadow-md hover:bg-[var(--secondary)]/80 data-[pressed]:bg-[var(--secondary)]/70",ghost:"hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)] data-[pressed]:bg-[var(--accent)]",link:"text-[var(--text-link)] underline-offset-4 hover:underline data-[pressed]:text-[var(--text-link-hover)]"},fullWidth:{true:"w-full",false:""},visualSize:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3 text-xs",lg:"h-11 rounded-md px-8",icon:"h-10 w-10",dot:"h-5 w-5 rounded-full p-0 min-h-0 min-w-0"},paywall:{true:"!bg-[var(--paywall)] !text-[var(--paywall-foreground)] !shadow-md hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var ge="data-[pressed]:scale-[0.97]";var ve="data-[hovered]:shadow-md";var te="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",re="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";var dt=createContext(null);dt.displayName="ButtonGroupContext";function ut(){return useContext(dt)}var ct=createContext(null);ct.displayName="ButtonGroupItemContext";function ft(){return useContext(ct)}cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var pt=cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var B=memo(forwardRef(({className:e,buttonVisualClassName:r,variant:t,size:i,visualSize:a,fullWidth:o,loading:d=false,loadingText:m="Loading...",shortcut:u,children:c,isDisabled:g,paywall:s=false,paywallRedirect:E,paywallDescription:N,onPress:f,...F},le)=>{let Y=useId(),v=ut(),T=ft(),U=t??v?.variant??"default",de=i??v?.size,z=g??v?.isDisabled??false,X=v?.orientation==="vertical",q=o||X,ue=T?pt({orientation:v?.orientation??"horizontal",position:T.position}):"",H=a??de??"default";return process.env.NODE_ENV!=="production"&&(H==="dot"||H==="icon")&&!F["aria-label"]&&!c&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsx(Button,{ref:le,isDisabled:z||d||void 0,"aria-disabled":s?true:void 0,"aria-describedby":s?Y:void 0,onPress:P=>{if(s){E&&window.open(E,"_blank","noopener,noreferrer");return}f?.(P);},className:b(pe({fullWidth:q,inVerticalGroup:X}),e),...F,children:P=>jsxs("span",{className:b(me({variant:U,visualSize:H,paywall:s,fullWidth:q}),ue,r,ge,ve,te,re),"data-pressed":P.isPressed||void 0,children:[d&&jsxs(Fragment,{children:[jsx(Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsx("span",{className:"sr-only","aria-live":"polite",children:m})]}),!d&&c,s&&jsx(Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),s&&jsxs("span",{id:Y,className:"sr-only",children:["Premium feature: ",N||"Upgrade required to access this feature"]}),P.isFocusVisible&&u&&jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:u}),P.isPressed&&jsx("span",{className:"absolute inset-0 rounded-[inherit] bg-current opacity-10 motion-safe:animate-in motion-safe:zoom-in-95","aria-hidden":"true"})]})})}));B.displayName="Button";var Se=["focus-within:outline-none","focus-within:ring-2","focus-within:ring-[var(--ring)]","focus-within:ring-offset-2"],Ee=["focus-visible:outline-none","focus-visible:ring-2","focus-visible:ring-[var(--ring)]","focus-visible:ring-offset-2"];var Fe=["disabled:pointer-events-none","disabled:opacity-50"];var L={sm:"text-xs",default:"text-sm",lg:"text-base"},ie={sm:"text-sm",default:"text-base",lg:"text-lg"},ae=["min-h-[44px]","min-w-[44px]"];var Ie=["flex","items-center","gap-1.5","text-[var(--destructive-background)]"],Ve=["flex","items-center","gap-1.5","text-[var(--success-background)]"],ye=["text-[var(--menu-muted)]"],Ne=["font-medium","text-[var(--content-foreground)]"];var ne=["transition-colors","duration-200"];function A(...e){return e.flatMap(r=>Array.isArray(r)?[...r]:[r])}var Te=cva("flex flex-col gap-1.5 w-full",{variants:{size:ie},defaultVariants:{size:"default"}}),_e=cva(A("flex flex-col items-center justify-center rounded-md border-2 border-dashed","bg-[var(--content-background)] text-[var(--content-foreground)]",ne,Se),{variants:{size:{sm:"min-h-[100px] p-4 gap-2",default:"min-h-[140px] p-6 gap-3",lg:"min-h-[180px] p-8 gap-4"},isDragOver:{true:"border-[var(--primary)] bg-[var(--primary)]/5",false:"border-[var(--input-border)] hover:border-[var(--primary)]/50"},isInvalid:{true:"border-[var(--destructive-background)] bg-[var(--destructive-background)]/5",false:""},isDisabled:{true:"opacity-50 cursor-not-allowed pointer-events-none",false:"cursor-pointer"}},compoundVariants:[{isInvalid:true,isDragOver:true,className:"border-[var(--destructive-background)] bg-[var(--destructive-background)]/5"}],defaultVariants:{size:"default",isDragOver:false,isInvalid:false,isDisabled:false}}),Pe=cva(A("inline-flex items-center justify-center gap-2 rounded-md font-medium",ne,ae,Ee,Fe),{variants:{size:{sm:"px-3 py-2 text-xs",default:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base"},variant:{default:"bg-[var(--primary)] text-[var(--primary-foreground)] hover:bg-[var(--primary)]/90",outline:"border border-[var(--input-border)] bg-transparent hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]"}},defaultVariants:{size:"default",variant:"default"}}),Re=cva("flex flex-col gap-2 mt-3",{variants:{size:{sm:"gap-1.5",default:"gap-2",lg:"gap-3"}},defaultVariants:{size:"default"}}),mt=cva("flex items-center justify-between mb-1",{variants:{size:L},defaultVariants:{size:"default"}}),Ae=cva("flex items-center justify-between gap-3 bg-[var(--accent-background)] rounded-md border border-[var(--border)]",{variants:{size:{sm:"px-2 py-1.5 text-xs",default:"px-3 py-2 text-sm",lg:"px-4 py-3 text-base"}},defaultVariants:{size:"default"}}),we=cva(A("inline-flex items-center justify-center rounded-full",ae,"-mr-2 -my-1","text-[var(--menu-muted)] hover:text-[var(--destructive-background)] hover:bg-[var(--destructive-background)]/10","transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]"),{variants:{size:{sm:"",default:"",lg:""}},defaultVariants:{size:"default"}}),Ce=cva(A(Ie,"font-medium"),{variants:{size:L},defaultVariants:{size:"default"}}),Oe=cva(A(Ve,"font-medium"),{variants:{size:L},defaultVariants:{size:"default"}}),Be=cva(ye,{variants:{size:L},defaultVariants:{size:"default"}}),Le=cva(Ne,{variants:{size:ie,isRequired:{true:"after:content-['*'] after:ml-0.5 after:text-[var(--destructive-background)]",false:""}},defaultVariants:{size:"default",isRequired:false}});function oe(e){if(e===0)return "0 B";let r=1024,t=["B","KB","MB","GB"],i=Math.floor(Math.log(e)/Math.log(r)),a=parseFloat((e/Math.pow(r,i)).toFixed(1));return `${a%1===0?a.toFixed(0):a.toFixed(1)} ${t[i]}`}function $(e,r=30){if(e.length<=r)return e;let t=e.lastIndexOf(".");if(t===-1)return `${e.slice(0,r-3)}...`;let i=e.slice(t),a=e.slice(0,t),o=r-i.length-3;return o<1?`...${i}`:`${a.slice(0,o)}...${i}`}function De(e,r){return !r||r.length===0?true:r.some(t=>{if(t.endsWith("/*")){let i=t.slice(0,-2);return e.type.startsWith(`${i}/`)}return t.includes("/")?e.type===t:t.startsWith(".")?e.name.toLowerCase().endsWith(t.toLowerCase()):false})}function j(e){return e.type.startsWith("image/")?"image":e.type.startsWith("video/")?"video":e.type.startsWith("audio/")?"audio":"file"}function W(e,r){let t=[...e];for(let i of r){let a=t.findIndex(o=>o.name===i.name);a>=0?t[a]=i:t.push(i);}return t}function jt(e){return !e||e.length===0?"any file":e.map(t=>t==="image/*"?"images":t==="video/*"?"videos":t==="audio/*"?"audio":t.startsWith(".")?t.slice(1).toUpperCase():t.includes("/")?(t.split("/")[1]??t).toUpperCase():t).join(", ")}var gt=2*1024*1024;function Ue(e){return e.type.startsWith("image/")?true:/\.(jpg|jpeg|png|gif|webp|svg|bmp|ico|avif|heic|heif|tiff|tif)$/i.test(e.name)}async function vt(e,r=200){return new Promise((t,i)=>{let a=new window.Image,o=URL.createObjectURL(e);a.onload=()=>{URL.revokeObjectURL(o);let d=Math.min(r/a.width,r/a.height,1),m=Math.round(a.width*d),u=Math.round(a.height*d),c=document.createElement("canvas");c.width=m,c.height=u;let g=c.getContext("2d");if(!g){i(new Error("Canvas context unavailable"));return}g.drawImage(a,0,0,m,u),c.toBlob(s=>{s?t(URL.createObjectURL(s)):i(new Error("Failed to create blob"));},"image/jpeg",.8);},a.onerror=()=>{URL.revokeObjectURL(o),i(new Error("Failed to load image"));},a.src=o;})}async function ze(e,r=200){return e.size>gt?vt(e,r):URL.createObjectURL(e)}function Ge(e,r={}){let{enabled:t=true,maxBytes:i=10*1024*1024,maxDimension:a=200}=r,[o,d]=useState(null),[m,u]=useState(false),[c,g]=useState(null),s=Ue(e);return useEffect(()=>{if(!t||!s){d(null),u(false),g(null);return}if(e.size>i){d(null),u(false),g("File too large for preview");return}let E=true,N=null;return (async()=>{u(true),g(null);try{N=await ze(e,a),E?(d(N),u(!1)):URL.revokeObjectURL(N);}catch(F){E&&(g(F instanceof Error?F.message:"Failed to generate preview"),u(false),d(null));}})(),()=>{E=false,N&&URL.revokeObjectURL(N),d(F=>(F&&URL.revokeObjectURL(F),null));}},[e,t,i,a,s]),{preview:o,isLoading:m,error:c,isImage:s}}function ke({file:e,size:r=64,maxBytes:t=10*1024*1024,renderPreview:i,className:a}){let{preview:o,isLoading:d,error:m,isImage:u}=Ge(e,{enabled:true,maxBytes:t,maxDimension:r*2}),c={width:r,height:r,minWidth:r,minHeight:r};if(!u&&i)return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",a),style:c,children:i(e)});if(d)return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",a),style:c,"aria-busy":"true","aria-label":`Loading preview for ${e.name}`,children:jsx(Loader2,{className:"h-4 w-4 animate-spin text-[var(--menu-muted)]","aria-hidden":"true"})});if(u&&o&&!m)return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",a),style:c,children:jsx("img",{src:o,alt:e.name,className:"w-full h-full object-cover",loading:"lazy"})});let g=j(e),s=Kt(g),E=Math.max(16,Math.floor(r*.4));return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",a),style:c,"aria-label":m?`Preview unavailable for ${e.name}`:void 0,children:jsx(s,{className:"text-[var(--menu-muted)]",style:{width:E,height:E},"aria-hidden":"true"})})}function Kt(e){switch(e){case "image":return ImageIcon;case "video":return VideoIcon;case "audio":return AudioLines;default:return FileIcon}}var Me=cva(["flex","flex-col","gap-1","w-full"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),$e=cva(["rounded-full","bg-[var(--accent-background)]","overflow-hidden"],{variants:{size:{sm:"h-1.5",default:"h-2",lg:"h-3"}},defaultVariants:{size:"default"}}),je=cva(["h-full","rounded-full","transition-all","duration-300"],{variants:{status:{pending:["bg-gradient-to-r","from-[var(--menu-muted)]","via-[var(--accent-background)]","to-[var(--menu-muted)]","bg-[length:200%_100%]","animate-progress-shimmer"],uploading:"bg-[var(--primary)]",complete:"bg-[var(--success-background)]",error:"bg-[var(--destructive-background)]"}},defaultVariants:{status:"pending"}}),We=cva(["flex","items-center","justify-between","gap-2"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Ze=cva(["flex","items-center","justify-between","gap-2","mt-1","text-[var(--destructive-background)]"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Ye=cva(["underline","hover:no-underline","min-h-[44px]","min-w-[44px]","inline-flex","items-center","justify-center","-mr-3","-my-2","focus-visible:outline-none","focus-visible:ring-2","focus-visible:ring-[var(--ring)]","focus-visible:ring-offset-2","rounded"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}});function tr(e,r){switch(e){case "pending":return "Waiting...";case "uploading":return `${r}%`;case "complete":return "Complete";case "error":return "Failed"}}function se({file:e,progress:r,status:t,error:i,onRetry:a,size:o="default",className:d}){let m=t==="pending",u=`progress-error-${e.name.replace(/[^a-zA-Z0-9]/g,"-")}`,c=tr(t,r);return jsxs("div",{className:b(Me({size:o}),d),children:[jsx(ProgressBar,{"aria-label":e.name,value:m?void 0:r,isIndeterminate:m,"aria-describedby":t==="error"&&i?u:void 0,children:({percentage:g,valueText:s})=>jsxs(Fragment,{children:[jsxs("div",{className:We({size:o}),children:[jsx("span",{className:"truncate",title:e.name,children:$(e.name,30)}),jsx("span",{className:"text-[var(--menu-muted)] flex-shrink-0",children:t==="error"?"Failed":s??c})]}),jsx("div",{className:$e({size:o}),children:jsx("div",{className:je({status:t}),style:{width:m?"100%":`${g??0}%`}})})]})}),t==="error"&&i&&jsxs("div",{id:u,className:Ze({size:o}),children:[jsx("span",{children:i}),a&&jsx(Button,{onPress:a,className:Ye({size:o}),children:"Retry"})]}),jsxs("div",{"aria-live":"polite","aria-atomic":"true",className:"sr-only",children:[t==="complete"&&`${e.name} upload complete`,t==="error"&&`${e.name} upload failed${i?`: ${i}`:""}`]})]})}se.displayName="FileProgress";var bt=forwardRef(function({label:r,acceptedFileTypes:t,allowsMultiple:i=false,maxFileSize:a,maxFiles:o,description:d,errorMessage:m,successMessage:u,triggerText:c,isRequired:g,isDisabled:s,isInvalid:E,isValid:N,size:f="default",name:F,id:le,className:Y,value:v=[],onChange:T,validate:U,showPreviews:de=false,previewSize:z=64,maxPreviewBytes:X$1=10*1024*1024,renderPreview:q,showProgress:ue=false,uploadProgress:H,uploadStatus:Xe,uploadErrors:qe,onRetry:P,"data-testid":Qe,"aria-label":gr,"aria-labelledby":vr,"aria-describedby":Ke,...St},Et){let Ft=useId(),Q=le??Ft,Je=`${Q}-label`,et=`${Q}-description`,tt=`${Q}-error`,[rt,ce]=useState(false),[It,fe]=useState(null),K=useRef(0),G=m??It,Vt=E||!!G,k=[];Ke&&k.push(Ke),d&&k.push(et),G&&k.push(tt);let yt=k.length>0?k.join(" "):void 0,it=useCallback((n,x=[])=>{let I=[],h=[];for(let S of n){if(t&&!De(S,t)){h.push(`"${S.name}" has an invalid file type`);continue}if(a&&S.size>a){h.push(`"${S.name}" exceeds the maximum size of ${oe(a)}`);continue}I.push(S);}return o&&i&&W(x,I).length>o?(h.push(`Maximum ${o} files allowed`),{valid:[],errors:h}):{valid:I,errors:h}},[t,a,o,i]),J=useCallback(n=>{if(!n||n.length===0)return;fe(null);let x=Array.from(n),I=i?v:[],{valid:h,errors:S}=it(x,I);if(S.length>0){fe(S[0]??"Invalid file");return}if(U&&h.length>0){let ee=U(i?W(I,h):h);if(ee){fe(ee);return}}let M;i?M=W(I,h):M=h.slice(0,1),T?.(M);},[i,v,it,U,T]),Nt=useCallback(n=>{J(n);},[J]),Tt=useCallback(n=>{let x=v.filter(I=>I!==n);T?.(x);},[v,T]),_t=useCallback(()=>{T?.([]);},[T]),Pt=useCallback(n=>{n.preventDefault(),n.stopPropagation(),!s&&(K.current++,ce(true));},[s]),Rt=useCallback(n=>{n.preventDefault(),n.stopPropagation();},[]),At=useCallback(n=>{n.preventDefault(),n.stopPropagation(),K.current--,K.current===0&&ce(false);},[]),wt=useCallback(n=>{if(n.preventDefault(),n.stopPropagation(),K.current=0,ce(false),s)return;let x=n.dataTransfer?.files;J(x??null);},[s,J]),Ct=n=>{switch(j(n)){case "image":return ImageIcon;case "video":return VideoIcon;case "audio":return AudioLines;default:return FileIcon}},Ot=t?.join(",");return jsxs("div",{ref:Et,id:Q,className:b(Te({size:f}),Y),"data-testid":Qe??"file-field",...St,children:[jsx("label",{id:Je,className:Le({size:f,isRequired:g}),children:r}),jsxs("div",{role:"group","data-testid":`${Qe??"file-field"}-dropzone`,className:b("drop-zone",_e({size:f,isDragOver:rt,isInvalid:Vt,isDisabled:s})),onDragEnter:Pt,onDragOver:Rt,onDragLeave:At,onDrop:wt,"aria-labelledby":Je,"aria-describedby":yt,"aria-disabled":s||void 0,children:[jsx(FileTrigger,{acceptedFileTypes:t,allowsMultiple:i,onSelect:Nt,children:jsxs(B,{variant:"outline",isDisabled:s,buttonVisualClassName:Pe({size:f}),children:[jsx(Upload,{className:"h-4 w-4","aria-hidden":"true"}),rt?"Drop files here":c??(i?"Choose files":"Choose file")]})}),F&&jsx("input",{type:"file",name:F,accept:Ot,multiple:i,disabled:s,className:"sr-only",tabIndex:-1,"aria-hidden":"true"})]}),d&&jsx("p",{id:et,className:Be({size:f}),children:d}),v.length>0&&jsxs("div",{className:Re({size:f}),children:[v.length>=2&&jsxs("div",{className:mt({size:f}),children:[jsxs("span",{className:"text-[var(--menu-muted)]",children:[v.length," files selected"]}),jsx(B,{variant:"link",visualSize:"sm",onPress:_t,buttonVisualClassName:b("text-[var(--menu-muted)] hover:text-[var(--destructive-background)]","underline-offset-4 hover:underline"),"aria-label":"Clear all files",children:"Clear all"})]}),jsx("ul",{className:"space-y-2",children:v.map((n,x)=>{let I=Ct(n),h=f==="sm"?Math.min(z,40):f==="lg"?Math.min(z,80):Math.min(z,48),S=Xe?.[x],M=H?.[x]??0,ee=qe?.get(x),at=ue&&S!==void 0;return jsx("li",{className:at?"p-3":Ae({size:f}),children:at?jsx(se,{file:n,progress:M,status:S,error:ee,onRetry:P?()=>P(x):void 0,size:f}):jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[de?jsx(ke,{file:n,size:h,maxBytes:X$1,renderPreview:q,className:"flex-shrink-0"}):jsx(I,{className:"h-4 w-4 flex-shrink-0 text-[var(--menu-muted)]","aria-hidden":"true"}),jsx("span",{className:"truncate",title:n.name,children:$(n.name,30)}),jsx("span",{className:"text-[var(--menu-muted)] flex-shrink-0",children:oe(n.size)})]}),jsx(B,{variant:"ghost",visualSize:"icon",onPress:()=>Tt(n),buttonVisualClassName:we({size:f}),"aria-label":`Remove ${n.name}`,isDisabled:s,children:jsx(X,{className:"h-4 w-4","aria-hidden":"true"})})]})},`${n.name}-${x}`)})})]}),G&&jsx("p",{id:tt,role:"alert",className:Ce({size:f}),children:G}),!G&&N&&u&&jsx("p",{className:Oe({size:f}),children:u})]})});bt.displayName="FileField";var ht=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var mr=ht.extend({label:z.string(),acceptedFileTypes:z.array(z.string()).optional(),allowsMultiple:z.boolean().default(false),maxFileSize:z.number().optional(),maxFiles:z.number().optional(),description:z.string().optional(),errorMessage:z.string().optional(),successMessage:z.string().optional(),triggerText:z.string().optional(),isRequired:z.boolean().optional(),isDisabled:z.boolean().optional(),isInvalid:z.boolean().optional(),isValid:z.boolean().optional(),size:z.enum(["sm","default","lg"]).default("default"),name:z.string().optional(),showPreviews:z.boolean().default(false),previewSize:z.number().min(16).max(256).default(64),maxPreviewBytes:z.number().default(10*1024*1024),showProgress:z.boolean().default(false),uploadProgress:z.array(z.number().min(0).max(100)).optional(),uploadStatus:z.array(z.enum(["pending","uploading","complete","error"])).optional()}).refine(e=>!(e.successMessage&&e.errorMessage),{message:"Cannot provide both successMessage and errorMessage. Use one based on validation state.",path:["successMessage"]}).refine(e=>(typeof process<"u"&&process.env.NODE_ENV==="development"&&e.isValid&&e.isInvalid&&console.error("[FileField] Both isValid and isInvalid are true. isInvalid takes precedence."),true));export{bt as FileField,mr as FileFieldPropsSchema,ke as FilePreview,se as FileProgress,gt as RESIZE_THRESHOLD,vt as createResizedPreview,W as deduplicateFiles,Te as fileFieldContainerVariants,Be as fileFieldDescriptionVariants,_e as fileFieldDropZoneVariants,Ce as fileFieldErrorVariants,Ae as fileFieldItemVariants,Le as fileFieldLabelVariants,Re as fileFieldListVariants,we as fileFieldRemoveButtonVariants,Oe as fileFieldSuccessVariants,Pe as fileFieldTriggerVariants,je as fileProgressBarVariants,Ze as fileProgressErrorVariants,We as fileProgressHeaderVariants,Ye as fileProgressRetryVariants,$e as fileProgressTrackVariants,Me as fileProgressVariants,jt as formatAcceptedTypes,oe as formatFileSize,ze as generatePreview,j as getFileIcon,De as isFileTypeAccepted,Ue as isImageFile,$ as truncateFileName,Ge as useFilePreview};//# sourceMappingURL=index.mjs.map
2
+ import {createContext,memo,forwardRef,useId,useState,useRef,useCallback,useContext,useEffect}from'react';import {Button,FileTrigger,ProgressBar}from'react-aria-components';import {Loader2,Zap,Upload,X,FileIcon,AudioLines,VideoIcon,ImageIcon}from'lucide-react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function b(...e){return twMerge(clsx(e))}var pe=cva("inline-flex justify-center min-h-[44px] min-w-[44px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",{variants:{fullWidth:{true:"w-full",false:""},inVerticalGroup:{true:"items-stretch",false:"items-center"}},defaultVariants:{fullWidth:false,inVerticalGroup:false}}),me=cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 relative cursor-pointer",{variants:{variant:{default:"bg-[var(--primary-action)] text-[var(--primary-action-foreground)] shadow-md hover:bg-[var(--primary-action-hover)] data-[pressed]:bg-[var(--primary-action)]/80",destructive:"bg-[var(--destructive-background)] text-[var(--destructive-foreground)] shadow-md hover:bg-[var(--destructive-background)]/90 data-[pressed]:bg-[var(--destructive-background)]/80",outline:"border border-[var(--input-border)] bg-[var(--page-background)] hover:bg-[var(--input-border)] data-[pressed]:bg-[var(--input-border)]",secondary:"bg-[var(--secondary)] text-[var(--secondary-foreground)] shadow-md hover:bg-[var(--secondary)]/80 data-[pressed]:bg-[var(--secondary)]/70",ghost:"hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)] data-[pressed]:bg-[var(--accent)]",link:"text-[var(--text-link)] underline-offset-4 hover:underline data-[pressed]:text-[var(--text-link-hover)]"},fullWidth:{true:"w-full",false:""},visualSize:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3 text-xs",lg:"h-11 rounded-md px-8",icon:"h-10 w-10",dot:"h-5 w-5 rounded-full p-0 min-h-0 min-w-0"},paywall:{true:"!bg-[var(--paywall)] !text-[var(--paywall-foreground)] !shadow-md hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var ge="data-[pressed]:scale-[0.97]";var ve="data-[hovered]:shadow-md";var te="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",re="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";var dt=createContext(null);dt.displayName="ButtonGroupContext";function ut(){return useContext(dt)}var ct=createContext(null);ct.displayName="ButtonGroupItemContext";function ft(){return useContext(ct)}cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var pt=cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var L=memo(forwardRef(({className:e,buttonVisualClassName:r,variant:t,size:a,visualSize:i,fullWidth:o,loading:d=false,loadingText:m="Loading...",shortcut:u,children:c,isDisabled:g,paywall:s=false,paywallRedirect:E,paywallDescription:_,onPress:f,...F},le)=>{let Y=useId(),v=ut(),y=ft(),U=t??v?.variant??"default",de=a??v?.size,z=g??v?.isDisabled??false,X=v?.orientation==="vertical",q=o||X,ue=y?pt({orientation:v?.orientation??"horizontal",position:y.position}):"",H=i??de??"default";return process.env.NODE_ENV!=="production"&&(H==="dot"||H==="icon")&&!F["aria-label"]&&!c&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsx(Button,{ref:le,isDisabled:z||d||void 0,"aria-disabled":s?true:void 0,"aria-describedby":s?Y:void 0,onPress:P=>{if(s){E&&window.open(E,"_blank","noopener,noreferrer");return}f?.(P);},className:b(pe({fullWidth:q,inVerticalGroup:X}),e),...F,children:P=>jsxs("span",{className:b(me({variant:U,visualSize:H,paywall:s,fullWidth:q}),ue,r,ge,ve,te,re),"data-pressed":P.isPressed||void 0,children:[d&&jsxs(Fragment,{children:[jsx(Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsx("span",{className:"sr-only","aria-live":"polite",children:m})]}),!d&&c,s&&jsx(Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),s&&jsxs("span",{id:Y,className:"sr-only",children:["Premium feature: ",_||"Upgrade required to access this feature"]}),P.isFocusVisible&&u&&jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:u}),P.isPressed&&jsx("span",{className:"absolute inset-0 rounded-[inherit] bg-current opacity-10 motion-safe:animate-in motion-safe:zoom-in-95","aria-hidden":"true"})]})})}));L.displayName="Button";var Se=["focus-within:outline-none","focus-within:ring-2","focus-within:ring-[var(--ring)]","focus-within:ring-offset-2"],Ee=["focus-visible:outline-none","focus-visible:ring-2","focus-visible:ring-[var(--ring)]","focus-visible:ring-offset-2"];var Fe=["disabled:pointer-events-none","disabled:opacity-50"];var D={sm:"text-xs",default:"text-sm",lg:"text-base"},ae={sm:"text-sm",default:"text-base",lg:"text-lg"},ie=["min-h-[44px]","min-w-[44px]"];var Ie=["flex","items-center","gap-1.5","text-[var(--destructive-background)]"],Ve=["flex","items-center","gap-1.5","text-[var(--success-background)]"],Ne=["text-[var(--menu-muted)]"],_e=["font-medium","text-[var(--content-foreground)]"];var ne=["transition-colors","duration-200"];function A(...e){return e.flatMap(r=>Array.isArray(r)?[...r]:[r])}var ye=cva("flex flex-col gap-1.5 w-full",{variants:{size:ae},defaultVariants:{size:"default"}}),Te=cva(A("flex flex-col items-center justify-center rounded-md border-2 border-dashed","bg-[var(--content-background)] text-[var(--content-foreground)]",ne,Se),{variants:{size:{sm:"min-h-[100px] p-4 gap-2",default:"min-h-[140px] p-6 gap-3",lg:"min-h-[180px] p-8 gap-4"},isDragOver:{true:"border-[var(--primary)] bg-[var(--primary)]/5",false:"border-[var(--input-border)] hover:border-[var(--primary)]/50"},isInvalid:{true:"border-[var(--destructive-background)] bg-[var(--destructive-background)]/5",false:""},isDisabled:{true:"opacity-50 cursor-not-allowed pointer-events-none",false:"cursor-pointer"}},compoundVariants:[{isInvalid:true,isDragOver:true,className:"border-[var(--destructive-background)] bg-[var(--destructive-background)]/5"}],defaultVariants:{size:"default",isDragOver:false,isInvalid:false,isDisabled:false}}),Pe=cva(A("inline-flex items-center justify-center gap-2 rounded-md font-medium",ne,ie,Ee,Fe),{variants:{size:{sm:"px-3 py-2 text-xs",default:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base"},variant:{default:"bg-[var(--primary)] text-[var(--primary-foreground)] hover:bg-[var(--primary)]/90",outline:"border border-[var(--input-border)] bg-transparent hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]"}},defaultVariants:{size:"default",variant:"default"}}),Re=cva("flex flex-col gap-2 mt-3",{variants:{size:{sm:"gap-1.5",default:"gap-2",lg:"gap-3"}},defaultVariants:{size:"default"}}),mt=cva("flex items-center justify-between mb-1",{variants:{size:D},defaultVariants:{size:"default"}}),Ae=cva("flex items-center justify-between gap-3 bg-[var(--accent-background)] rounded-md border border-[var(--border)]",{variants:{size:{sm:"px-2 py-1.5 text-xs",default:"px-3 py-2 text-sm",lg:"px-4 py-3 text-base"}},defaultVariants:{size:"default"}}),Oe=cva(A("inline-flex items-center justify-center rounded-full",ie,"-mr-2 -my-1","text-[var(--menu-muted)] hover:text-[var(--destructive-background)] hover:bg-[var(--destructive-background)]/10","transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]"),{variants:{size:{sm:"",default:"",lg:""}},defaultVariants:{size:"default"}}),we=cva(A(Ie,"font-medium"),{variants:{size:D},defaultVariants:{size:"default"}}),Ce=cva(A(Ve,"font-medium"),{variants:{size:D},defaultVariants:{size:"default"}}),Le=cva(Ne,{variants:{size:D},defaultVariants:{size:"default"}}),De=cva(_e,{variants:{size:ae,isRequired:{true:"after:content-['*'] after:ml-0.5 after:text-[var(--destructive-background)]",false:""}},defaultVariants:{size:"default",isRequired:false}});function oe(e){if(e===0)return "0 B";let r=1024,t=["B","KB","MB","GB"],a=Math.floor(Math.log(e)/Math.log(r)),i=parseFloat((e/Math.pow(r,a)).toFixed(1));return `${i%1===0?i.toFixed(0):i.toFixed(1)} ${t[a]}`}function $(e,r=30){if(e.length<=r)return e;let t=e.lastIndexOf(".");if(t===-1)return `${e.slice(0,r-3)}...`;let a=e.slice(t),i=e.slice(0,t),o=r-a.length-3;return o<1?`...${a}`:`${i.slice(0,o)}...${a}`}function Be(e,r){return !r||r.length===0?true:r.some(t=>{if(t.endsWith("/*")){let a=t.slice(0,-2);return e.type.startsWith(`${a}/`)}return t.includes("/")?e.type===t:t.startsWith(".")?e.name.toLowerCase().endsWith(t.toLowerCase()):false})}function j(e){return e.type.startsWith("image/")?"image":e.type.startsWith("video/")?"video":e.type.startsWith("audio/")?"audio":"file"}function W(e,r){let t=[...e];for(let a of r){let i=t.findIndex(o=>o.name===a.name);i>=0?t[i]=a:t.push(a);}return t}function jt(e){return !e||e.length===0?"any file":e.map(t=>t==="image/*"?"images":t==="video/*"?"videos":t==="audio/*"?"audio":t.startsWith(".")?t.slice(1).toUpperCase():t.includes("/")?(t.split("/")[1]??t).toUpperCase():t).join(", ")}var gt=2*1024*1024;function Ue(e){return e.type.startsWith("image/")?true:/\.(jpg|jpeg|png|gif|webp|svg|bmp|ico|avif|heic|heif|tiff|tif)$/i.test(e.name)}async function vt(e,r=200){return new Promise((t,a)=>{let i=new window.Image,o=URL.createObjectURL(e);i.onload=()=>{URL.revokeObjectURL(o);let d=Math.min(r/i.width,r/i.height,1),m=Math.round(i.width*d),u=Math.round(i.height*d),c=document.createElement("canvas");c.width=m,c.height=u;let g=c.getContext("2d");if(!g){a(new Error("Canvas context unavailable"));return}g.drawImage(i,0,0,m,u),c.toBlob(s=>{s?t(URL.createObjectURL(s)):a(new Error("Failed to create blob"));},"image/jpeg",.8);},i.onerror=()=>{URL.revokeObjectURL(o),a(new Error("Failed to load image"));},i.src=o;})}async function ze(e,r=200){return e.size>gt?vt(e,r):URL.createObjectURL(e)}function Ge(e,r={}){let{enabled:t=true,maxBytes:a=10*1024*1024,maxDimension:i=200}=r,[o,d]=useState(null),[m,u]=useState(false),[c,g]=useState(null),s=Ue(e);return useEffect(()=>{if(!t||!s){d(null),u(false),g(null);return}if(e.size>a){d(null),u(false),g("File too large for preview");return}let E=true,_=null;return (async()=>{u(true),g(null);try{_=await ze(e,i),E?(d(_),u(!1)):URL.revokeObjectURL(_);}catch(F){E&&(g(F instanceof Error?F.message:"Failed to generate preview"),u(false),d(null));}})(),()=>{E=false,_&&URL.revokeObjectURL(_),d(F=>(F&&URL.revokeObjectURL(F),null));}},[e,t,a,i,s]),{preview:o,isLoading:m,error:c,isImage:s}}function Me({file:e,size:r=64,maxBytes:t=10*1024*1024,renderPreview:a,className:i}){let{preview:o,isLoading:d,error:m,isImage:u}=Ge(e,{enabled:true,maxBytes:t,maxDimension:r*2}),c={width:r,height:r,minWidth:r,minHeight:r};if(!u&&a)return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",i),style:c,children:a(e)});if(d)return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",i),style:c,"aria-busy":"true","aria-label":`Loading preview for ${e.name}`,children:jsx(Loader2,{className:"h-4 w-4 animate-spin text-[var(--menu-muted)]","aria-hidden":"true"})});if(u&&o&&!m)return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",i),style:c,children:jsx("img",{src:o,alt:e.name,className:"w-full h-full object-cover",loading:"lazy"})});let g=j(e),s=Kt(g),E=Math.max(16,Math.floor(r*.4));return jsx("div",{className:b("flex items-center justify-center rounded-md overflow-hidden","bg-[var(--accent-background)]",i),style:c,"aria-label":m?`Preview unavailable for ${e.name}`:void 0,children:jsx(s,{className:"text-[var(--menu-muted)]",style:{width:E,height:E},"aria-hidden":"true"})})}function Kt(e){switch(e){case "image":return ImageIcon;case "video":return VideoIcon;case "audio":return AudioLines;default:return FileIcon}}var ke=cva(["flex","flex-col","gap-1","w-full"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),$e=cva(["rounded-full","bg-[var(--accent-background)]","overflow-hidden"],{variants:{size:{sm:"h-1.5",default:"h-2",lg:"h-3"}},defaultVariants:{size:"default"}}),je=cva(["h-full","rounded-full","transition-all","duration-300"],{variants:{status:{pending:["bg-gradient-to-r","from-[var(--menu-muted)]","via-[var(--accent-background)]","to-[var(--menu-muted)]","bg-[length:200%_100%]","animate-progress-shimmer"],uploading:"bg-[var(--primary)]",complete:"bg-[var(--success-background)]",error:"bg-[var(--destructive-background)]"}},defaultVariants:{status:"pending"}}),We=cva(["flex","items-center","justify-between","gap-2"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Ze=cva(["flex","items-center","justify-between","gap-2","mt-1","text-[var(--destructive-background)]"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Ye=cva(["underline","hover:no-underline","min-h-[44px]","min-w-[44px]","inline-flex","items-center","justify-center","-mr-3","-my-2","focus-visible:outline-none","focus-visible:ring-2","focus-visible:ring-[var(--ring)]","focus-visible:ring-offset-2","rounded"],{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}});function tr(e,r){switch(e){case "pending":return "Waiting...";case "uploading":return `${r}%`;case "complete":return "Complete";case "error":return "Failed"}}function se({file:e,progress:r,status:t,error:a,onRetry:i,size:o="default",className:d}){let m=t==="pending",u=`progress-error-${e.name.replace(/[^a-zA-Z0-9]/g,"-")}`,c=tr(t,r);return jsxs("div",{className:b(ke({size:o}),d),children:[jsx(ProgressBar,{"aria-label":e.name,value:m?void 0:r,isIndeterminate:m,"aria-describedby":t==="error"&&a?u:void 0,children:({percentage:g,valueText:s})=>jsxs(Fragment,{children:[jsxs("div",{className:We({size:o}),children:[jsx("span",{className:"truncate",title:e.name,children:$(e.name,30)}),jsx("span",{className:"text-[var(--menu-muted)] flex-shrink-0",children:t==="error"?"Failed":s??c})]}),jsx("div",{className:$e({size:o}),children:jsx("div",{className:je({status:t}),style:{width:m?"100%":`${g??0}%`}})})]})}),t==="error"&&a&&jsxs("div",{id:u,className:Ze({size:o}),children:[jsx("span",{children:a}),i&&jsx(Button,{onPress:i,className:Ye({size:o}),children:"Retry"})]}),jsxs("div",{"aria-live":"polite","aria-atomic":"true",className:"sr-only",children:[t==="complete"&&`${e.name} upload complete`,t==="error"&&`${e.name} upload failed${a?`: ${a}`:""}`]})]})}se.displayName="FileProgress";var bt=forwardRef(function({label:r,acceptedFileTypes:t,allowsMultiple:a=false,maxFileSize:i,maxFiles:o,description:d,errorMessage:m,successMessage:u,triggerText:c,isRequired:g,isDisabled:s,isInvalid:E,isValid:_,size:f="default",name:F,id:le,className:Y,value:v=[],onChange:y,validate:U,showPreviews:de=false,previewSize:z=64,maxPreviewBytes:X$1=10*1024*1024,renderPreview:q,showProgress:ue=false,uploadProgress:H,uploadStatus:Xe,uploadErrors:qe,onRetry:P,"data-testid":Qe,"aria-label":gr,"aria-labelledby":vr,"aria-describedby":Ke,...St},Et){let Ft=useId(),Q=le??Ft,Je=`${Q}-label`,et=`${Q}-description`,tt=`${Q}-error`,[rt,ce]=useState(false),[It,fe]=useState(null),K=useRef(0),G=m??It,Vt=E||!!G,M=[];Ke&&M.push(Ke),d&&M.push(et),G&&M.push(tt);let Nt=M.length>0?M.join(" "):void 0,at=useCallback((n,x=[])=>{let I=[],h=[];for(let S of n){if(t&&!Be(S,t)){h.push(`"${S.name}" has an invalid file type`);continue}if(i&&S.size>i){h.push(`"${S.name}" exceeds the maximum size of ${oe(i)}`);continue}I.push(S);}return o&&a&&W(x,I).length>o?(h.push(`Maximum ${o} files allowed`),{valid:[],errors:h}):{valid:I,errors:h}},[t,i,o,a]),J=useCallback(n=>{if(!n||n.length===0)return;fe(null);let x=Array.from(n),I=a?v:[],{valid:h,errors:S}=at(x,I);if(S.length>0){fe(S[0]??"Invalid file");return}if(U&&h.length>0){let ee=U(a?W(I,h):h);if(ee){fe(ee);return}}let k;a?k=W(I,h):k=h.slice(0,1),y?.(k);},[a,v,at,U,y]),_t=useCallback(n=>{J(n);},[J]),yt=useCallback(n=>{let x=v.filter(I=>I!==n);y?.(x);},[v,y]),Tt=useCallback(()=>{y?.([]);},[y]),Pt=useCallback(n=>{n.preventDefault(),n.stopPropagation(),!s&&(K.current++,ce(true));},[s]),Rt=useCallback(n=>{n.preventDefault(),n.stopPropagation();},[]),At=useCallback(n=>{n.preventDefault(),n.stopPropagation(),K.current--,K.current===0&&ce(false);},[]),Ot=useCallback(n=>{if(n.preventDefault(),n.stopPropagation(),K.current=0,ce(false),s)return;let x=n.dataTransfer?.files;J(x??null);},[s,J]),wt=n=>{switch(j(n)){case "image":return ImageIcon;case "video":return VideoIcon;case "audio":return AudioLines;default:return FileIcon}},Ct=t?.join(",");return jsxs("div",{ref:Et,id:Q,className:b(ye({size:f}),Y),"data-testid":Qe??"file-field",...St,children:[jsx("label",{id:Je,className:De({size:f,isRequired:g}),children:r}),jsxs("div",{role:"group","data-testid":`${Qe??"file-field"}-dropzone`,className:b("drop-zone",Te({size:f,isDragOver:rt,isInvalid:Vt,isDisabled:s})),onDragEnter:Pt,onDragOver:Rt,onDragLeave:At,onDrop:Ot,"aria-labelledby":Je,"aria-describedby":Nt,"aria-disabled":s||void 0,children:[jsx(FileTrigger,{acceptedFileTypes:t,allowsMultiple:a,onSelect:_t,children:jsxs(L,{variant:"outline",isDisabled:s,buttonVisualClassName:Pe({size:f}),children:[jsx(Upload,{className:"h-4 w-4","aria-hidden":"true"}),rt?"Drop files here":c??(a?"Choose files":"Choose file")]})}),F&&jsx("input",{type:"file",name:F,accept:Ct,multiple:a,disabled:s,className:"sr-only",tabIndex:-1,"aria-hidden":"true"})]}),d&&jsx("p",{id:et,className:Le({size:f}),children:d}),v.length>0&&jsxs("div",{className:Re({size:f}),children:[v.length>=2&&jsxs("div",{className:mt({size:f}),children:[jsxs("span",{className:"text-[var(--menu-muted)]",children:[v.length," files selected"]}),jsx(L,{variant:"link",visualSize:"sm",onPress:Tt,buttonVisualClassName:b("text-[var(--menu-muted)] hover:text-[var(--destructive-background)]","underline-offset-4 hover:underline"),"aria-label":"Clear all files",children:"Clear all"})]}),jsx("ul",{className:"space-y-2",children:v.map((n,x)=>{let I=wt(n),h=f==="sm"?Math.min(z,40):f==="lg"?Math.min(z,80):Math.min(z,48),S=Xe?.[x],k=H?.[x]??0,ee=qe?.get(x),it=ue&&S!==void 0;return jsx("li",{className:it?"p-3":Ae({size:f}),children:it?jsx(se,{file:n,progress:k,status:S,error:ee,onRetry:P?()=>P(x):void 0,size:f}):jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[de?jsx(Me,{file:n,size:h,maxBytes:X$1,renderPreview:q,className:"flex-shrink-0"}):jsx(I,{className:"h-4 w-4 flex-shrink-0 text-[var(--menu-muted)]","aria-hidden":"true"}),jsx("span",{className:"truncate",title:n.name,children:$(n.name,30)}),jsx("span",{className:"text-[var(--menu-muted)] flex-shrink-0",children:oe(n.size)})]}),jsx(L,{variant:"ghost",visualSize:"icon",onPress:()=>yt(n),buttonVisualClassName:Oe({size:f}),"aria-label":`Remove ${n.name}`,isDisabled:s,children:jsx(X,{className:"h-4 w-4","aria-hidden":"true"})})]})},`${n.name}-${x}`)})})]}),G&&jsx("p",{id:tt,role:"alert",className:we({size:f}),children:G}),!G&&_&&u&&jsx("p",{className:Ce({size:f}),children:u})]})});bt.displayName="FileField";var ht=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var mr=ht.extend({label:z.string(),acceptedFileTypes:z.array(z.string()).optional(),allowsMultiple:z.boolean().default(false),maxFileSize:z.number().optional(),maxFiles:z.number().optional(),description:z.string().optional(),errorMessage:z.string().optional(),successMessage:z.string().optional(),triggerText:z.string().optional(),isRequired:z.boolean().optional(),isDisabled:z.boolean().optional(),isInvalid:z.boolean().optional(),isValid:z.boolean().optional(),size:z.enum(["sm","default","lg"]).default("default"),name:z.string().optional(),showPreviews:z.boolean().default(false),previewSize:z.number().min(16).max(256).default(64),maxPreviewBytes:z.number().default(10*1024*1024),showProgress:z.boolean().default(false),uploadProgress:z.array(z.number().min(0).max(100)).optional(),uploadStatus:z.array(z.enum(["pending","uploading","complete","error"])).optional()}).refine(e=>!(e.successMessage&&e.errorMessage),{message:"Cannot provide both successMessage and errorMessage. Use one based on validation state.",path:["successMessage"]}).refine(e=>(typeof process<"u"&&process.env.NODE_ENV==="development"&&e.isValid&&e.isInvalid&&console.error("[FileField] Both isValid and isInvalid are true. isInvalid takes precedence."),true));export{bt as FileField,mr as FileFieldPropsSchema,Me as FilePreview,se as FileProgress,gt as RESIZE_THRESHOLD,vt as createResizedPreview,W as deduplicateFiles,ye as fileFieldContainerVariants,Le as fileFieldDescriptionVariants,Te as fileFieldDropZoneVariants,we as fileFieldErrorVariants,Ae as fileFieldItemVariants,De as fileFieldLabelVariants,Re as fileFieldListVariants,Oe as fileFieldRemoveButtonVariants,Ce as fileFieldSuccessVariants,Pe as fileFieldTriggerVariants,je as fileProgressBarVariants,Ze as fileProgressErrorVariants,We as fileProgressHeaderVariants,Ye as fileProgressRetryVariants,$e as fileProgressTrackVariants,ke as fileProgressVariants,jt as formatAcceptedTypes,oe as formatFileSize,ze as generatePreview,j as getFileIcon,Be as isFileTypeAccepted,Ue as isImageFile,$ as truncateFileName,Ge as useFilePreview};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.map