@tribepad/themis 1.8.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.9.0] - 2026-06-25
9
+
10
+ ### Added
11
+ - **`Modal.Tabs` + `Modal.Body` — tabbed dialogs.** A full-width tab strip can now sit below the modal title to switch the dialog body, mirroring how `PageTitle` hosts tabs. `Modal.Tabs` wraps a `TabList` and renders it edge-to-edge (its own `border-b` becomes the divider, flush to both edges); the matching `TabPanel`s live in the new scrollable `Modal.Body`. Both go inside a single `<Tabs>` provider — React Aria's collection lets the tablist and panels live in separate regions. Give that `<Tabs>` element `flex min-h-0 flex-1 flex-col` so the body grows and scrolls while the header and tab strip stay pinned. Tabs are entirely optional; non-tabbed modals just put content in `Modal.Body`.
12
+
13
+ ### Changed
14
+ - **`Modal.Content` no longer pads its children; wrap body content in `Modal.Body`.** The box's `p-6` has been removed so the tab strip can sit flush; each region (`Modal.Header`, `Modal.Tabs`, `Modal.Body`, `Modal.Footer`) now owns its own padding. Content placed bare inside `Modal.Content` loses its insets — wrap any non-Header/Footer content in `<Modal.Body>…</Modal.Body>`.
15
+ - **Centred modals are now capped at `85vh` and scroll inside `Modal.Body`.** Previously long content could overflow the viewport; now the box is height-bounded and the body scrolls while the header/tabs/footer stay pinned. Manual `max-h`/`overflow-y-auto` wrappers around modal content are no longer needed.
16
+
8
17
  ## [1.8.1] - 2026-06-24
9
18
 
10
19
  ### Fixed
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- 'use strict';var react=require('react'),reactAriaComponents=require('react-aria-components'),lucideReact=require('lucide-react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');function u(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function Yt(e){if(!(e instanceof Element))return false;let t=e;for(let r=0;t&&r<100;r++){let i=t.tagName?.toLowerCase()??"";if(i.startsWith("grammarly-")||i.startsWith("lt-")||t.hasAttribute("data-grammarly-shadow-root"))return true;if(t.parentElement)t=t.parentElement;else {let l=t.getRootNode();t=l instanceof ShadowRoot?l.host:null;}}let o=e;for(;o&&!o.tagName.includes("-");)o=o.parentElement;if(!o)return false;let n=o.parentElement;return n===document.body||n===document.documentElement}function ot(e){return t=>!Yt(t)&&(e?.(t)??true)}function at(e){let t=react.useCallback(r=>{let i=window.matchMedia(e);return i.addEventListener("change",r),()=>i.removeEventListener("change",r)},[e]),o=react.useCallback(()=>window.matchMedia(e).matches,[e]),n=react.useCallback(()=>false,[]);return react.useSyncExternalStore(t,o,n)}var nt=["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:zoom-in-95","data-[entering]:duration-200","data-[entering]:ease-out"],rt=["data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:zoom-out-95","data-[exiting]:duration-150","data-[exiting]:ease-in"],it=["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:slide-in-from-bottom-4","data-[entering]:duration-200","data-[entering]:ease-out"],st=["data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:slide-out-to-bottom-4","data-[exiting]:duration-150","data-[exiting]:ease-in"],lt=["data-[entering]:animate-in","data-[entering]:slide-in-from-left","data-[entering]:duration-200","data-[entering]:ease-out"],dt=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-left","data-[exiting]:duration-150","data-[exiting]:ease-in"],ct=["data-[entering]:animate-in","data-[entering]:slide-in-from-right","data-[entering]:duration-200","data-[entering]:ease-out"],ut=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-right","data-[exiting]:duration-150","data-[exiting]:ease-in"],pt=["data-[entering]:animate-in","data-[entering]:slide-in-from-top","data-[entering]:duration-200","data-[entering]:ease-out"],mt=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-top","data-[exiting]:duration-150","data-[exiting]:ease-in"],ft=["data-[entering]:animate-in","data-[entering]:slide-in-from-bottom","data-[entering]:duration-200","data-[entering]:ease-out"],gt=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-bottom","data-[exiting]:duration-150","data-[exiting]:ease-in"],L=["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:duration-200"],V=["data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:duration-150"],P=["motion-reduce:transition-none","motion-reduce:animate-none"];var xt=classVarianceAuthority.cva(["relative","bg-[var(--content-background)]","text-[var(--content-foreground)]","rounded-lg","p-6","w-full","outline-none","mx-4","sm:mx-0",...P],{variants:{size:{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-2xl",full:"max-w-full min-h-screen rounded-none"},animation:{"fade-zoom":[...nt,...rt],fade:["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:duration-200","data-[entering]:ease-out","data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:duration-150","data-[exiting]:ease-in"],slide:[...it,...st],none:""}},defaultVariants:{size:"md",animation:"fade-zoom"}}),vt=classVarianceAuthority.cva(["fixed","inset-0","z-50","flex","bg-black/50","backdrop-blur-sm",...P],{variants:{animation:{"fade-zoom":[...L,...V],fade:[...L,...V],slide:[...L,...V],none:""},position:{center:"items-center justify-center",left:"items-stretch justify-start",right:"items-stretch justify-end",top:"items-start justify-center",bottom:"items-end justify-center"}},defaultVariants:{animation:"fade-zoom",position:"center"}}),j=classVarianceAuthority.cva(["relative","bg-[var(--content-background)]","text-[var(--content-foreground)]","p-6","outline-none","overflow-y-auto",...P],{variants:{position:{left:"h-full border-r border-[var(--border)] rounded-r-lg",right:"h-full border-l border-[var(--border)] rounded-l-lg",top:"w-full border-b border-[var(--border)] rounded-b-lg",bottom:"w-full border-t border-[var(--border)] rounded-t-lg"},size:{sm:"",md:"",lg:"",xl:"",full:""}},compoundVariants:[{position:["left","right"],size:"sm",class:"w-[300px] max-w-[90vw]"},{position:["left","right"],size:"md",class:"w-[400px] max-w-[90vw]"},{position:["left","right"],size:"lg",class:"w-[500px] max-w-[90vw]"},{position:["left","right"],size:"xl",class:"w-[600px] max-w-[90vw]"},{position:["left","right"],size:"full",class:"w-screen"},{position:["top","bottom"],size:"sm",class:"h-[200px] max-h-[90vh]"},{position:["top","bottom"],size:"md",class:"h-[320px] max-h-[90vh]"},{position:["top","bottom"],size:"lg",class:"h-[440px] max-h-[90vh]"},{position:["top","bottom"],size:"xl",class:"h-[560px] max-h-[90vh]"},{position:["top","bottom"],size:"full",class:"h-screen"}],defaultVariants:{position:"right",size:"md"}}),bt={left:[...lt,...dt],right:[...ct,...ut],top:[...pt,...mt],bottom:[...ft,...gt]};var X=react.createContext(void 0);function _t({children:e,defaultOpen:t,isOpen:o,onOpenChange:n,role:r="dialog"}){let i=react.Children.toArray(e);if(process.env.NODE_ENV!=="production"&&!i.some(c=>react.isValidElement(c)&&(c.type===A||c.type.displayName==="ModalContent")))throw new Error("Modal requires a Modal.Content as a child");let l=i.find(a=>react.isValidElement(a)&&(a.type===S||a.type.displayName==="ModalTrigger")),f=i.find(a=>react.isValidElement(a)&&(a.type===A||a.type.displayName==="ModalContent"));if(!l)return jsxRuntime.jsx(X.Provider,{value:{role:r},children:jsxRuntime.jsx(reactAriaComponents.DialogTrigger,{defaultOpen:t,isOpen:o,onOpenChange:n,children:f})});let g=l,x=react.isValidElement(g)?g.props.children:null;return jsxRuntime.jsx(X.Provider,{value:{role:r},children:jsxRuntime.jsxs(reactAriaComponents.DialogTrigger,{defaultOpen:t,isOpen:o,onOpenChange:n,children:[x,f]})})}_t.displayName="Modal";function S({children:e}){return e}S.displayName="ModalTrigger";function A({children:e,size:t="md",animation:o="fade-zoom",position:n="center",mobileBreakpoint:r=768,animationDuration:i=250,isDismissable:l=true,isKeyboardDismissDisabled:h=false,shouldCloseOnInteractOutside:f,showClose:g=true,className:x}){let c=react.useContext(X)?.role??"dialog",E=n!=="center",_=at(`(max-width: ${r-1}px)`),v=E&&_?"bottom":n,T=vt({animation:o,position:v}),O;if(E){let p=v,I=_?u(j({position:"bottom",size:t}),"h-auto max-h-[85vh]"):j({position:p,size:t}),k=o==="none"?void 0:bt[p];O=u(I,k,x);}else O=u(xt({size:t,animation:o}),x);return jsxRuntime.jsx(reactAriaComponents.ModalOverlay,{isDismissable:l,isKeyboardDismissDisabled:h,shouldCloseOnInteractOutside:ot(f),className:T,children:jsxRuntime.jsx(reactAriaComponents.Modal,{className:O,style:{transitionDuration:`${i}ms`},children:jsxRuntime.jsx(reactAriaComponents.Dialog,{role:c,className:"outline-none",children:({close:p})=>jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[g&&jsxRuntime.jsx(reactAriaComponents.Button,{onPress:p,className:"absolute right-0 top-0 flex items-center justify-center rounded-sm opacity-70 ring-offset-[var(--content-background)] transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-[var(--ring)] focus:ring-offset-2 disabled:pointer-events-none min-h-[44px] min-w-[44px]","aria-label":"Close modal",children:jsxRuntime.jsx(lucideReact.X,{className:"h-4 w-4","aria-hidden":"true"})}),e]})})})})}A.displayName="ModalContent";function Ot(e){return null}Ot.displayName="ModalOverlay";function R({children:e,className:t}){return jsxRuntime.jsx("div",{className:u("flex flex-col space-y-1.5 text-center sm:text-left",t),children:e})}R.displayName="ModalHeader";function w({children:e,as:t="h2",className:o}){return jsxRuntime.jsx(reactAriaComponents.Heading,{slot:"title",level:parseInt(t[1]??"2"),className:u("text-lg font-semibold leading-none tracking-tight",o),children:e})}w.displayName="ModalTitle";function z({children:e,className:t}){return jsxRuntime.jsx("p",{slot:"description",className:u("text-sm text-[var(--menu-muted)]",t),children:e})}z.displayName="ModalDescription";function B({children:e,className:t}){return jsxRuntime.jsx("div",{className:u("flex flex-col-reverse sm:flex-row sm:justify-end gap-2",t),children:e})}B.displayName="ModalFooter";function y({children:e}){let t=react.useContext(reactAriaComponents.OverlayTriggerStateContext);if(!t)throw new Error("Modal.Close must be used inside Modal.Content");if(!react.isValidElement(e))throw new Error("Modal.Close requires a valid React element as a child");let o=e,n=()=>{t.close();},r=o.props?.onPress;return react.cloneElement(o,{onPress:r?()=>{r(),n();}:n})}y.displayName="ModalClose";var At=Object.assign(_t,{Trigger:S,Content:A,Overlay:Ot,Header:R,Title:w,Description:z,Footer:B,Close:y});var St=classVarianceAuthority.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}}),yt=classVarianceAuthority.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-normal ring-offset-background motion-safe:transition-transform motion-safe:duration-200 motion-safe:[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)] motion-reduce:transition-none [&_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)] hover:-translate-y-1",destructive:"bg-[var(--destructive-background)] text-[var(--destructive-foreground)] hover:bg-[var(--destructive-background-hover,var(--destructive-background))] motion-safe:hover:btn-warn-shake",outline:"border border-[var(--input-border)] bg-[var(--page-background)] hover:bg-[var(--input-border)]",secondary:"bg-[var(--secondary)] text-[var(--secondary-foreground)] hover:bg-[var(--secondary-hover,var(--secondary))]",ghost:"hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]",link:"text-[var(--text-link)] underline underline-offset-4 hover:bg-[var(--accent)] hover: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-6 text-base",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)] hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var Z="data-[pressed]:scale-[0.97]";var G="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",H="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";var Ct=react.createContext(null);Ct.displayName="ButtonGroupContext";function Lt(){return react.useContext(Ct)}var Vt=react.createContext(null);Vt.displayName="ButtonGroupItemContext";function Pt(){return react.useContext(Vt)}classVarianceAuthority.cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var Rt=classVarianceAuthority.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"}});classVarianceAuthority.cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var U=react.memo(react.forwardRef(({className:e,buttonVisualClassName:t,variant:o,size:n,visualSize:r,fullWidth:i,loading:l=false,loadingText:h="Loading...",shortcut:f,children:g,isDisabled:x,paywall:a=false,paywallRedirect:c,paywallDescription:E,onPress:_,...v},T)=>{let O=react.useId(),p=Lt(),I=Pt(),k=o??p?.variant??"default",Ht=n??p?.size,Ut=x??p?.isDisabled??false,tt=p?.orientation==="vertical",et=i||tt,kt=I?Rt({orientation:p?.orientation??"horizontal",position:I.position}):"",F=r??Ht??"default";return process.env.NODE_ENV!=="production"&&(F==="dot"||F==="icon")&&!v["aria-label"]&&!g&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsxRuntime.jsx(reactAriaComponents.Button,{ref:T,isDisabled:Ut||l||void 0,"aria-disabled":a?true:void 0,"aria-describedby":a?O:void 0,onPress:C=>{if(a){c&&window.open(c,"_blank","noopener,noreferrer");return}_?.(C);},className:u(St({fullWidth:et,inVerticalGroup:tt}),e),...v,children:C=>jsxRuntime.jsxs("span",{className:u(yt({variant:k,visualSize:F,paywall:a,fullWidth:et}),kt,t,Z,"",G,H),"data-pressed":C.isPressed||void 0,children:[l&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsxRuntime.jsx("span",{className:"sr-only","aria-live":"polite",children:h})]}),!l&&g,a&&jsxRuntime.jsx(lucideReact.Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),a&&jsxRuntime.jsxs("span",{id:O,className:"sr-only",children:["Premium feature: ",E||"Upgrade required to access this feature"]}),C.isFocusVisible&&f&&jsxRuntime.jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:f})]})})}));U.displayName="Button";var J=classVarianceAuthority.cva("border border-[var(--border)]",{variants:{variant:{default:"",destructive:"border-[var(--destructive-background)]"}},defaultVariants:{variant:"default"}});function wt({trigger:e,isOpen:t,defaultOpen:o=false,onOpenChange:n,title:r,description:i,children:l,variant:h="default",size:f="md",cancelLabel:g="Cancel",cancelIcon:x,actionLabel:a,actionIcon:c,actionVariant:E="destructive",onAction:_,className:v}){return jsxRuntime.jsxs(At,{role:"alertdialog",isOpen:t,defaultOpen:o,onOpenChange:n,children:[jsxRuntime.jsx(S,{children:e}),jsxRuntime.jsxs(A,{size:f,isDismissable:false,isKeyboardDismissDisabled:true,showClose:false,animation:"fade-zoom",animationDuration:250,className:J({variant:h})+(v?` ${v}`:""),children:[jsxRuntime.jsxs(R,{children:[jsxRuntime.jsx(w,{as:"h2",children:r}),i&&jsxRuntime.jsx(z,{children:i})]}),l,jsxRuntime.jsxs(B,{children:[jsxRuntime.jsx(y,{children:jsxRuntime.jsxs(U,{variant:"secondary",children:[x&&jsxRuntime.jsx("span",{className:"mr-2","aria-hidden":"true",children:x}),g]})}),jsxRuntime.jsx(y,{children:jsxRuntime.jsxs(U,{variant:E,onPress:_,children:[c&&jsxRuntime.jsx("span",{className:"mr-2","aria-hidden":"true",children:c}),a]})})]})]})]})}wt.displayName="AlertDialog";var zt=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var Bt=zod.z.enum(["default","destructive"]),Gt=zod.z.enum(["sm","md","lg"]),me=zt.extend({trigger:zod.z.custom(),isOpen:zod.z.boolean().optional(),defaultOpen:zod.z.boolean().optional().default(false),onOpenChange:zod.z.custom().optional(),title:zod.z.string(),description:zod.z.string().optional(),children:zod.z.custom().optional(),variant:Bt.optional().default("default"),size:Gt.optional().default("md"),cancelLabel:zod.z.string().optional().default("Cancel"),cancelIcon:zod.z.custom().optional(),actionLabel:zod.z.string(),actionIcon:zod.z.custom().optional(),actionVariant:zod.z.enum(["default","destructive"]).optional().default("destructive"),onAction:zod.z.custom().optional()});exports.AlertDialog=wt;exports.AlertDialogPropsSchema=me;exports.AlertDialogSizeSchema=Gt;exports.AlertDialogVariantSchema=Bt;exports.alertDialogContentVariants=J;//# sourceMappingURL=index.js.map
2
+ 'use strict';var react=require('react'),reactAriaComponents=require('react-aria-components'),lucideReact=require('lucide-react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');function c(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function Zt(e){if(!(e instanceof Element))return false;let t=e;for(let r=0;t&&r<100;r++){let i=t.tagName?.toLowerCase()??"";if(i.startsWith("grammarly-")||i.startsWith("lt-")||t.hasAttribute("data-grammarly-shadow-root"))return true;if(t.parentElement)t=t.parentElement;else {let d=t.getRootNode();t=d instanceof ShadowRoot?d.host:null;}}let o=e;for(;o&&!o.tagName.includes("-");)o=o.parentElement;if(!o)return false;let n=o.parentElement;return n===document.body||n===document.documentElement}function ot(e){return t=>!Zt(t)&&(e?.(t)??true)}function at(e){let t=react.useCallback(r=>{let i=window.matchMedia(e);return i.addEventListener("change",r),()=>i.removeEventListener("change",r)},[e]),o=react.useCallback(()=>window.matchMedia(e).matches,[e]),n=react.useCallback(()=>false,[]);return react.useSyncExternalStore(t,o,n)}var nt=["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:zoom-in-95","data-[entering]:duration-200","data-[entering]:ease-out"],rt=["data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:zoom-out-95","data-[exiting]:duration-150","data-[exiting]:ease-in"],it=["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:slide-in-from-bottom-4","data-[entering]:duration-200","data-[entering]:ease-out"],st=["data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:slide-out-to-bottom-4","data-[exiting]:duration-150","data-[exiting]:ease-in"],lt=["data-[entering]:animate-in","data-[entering]:slide-in-from-left","data-[entering]:duration-200","data-[entering]:ease-out"],dt=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-left","data-[exiting]:duration-150","data-[exiting]:ease-in"],ct=["data-[entering]:animate-in","data-[entering]:slide-in-from-right","data-[entering]:duration-200","data-[entering]:ease-out"],ut=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-right","data-[exiting]:duration-150","data-[exiting]:ease-in"],pt=["data-[entering]:animate-in","data-[entering]:slide-in-from-top","data-[entering]:duration-200","data-[entering]:ease-out"],mt=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-top","data-[exiting]:duration-150","data-[exiting]:ease-in"],ft=["data-[entering]:animate-in","data-[entering]:slide-in-from-bottom","data-[entering]:duration-200","data-[entering]:ease-out"],gt=["data-[exiting]:animate-out","data-[exiting]:slide-out-to-bottom","data-[exiting]:duration-150","data-[exiting]:ease-in"],L=["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:duration-200"],P=["data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:duration-150"],R=["motion-reduce:transition-none","motion-reduce:animate-none"];var xt=classVarianceAuthority.cva(["relative","bg-[var(--content-background)]","text-[var(--content-foreground)]","rounded-lg","flex","flex-col","overflow-hidden","w-full","outline-none","mx-4","sm:mx-0",...R],{variants:{size:{sm:"max-w-sm max-h-[85vh]",md:"max-w-md max-h-[85vh]",lg:"max-w-lg max-h-[85vh]",xl:"max-w-2xl max-h-[85vh]",full:"max-w-full min-h-screen max-h-none rounded-none"},animation:{"fade-zoom":[...nt,...rt],fade:["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:duration-200","data-[entering]:ease-out","data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:duration-150","data-[exiting]:ease-in"],slide:[...it,...st],none:""}},defaultVariants:{size:"md",animation:"fade-zoom"}}),vt=classVarianceAuthority.cva(["fixed","inset-0","z-50","flex","bg-black/50","backdrop-blur-sm",...R],{variants:{animation:{"fade-zoom":[...L,...P],fade:[...L,...P],slide:[...L,...P],none:""},position:{center:"items-center justify-center",left:"items-stretch justify-start",right:"items-stretch justify-end",top:"items-start justify-center",bottom:"items-end justify-center"}},defaultVariants:{animation:"fade-zoom",position:"center"}}),j=classVarianceAuthority.cva(["relative","bg-[var(--content-background)]","text-[var(--content-foreground)]","flex","flex-col","overflow-hidden","outline-none",...R],{variants:{position:{left:"h-full border-r border-[var(--border)] rounded-r-lg",right:"h-full border-l border-[var(--border)] rounded-l-lg",top:"w-full border-b border-[var(--border)] rounded-b-lg",bottom:"w-full border-t border-[var(--border)] rounded-t-lg"},size:{sm:"",md:"",lg:"",xl:"",full:""}},compoundVariants:[{position:["left","right"],size:"sm",class:"w-[300px] max-w-[90vw]"},{position:["left","right"],size:"md",class:"w-[400px] max-w-[90vw]"},{position:["left","right"],size:"lg",class:"w-[500px] max-w-[90vw]"},{position:["left","right"],size:"xl",class:"w-[600px] max-w-[90vw]"},{position:["left","right"],size:"full",class:"w-screen"},{position:["top","bottom"],size:"sm",class:"h-[200px] max-h-[90vh]"},{position:["top","bottom"],size:"md",class:"h-[320px] max-h-[90vh]"},{position:["top","bottom"],size:"lg",class:"h-[440px] max-h-[90vh]"},{position:["top","bottom"],size:"xl",class:"h-[560px] max-h-[90vh]"},{position:["top","bottom"],size:"full",class:"h-screen"}],defaultVariants:{position:"right",size:"md"}}),bt={left:[...lt,...dt],right:[...ct,...ut],top:[...pt,...mt],bottom:[...ft,...gt]},ht=classVarianceAuthority.cva(["px-6","py-4","flex-1","min-h-0","overflow-y-auto"]),Et=classVarianceAuthority.cva(["[&_[role=tablist]]:flex","[&_[role=tablist]]:w-full","[&_[role=tablist]]:px-2"]);var X=react.createContext(void 0);function Mt({children:e,defaultOpen:t,isOpen:o,onOpenChange:n,role:r="dialog"}){let i=react.Children.toArray(e);if(process.env.NODE_ENV!=="production"&&!i.some(u=>react.isValidElement(u)&&(u.type===M||u.type.displayName==="ModalContent")))throw new Error("Modal requires a Modal.Content as a child");let d=i.find(a=>react.isValidElement(a)&&(a.type===T||a.type.displayName==="ModalTrigger")),f=i.find(a=>react.isValidElement(a)&&(a.type===M||a.type.displayName==="ModalContent"));if(!d)return jsxRuntime.jsx(X.Provider,{value:{role:r},children:jsxRuntime.jsx(reactAriaComponents.DialogTrigger,{defaultOpen:t,isOpen:o,onOpenChange:n,children:f})});let g=d,x=react.isValidElement(g)?g.props.children:null;return jsxRuntime.jsx(X.Provider,{value:{role:r},children:jsxRuntime.jsxs(reactAriaComponents.DialogTrigger,{defaultOpen:t,isOpen:o,onOpenChange:n,children:[x,f]})})}Mt.displayName="Modal";function T({children:e}){return e}T.displayName="ModalTrigger";function M({children:e,size:t="md",animation:o="fade-zoom",position:n="center",mobileBreakpoint:r=768,animationDuration:i=250,isDismissable:d=true,isKeyboardDismissDisabled:h=false,shouldCloseOnInteractOutside:f,showClose:g=true,className:x}){let u=react.useContext(X)?.role??"dialog",E=n!=="center",_=at(`(max-width: ${r-1}px)`),v=E&&_?"bottom":n,I=vt({animation:o,position:v}),O;if(E){let p=v,C=_?c(j({position:"bottom",size:t}),"h-auto max-h-[85vh]"):j({position:p,size:t}),F=o==="none"?void 0:bt[p];O=c(C,F,x);}else O=c(xt({size:t,animation:o}),x);return jsxRuntime.jsx(reactAriaComponents.ModalOverlay,{isDismissable:d,isKeyboardDismissDisabled:h,shouldCloseOnInteractOutside:ot(f),className:I,children:jsxRuntime.jsx(reactAriaComponents.Modal,{className:O,style:{transitionDuration:`${i}ms`},children:jsxRuntime.jsx(reactAriaComponents.Dialog,{role:u,className:"outline-none",children:({close:p})=>jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[g&&jsxRuntime.jsx(reactAriaComponents.Button,{onPress:p,className:"absolute right-0 top-0 flex items-center justify-center rounded-sm opacity-70 ring-offset-[var(--content-background)] transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-[var(--ring)] focus:ring-offset-2 disabled:pointer-events-none min-h-[44px] min-w-[44px]","aria-label":"Close modal",children:jsxRuntime.jsx(lucideReact.X,{className:"h-4 w-4","aria-hidden":"true"})}),e]})})})})}M.displayName="ModalContent";function yt(e){return null}yt.displayName="ModalOverlay";function w({children:e,className:t}){return jsxRuntime.jsx("div",{className:c("flex flex-col space-y-1.5 px-6 pt-6 pb-4 pr-12 text-center sm:text-left",t),children:e})}w.displayName="ModalHeader";function B({children:e,as:t="h2",className:o}){return jsxRuntime.jsx(reactAriaComponents.Heading,{slot:"title",level:parseInt(t[1]??"2"),className:c("text-lg font-semibold leading-none tracking-tight",o),children:e})}B.displayName="ModalTitle";function z({children:e,className:t}){return jsxRuntime.jsx("p",{slot:"description",className:c("text-sm text-[var(--menu-muted)]",t),children:e})}z.displayName="ModalDescription";function At({children:e,className:t}){return jsxRuntime.jsx("div",{className:c(Et(),t),children:e})}At.displayName="ModalTabs";function Dt({children:e,className:t}){return jsxRuntime.jsx("div",{className:c(ht(),t),children:e})}Dt.displayName="ModalBody";function G({children:e,className:t}){return jsxRuntime.jsx("div",{className:c("flex flex-col-reverse sm:flex-row sm:justify-end gap-2 px-6 pb-6 pt-4",t),children:e})}G.displayName="ModalFooter";function S({children:e}){let t=react.useContext(reactAriaComponents.OverlayTriggerStateContext);if(!t)throw new Error("Modal.Close must be used inside Modal.Content");if(!react.isValidElement(e))throw new Error("Modal.Close requires a valid React element as a child");let o=e,n=()=>{t.close();},r=o.props?.onPress;return react.cloneElement(o,{onPress:r?()=>{r(),n();}:n})}S.displayName="ModalClose";var Tt=Object.assign(Mt,{Trigger:T,Content:M,Overlay:yt,Header:w,Title:B,Description:z,Tabs:At,Body:Dt,Footer:G,Close:S});var It=classVarianceAuthority.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}}),Ct=classVarianceAuthority.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-normal ring-offset-background motion-safe:transition-transform motion-safe:duration-200 motion-safe:[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)] motion-reduce:transition-none [&_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)] hover:-translate-y-1",destructive:"bg-[var(--destructive-background)] text-[var(--destructive-foreground)] hover:bg-[var(--destructive-background-hover,var(--destructive-background))] motion-safe:hover:btn-warn-shake",outline:"border border-[var(--input-border)] bg-[var(--page-background)] hover:bg-[var(--input-border)]",secondary:"bg-[var(--secondary)] text-[var(--secondary-foreground)] hover:bg-[var(--secondary-hover,var(--secondary))]",ghost:"hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]",link:"text-[var(--text-link)] underline underline-offset-4 hover:bg-[var(--accent)] hover: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-6 text-base",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)] hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var Z="data-[pressed]:scale-[0.97]";var H="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",U="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";var Rt=react.createContext(null);Rt.displayName="ButtonGroupContext";function wt(){return react.useContext(Rt)}var Bt=react.createContext(null);Bt.displayName="ButtonGroupItemContext";function zt(){return react.useContext(Bt)}classVarianceAuthority.cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var Gt=classVarianceAuthority.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"}});classVarianceAuthority.cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var k=react.memo(react.forwardRef(({className:e,buttonVisualClassName:t,variant:o,size:n,visualSize:r,fullWidth:i,loading:d=false,loadingText:h="Loading...",shortcut:f,children:g,isDisabled:x,paywall:a=false,paywallRedirect:u,paywallDescription:E,onPress:_,...v},I)=>{let O=react.useId(),p=wt(),C=zt(),F=o??p?.variant??"default",$t=n??p?.size,Yt=x??p?.isDisabled??false,tt=p?.orientation==="vertical",et=i||tt,Wt=C?Gt({orientation:p?.orientation??"horizontal",position:C.position}):"",$=r??$t??"default";return process.env.NODE_ENV!=="production"&&($==="dot"||$==="icon")&&!v["aria-label"]&&!g&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsxRuntime.jsx(reactAriaComponents.Button,{ref:I,isDisabled:Yt||d||void 0,"aria-disabled":a?true:void 0,"aria-describedby":a?O:void 0,onPress:V=>{if(a){u&&window.open(u,"_blank","noopener,noreferrer");return}_?.(V);},className:c(It({fullWidth:et,inVerticalGroup:tt}),e),...v,children:V=>jsxRuntime.jsxs("span",{className:c(Ct({variant:F,visualSize:$,paywall:a,fullWidth:et}),Wt,t,Z,"",H,U),"data-pressed":V.isPressed||void 0,children:[d&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsxRuntime.jsx("span",{className:"sr-only","aria-live":"polite",children:h})]}),!d&&g,a&&jsxRuntime.jsx(lucideReact.Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),a&&jsxRuntime.jsxs("span",{id:O,className:"sr-only",children:["Premium feature: ",E||"Upgrade required to access this feature"]}),V.isFocusVisible&&f&&jsxRuntime.jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:f})]})})}));k.displayName="Button";var J=classVarianceAuthority.cva("border border-[var(--border)]",{variants:{variant:{default:"",destructive:"border-[var(--destructive-background)]"}},defaultVariants:{variant:"default"}});function Ht({trigger:e,isOpen:t,defaultOpen:o=false,onOpenChange:n,title:r,description:i,children:d,variant:h="default",size:f="md",cancelLabel:g="Cancel",cancelIcon:x,actionLabel:a,actionIcon:u,actionVariant:E="destructive",onAction:_,className:v}){return jsxRuntime.jsxs(Tt,{role:"alertdialog",isOpen:t,defaultOpen:o,onOpenChange:n,children:[jsxRuntime.jsx(T,{children:e}),jsxRuntime.jsxs(M,{size:f,isDismissable:false,isKeyboardDismissDisabled:true,showClose:false,animation:"fade-zoom",animationDuration:250,className:J({variant:h})+(v?` ${v}`:""),children:[jsxRuntime.jsxs(w,{children:[jsxRuntime.jsx(B,{as:"h2",children:r}),i&&jsxRuntime.jsx(z,{children:i})]}),d,jsxRuntime.jsxs(G,{children:[jsxRuntime.jsx(S,{children:jsxRuntime.jsxs(k,{variant:"secondary",children:[x&&jsxRuntime.jsx("span",{className:"mr-2","aria-hidden":"true",children:x}),g]})}),jsxRuntime.jsx(S,{children:jsxRuntime.jsxs(k,{variant:E,onPress:_,children:[u&&jsxRuntime.jsx("span",{className:"mr-2","aria-hidden":"true",children:u}),a]})})]})]})]})}Ht.displayName="AlertDialog";var Ut=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var kt=zod.z.enum(["default","destructive"]),Ft=zod.z.enum(["sm","md","lg"]),ve=Ut.extend({trigger:zod.z.custom(),isOpen:zod.z.boolean().optional(),defaultOpen:zod.z.boolean().optional().default(false),onOpenChange:zod.z.custom().optional(),title:zod.z.string(),description:zod.z.string().optional(),children:zod.z.custom().optional(),variant:kt.optional().default("default"),size:Ft.optional().default("md"),cancelLabel:zod.z.string().optional().default("Cancel"),cancelIcon:zod.z.custom().optional(),actionLabel:zod.z.string(),actionIcon:zod.z.custom().optional(),actionVariant:zod.z.enum(["default","destructive"]).optional().default("destructive"),onAction:zod.z.custom().optional()});exports.AlertDialog=Ht;exports.AlertDialogPropsSchema=ve;exports.AlertDialogSizeSchema=Ft;exports.AlertDialogVariantSchema=kt;exports.alertDialogContentVariants=J;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map