zaravand-ui 6.0.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/components/Accordion/Accordion.cjs +1 -1
  2. package/dist/components/Accordion/Accordion.interface.d.cts +8 -0
  3. package/dist/components/Accordion/Accordion.interface.d.ts +8 -0
  4. package/dist/components/Accordion/Accordion.js +226 -148
  5. package/dist/components/Accordion/Accordion.variant.cjs +1 -1
  6. package/dist/components/Accordion/Accordion.variant.js +2 -2
  7. package/dist/components/Avatar/Avatar.cjs +1 -1
  8. package/dist/components/Avatar/Avatar.js +32 -32
  9. package/dist/components/Button/Button.cjs +1 -1
  10. package/dist/components/Button/Button.interface.d.cts +0 -1
  11. package/dist/components/Button/Button.interface.d.ts +0 -1
  12. package/dist/components/Button/Button.js +41 -42
  13. package/dist/components/Button/Button.variant.cjs +1 -1
  14. package/dist/components/Button/Button.variant.d.cts +0 -1
  15. package/dist/components/Button/Button.variant.d.ts +0 -1
  16. package/dist/components/Button/Button.variant.js +2 -4
  17. package/dist/components/Checkbox/Checkbox.cjs +1 -1
  18. package/dist/components/Checkbox/Checkbox.interface.d.cts +11 -0
  19. package/dist/components/Checkbox/Checkbox.interface.d.ts +11 -0
  20. package/dist/components/Checkbox/Checkbox.js +66 -43
  21. package/dist/components/Checkbox/Checkbox.variant.cjs +1 -1
  22. package/dist/components/Checkbox/Checkbox.variant.d.cts +9 -4
  23. package/dist/components/Checkbox/Checkbox.variant.d.ts +9 -4
  24. package/dist/components/Checkbox/Checkbox.variant.js +20 -16
  25. package/dist/components/DatePicker/DatePicker.cjs +1 -1
  26. package/dist/components/DatePicker/DatePicker.interface.d.cts +0 -1
  27. package/dist/components/DatePicker/DatePicker.interface.d.ts +0 -1
  28. package/dist/components/DatePicker/DatePicker.js +511 -407
  29. package/dist/components/DatePicker/DatePicker.utils.cjs +1 -1
  30. package/dist/components/DatePicker/DatePicker.utils.js +101 -82
  31. package/dist/components/DatePicker/DatePicker.variant.cjs +1 -1
  32. package/dist/components/DatePicker/DatePicker.variant.d.cts +1 -3
  33. package/dist/components/DatePicker/DatePicker.variant.d.ts +1 -3
  34. package/dist/components/DatePicker/DatePicker.variant.js +14 -16
  35. package/dist/components/DatePicker/DatePickerMonthSlider.cjs +1 -0
  36. package/dist/components/DatePicker/DatePickerMonthSlider.d.cts +25 -0
  37. package/dist/components/DatePicker/DatePickerMonthSlider.d.ts +25 -0
  38. package/dist/components/DatePicker/DatePickerMonthSlider.js +98 -0
  39. package/dist/components/DatePicker/DatePickerWheel.cjs +1 -0
  40. package/dist/components/DatePicker/DatePickerWheel.d.cts +30 -0
  41. package/dist/components/DatePicker/DatePickerWheel.d.ts +30 -0
  42. package/dist/components/DatePicker/DatePickerWheel.js +156 -0
  43. package/dist/components/Dialog/Dialog.cjs +1 -1
  44. package/dist/components/Dialog/Dialog.interface.d.cts +5 -0
  45. package/dist/components/Dialog/Dialog.interface.d.ts +5 -0
  46. package/dist/components/Dialog/Dialog.js +57 -49
  47. package/dist/components/Dialog/Dialog.variant.cjs +1 -1
  48. package/dist/components/Dialog/Dialog.variant.js +1 -1
  49. package/dist/components/Dialog/DialogDragHandle.cjs +1 -0
  50. package/dist/components/Dialog/DialogDragHandle.d.cts +11 -0
  51. package/dist/components/Dialog/DialogDragHandle.d.ts +11 -0
  52. package/dist/components/Dialog/DialogDragHandle.js +55 -0
  53. package/dist/components/Input/Input.cjs +1 -1
  54. package/dist/components/Input/Input.js +38 -37
  55. package/dist/components/Input/Input.variant.cjs +1 -1
  56. package/dist/components/Input/Input.variant.d.cts +1 -3
  57. package/dist/components/Input/Input.variant.d.ts +1 -3
  58. package/dist/components/Input/Input.variant.js +9 -8
  59. package/dist/components/Pagination/Pagination.cjs +1 -1
  60. package/dist/components/Pagination/Pagination.js +90 -73
  61. package/dist/components/Pagination/Pagination.variant.cjs +1 -1
  62. package/dist/components/Pagination/Pagination.variant.d.cts +3 -1
  63. package/dist/components/Pagination/Pagination.variant.d.ts +3 -1
  64. package/dist/components/Pagination/Pagination.variant.js +12 -6
  65. package/dist/components/RadioGroup/RadioGroup.cjs +1 -1
  66. package/dist/components/RadioGroup/RadioGroup.js +44 -41
  67. package/dist/components/RadioGroup/RadioGroup.variant.cjs +1 -1
  68. package/dist/components/RadioGroup/RadioGroup.variant.d.cts +3 -2
  69. package/dist/components/RadioGroup/RadioGroup.variant.d.ts +3 -2
  70. package/dist/components/RadioGroup/RadioGroup.variant.js +11 -21
  71. package/dist/components/Select/Select.cjs +1 -1
  72. package/dist/components/Select/Select.d.cts +1 -3
  73. package/dist/components/Select/Select.d.ts +1 -3
  74. package/dist/components/Select/Select.interface.d.cts +0 -1
  75. package/dist/components/Select/Select.interface.d.ts +0 -1
  76. package/dist/components/Select/Select.js +620 -401
  77. package/dist/components/Select/Select.variant.cjs +1 -1
  78. package/dist/components/Select/Select.variant.d.cts +5 -5
  79. package/dist/components/Select/Select.variant.d.ts +5 -5
  80. package/dist/components/Select/Select.variant.js +10 -12
  81. package/dist/components/Sheet/Sheet.variant.cjs +1 -1
  82. package/dist/components/Sheet/Sheet.variant.js +6 -6
  83. package/dist/components/Switch/Switch.cjs +1 -1
  84. package/dist/components/Switch/Switch.interface.d.cts +12 -3
  85. package/dist/components/Switch/Switch.interface.d.ts +12 -3
  86. package/dist/components/Switch/Switch.js +57 -37
  87. package/dist/components/Switch/Switch.variant.cjs +1 -1
  88. package/dist/components/Switch/Switch.variant.d.cts +9 -5
  89. package/dist/components/Switch/Switch.variant.d.ts +9 -5
  90. package/dist/components/Switch/Switch.variant.js +22 -15
  91. package/dist/components/Table/Table.cjs +1 -1
  92. package/dist/components/Table/Table.interface.d.cts +9 -0
  93. package/dist/components/Table/Table.interface.d.ts +9 -0
  94. package/dist/components/Table/Table.js +462 -271
  95. package/dist/components/Table/TableSkeletonRows.cjs +1 -1
  96. package/dist/components/Table/TableSkeletonRows.js +26 -21
  97. package/dist/components/Table/TableSortToggle.cjs +1 -1
  98. package/dist/components/Table/TableSortToggle.d.cts +1 -1
  99. package/dist/components/Table/TableSortToggle.d.ts +1 -1
  100. package/dist/components/Table/TableSortToggle.js +23 -22
  101. package/dist/components/Table/hooks/useTableCardLabels.cjs +1 -0
  102. package/dist/components/Table/hooks/useTableCardLabels.d.cts +9 -0
  103. package/dist/components/Table/hooks/useTableCardLabels.d.ts +9 -0
  104. package/dist/components/Table/hooks/useTableCardLabels.js +34 -0
  105. package/dist/components/Table/hooks/useTableSort.cjs +1 -1
  106. package/dist/components/Table/hooks/useTableSort.d.cts +2 -0
  107. package/dist/components/Table/hooks/useTableSort.d.ts +2 -0
  108. package/dist/components/Table/hooks/useTableSort.js +8 -1
  109. package/dist/components/Tabs/Tabs.cjs +1 -1
  110. package/dist/components/Tabs/Tabs.js +90 -63
  111. package/dist/components/Tabs/Tabs.variant.cjs +1 -1
  112. package/dist/components/Tabs/Tabs.variant.d.cts +2 -2
  113. package/dist/components/Tabs/Tabs.variant.d.ts +2 -2
  114. package/dist/components/Tabs/Tabs.variant.js +52 -29
  115. package/dist/components/Textarea/Textarea.cjs +1 -1
  116. package/dist/components/Textarea/Textarea.js +19 -18
  117. package/dist/components/Textarea/Textarea.variant.cjs +1 -1
  118. package/dist/components/Textarea/Textarea.variant.js +5 -5
  119. package/dist/components/TimePicker/TimePicker.cjs +1 -1
  120. package/dist/components/TimePicker/TimePicker.interface.d.cts +0 -1
  121. package/dist/components/TimePicker/TimePicker.interface.d.ts +0 -1
  122. package/dist/components/TimePicker/TimePicker.js +121 -83
  123. package/dist/components/TimePicker/TimePicker.variant.cjs +1 -1
  124. package/dist/components/TimePicker/TimePicker.variant.d.cts +1 -3
  125. package/dist/components/TimePicker/TimePicker.variant.d.ts +1 -3
  126. package/dist/components/TimePicker/TimePicker.variant.js +9 -11
  127. package/dist/components/TimePicker/TimePickerPanel.cjs +1 -1
  128. package/dist/components/TimePicker/TimePickerPanel.js +3 -4
  129. package/dist/components/TimePicker/TimePickerWheel.cjs +1 -0
  130. package/dist/components/TimePicker/TimePickerWheel.d.cts +27 -0
  131. package/dist/components/TimePicker/TimePickerWheel.d.ts +27 -0
  132. package/dist/components/TimePicker/TimePickerWheel.js +205 -0
  133. package/dist/components/Toast/Toast.cjs +1 -1
  134. package/dist/components/Toast/Toast.d.cts +1 -1
  135. package/dist/components/Toast/Toast.d.ts +1 -1
  136. package/dist/components/Toast/Toast.js +56 -34
  137. package/dist/components/Toast/Toast.variant.cjs +1 -1
  138. package/dist/components/Toast/Toast.variant.d.cts +1 -1
  139. package/dist/components/Toast/Toast.variant.d.ts +1 -1
  140. package/dist/components/Toast/Toast.variant.js +1 -1
  141. package/dist/components/Toast/ToastHost.cjs +1 -1
  142. package/dist/components/Toast/ToastHost.js +42 -41
  143. package/dist/components/Toast/function/toastHaptics.cjs +1 -0
  144. package/dist/components/Toast/function/toastHaptics.d.cts +11 -0
  145. package/dist/components/Toast/function/toastHaptics.d.ts +11 -0
  146. package/dist/components/Toast/function/toastHaptics.js +6 -0
  147. package/dist/components/Uploader/Uploader.cjs +2 -2
  148. package/dist/components/Uploader/Uploader.js +328 -158
  149. package/dist/components/Uploader/Uploader.variant.cjs +1 -1
  150. package/dist/components/Uploader/Uploader.variant.d.cts +1 -3
  151. package/dist/components/Uploader/Uploader.variant.d.ts +1 -3
  152. package/dist/components/Uploader/Uploader.variant.js +2 -5
  153. package/dist/components/shared/ActionSheet.cjs +1 -0
  154. package/dist/components/shared/ActionSheet.d.cts +26 -0
  155. package/dist/components/shared/ActionSheet.d.ts +26 -0
  156. package/dist/components/shared/ActionSheet.js +51 -0
  157. package/dist/components/shared/FieldClearButton.cjs +1 -1
  158. package/dist/components/shared/FieldClearButton.d.cts +2 -1
  159. package/dist/components/shared/FieldClearButton.d.ts +2 -1
  160. package/dist/components/shared/FieldClearButton.js +11 -10
  161. package/dist/components/shared/FieldLabel.cjs +1 -1
  162. package/dist/components/shared/FieldLabel.js +6 -6
  163. package/dist/components/shared/IconActionButton.cjs +1 -1
  164. package/dist/components/shared/IconActionButton.d.cts +6 -1
  165. package/dist/components/shared/IconActionButton.d.ts +6 -1
  166. package/dist/components/shared/IconActionButton.js +9 -11
  167. package/dist/components/shared/WheelColumn.cjs +1 -0
  168. package/dist/components/shared/WheelColumn.d.cts +29 -0
  169. package/dist/components/shared/WheelColumn.d.ts +29 -0
  170. package/dist/components/shared/WheelColumn.js +116 -0
  171. package/dist/components/shared/haptics.cjs +1 -0
  172. package/dist/components/shared/haptics.d.cts +6 -0
  173. package/dist/components/shared/haptics.d.ts +6 -0
  174. package/dist/components/shared/haptics.js +8 -0
  175. package/dist/components/shared/responsiveScale.cjs +1 -1
  176. package/dist/components/shared/responsiveScale.d.cts +7 -1
  177. package/dist/components/shared/responsiveScale.d.ts +7 -1
  178. package/dist/components/shared/responsiveScale.js +2 -6
  179. package/dist/components/shared/useStickyToolbar.cjs +1 -0
  180. package/dist/components/shared/useStickyToolbar.d.cts +17 -0
  181. package/dist/components/shared/useStickyToolbar.d.ts +17 -0
  182. package/dist/components/shared/useStickyToolbar.js +39 -0
  183. package/dist/components/shared/useWheelSize.cjs +1 -0
  184. package/dist/components/shared/useWheelSize.d.cts +10 -0
  185. package/dist/components/shared/useWheelSize.d.ts +10 -0
  186. package/dist/components/shared/useWheelSize.js +14 -0
  187. package/dist/components/shared/viewport.cjs +1 -0
  188. package/dist/components/shared/viewport.d.cts +17 -0
  189. package/dist/components/shared/viewport.d.ts +17 -0
  190. package/dist/components/shared/viewport.js +32 -0
  191. package/dist/config/messages.cjs +1 -1
  192. package/dist/config/messages.d.cts +14 -0
  193. package/dist/config/messages.d.ts +14 -0
  194. package/dist/config/messages.js +26 -8
  195. package/dist/index.cjs +1 -1
  196. package/dist/index.css +1 -1
  197. package/dist/index.js +16 -16
  198. package/package.json +98 -97
@@ -1 +1 @@
1
- "use client";const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../config/useZuiConfig.cjs`),n=require(`../../services/localizeDigits/localizeDigits.cjs`),r=require(`../../lib/utils.cjs`),i=require(`../Button/Button.cjs`),a=require(`../Tooltip/Tooltip.cjs`),o=require(`../Toast/function/showToast.cjs`),s=require(`../Uploader/Uploader.utils.cjs`),c=require(`./Avatar.variant.cjs`),l=require(`../Dialog/Dialog.variant.cjs`),u=require(`./Avatar.utils.cjs`);let d=require(`react`);d=e.__toESM(d,1);let f=require(`react/jsx-runtime`),p=require(`lucide-react`),m=require(`@radix-ui/react-dialog`);m=e.__toESM(m,1);var h=d.createContext(null);function g({src:e,alt:n,name:g,fallback:v,size:y,shape:b,status:x,showTooltip:S=!1,previewable:C,previewSrc:w,onClick:T,onImageSelect:E,onImageRemove:D,accept:O=`image/*`,maxSizeKb:k,onReject:A,className:ee},te){let{messages:j,digits:M,dir:N}=t.useZuiConfig(),P=j.avatar,F=d.useContext(h),I=y??F?.size??`default`,L=b??F?.shape??`circle`,R=F!==null,z=d.useRef(null),[B,V]=d.useState(null),[ne,H]=d.useState(!1),U=e?B?.src===e?B.state:`loading`:`none`,W=U===`loaded`,G=(C??!T)&&W,K=!!T||G,q=!!E,J=u.getInitials(g),Y=g??n,re=v??(J?(0,f.jsx)(`span`,{"aria-hidden":`true`,dir:`auto`,children:J}):(0,f.jsx)(p.User,{className:`zui:size-[55%]`,"aria-hidden":`true`})),ie=e=>{T?.(e),G&&!e.defaultPrevented&&H(!0)},X=()=>z.current?.click(),ae=e=>{let t=e.target.files?.[0];if(e.target.value=``,!t)return;let{accepted:n,rejected:r}=s.splitAcceptedFiles([t],O,k);if(r.length>0){A?A(r[0]):o.showFallbackToast({title:P.invalidImage,message:s.describeRejection(r[0],k,M,j.uploader),type:`error`,duration:5e3},"`onReject`");return}E?.(n[0])},Z=r.cn(c.avatarVariants({size:I,shape:L,interactive:K}),R&&`zui:ring-2 zui:ring-[var(--zui-color-surface)]`,ee),Q=(0,f.jsxs)(f.Fragment,{children:[re,e&&U!==`error`?(0,f.jsx)(`img`,{src:e,alt:n??g??``,loading:`lazy`,draggable:!1,onLoad:()=>V({src:e,state:`loaded`}),onError:()=>V({src:e,state:`error`}),className:r.cn(`zui:absolute zui:inset-0 zui:size-full zui:object-cover zui:transition-opacity zui:duration-300`,W?`zui:opacity-100`:`zui:opacity-0`)},e):null,G?(0,f.jsx)(`span`,{"aria-hidden":`true`,className:`zui:absolute zui:inset-0 zui:flex zui:items-center zui:justify-center zui:bg-[var(--zui-theme-overlay-scrim)] zui:text-[var(--zui-color-on-solid)] zui:opacity-0 zui:transition-opacity zui:duration-200 zui:group-hover/avatar:opacity-100 zui:group-focus-visible/avatar:opacity-100`,children:(0,f.jsx)(p.ZoomIn,{className:`zui:size-[45%] zui:scale-75 zui:transition-transform zui:duration-200 zui:group-hover/avatar:scale-100`})}):null]}),$=K?(0,f.jsx)(`button`,{type:`button`,"data-slot":`avatar-root`,"aria-label":G?P.showImage(Y??``):Y,onClick:ie,className:Z,children:Q}):(0,f.jsx)(`span`,{"data-slot":`avatar-root`,role:`img`,"aria-label":Y,className:Z,children:Q});return(0,f.jsxs)(`span`,{ref:te,"data-slot":`avatar`,dir:N,"data-state":U,className:`zui:relative zui:inline-flex zui:shrink-0 zui:align-middle`,children:[S&&g?(0,f.jsx)(a.default,{text:g,position:`top`,trigger:$}):$,x?(0,f.jsx)(`span`,{className:c.avatarStatusVariants({status:x,size:I}),children:(0,f.jsx)(`span`,{className:`zui:sr-only`,children:P[x]})}):null,q?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(a.default,{text:P.changeImage,position:`bottom`,trigger:(0,f.jsx)(`button`,{type:`button`,"aria-label":P.changeImage,onClick:X,className:c.avatarEditButtonVariants({size:I}),children:(0,f.jsx)(p.Camera,{"aria-hidden":`true`})})}),(0,f.jsx)(`input`,{ref:z,type:`file`,tabIndex:-1,"aria-hidden":`true`,accept:O,onChange:ae,className:`zui:hidden`})]}):null,(0,f.jsx)(m.Root,{open:ne&&!!e,onOpenChange:H,children:(0,f.jsx)(m.Portal,{children:(0,f.jsx)(m.Overlay,{"data-slot":`avatar-preview-overlay`,className:l.dialogOverlayVariants(),children:(0,f.jsxs)(m.Content,{"data-slot":`avatar-preview`,dir:N,"aria-describedby":void 0,className:c.avatarPreviewContentClassName,children:[(0,f.jsx)(m.Close,{asChild:!0,children:(0,f.jsx)(`button`,{type:`button`,"aria-label":j.common.close,className:`zui:absolute zui:-top-3 zui:-end-3 zui:z-10 zui:inline-flex zui:size-9 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border zui:border-[var(--zui-color-border)] zui:bg-[var(--zui-color-surface)] zui:p-0 zui:text-[var(--zui-color-text)] zui:shadow-md zui:outline-none zui:transition-transform zui:duration-200 zui:hover:scale-110 zui:focus-visible:shadow-[0_0_0_2px_var(--zui-theme-action-primary)]`,children:(0,f.jsx)(p.X,{className:`zui:size-4`,"aria-hidden":`true`})})}),(0,f.jsx)(_,{src:w??e,fallbackSrc:e,alt:n??g??``}),(0,f.jsxs)(`div`,{className:`zui:flex zui:max-w-full zui:flex-wrap zui:items-center zui:justify-center zui:gap-3 zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:px-4 zui:py-2 zui:text-[var(--zui-color-text)] zui:shadow-md`,children:[(0,f.jsx)(m.Title,{className:`zui:m-0 zui:text-sm zui:font-semibold`,children:g??n??P.imageFallbackTitle}),q?(0,f.jsx)(i.default,{size:`sm`,variant:`secondary`,kind:`cancel`,label:P.changeImage,icon:(0,f.jsx)(p.Camera,{className:`zui:size-4`}),onClick:X}):null,D?(0,f.jsx)(i.default,{size:`sm`,variant:`danger`,kind:`cancel`,label:P.removeImage,icon:(0,f.jsx)(p.Trash2,{className:`zui:size-4`}),onClick:()=>{H(!1),D()}}):null]})]})})})})]})}function _({src:e,fallbackSrc:n,alt:r}){let{messages:i}=t.useZuiConfig(),[a,o]=d.useState(()=>new Set),s=[e,n].find(e=>!!e&&!a.has(e));return s?(0,f.jsx)(`img`,{src:s,alt:r,draggable:!1,onError:()=>o(e=>new Set(e).add(s)),className:`zui:block zui:max-h-[78vh] zui:max-w-[92vw] zui:min-w-40 zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:object-contain zui:shadow-[0_24px_48px_-24px_var(--zui-effect-shadow-ink-55)]`}):(0,f.jsxs)(`div`,{className:`zui:flex zui:size-64 zui:flex-col zui:items-center zui:justify-center zui:gap-2 zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:text-[var(--zui-theme-text-muted)]`,children:[(0,f.jsx)(p.ImageOff,{className:`zui:size-10`,"aria-hidden":`true`}),(0,f.jsx)(`span`,{className:`zui:text-sm`,children:i.avatar.imageLoadFailed})]})}function v({items:e,children:i,max:o,size:s=`default`,shape:l=`circle`,showTooltip:u=!0,className:p},m){let{messages:g,digits:_,dir:v}=t.useZuiConfig(),b=d.useMemo(()=>({size:s,shape:l}),[s,l]),x=e?e.map(({key:e,...t},n)=>(0,f.jsx)(y,{showTooltip:u,...t},e??`${t.name??`avatar`}-${n}`)):d.Children.toArray(i).filter(d.isValidElement),S=o!==void 0&&o>0&&x.length>o?o:x.length,C=x.length-S,w=e?e.slice(S).map(e=>e.name).filter(e=>!!e):[],T=(0,f.jsx)(`span`,{role:`img`,"aria-label":g.avatar.othersCount(n.localizeDigits(String(C),_)),className:r.cn(c.avatarVariants({size:s,shape:l}),`zui:ring-2 zui:ring-[var(--zui-color-surface)]`),children:(0,f.jsx)(`span`,{"aria-hidden":`true`,children:n.localizeDigits(`+${C}`,_)})});return(0,f.jsx)(h.Provider,{value:b,children:(0,f.jsxs)(`div`,{ref:m,"data-slot":`avatar-group`,dir:v,className:r.cn(`zui:inline-flex zui:items-center zui:[&>*]:relative zui:[&>*:hover]:z-10 zui:[&>*:focus-within]:z-10`,c.avatarGroupOverlapBySize[s],p),children:[x.slice(0,S),C>0?u&&w.length>0?(0,f.jsx)(a.default,{text:w.join(g.avatar.listSeparator),position:`top`,trigger:T}):T:null]})})}var y=d.forwardRef(g);y.displayName=`Avatar`;var b=d.forwardRef(v);b.displayName=`AvatarGroup`,exports.AvatarGroup=b,exports.default=y;
1
+ "use client";const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../config/useZuiConfig.cjs`),n=require(`../../services/localizeDigits/localizeDigits.cjs`),r=require(`../../lib/utils.cjs`),i=require(`../Button/Button.cjs`),a=require(`../Dialog/Dialog.variant.cjs`),o=require(`../Tooltip/Tooltip.cjs`),s=require(`../Toast/function/showToast.cjs`),c=require(`../Uploader/Uploader.utils.cjs`),l=require(`./Avatar.variant.cjs`),u=require(`./Avatar.utils.cjs`);let d=require(`react`);d=e.__toESM(d,1);let f=require(`react/jsx-runtime`),p=require(`lucide-react`),m=require(`@radix-ui/react-dialog`);m=e.__toESM(m,1);var h=d.createContext(null);function g({src:e,alt:n,name:g,fallback:v,size:y,shape:b,status:x,showTooltip:S=!1,previewable:C,previewSrc:w,onClick:T,onImageSelect:E,onImageRemove:D,accept:O=`image/*`,maxSizeKb:k,onReject:A,className:ee},te){let{messages:j,digits:M,dir:N}=t.useZuiConfig(),P=j.avatar,F=d.useContext(h),I=y??F?.size??`default`,L=b??F?.shape??`circle`,R=F!==null,z=d.useRef(null),[B,V]=d.useState(null),[ne,H]=d.useState(!1),U=e?B?.src===e?B.state:`loading`:`none`,W=U===`loaded`,G=(C??!T)&&W,K=!!T||G,q=!!E,J=u.getInitials(g),Y=g??n,re=v??(J?(0,f.jsx)(`span`,{"aria-hidden":`true`,dir:`auto`,children:J}):(0,f.jsx)(p.User,{className:`zui:size-[55%]`,"aria-hidden":`true`})),ie=e=>{T?.(e),G&&!e.defaultPrevented&&H(!0)},X=()=>z.current?.click(),ae=e=>{let t=e.target.files?.[0];if(e.target.value=``,!t)return;let{accepted:n,rejected:r}=c.splitAcceptedFiles([t],O,k);if(r.length>0){A?A(r[0]):s.showFallbackToast({title:P.invalidImage,message:c.describeRejection(r[0],k,M,j.uploader),type:`error`,duration:5e3},"`onReject`");return}E?.(n[0])},Z=r.cn(l.avatarVariants({size:I,shape:L,interactive:K}),R&&`zui:ring-2 zui:ring-[var(--zui-color-surface)]`,ee),Q=(0,f.jsxs)(f.Fragment,{children:[re,e&&U!==`error`?(0,f.jsx)(`img`,{src:e,alt:n??g??``,loading:`lazy`,draggable:!1,onLoad:()=>V({src:e,state:`loaded`}),onError:()=>V({src:e,state:`error`}),className:r.cn(`zui:absolute zui:inset-0 zui:size-full zui:object-cover zui:transition-opacity zui:duration-300`,W?`zui:opacity-100`:`zui:opacity-0`)},e):null,G?(0,f.jsx)(`span`,{"aria-hidden":`true`,className:`zui:absolute zui:inset-0 zui:flex zui:items-center zui:justify-center zui:bg-[var(--zui-theme-overlay-scrim)] zui:text-[var(--zui-color-on-solid)] zui:opacity-0 zui:transition-opacity zui:duration-200 zui:group-hover/avatar:opacity-100 zui:group-focus-visible/avatar:opacity-100`,children:(0,f.jsx)(p.ZoomIn,{className:`zui:size-[45%] zui:scale-75 zui:transition-transform zui:duration-200 zui:group-hover/avatar:scale-100`})}):null]}),$=K?(0,f.jsx)(`button`,{type:`button`,"data-slot":`avatar-root`,"aria-label":G?P.showImage(Y??``):Y,onClick:ie,className:Z,children:Q}):(0,f.jsx)(`span`,{"data-slot":`avatar-root`,role:`img`,"aria-label":Y,className:Z,children:Q});return(0,f.jsxs)(`span`,{ref:te,"data-slot":`avatar`,dir:N,"data-state":U,className:`zui:relative zui:inline-flex zui:shrink-0 zui:align-middle`,children:[S&&g?(0,f.jsx)(o.default,{text:g,position:`top`,trigger:$}):$,x?(0,f.jsx)(`span`,{className:l.avatarStatusVariants({status:x,size:I}),children:(0,f.jsx)(`span`,{className:`zui:sr-only`,children:P[x]})}):null,q?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(o.default,{text:P.changeImage,position:`bottom`,trigger:(0,f.jsx)(`button`,{type:`button`,"aria-label":P.changeImage,onClick:X,className:l.avatarEditButtonVariants({size:I}),children:(0,f.jsx)(p.Camera,{"aria-hidden":`true`})})}),(0,f.jsx)(`input`,{ref:z,type:`file`,tabIndex:-1,"aria-hidden":`true`,accept:O,onChange:ae,className:`zui:hidden`})]}):null,(0,f.jsx)(m.Root,{open:ne&&!!e,onOpenChange:H,children:(0,f.jsx)(m.Portal,{children:(0,f.jsx)(m.Overlay,{"data-slot":`avatar-preview-overlay`,className:r.cn(a.dialogOverlayVariants(),`zui:mobile:items-center zui:mobile:p-4`),children:(0,f.jsxs)(m.Content,{"data-slot":`avatar-preview`,dir:N,"aria-describedby":void 0,className:l.avatarPreviewContentClassName,children:[(0,f.jsx)(m.Close,{asChild:!0,children:(0,f.jsx)(`button`,{type:`button`,"aria-label":j.common.close,className:`zui:absolute zui:-top-3 zui:-end-3 zui:mobile:top-2 zui:mobile:end-2 zui:z-10 zui:inline-flex zui:size-9 zui:mobile:size-11 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border zui:border-[var(--zui-color-border)] zui:bg-[var(--zui-color-surface)] zui:p-0 zui:text-[var(--zui-color-text)] zui:shadow-md zui:outline-none zui:transition-transform zui:duration-200 zui:hover:scale-110 zui:focus-visible:shadow-[0_0_0_2px_var(--zui-theme-action-primary)]`,children:(0,f.jsx)(p.X,{className:`zui:size-4`,"aria-hidden":`true`})})}),(0,f.jsx)(_,{src:w??e,fallbackSrc:e,alt:n??g??``}),(0,f.jsxs)(`div`,{className:`zui:flex zui:max-w-full zui:flex-wrap zui:items-center zui:justify-center zui:gap-3 zui:mobile:w-full zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:px-4 zui:py-2 zui:text-[var(--zui-color-text)] zui:shadow-md`,children:[(0,f.jsx)(m.Title,{className:`zui:m-0 zui:text-sm zui:mobile:w-full zui:mobile:text-center zui:mobile:text-base zui:font-semibold`,children:g??n??P.imageFallbackTitle}),q?(0,f.jsx)(i.default,{variant:`secondary`,kind:`cancel`,label:P.changeImage,className:`zui:mobile:flex-1`,icon:(0,f.jsx)(p.Camera,{className:`zui:size-4`}),onClick:X}):null,D?(0,f.jsx)(i.default,{variant:`danger`,kind:`cancel`,label:P.removeImage,className:`zui:mobile:flex-1`,icon:(0,f.jsx)(p.Trash2,{className:`zui:size-4`}),onClick:()=>{H(!1),D()}}):null]})]})})})})]})}function _({src:e,fallbackSrc:n,alt:r}){let{messages:i}=t.useZuiConfig(),[a,o]=d.useState(()=>new Set),s=[e,n].find(e=>!!e&&!a.has(e));return s?(0,f.jsx)(`img`,{src:s,alt:r,draggable:!1,onError:()=>o(e=>new Set(e).add(s)),className:`zui:block zui:max-h-[78vh] zui:max-w-[92vw] zui:min-w-40 zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:object-contain zui:shadow-[0_24px_48px_-24px_var(--zui-effect-shadow-ink-55)]`}):(0,f.jsxs)(`div`,{className:`zui:flex zui:size-64 zui:flex-col zui:items-center zui:justify-center zui:gap-2 zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:text-[var(--zui-theme-text-muted)]`,children:[(0,f.jsx)(p.ImageOff,{className:`zui:size-10`,"aria-hidden":`true`}),(0,f.jsx)(`span`,{className:`zui:text-sm`,children:i.avatar.imageLoadFailed})]})}function v({items:e,children:i,max:a,size:s=`default`,shape:c=`circle`,showTooltip:u=!0,className:p},m){let{messages:g,digits:_,dir:v}=t.useZuiConfig(),b=d.useMemo(()=>({size:s,shape:c}),[s,c]),x=e?e.map(({key:e,...t},n)=>(0,f.jsx)(y,{showTooltip:u,...t},e??`${t.name??`avatar`}-${n}`)):d.Children.toArray(i).filter(d.isValidElement),S=a!==void 0&&a>0&&x.length>a?a:x.length,C=x.length-S,w=e?e.slice(S).map(e=>e.name).filter(e=>!!e):[],T=(0,f.jsx)(`span`,{role:`img`,"aria-label":g.avatar.othersCount(n.localizeDigits(String(C),_)),className:r.cn(l.avatarVariants({size:s,shape:c}),`zui:ring-2 zui:ring-[var(--zui-color-surface)]`),children:(0,f.jsx)(`span`,{"aria-hidden":`true`,children:n.localizeDigits(`+${C}`,_)})});return(0,f.jsx)(h.Provider,{value:b,children:(0,f.jsxs)(`div`,{ref:m,"data-slot":`avatar-group`,dir:v,className:r.cn(`zui:inline-flex zui:items-center zui:[&>*]:relative zui:[&>*:hover]:z-10 zui:[&>*:focus-within]:z-10`,l.avatarGroupOverlapBySize[s],p),children:[x.slice(0,S),C>0?u&&w.length>0?(0,f.jsx)(o.default,{text:w.join(g.avatar.listSeparator),position:`top`,trigger:T}):T:null]})})}var y=d.forwardRef(g);y.displayName=`Avatar`;var b=d.forwardRef(v);b.displayName=`AvatarGroup`,exports.AvatarGroup=b,exports.default=y;
@@ -3,11 +3,11 @@ import { useZuiConfig as e } from "../../config/useZuiConfig.js";
3
3
  import { localizeDigits as t } from "../../services/localizeDigits/localizeDigits.js";
4
4
  import { cn as n } from "../../lib/utils.js";
5
5
  import r from "../Button/Button.js";
6
- import i from "../Tooltip/Tooltip.js";
7
- import { showFallbackToast as a } from "../Toast/function/showToast.js";
8
- import { describeRejection as o, splitAcceptedFiles as s } from "../Uploader/Uploader.utils.js";
9
- import { avatarEditButtonVariants as c, avatarGroupOverlapBySize as l, avatarPreviewContentClassName as u, avatarStatusVariants as d, avatarVariants as f } from "./Avatar.variant.js";
10
- import { dialogOverlayVariants as ee } from "../Dialog/Dialog.variant.js";
6
+ import { dialogOverlayVariants as i } from "../Dialog/Dialog.variant.js";
7
+ import a from "../Tooltip/Tooltip.js";
8
+ import { showFallbackToast as o } from "../Toast/function/showToast.js";
9
+ import { describeRejection as s, splitAcceptedFiles as c } from "../Uploader/Uploader.utils.js";
10
+ import { avatarEditButtonVariants as l, avatarGroupOverlapBySize as u, avatarPreviewContentClassName as d, avatarStatusVariants as f, avatarVariants as ee } from "./Avatar.variant.js";
11
11
  import { getInitials as p } from "./Avatar.utils.js";
12
12
  import * as m from "react";
13
13
  import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
@@ -15,8 +15,8 @@ import { Camera as v, ImageOff as y, Trash2 as b, User as x, X as S, ZoomIn as C
15
15
  import * as w from "@radix-ui/react-dialog";
16
16
  //#region src/components/Avatar/Avatar.tsx
17
17
  var T = m.createContext(null);
18
- function E({ src: t, alt: l, name: y, fallback: E, size: D, shape: O, status: k, showTooltip: ne = !1, previewable: re, previewSrc: ie, onClick: A, onImageSelect: j, onImageRemove: M, accept: N = "image/*", maxSizeKb: P, onReject: F, className: ae }, oe) {
19
- let { messages: I, digits: se, dir: L } = e(), R = I.avatar, z = m.useContext(T), B = D ?? z?.size ?? "default", ce = O ?? z?.shape ?? "circle", le = z !== null, V = m.useRef(null), [H, U] = m.useState(null), [ue, W] = m.useState(!1), G = t ? H?.src === t ? H.state : "loading" : "none", K = G === "loaded", q = (re ?? !A) && K, J = !!A || q, Y = !!j, X = p(y), Z = y ?? l, de = E ?? (X ? /* @__PURE__ */ g("span", {
18
+ function E({ src: t, alt: u, name: y, fallback: E, size: D, shape: O, status: k, showTooltip: ne = !1, previewable: re, previewSrc: ie, onClick: A, onImageSelect: j, onImageRemove: M, accept: N = "image/*", maxSizeKb: P, onReject: F, className: ae }, oe) {
19
+ let { messages: I, digits: se, dir: L } = e(), R = I.avatar, z = m.useContext(T), B = D ?? z?.size ?? "default", ce = O ?? z?.shape ?? "circle", le = z !== null, V = m.useRef(null), [H, U] = m.useState(null), [ue, W] = m.useState(!1), G = t ? H?.src === t ? H.state : "loading" : "none", K = G === "loaded", q = (re ?? !A) && K, J = !!A || q, Y = !!j, X = p(y), Z = y ?? u, de = E ?? (X ? /* @__PURE__ */ g("span", {
20
20
  "aria-hidden": "true",
21
21
  dir: "auto",
22
22
  children: X
@@ -28,18 +28,18 @@ function E({ src: t, alt: l, name: y, fallback: E, size: D, shape: O, status: k,
28
28
  }, Q = () => V.current?.click(), pe = (e) => {
29
29
  let t = e.target.files?.[0];
30
30
  if (e.target.value = "", !t) return;
31
- let { accepted: n, rejected: r } = s([t], N, P);
31
+ let { accepted: n, rejected: r } = c([t], N, P);
32
32
  if (r.length > 0) {
33
- F ? F(r[0]) : a({
33
+ F ? F(r[0]) : o({
34
34
  title: R.invalidImage,
35
- message: o(r[0], P, se, I.uploader),
35
+ message: s(r[0], P, se, I.uploader),
36
36
  type: "error",
37
37
  duration: 5e3
38
38
  }, "`onReject`");
39
39
  return;
40
40
  }
41
41
  j?.(n[0]);
42
- }, $ = n(f({
42
+ }, $ = n(ee({
43
43
  size: B,
44
44
  shape: ce,
45
45
  interactive: J
@@ -47,7 +47,7 @@ function E({ src: t, alt: l, name: y, fallback: E, size: D, shape: O, status: k,
47
47
  de,
48
48
  t && G !== "error" ? /* @__PURE__ */ g("img", {
49
49
  src: t,
50
- alt: l ?? y ?? "",
50
+ alt: u ?? y ?? "",
51
51
  loading: "lazy",
52
52
  draggable: !1,
53
53
  onLoad: () => U({
@@ -86,13 +86,13 @@ function E({ src: t, alt: l, name: y, fallback: E, size: D, shape: O, status: k,
86
86
  "data-state": G,
87
87
  className: "zui:relative zui:inline-flex zui:shrink-0 zui:align-middle",
88
88
  children: [
89
- ne && y ? /* @__PURE__ */ g(i, {
89
+ ne && y ? /* @__PURE__ */ g(a, {
90
90
  text: y,
91
91
  position: "top",
92
92
  trigger: he
93
93
  }) : he,
94
94
  k ? /* @__PURE__ */ g("span", {
95
- className: d({
95
+ className: f({
96
96
  status: k,
97
97
  size: B
98
98
  }),
@@ -101,14 +101,14 @@ function E({ src: t, alt: l, name: y, fallback: E, size: D, shape: O, status: k,
101
101
  children: R[k]
102
102
  })
103
103
  }) : null,
104
- Y ? /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(i, {
104
+ Y ? /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(a, {
105
105
  text: R.changeImage,
106
106
  position: "bottom",
107
107
  trigger: /* @__PURE__ */ g("button", {
108
108
  type: "button",
109
109
  "aria-label": R.changeImage,
110
110
  onClick: Q,
111
- className: c({ size: B }),
111
+ className: l({ size: B }),
112
112
  children: /* @__PURE__ */ g(v, { "aria-hidden": "true" })
113
113
  })
114
114
  }), /* @__PURE__ */ g("input", {
@@ -125,19 +125,19 @@ function E({ src: t, alt: l, name: y, fallback: E, size: D, shape: O, status: k,
125
125
  onOpenChange: W,
126
126
  children: /* @__PURE__ */ g(w.Portal, { children: /* @__PURE__ */ g(w.Overlay, {
127
127
  "data-slot": "avatar-preview-overlay",
128
- className: ee(),
128
+ className: n(i(), "zui:mobile:items-center zui:mobile:p-4"),
129
129
  children: /* @__PURE__ */ _(w.Content, {
130
130
  "data-slot": "avatar-preview",
131
131
  dir: L,
132
132
  "aria-describedby": void 0,
133
- className: u,
133
+ className: d,
134
134
  children: [
135
135
  /* @__PURE__ */ g(w.Close, {
136
136
  asChild: !0,
137
137
  children: /* @__PURE__ */ g("button", {
138
138
  type: "button",
139
139
  "aria-label": I.common.close,
140
- className: "zui:absolute zui:-top-3 zui:-end-3 zui:z-10 zui:inline-flex zui:size-9 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border zui:border-[var(--zui-color-border)] zui:bg-[var(--zui-color-surface)] zui:p-0 zui:text-[var(--zui-color-text)] zui:shadow-md zui:outline-none zui:transition-transform zui:duration-200 zui:hover:scale-110 zui:focus-visible:shadow-[0_0_0_2px_var(--zui-theme-action-primary)]",
140
+ className: "zui:absolute zui:-top-3 zui:-end-3 zui:mobile:top-2 zui:mobile:end-2 zui:z-10 zui:inline-flex zui:size-9 zui:mobile:size-11 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border zui:border-[var(--zui-color-border)] zui:bg-[var(--zui-color-surface)] zui:p-0 zui:text-[var(--zui-color-text)] zui:shadow-md zui:outline-none zui:transition-transform zui:duration-200 zui:hover:scale-110 zui:focus-visible:shadow-[0_0_0_2px_var(--zui-theme-action-primary)]",
141
141
  children: /* @__PURE__ */ g(S, {
142
142
  className: "zui:size-4",
143
143
  "aria-hidden": "true"
@@ -147,28 +147,28 @@ function E({ src: t, alt: l, name: y, fallback: E, size: D, shape: O, status: k,
147
147
  /* @__PURE__ */ g(te, {
148
148
  src: ie ?? t,
149
149
  fallbackSrc: t,
150
- alt: l ?? y ?? ""
150
+ alt: u ?? y ?? ""
151
151
  }),
152
152
  /* @__PURE__ */ _("div", {
153
- className: "zui:flex zui:max-w-full zui:flex-wrap zui:items-center zui:justify-center zui:gap-3 zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:px-4 zui:py-2 zui:text-[var(--zui-color-text)] zui:shadow-md",
153
+ className: "zui:flex zui:max-w-full zui:flex-wrap zui:items-center zui:justify-center zui:gap-3 zui:mobile:w-full zui-radius-xs zui:bg-[var(--zui-color-surface)] zui:px-4 zui:py-2 zui:text-[var(--zui-color-text)] zui:shadow-md",
154
154
  children: [
155
155
  /* @__PURE__ */ g(w.Title, {
156
- className: "zui:m-0 zui:text-sm zui:font-semibold",
157
- children: y ?? l ?? R.imageFallbackTitle
156
+ className: "zui:m-0 zui:text-sm zui:mobile:w-full zui:mobile:text-center zui:mobile:text-base zui:font-semibold",
157
+ children: y ?? u ?? R.imageFallbackTitle
158
158
  }),
159
159
  Y ? /* @__PURE__ */ g(r, {
160
- size: "sm",
161
160
  variant: "secondary",
162
161
  kind: "cancel",
163
162
  label: R.changeImage,
163
+ className: "zui:mobile:flex-1",
164
164
  icon: /* @__PURE__ */ g(v, { className: "zui:size-4" }),
165
165
  onClick: Q
166
166
  }) : null,
167
167
  M ? /* @__PURE__ */ g(r, {
168
- size: "sm",
169
168
  variant: "danger",
170
169
  kind: "cancel",
171
170
  label: R.removeImage,
171
+ className: "zui:mobile:flex-1",
172
172
  icon: /* @__PURE__ */ g(b, { className: "zui:size-4" }),
173
173
  onClick: () => {
174
174
  W(!1), M();
@@ -202,17 +202,17 @@ function te({ src: t, fallbackSrc: n, alt: r }) {
202
202
  })]
203
203
  });
204
204
  }
205
- function D({ items: r, children: a, max: o, size: s = "default", shape: c = "circle", showTooltip: u = !0, className: d }, ee) {
205
+ function D({ items: r, children: i, max: o, size: s = "default", shape: c = "circle", showTooltip: l = !0, className: d }, f) {
206
206
  let { messages: p, digits: h, dir: v } = e(), y = m.useMemo(() => ({
207
207
  size: s,
208
208
  shape: c
209
209
  }), [s, c]), b = r ? r.map(({ key: e, ...t }, n) => /* @__PURE__ */ g(O, {
210
- showTooltip: u,
210
+ showTooltip: l,
211
211
  ...t
212
- }, e ?? `${t.name ?? "avatar"}-${n}`)) : m.Children.toArray(a).filter(m.isValidElement), x = o !== void 0 && o > 0 && b.length > o ? o : b.length, S = b.length - x, C = r ? r.slice(x).map((e) => e.name).filter((e) => !!e) : [], w = /* @__PURE__ */ g("span", {
212
+ }, e ?? `${t.name ?? "avatar"}-${n}`)) : m.Children.toArray(i).filter(m.isValidElement), x = o !== void 0 && o > 0 && b.length > o ? o : b.length, S = b.length - x, C = r ? r.slice(x).map((e) => e.name).filter((e) => !!e) : [], w = /* @__PURE__ */ g("span", {
213
213
  role: "img",
214
214
  "aria-label": p.avatar.othersCount(t(String(S), h)),
215
- className: n(f({
215
+ className: n(ee({
216
216
  size: s,
217
217
  shape: c
218
218
  }), "zui:ring-2 zui:ring-[var(--zui-color-surface)]"),
@@ -224,11 +224,11 @@ function D({ items: r, children: a, max: o, size: s = "default", shape: c = "cir
224
224
  return /* @__PURE__ */ g(T.Provider, {
225
225
  value: y,
226
226
  children: /* @__PURE__ */ _("div", {
227
- ref: ee,
227
+ ref: f,
228
228
  "data-slot": "avatar-group",
229
229
  dir: v,
230
- className: n("zui:inline-flex zui:items-center zui:[&>*]:relative zui:[&>*:hover]:z-10 zui:[&>*:focus-within]:z-10", l[s], d),
231
- children: [b.slice(0, x), S > 0 ? u && C.length > 0 ? /* @__PURE__ */ g(i, {
230
+ className: n("zui:inline-flex zui:items-center zui:[&>*]:relative zui:[&>*:hover]:z-10 zui:[&>*:focus-within]:z-10", u[s], d),
231
+ children: [b.slice(0, x), S > 0 ? l && C.length > 0 ? /* @__PURE__ */ g(a, {
232
232
  text: C.join(p.avatar.listSeparator),
233
233
  position: "top",
234
234
  trigger: w
@@ -1 +1 @@
1
- "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../lib/utils.cjs`),t=require(`../Spinner/Spinner.cjs`);;/* empty css */const n=require(`./Button.variant.cjs`);let r=require(`react`),i=require(`react/jsx-runtime`);var a=140,o=(0,r.forwardRef)(function({size:o=`default`,variant:s=`primary`,kind:c=`confirm`,disabled:l=!1,isLoading:u=!1,label:d,children:f,icon:p,ariaLabel:m,fullWidth:h=!1,type:g=`button`,onClick:_,className:v,onPointerDown:y,onPointerUp:b,onPointerCancel:x,onPointerLeave:S,onKeyDown:C,onKeyUp:w,...T},E){let D=l||u,O=f??d,k=!u&&!!p,A=!u&&!!O,j=k&&!A,[M,N]=(0,r.useState)(!1),P=(0,r.useRef)(0),F=(0,r.useRef)(null),I=e.cn(n.buttonVariants({size:o,variant:s,kind:c,disabled:D,fullWidth:h}),j&&`zui-button--icon-only`,v),L=(0,r.useCallback)(()=>{F.current!==null&&(window.clearTimeout(F.current),F.current=null)},[]),R=(0,r.useCallback)(()=>{D||(L(),P.current=window.performance.now(),N(!0))},[L,D]),z=(0,r.useCallback)(()=>{L();let e=window.performance.now()-P.current,t=Math.max(a-e,0);F.current=window.setTimeout(()=>{N(!1),F.current=null},t)},[L]),B=(0,r.useCallback)(e=>{C?.(e),!e.defaultPrevented&&(e.repeat||e.key!==` `&&e.key!==`Enter`||R())},[C,R]),V=(0,r.useCallback)(e=>{w?.(e),!e.defaultPrevented&&(e.key!==` `&&e.key!==`Enter`||z())},[w,z]);return(0,r.useEffect)(()=>{D&&(L(),N(!1))},[L,D]),(0,r.useEffect)(()=>L,[L]),(0,i.jsxs)(`button`,{ref:E,"data-slot":`button`,type:g,disabled:D,"aria-label":m,"aria-busy":u||void 0,"data-pressed":M?`true`:void 0,onPointerDown:e=>{y?.(e),!e.defaultPrevented&&R()},onPointerUp:e=>{b?.(e),z()},onPointerCancel:e=>{x?.(e),z()},onPointerLeave:e=>{S?.(e),z()},onKeyDown:B,onKeyUp:V,onClick:D?void 0:_,className:I,...T,children:[u?(0,i.jsx)(t.default,{}):null,k?(0,i.jsx)(`span`,{"aria-hidden":`true`,className:`zui-button__icon zui:inline-flex zui:items-center zui:justify-center zui:[&>*]:origin-center zui:[&>*]:scale-[0.7]`,children:p}):null,A?(0,i.jsx)(`span`,{children:O}):null]})});exports.default=o;
1
+ "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../lib/utils.cjs`),t=require(`../Spinner/Spinner.cjs`);;/* empty css */const n=require(`./Button.variant.cjs`);let r=require(`react`),i=require(`react/jsx-runtime`);var a=140,o=(0,r.forwardRef)(function({variant:o=`primary`,kind:s=`confirm`,disabled:c=!1,isLoading:l=!1,label:u,children:d,icon:f,ariaLabel:p,fullWidth:m=!1,type:h=`button`,onClick:g,className:_,onPointerDown:v,onPointerUp:y,onPointerCancel:b,onPointerLeave:x,onKeyDown:S,onKeyUp:C,...w},T){let E=c||l,D=d??u,O=!l&&!!f,k=!l&&!!D,A=O&&!k,[j,M]=(0,r.useState)(!1),N=(0,r.useRef)(0),P=(0,r.useRef)(null),F=e.cn(n.buttonVariants({variant:o,kind:s,disabled:E,fullWidth:m}),A&&`zui-button--icon-only`,_),I=(0,r.useCallback)(()=>{P.current!==null&&(window.clearTimeout(P.current),P.current=null)},[]),L=(0,r.useCallback)(()=>{E||(I(),N.current=window.performance.now(),M(!0))},[I,E]),R=(0,r.useCallback)(()=>{I();let e=window.performance.now()-N.current,t=Math.max(a-e,0);P.current=window.setTimeout(()=>{M(!1),P.current=null},t)},[I]),z=(0,r.useCallback)(e=>{S?.(e),!e.defaultPrevented&&(e.repeat||e.key!==` `&&e.key!==`Enter`||L())},[S,L]),B=(0,r.useCallback)(e=>{C?.(e),!e.defaultPrevented&&(e.key!==` `&&e.key!==`Enter`||R())},[C,R]);return(0,r.useEffect)(()=>{E&&(I(),M(!1))},[I,E]),(0,r.useEffect)(()=>I,[I]),(0,i.jsxs)(`button`,{ref:T,"data-slot":`button`,type:h,disabled:E,"aria-label":p,"aria-busy":l||void 0,"data-pressed":j?`true`:void 0,onPointerDown:e=>{v?.(e),!e.defaultPrevented&&L()},onPointerUp:e=>{y?.(e),R()},onPointerCancel:e=>{b?.(e),R()},onPointerLeave:e=>{x?.(e),R()},onKeyDown:z,onKeyUp:B,onClick:E?void 0:g,className:F,...w,children:[l?(0,i.jsx)(t.default,{}):null,O?(0,i.jsx)(`span`,{"aria-hidden":`true`,className:`zui-button__icon zui:inline-flex zui:items-center zui:justify-center zui:[&>*]:origin-center zui:[&>*]:scale-[0.7]`,children:f}):null,k?(0,i.jsx)(`span`,{children:D}):null]})});exports.default=o;
@@ -1,6 +1,5 @@
1
1
  import type * as React from "react";
2
2
  export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "type" | "disabled" | "onClick"> {
3
- size?: "sm" | "default" | "lg";
4
3
  variant?: "primary" | "secondary" | "danger";
5
4
  kind?: "confirm" | "cancel";
6
5
  disabled?: boolean;
@@ -1,6 +1,5 @@
1
1
  import type * as React from "react";
2
2
  export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "type" | "disabled" | "onClick"> {
3
- size?: "sm" | "default" | "lg";
4
3
  variant?: "primary" | "secondary" | "danger";
5
4
  kind?: "confirm" | "cancel";
6
5
  disabled?: boolean;
@@ -6,63 +6,62 @@ import { buttonVariants as n } from "./Button.variant.js";
6
6
  import { forwardRef as r, useCallback as i, useEffect as a, useRef as o, useState as s } from "react";
7
7
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
8
  //#region src/components/Button/Button.tsx
9
- var u = 140, d = r(function({ size: r = "default", variant: d = "primary", kind: f = "confirm", disabled: p = !1, isLoading: m = !1, label: h, children: g, icon: _, ariaLabel: v, fullWidth: y = !1, type: b = "button", onClick: x, className: S, onPointerDown: C, onPointerUp: w, onPointerCancel: T, onPointerLeave: E, onKeyDown: D, onKeyUp: O, ...k }, A) {
10
- let j = p || m, M = g ?? h, N = !m && !!_, P = !m && !!M, F = N && !P, [I, L] = s(!1), R = o(0), z = o(null), B = e(n({
11
- size: r,
12
- variant: d,
13
- kind: f,
14
- disabled: j,
15
- fullWidth: y
16
- }), F && "zui-button--icon-only", S), V = i(() => {
17
- z.current !== null && (window.clearTimeout(z.current), z.current = null);
18
- }, []), H = i(() => {
19
- j || (V(), R.current = window.performance.now(), L(!0));
20
- }, [V, j]), U = i(() => {
21
- V();
22
- let e = window.performance.now() - R.current, t = Math.max(u - e, 0);
23
- z.current = window.setTimeout(() => {
24
- L(!1), z.current = null;
9
+ var u = 140, d = r(function({ variant: r = "primary", kind: d = "confirm", disabled: f = !1, isLoading: p = !1, label: m, children: h, icon: g, ariaLabel: _, fullWidth: v = !1, type: y = "button", onClick: b, className: x, onPointerDown: S, onPointerUp: C, onPointerCancel: w, onPointerLeave: T, onKeyDown: E, onKeyUp: D, ...O }, k) {
10
+ let A = f || p, j = h ?? m, M = !p && !!g, N = !p && !!j, P = M && !N, [F, I] = s(!1), L = o(0), R = o(null), z = e(n({
11
+ variant: r,
12
+ kind: d,
13
+ disabled: A,
14
+ fullWidth: v
15
+ }), P && "zui-button--icon-only", x), B = i(() => {
16
+ R.current !== null && (window.clearTimeout(R.current), R.current = null);
17
+ }, []), V = i(() => {
18
+ A || (B(), L.current = window.performance.now(), I(!0));
19
+ }, [B, A]), H = i(() => {
20
+ B();
21
+ let e = window.performance.now() - L.current, t = Math.max(u - e, 0);
22
+ R.current = window.setTimeout(() => {
23
+ I(!1), R.current = null;
25
24
  }, t);
26
- }, [V]), W = i((e) => {
27
- D?.(e), !e.defaultPrevented && (e.repeat || e.key !== " " && e.key !== "Enter" || H());
28
- }, [D, H]), G = i((e) => {
29
- O?.(e), !e.defaultPrevented && (e.key !== " " && e.key !== "Enter" || U());
30
- }, [O, U]);
25
+ }, [B]), U = i((e) => {
26
+ E?.(e), !e.defaultPrevented && (e.repeat || e.key !== " " && e.key !== "Enter" || V());
27
+ }, [E, V]), W = i((e) => {
28
+ D?.(e), !e.defaultPrevented && (e.key !== " " && e.key !== "Enter" || H());
29
+ }, [D, H]);
31
30
  return a(() => {
32
- j && (V(), L(!1));
33
- }, [V, j]), a(() => V, [V]), /* @__PURE__ */ l("button", {
34
- ref: A,
31
+ A && (B(), I(!1));
32
+ }, [B, A]), a(() => B, [B]), /* @__PURE__ */ l("button", {
33
+ ref: k,
35
34
  "data-slot": "button",
36
- type: b,
37
- disabled: j,
38
- "aria-label": v,
39
- "aria-busy": m || void 0,
40
- "data-pressed": I ? "true" : void 0,
35
+ type: y,
36
+ disabled: A,
37
+ "aria-label": _,
38
+ "aria-busy": p || void 0,
39
+ "data-pressed": F ? "true" : void 0,
41
40
  onPointerDown: (e) => {
42
- C?.(e), !e.defaultPrevented && H();
41
+ S?.(e), !e.defaultPrevented && V();
43
42
  },
44
43
  onPointerUp: (e) => {
45
- w?.(e), U();
44
+ C?.(e), H();
46
45
  },
47
46
  onPointerCancel: (e) => {
48
- T?.(e), U();
47
+ w?.(e), H();
49
48
  },
50
49
  onPointerLeave: (e) => {
51
- E?.(e), U();
50
+ T?.(e), H();
52
51
  },
53
- onKeyDown: W,
54
- onKeyUp: G,
55
- onClick: j ? void 0 : x,
56
- className: B,
57
- ...k,
52
+ onKeyDown: U,
53
+ onKeyUp: W,
54
+ onClick: A ? void 0 : b,
55
+ className: z,
56
+ ...O,
58
57
  children: [
59
- m ? /* @__PURE__ */ c(t, {}) : null,
60
- N ? /* @__PURE__ */ c("span", {
58
+ p ? /* @__PURE__ */ c(t, {}) : null,
59
+ M ? /* @__PURE__ */ c("span", {
61
60
  "aria-hidden": "true",
62
61
  className: "zui-button__icon zui:inline-flex zui:items-center zui:justify-center zui:[&>*]:origin-center zui:[&>*]:scale-[0.7]",
63
- children: _
62
+ children: g
64
63
  }) : null,
65
- P ? /* @__PURE__ */ c("span", { children: M }) : null
64
+ N ? /* @__PURE__ */ c("span", { children: j }) : null
66
65
  ]
67
66
  });
68
67
  });
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../shared/responsiveScale.cjs`);var t=(0,require(`class-variance-authority`).cva)(`zui-button zui:inline-flex zui:items-center zui:justify-center zui:gap-2 zui:rounded-md ${e.BUTTON_PADDING_X} zui:text-sm zui:font-medium zui:leading-none zui:whitespace-nowrap zui:focus-visible:outline-none zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-color-primary)] zui:focus-visible:ring-offset-2 zui:focus-visible:ring-offset-[var(--zui-color-surface)] zui:disabled:pointer-events-none zui:disabled:cursor-not-allowed zui:disabled:opacity-65`,{variants:{size:e.controlHeightBySize,variant:{primary:``,secondary:``,danger:``},kind:{confirm:`zui:text-[var(--zui-color-on-solid)] zui:hover:brightness-105 zui:hover:shadow-sm zui:active:shadow-sm`,cancel:`zui:border-2 zui:bg-transparent zui:text-[var(--zui-color-text)] zui:hover:bg-transparent zui:hover:shadow-sm zui:active:bg-transparent zui:active:shadow-sm`},disabled:{true:``,false:`zui:cursor-pointer`},fullWidth:{true:`zui:w-full`,false:`zui:w-auto`}},compoundVariants:[{kind:`confirm`,variant:`primary`,className:`zui:bg-[var(--zui-color-primary)]`},{kind:`confirm`,variant:`secondary`,className:`zui:bg-[var(--zui-color-secondary)]`},{kind:`confirm`,variant:`danger`,className:`zui:bg-[var(--zui-color-danger)]`},{kind:`cancel`,variant:`primary`,className:`zui:border-[var(--zui-color-primary)]`},{kind:`cancel`,variant:`secondary`,className:`zui:border-[var(--zui-color-secondary)]`},{kind:`cancel`,variant:`danger`,className:`zui:border-[var(--zui-color-danger)]`}],defaultVariants:{size:`default`,variant:`primary`,kind:`confirm`,disabled:!1,fullWidth:!1}});exports.buttonVariants=t;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../shared/responsiveScale.cjs`);var t=(0,require(`class-variance-authority`).cva)(`zui-button ${e.CONTROL_HEIGHT_DEFAULT} zui:inline-flex zui:items-center zui:justify-center zui:gap-2 zui:rounded-md ${e.BUTTON_PADDING_X} zui:text-sm zui:font-medium zui:leading-none zui:whitespace-nowrap zui:focus-visible:outline-none zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-color-primary)] zui:focus-visible:ring-offset-2 zui:focus-visible:ring-offset-[var(--zui-color-surface)] zui:disabled:pointer-events-none zui:disabled:cursor-not-allowed zui:disabled:opacity-65`,{variants:{variant:{primary:``,secondary:``,danger:``},kind:{confirm:`zui:text-[var(--zui-color-on-solid)] zui:hover:brightness-105 zui:hover:shadow-sm zui:active:shadow-sm`,cancel:`zui:border-2 zui:bg-transparent zui:text-[var(--zui-color-text)] zui:hover:bg-transparent zui:hover:shadow-sm zui:active:bg-transparent zui:active:shadow-sm`},disabled:{true:``,false:`zui:cursor-pointer`},fullWidth:{true:`zui:w-full`,false:`zui:w-auto`}},compoundVariants:[{kind:`confirm`,variant:`primary`,className:`zui:bg-[var(--zui-color-primary)]`},{kind:`confirm`,variant:`secondary`,className:`zui:bg-[var(--zui-color-secondary)]`},{kind:`confirm`,variant:`danger`,className:`zui:bg-[var(--zui-color-danger)]`},{kind:`cancel`,variant:`primary`,className:`zui:border-[var(--zui-color-primary)]`},{kind:`cancel`,variant:`secondary`,className:`zui:border-[var(--zui-color-secondary)]`},{kind:`cancel`,variant:`danger`,className:`zui:border-[var(--zui-color-danger)]`}],defaultVariants:{variant:`primary`,kind:`confirm`,disabled:!1,fullWidth:!1}});exports.buttonVariants=t;
@@ -1,5 +1,4 @@
1
1
  declare const buttonVariants: (props?: ({
2
- size?: "sm" | "default" | "lg" | null | undefined;
3
2
  variant?: "primary" | "secondary" | "danger" | null | undefined;
4
3
  kind?: "confirm" | "cancel" | null | undefined;
5
4
  disabled?: boolean | null | undefined;
@@ -1,5 +1,4 @@
1
1
  declare const buttonVariants: (props?: ({
2
- size?: "sm" | "default" | "lg" | null | undefined;
3
2
  variant?: "primary" | "secondary" | "danger" | null | undefined;
4
3
  kind?: "confirm" | "cancel" | null | undefined;
5
4
  disabled?: boolean | null | undefined;
@@ -1,9 +1,8 @@
1
- import { BUTTON_PADDING_X as e, controlHeightBySize as t } from "../shared/responsiveScale.js";
1
+ import { BUTTON_PADDING_X as e, CONTROL_HEIGHT_DEFAULT as t } from "../shared/responsiveScale.js";
2
2
  import { cva as n } from "class-variance-authority";
3
3
  //#region src/components/Button/Button.variant.ts
4
- var r = n(`zui-button zui:inline-flex zui:items-center zui:justify-center zui:gap-2 zui:rounded-md ${e} zui:text-sm zui:font-medium zui:leading-none zui:whitespace-nowrap zui:focus-visible:outline-none zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-color-primary)] zui:focus-visible:ring-offset-2 zui:focus-visible:ring-offset-[var(--zui-color-surface)] zui:disabled:pointer-events-none zui:disabled:cursor-not-allowed zui:disabled:opacity-65`, {
4
+ var r = n(`zui-button ${t} zui:inline-flex zui:items-center zui:justify-center zui:gap-2 zui:rounded-md ${e} zui:text-sm zui:font-medium zui:leading-none zui:whitespace-nowrap zui:focus-visible:outline-none zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-color-primary)] zui:focus-visible:ring-offset-2 zui:focus-visible:ring-offset-[var(--zui-color-surface)] zui:disabled:pointer-events-none zui:disabled:cursor-not-allowed zui:disabled:opacity-65`, {
5
5
  variants: {
6
- size: t,
7
6
  variant: {
8
7
  primary: "",
9
8
  secondary: "",
@@ -55,7 +54,6 @@ var r = n(`zui-button zui:inline-flex zui:items-center zui:justify-center zui:ga
55
54
  }
56
55
  ],
57
56
  defaultVariants: {
58
- size: "default",
59
57
  variant: "primary",
60
58
  kind: "confirm",
61
59
  disabled: !1,
@@ -1 +1 @@
1
- "use client";const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../lib/utils.cjs`),n=require(`../shared/FieldLabel.cjs`),r=require(`../shared/useInvalidState.cjs`),i=require(`../shared/useBubbleInputInvalid.cjs`),a=require(`./Checkbox.variant.cjs`);let o=require(`react`);o=e.__toESM(o,1);let s=require(`react/jsx-runtime`),c=require(`lucide-react`),l=require(`@radix-ui/react-checkbox`);l=e.__toESM(l,1);var u=o.forwardRef(function({className:e,size:u=`default`,checked:d,defaultChecked:f,onCheckedChange:p,onInvalid:m,required:h,name:g,value:_,form:v,id:y,"aria-label":b,disabled:x=!1,onClick:S,...C},w){let{isInvalid:T,setIsInvalid:E,handleInvalid:D}=r.useInvalidState(m),O=o.useRef(null),k=o.useMemo(()=>t.mergeRefs(O,w),[w]);i.useBubbleInputInvalid(O,D);let A=o.useCallback(e=>{E(!1),p?.(e)},[p,E]);return(0,s.jsxs)(l.Root,{...C,ref:k,"data-slot":`checkbox`,"aria-invalid":T||void 0,"aria-disabled":x||void 0,className:t.cn(a.checkboxVariants({size:u,disabled:x,className:e})),checked:d,defaultChecked:f,onCheckedChange:A,required:h,name:g,value:_,form:v,id:y,"aria-label":b,disabled:x,onClick:x?void 0:S,children:[(0,s.jsx)(l.Indicator,{"data-slot":`checkbox-indicator`,className:t.cn(a.checkboxIndicatorVariants({size:u})),children:(0,s.jsx)(c.CheckIcon,{})}),h?(0,s.jsx)(n.RequiredMark,{compact:!0}):null]})});exports.default=u;
1
+ "use client";const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../config/useZuiConfig.cjs`),n=require(`../../lib/utils.cjs`),r=require(`../shared/FieldLabel.cjs`),i=require(`../shared/useInvalidState.cjs`),a=require(`../shared/useBubbleInputInvalid.cjs`),o=require(`./Checkbox.variant.cjs`);let s=require(`react`);s=e.__toESM(s,1);let c=require(`react/jsx-runtime`),l=require(`lucide-react`),u=require(`@radix-ui/react-checkbox`);u=e.__toESM(u,1);var d=s.forwardRef(function({className:e,checked:d,defaultChecked:f,onCheckedChange:p,onInvalid:m,required:h,name:g,value:_,form:v,id:y,"aria-label":b,disabled:x=!1,onClick:S,label:C,description:w,direction:T,optionClassName:E,labelClassName:D,descriptionClassName:O,...k},A){let{dir:j}=t.useZuiConfig(),M=T??j,N=s.useId(),P=!!(C||w),F=y??(P?N:void 0),{isInvalid:I,setIsInvalid:L,handleInvalid:R}=i.useInvalidState(m),z=s.useRef(null),B=s.useMemo(()=>n.mergeRefs(z,A),[A]);a.useBubbleInputInvalid(z,R);let V=s.useCallback(e=>{L(!1),p?.(e)},[p,L]),H=(0,c.jsx)(`span`,{"data-slot":`checkbox-control`,className:`zui:relative zui:inline-flex zui:shrink-0 zui:[&>input]:inset-0! zui:[&>input]:transform-none!`,children:(0,c.jsxs)(u.Root,{...k,ref:B,"data-slot":`checkbox`,"aria-invalid":I||void 0,"aria-disabled":x||void 0,className:n.cn(o.checkboxVariants({disabled:x,className:e})),checked:d,defaultChecked:f,onCheckedChange:V,required:h,name:g,value:_,form:v,id:F,"aria-label":b,disabled:x,onClick:x?void 0:S,children:[(0,c.jsx)(u.Indicator,{"data-slot":`checkbox-indicator`,className:n.cn(o.checkboxIndicatorVariants()),children:(0,c.jsx)(l.CheckIcon,{})}),h?(0,c.jsx)(r.RequiredMark,{compact:!0}):null]})});return P?(0,c.jsxs)(`label`,{htmlFor:F,"data-slot":`checkbox-option`,dir:M,className:n.cn(o.checkboxOptionVariants({direction:M,disabled:x,className:E}),I&&`zui:mobile:border-[var(--zui-theme-status-danger)]`),children:[H,(0,c.jsxs)(`span`,{className:`zui:min-w-0 zui:flex-1`,children:[C?(0,c.jsx)(`span`,{className:n.cn(o.checkboxLabelVariants({disabled:x}),D),children:C}):null,w?(0,c.jsx)(`span`,{className:n.cn(o.checkboxDescriptionVariants(),O),children:w}):null]})]}):H});exports.default=d;
@@ -20,5 +20,16 @@ export interface CheckboxProps extends CheckboxNativeProps, VariantProps<typeof
20
20
  onClick?: React.MouseEventHandler<HTMLButtonElement>;
21
21
  /** Called when a native `<form>` rejects a missing `required` value. The event targets the hidden form input. */
22
22
  onInvalid?: React.FormEventHandler<HTMLInputElement>;
23
+ /**
24
+ * Text beside the checkbox. With a `label` or `description` the checkbox sits in a bordered,
25
+ * fully tappable row (like a `RadioGroupItem`) whose border takes the primary colour when checked.
26
+ */
27
+ label?: React.ReactNode;
28
+ description?: React.ReactNode;
29
+ /** Side of the row the checkbox sits on; defaults to the configured direction. */
30
+ direction?: "rtl" | "ltr";
31
+ optionClassName?: string;
32
+ labelClassName?: string;
33
+ descriptionClassName?: string;
23
34
  }
24
35
  export {};
@@ -20,5 +20,16 @@ export interface CheckboxProps extends CheckboxNativeProps, VariantProps<typeof
20
20
  onClick?: React.MouseEventHandler<HTMLButtonElement>;
21
21
  /** Called when a native `<form>` rejects a missing `required` value. The event targets the hidden form input. */
22
22
  onInvalid?: React.FormEventHandler<HTMLInputElement>;
23
+ /**
24
+ * Text beside the checkbox. With a `label` or `description` the checkbox sits in a bordered,
25
+ * fully tappable row (like a `RadioGroupItem`) whose border takes the primary colour when checked.
26
+ */
27
+ label?: React.ReactNode;
28
+ description?: React.ReactNode;
29
+ /** Side of the row the checkbox sits on; defaults to the configured direction. */
30
+ direction?: "rtl" | "ltr";
31
+ optionClassName?: string;
32
+ labelClassName?: string;
33
+ descriptionClassName?: string;
23
34
  }
24
35
  export {};
@@ -1,48 +1,71 @@
1
1
  "use client";
2
- import { cn as e, mergeRefs as t } from "../../lib/utils.js";
3
- import { RequiredMark as n } from "../shared/FieldLabel.js";
4
- import { useInvalidState as r } from "../shared/useInvalidState.js";
5
- import { useBubbleInputInvalid as i } from "../shared/useBubbleInputInvalid.js";
6
- import { checkboxIndicatorVariants as a, checkboxVariants as o } from "./Checkbox.variant.js";
7
- import * as s from "react";
8
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
- import { CheckIcon as u } from "lucide-react";
10
- import * as d from "@radix-ui/react-checkbox";
2
+ import { useZuiConfig as e } from "../../config/useZuiConfig.js";
3
+ import { cn as t, mergeRefs as n } from "../../lib/utils.js";
4
+ import { RequiredMark as r } from "../shared/FieldLabel.js";
5
+ import { useInvalidState as i } from "../shared/useInvalidState.js";
6
+ import { useBubbleInputInvalid as a } from "../shared/useBubbleInputInvalid.js";
7
+ import { checkboxDescriptionVariants as o, checkboxIndicatorVariants as s, checkboxLabelVariants as c, checkboxOptionVariants as l, checkboxVariants as u } from "./Checkbox.variant.js";
8
+ import * as d from "react";
9
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
+ import { CheckIcon as m } from "lucide-react";
11
+ import * as h from "@radix-ui/react-checkbox";
11
12
  //#region src/components/Checkbox/Checkbox.tsx
12
- var f = s.forwardRef(function({ className: f, size: p = "default", checked: m, defaultChecked: h, onCheckedChange: g, onInvalid: _, required: v, name: y, value: b, form: x, id: S, "aria-label": C, disabled: w = !1, onClick: T, ...E }, D) {
13
- let { isInvalid: O, setIsInvalid: k, handleInvalid: A } = r(_), j = s.useRef(null), M = s.useMemo(() => t(j, D), [D]);
14
- i(j, A);
15
- let N = s.useCallback((e) => {
16
- k(!1), g?.(e);
17
- }, [g, k]);
18
- return /* @__PURE__ */ l(d.Root, {
19
- ...E,
20
- ref: M,
21
- "data-slot": "checkbox",
22
- "aria-invalid": O || void 0,
23
- "aria-disabled": w || void 0,
24
- className: e(o({
25
- size: p,
26
- disabled: w,
27
- className: f
28
- })),
29
- checked: m,
30
- defaultChecked: h,
31
- onCheckedChange: N,
32
- required: v,
33
- name: y,
34
- value: b,
35
- form: x,
36
- id: S,
37
- "aria-label": C,
38
- disabled: w,
39
- onClick: w ? void 0 : T,
40
- children: [/* @__PURE__ */ c(d.Indicator, {
41
- "data-slot": "checkbox-indicator",
42
- className: e(a({ size: p })),
43
- children: /* @__PURE__ */ c(u, {})
44
- }), v ? /* @__PURE__ */ c(n, { compact: !0 }) : null]
13
+ var g = d.forwardRef(function({ className: g, checked: _, defaultChecked: v, onCheckedChange: y, onInvalid: b, required: x, name: S, value: C, form: w, id: T, "aria-label": E, disabled: D = !1, onClick: O, label: k, description: A, direction: j, optionClassName: M, labelClassName: N, descriptionClassName: P, ...F }, I) {
14
+ let { dir: L } = e(), R = j ?? L, z = d.useId(), B = !!(k || A), V = T ?? (B ? z : void 0), { isInvalid: H, setIsInvalid: U, handleInvalid: W } = i(b), G = d.useRef(null), K = d.useMemo(() => n(G, I), [I]);
15
+ a(G, W);
16
+ let q = d.useCallback((e) => {
17
+ U(!1), y?.(e);
18
+ }, [y, U]), J = /* @__PURE__ */ f("span", {
19
+ "data-slot": "checkbox-control",
20
+ className: "zui:relative zui:inline-flex zui:shrink-0 zui:[&>input]:inset-0! zui:[&>input]:transform-none!",
21
+ children: /* @__PURE__ */ p(h.Root, {
22
+ ...F,
23
+ ref: K,
24
+ "data-slot": "checkbox",
25
+ "aria-invalid": H || void 0,
26
+ "aria-disabled": D || void 0,
27
+ className: t(u({
28
+ disabled: D,
29
+ className: g
30
+ })),
31
+ checked: _,
32
+ defaultChecked: v,
33
+ onCheckedChange: q,
34
+ required: x,
35
+ name: S,
36
+ value: C,
37
+ form: w,
38
+ id: V,
39
+ "aria-label": E,
40
+ disabled: D,
41
+ onClick: D ? void 0 : O,
42
+ children: [/* @__PURE__ */ f(h.Indicator, {
43
+ "data-slot": "checkbox-indicator",
44
+ className: t(s()),
45
+ children: /* @__PURE__ */ f(m, {})
46
+ }), x ? /* @__PURE__ */ f(r, { compact: !0 }) : null]
47
+ })
45
48
  });
49
+ return B ? /* @__PURE__ */ p("label", {
50
+ htmlFor: V,
51
+ "data-slot": "checkbox-option",
52
+ dir: R,
53
+ className: t(l({
54
+ direction: R,
55
+ disabled: D,
56
+ className: M
57
+ }), H && "zui:mobile:border-[var(--zui-theme-status-danger)]"),
58
+ children: [J, /* @__PURE__ */ p("span", {
59
+ className: "zui:min-w-0 zui:flex-1",
60
+ children: [k ? /* @__PURE__ */ f("span", {
61
+ className: t(c({ disabled: D }), N),
62
+ children: k
63
+ }) : null, A ? /* @__PURE__ */ f("span", {
64
+ className: t(o(), P),
65
+ children: A
66
+ }) : null]
67
+ })]
68
+ }) : J;
46
69
  });
47
70
  //#endregion
48
- export { f as default };
71
+ export { g as default };
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);let e=require(`class-variance-authority`);var t=(0,e.cva)(`zui:group/checkbox zui:relative zui:inline-flex zui:shrink-0 zui:items-center zui:justify-center zui-radius-xs zui:border zui:border-[var(--zui-color-border)] zui:bg-[var(--zui-theme-control-bg)] zui:text-[var(--zui-theme-text-inverse)] zui:shadow-xs zui:cursor-pointer zui:outline-none zui:select-none zui:transition-all zui:duration-300 zui:ease-out zui:data-[state=checked]:border-[var(--zui-theme-action-primary)] zui:data-[state=checked]:bg-[var(--zui-theme-action-primary)] zui:hover:-translate-y-0.5 zui:hover:border-[var(--zui-theme-action-primary-hover)] zui:hover:bg-[var(--zui-theme-control-hover-bg)] zui:hover:shadow-[0_8px_20px_-12px_var(--zui-effect-shadow-ink-35)] zui:data-[state=checked]:hover:bg-[var(--zui-theme-action-primary-hover)] zui:active:translate-y-px zui:data-[state=checked]:active:bg-[var(--zui-theme-action-primary-active)] zui:focus-visible:border-[var(--zui-theme-action-secondary)] zui:focus-visible:ring-[3px] zui:focus-visible:ring-[var(--zui-theme-action-secondary)] zui:aria-invalid:border-[var(--zui-theme-status-danger)] zui:aria-invalid:ring-[var(--zui-theme-status-danger)] zui:disabled:cursor-not-allowed zui:disabled:pointer-events-none zui:disabled:opacity-50`,{variants:{size:{sm:`zui:size-[calc(var(--zui-scale,10px)*1.68)]`,default:`zui:size-[calc(var(--zui-scale,10px)*1.92)]`,lg:`zui:size-6`},disabled:{true:`zui:pointer-events-none zui:opacity-50`,false:``}},defaultVariants:{size:`default`,disabled:!1}}),n=(0,e.cva)(`zui:flex zui:items-center zui:justify-center zui:text-[var(--zui-theme-text-inverse)] zui:data-[state=checked]:animate-in zui:data-[state=checked]:zoom-in-95 zui:data-[state=checked]:fade-in-0`,{variants:{size:{sm:`zui:[&_svg]:size-[calc(var(--zui-scale,10px)*1.44)] zui:[&_svg]:transition-transform zui:[&_svg]:duration-200`,default:`zui:[&_svg]:size-[calc(var(--zui-scale,10px)*1.68)] zui:[&_svg]:transition-transform zui:[&_svg]:duration-200`,lg:`zui:[&_svg]:size-[calc(var(--zui-scale,10px)*1.92)] zui:[&_svg]:transition-transform zui:[&_svg]:duration-200`}},defaultVariants:{size:`default`}});exports.checkboxIndicatorVariants=n,exports.checkboxVariants=t;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);let e=require(`class-variance-authority`);var t=(0,e.cva)(`zui:group/checkbox zui:relative zui:inline-flex zui:size-[calc(var(--zui-scale,10px)*1.92)] zui:mobile:size-[calc(var(--zui-scale,10px)*2.6)] zui:shrink-0 zui:mobile:after:absolute zui:mobile:after:inset-[calc(var(--zui-scale,10px)*-1)] zui:mobile:after:content-[''] zui:items-center zui:justify-center zui-radius-xs zui:border zui:border-[var(--zui-color-border)] zui:bg-[var(--zui-theme-control-bg)] zui:text-[var(--zui-color-surface)] zui:shadow-xs zui:cursor-pointer zui:outline-none zui:select-none zui:transition-all zui:duration-300 zui:ease-out zui:data-[state=checked]:border-[var(--zui-theme-action-primary)] zui:data-[state=checked]:bg-[var(--zui-theme-action-primary)] zui:hover:-translate-y-0.5 zui:hover:border-[var(--zui-theme-action-primary-hover)] zui:hover:bg-[var(--zui-theme-control-hover-bg)] zui:hover:shadow-[0_8px_20px_-12px_var(--zui-effect-shadow-ink-35)] zui:data-[state=checked]:hover:bg-[var(--zui-theme-action-primary-hover)] zui:active:translate-y-px zui:data-[state=checked]:active:bg-[var(--zui-theme-action-primary-active)] zui:focus-visible:border-[var(--zui-theme-action-secondary)] zui:focus-visible:ring-[3px] zui:focus-visible:ring-[var(--zui-theme-action-secondary)] zui:aria-invalid:border-[var(--zui-theme-status-danger)] zui:aria-invalid:ring-[var(--zui-theme-status-danger)] zui:disabled:cursor-not-allowed zui:disabled:pointer-events-none zui:disabled:opacity-50`,{variants:{disabled:{true:`zui:pointer-events-none zui:opacity-50`,false:``}},defaultVariants:{disabled:!1}}),n=(0,e.cva)(`zui:flex zui:items-center zui:justify-center zui:text-[var(--zui-color-surface)] zui:data-[state=checked]:animate-in zui:data-[state=checked]:zoom-in-95 zui:data-[state=checked]:fade-in-0 zui:[&_svg]:size-[calc(var(--zui-scale,10px)*1.68)] zui:mobile:[&_svg]:size-[calc(var(--zui-scale,10px)*2.3)] zui:[&_svg]:transition-transform zui:[&_svg]:duration-200`),r=(0,e.cva)(`zui:inline-flex zui:w-full zui:items-start zui:justify-between zui:gap-2.5 zui:mobile:min-h-[calc(var(--zui-scale,10px)*5.184)] zui:mobile:items-center zui-radius-xs zui:mobile:border-solid zui:mobile:border-[max(1px,calc(var(--zui-scale,10px)*0.15))] zui:mobile:border-[var(--zui-color-border)] zui:mobile:bg-[var(--zui-color-surface)] zui:mobile:px-3 zui:mobile:py-2 zui:transition-colors zui:duration-200 zui:mobile:has-[[data-state=checked]]:border-[var(--zui-theme-action-primary)]`,{variants:{direction:{rtl:`zui:flex-row-reverse zui:text-right`,ltr:`zui:flex-row zui:text-left`},disabled:{true:`zui:cursor-not-allowed zui:opacity-60`,false:`zui:cursor-pointer`}},defaultVariants:{direction:`rtl`,disabled:!1}}),i=(0,e.cva)(`zui:block zui:text-sm zui:mobile:text-base zui:font-medium zui:leading-5 zui:mobile:leading-6 zui:text-[var(--zui-color-text)]`,{variants:{disabled:{true:`zui:text-[var(--zui-theme-text-muted)]`,false:``}},defaultVariants:{disabled:!1}}),a=(0,e.cva)(`zui:mt-0.5 zui:block zui:text-xs zui:mobile:text-sm zui:text-[var(--zui-color-text)]`);exports.checkboxDescriptionVariants=a,exports.checkboxIndicatorVariants=n,exports.checkboxLabelVariants=i,exports.checkboxOptionVariants=r,exports.checkboxVariants=t;