@tribepad/themis 1.5.3 → 1.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {createContext,memo,forwardRef,useId,useState,useCallback,useMemo,useContext,useEffect}from'react';import {Button,Label,Input,Text,FieldError,TextField}from'react-aria-components';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {Loader2,Zap,CircleAlert,Search,X}from'lucide-react';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function c(...t){return twMerge(clsx(t))}var se="data-[pressed]:scale-[0.97]";var ie="data-[hovered]:shadow-md";var Y="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",q="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground",de="disabled:pointer-events-none disabled:opacity-50";var Z={sm:"h-9",default:"h-10",lg:"h-11"},D={sm:`${Z.sm} px-2 text-xs`,default:`${Z.default} px-3 text-sm`,lg:`${Z.lg} px-4 text-base`},ce="min-h-[44px] flex items-center";var ue=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}}),pe=cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium 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)] shadow-md 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)] shadow-md 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-8",icon:"h-10 w-10",dot:"h-5 w-5 rounded-full p-0 min-h-0 min-w-0"},paywall:{true:"!bg-[var(--paywall)] !text-[var(--paywall-foreground)] !shadow-md hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var Le=createContext(null);Le.displayName="ButtonGroupContext";function Ve(){return useContext(Le)}var De=createContext(null);De.displayName="ButtonGroupItemContext";function Be(){return useContext(De)}cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var Me=cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var M=memo(forwardRef(({className:t,buttonVisualClassName:o,variant:n,size:a,visualSize:s,fullWidth:p,loading:d=false,loadingText:u="Loading...",shortcut:b,children:x,isDisabled:f,paywall:i=false,paywallRedirect:I,paywallDescription:ee,onPress:te,...G},oe)=>{let y=useId(),N=Ve(),z=Be(),A=n??N?.variant??"default",S=a??N?.size,U=f??N?.isDisabled??false,C=N?.orientation==="vertical",h=p||C,$=z?Me({orientation:N?.orientation??"horizontal",position:z.position}):"",_=s??S??"default";return process.env.NODE_ENV!=="production"&&(_==="dot"||_==="icon")&&!G["aria-label"]&&!x&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsx(Button,{ref:oe,isDisabled:U||d||void 0,"aria-disabled":i?true:void 0,"aria-describedby":i?y:void 0,onPress:E=>{if(i){I&&window.open(I,"_blank","noopener,noreferrer");return}te?.(E);},className:c(ue({fullWidth:h,inVerticalGroup:C}),t),...G,children:E=>jsxs("span",{className:c(pe({variant:A,visualSize:_,paywall:i,fullWidth:h}),$,o,se,ie,Y,q),"data-pressed":E.isPressed||void 0,children:[d&&jsxs(Fragment,{children:[jsx(Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsx("span",{className:"sr-only","aria-live":"polite",children:u})]}),!d&&x,i&&jsx(Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),i&&jsxs("span",{id:y,className:"sr-only",children:["Premium feature: ",ee||"Upgrade required to access this feature"]}),E.isFocusVisible&&b&&jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:b})]})})}));M.displayName="Button";var He=()=>jsxs("svg",{"data-testid":"password-toggle-icon-show",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M1 8s3-5 7-5 7 5 7 5-3 5-7 5-7-5-7-5z"}),jsx("circle",{cx:"8",cy:"8",r:"2"})]}),ke=()=>jsxs("svg",{"data-testid":"password-toggle-icon-hide",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M10.5 5.5l-5 5"}),jsx("path",{d:"M1 8s3-5 7-5c1.5 0 2.8.6 4 1.5M15 8s-1.5 2.5-4 4"}),jsx("path",{d:"M3 13l2-2m7-7l2-2"}),jsx("circle",{cx:"8",cy:"8",r:"2"})]});var xe=cva("flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[var(--content-foreground)] placeholder:text-[var(--menu-muted)] transition-all duration-200",{variants:{size:{sm:`${D.sm} py-1`,default:`${D.default} py-2`,lg:`${D.lg} py-3`},state:{default:"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",error:"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2",success:"border-[var(--success-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--success-ring)] focus-visible:ring-offset-2",disabled:"cursor-not-allowed opacity-50",readonly:"cursor-default bg-[var(--content-background)] opacity-70"}},defaultVariants:{size:"default",state:"default"}}),ge=cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{state:{default:"text-[var(--content-foreground)]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{state:"default"}}),be=cva("text-sm text-[var(--content-foreground)]"),ze=cva("text-sm text-[var(--destructive-background)] font-medium"),ve=cva("text-sm text-[var(--success-foreground)] font-medium");function $e({expandOnFocus:t,collapsedWidth:o,value:n,defaultValue:a,userOnFocus:s,userOnBlur:p}){let[d,u]=useState(false),b=useCallback(i=>{t&&u(true),s?.(i);},[t,s]),x=useCallback(i=>{t&&i.target.value===""&&u(false),p?.(i);},[t,p]),f=useMemo(()=>t?d||(n!==void 0?n!=="":a!==void 0&&a!=="")?"100%":o:void 0,[t,d,n,a,o]);return {handleFocus:b,handleBlur:x,inputWidth:f}}function We({disableCopyPaste:t}){let[o,n]=useState(false),[a,s]=useState("");useEffect(()=>{t&&typeof process<"u"&&process.env.NODE_ENV==="development"&&console.warn("[TextField] Copy/paste prevention should only be used for security-critical fields like password confirmation. This feature can break assistive technology workflows and password managers.");},[t]);let p=useCallback(d=>{t&&(d.preventDefault(),n(true),s("Pasting is not allowed in this field. Please type your entry."),setTimeout(()=>{n(false),s("");},250));},[t]);return {isShaking:o,screenReaderMessage:a,handlePaste:p}}function Ye({type:t,showPasswordToggle:o}){let[n,a]=useState(false),s=useCallback(()=>{a(d=>!d);},[]),p=useMemo(()=>t==="password"&&o&&n?"text":t,[t,o,n]);return {showPassword:n,actualType:p,handlePasswordToggle:s}}var Ot=forwardRef(({className:t,state:o="default",children:n,...a},s)=>jsx(Label,{ref:s,className:c(ge({state:o}),t),...a,children:n}));Ot.displayName="TextFieldLabel";var Ct=forwardRef(({className:t,size:o="default",state:n="default",...a},s)=>jsx(Input,{ref:s,className:c(xe({size:o,state:n}),de,t),...a}));Ct.displayName="TextFieldInput";var Rt=forwardRef(({className:t,children:o,...n},a)=>jsx(Text,{ref:a,slot:"description",className:c(be(),t),...n,children:o}));Rt.displayName="TextFieldDescription";var Xe=forwardRef(({className:t,children:o,...n},a)=>jsx(FieldError,{ref:a,...n,className:c(ze(),t),children:jsxs("span",{className:"flex items-center gap-2",role:"alert",children:[jsx(CircleAlert,{className:"h-4 w-4"}),o]})}));Xe.displayName="TextFieldError";var Lt=forwardRef(({className:t,children:o,...n},a)=>jsx(Text,{ref:a,slot:"description",className:c(ve(),t),...n,children:o}));Lt.displayName="TextFieldSuccess";var Te=forwardRef(({className:t,size:o="default",label:n,labelHint:a,description:s,errorMessage:p,successMessage:d,type:u="text",isRequired:b=false,isReadOnly:x=false,isDisabled:f=false,isInvalid:i=false,isValid:I=false,id:ee,autoComplete:te,disableCopyPaste:G=false,pattern:oe,patternDescription:y,expandOnFocus:N=false,collapsedWidth:z="200px",prefix:A,suffix:S,prefixSize:U=16,suffixSize:C=16,showPasswordToggle:h,isIconHidden:$=false,onSubmit:_,onClear:ne,value:R,defaultValue:E,onFocus:Qe,onBlur:Je,...L},et)=>{let Ee=useId(),tt=useId(),ot=ee||tt,{handleFocus:nt,handleBlur:at,inputWidth:rt}=$e({expandOnFocus:N,collapsedWidth:z,value:R,defaultValue:E,userOnFocus:Qe,userOnBlur:Je}),{isShaking:st,screenReaderMessage:Ie,handlePaste:it}=We({disableCopyPaste:G}),{showPassword:ae,actualType:lt,handlePasswordToggle:ye}=Ye({type:u,showPasswordToggle:h}),g=u==="search",[dt,Ne]=useState(E??""),V=R!==void 0,T=V?R:dt,ct=useCallback(l=>{V||Ne(l),L.onChange?.(l);},[V,L]),W=useCallback(()=>{V||Ne(""),L.onChange?.(""),ne?.();},[V,L,ne]),ut=useCallback(l=>{l.key==="Enter"&&_&&_(T),l.key==="Escape"&&T&&(l.preventDefault(),W());},[T,_,W]),pt=useMemo(()=>f?"disabled":x?"readonly":i?"error":I?"success":"default",[f,x,i,I]),ft=useMemo(()=>f?"disabled":"default",[f]),_e=useMemo(()=>s&&y?`${s} ${y}`:s||y,[s,y]),P=useMemo(()=>g&&!$&&!A?jsx(Search,{className:o==="sm"?"h-3.5 w-3.5":o==="lg"?"h-5 w-5":"h-4 w-4"}):A,[g,$,A,o]),Ae=useMemo(()=>{let l={left:12,right:12};if(P){let re=typeof P=="string"?P.length*8+16:U+16;l.left=re;}if(u==="password"&&h)l.right=32;else if(g&&T)l.right=44;else if(S){let re=typeof S=="string"?S.length*8+16:C+16;l.right=re;}return l},[P,A,S,U,C,u,h,g,T]),Pe=useMemo(()=>u==="password"&&h?jsx(M,{variant:"ghost",visualSize:"icon",onPress:ye,"aria-label":ae?"Hide password":"Show password",className:"!min-h-0 !min-w-0 h-8 w-8",children:ae?jsx(ke,{}):jsx(He,{})}):g&&T?jsx(M,{variant:"ghost",visualSize:"icon",onPress:W,"aria-label":"Clear search",className:"!min-h-0 !min-w-0 h-8 w-8",children:jsx(X,{className:o==="sm"?"h-3 w-3":o==="lg"?"h-5 w-5":"h-4 w-4"})}):S,[u,h,ae,S,ye,g,T,o,W]),we=u==="password"&&h||g&&!!T;return jsxs(TextField,{ref:et,className:c("flex flex-col gap-1.5",t),isRequired:b,isReadOnly:x,isDisabled:f,isInvalid:i,value:g?T:R,defaultValue:g?void 0:E,onChange:g?ct:void 0,...L,children:[n&&jsxs(Label,{className:c(ge({state:ft}),a&&"flex items-baseline justify-between"),children:[jsxs("span",{children:[n,b&&jsx("span",{className:"ml-1 text-[var(--destructive-background)]","aria-hidden":"true",children:jsx("strong",{children:"*"})})]}),a&&jsx("span",{className:"text-xs font-normal text-[var(--muted-foreground)]",children:a})]}),_e&&jsx(Text,{slot:"description",className:c(be()),children:_e}),jsxs("div",{className:c(ce,"relative cursor-text motion-safe:transition-colors motion-safe:duration-200"),style:{width:rt},onClick:l=>{l.target===l.currentTarget&&l.currentTarget.querySelector("input")?.focus();},children:[P&&jsx("div",{"data-testid":"textfield-prefix",className:"absolute left-3 flex items-center justify-center pointer-events-none text-[var(--content-foreground)]","aria-hidden":"true",children:P}),jsx(Input,{type:lt,id:ot,className:c(xe({size:o,state:pt}),de,st&&"shake"),style:{width:"100%",paddingLeft:`${Ae.left}px`,paddingRight:`${Ae.right}px`},autoComplete:te,pattern:oe,onPaste:it,onFocus:nt,onBlur:at,onKeyDown:g?ut:void 0,"aria-required":b?"true":void 0,"aria-readonly":x?"true":void 0,"aria-errormessage":i&&p?Ee:void 0}),Pe&&jsx("div",{"data-testid":"textfield-suffix",className:c("absolute right-3 flex items-center justify-center text-[var(--content-foreground)]",we?"":"pointer-events-none"),"aria-hidden":we?void 0:"true",children:Pe})]}),I&&d&&!i&&jsx(Text,{slot:"description",className:c(ve()),children:d}),i&&p&&jsx(Xe,{id:Ee,children:p}),Ie&&jsx("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:Ie})]})});Te.displayName="TextField";var Ke=forwardRef(({label:t,description:o,errorMessage:n,successMessage:a,hasToggle:s=true,autoComplete:p="current-password","aria-label":d,"aria-labelledby":u,...b},x)=>{process.env.NODE_ENV!=="production"&&!t&&!d&&!u&&console.warn("[PasswordField] Either label, aria-label, or aria-labelledby is required for accessibility (WCAG 1.1.1)");let f=!!n;return jsx(Te,{ref:x,type:"password",showPasswordToggle:s,autoComplete:p,label:t,description:f?void 0:o,errorMessage:n,successMessage:f?void 0:a,isInvalid:f,isValid:!!a&&!f,"aria-label":t?void 0:d,"aria-labelledby":u,...b})});Ke.displayName="PasswordField";var Q=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var Se=z.enum(["off","on","name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","email","username","new-password","current-password","one-time-code","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-extension","impp","url","photo"]),Bt=[/\(\.\*\)\+/,/\(\.\+\)\+/,/\([^)]*\)\{.*,.*\}/,/\(\?!\)/,/\(\?<=\)/],Mt=t=>{for(let n of Bt)if(n.test(t))return false;return !((t.match(/[*+{}]/g)||[]).length>5)};Q.extend({size:z.enum(["sm","default","lg"]).optional().default("default"),label:z.string().optional(),labelHint:z.string().optional(),description:z.string().optional(),errorMessage:z.string().optional(),successMessage:z.string().optional(),type:z.enum(["text","email","password","url","search"]).optional().default("text"),isRequired:z.boolean().optional(),isReadOnly:z.boolean().optional(),isDisabled:z.boolean().optional(),isInvalid:z.boolean().optional(),isValid:z.boolean().optional(),placeholder:z.string().optional(),value:z.string().optional(),defaultValue:z.string().optional(),name:z.string().optional(),autoFocus:z.boolean().optional(),autoComplete:Se.optional(),maxLength:z.number().optional(),minLength:z.number().optional(),pattern:z.string().optional(),patternDescription:z.string().optional(),disableCopyPaste:z.boolean().optional().default(false),prefix:z.any().optional(),suffix:z.any().optional(),prefixSize:z.number().optional().default(16),suffixSize:z.number().optional().default(16),expandOnFocus:z.boolean().optional().default(false),collapsedWidth:z.string().optional().default("200px"),showPasswordToggle:z.boolean().optional(),isIconHidden:z.boolean().optional().default(false),onSubmit:z.custom().optional(),onClear:z.custom().optional()}).refine(t=>!t.pattern||t.patternDescription,{message:"patternDescription is required when pattern is provided",path:["patternDescription"]}).refine(t=>!t.pattern||Mt(t.pattern),{message:"Unsafe regex pattern detected. Pattern may cause ReDoS vulnerability. Avoid patterns like (.*)+, (.+)+, or excessive quantifiers.",path:["pattern"]}).refine(t=>!(t.successMessage&&t.errorMessage),{message:"Cannot provide both successMessage and errorMessage. Use one based on validation state.",path:["successMessage"]}).refine(t=>(typeof process<"u"&&process.env.NODE_ENV==="development"&&t.isValid&&t.isInvalid&&console.error("[TextField] Both isValid and isInvalid are true. isInvalid takes precedence."),true));z.object({children:z.any().optional(),className:z.string().optional(),htmlFor:z.string().optional(),state:z.enum(["default","disabled"]).optional().default("default")});z.object({className:z.string().optional(),size:z.enum(["sm","default","lg"]).optional().default("default"),state:z.enum(["default","error","success","disabled","readonly"]).optional().default("default")});z.object({children:z.any().optional(),className:z.string().optional()});z.object({children:z.any().optional(),className:z.string().optional()});z.object({children:z.any().optional(),className:z.string().optional()});var Ht=Q.extend({size:z.enum(["sm","default","lg"]).optional().default("default"),label:z.string().optional(),description:z.string().optional(),errorMessage:z.string().optional(),successMessage:z.string().optional(),isRequired:z.boolean().optional(),isReadOnly:z.boolean().optional(),isDisabled:z.boolean().optional(),placeholder:z.string().optional(),value:z.string().optional(),defaultValue:z.string().optional(),name:z.string().optional(),autoComplete:Se.optional(),hasToggle:z.boolean().optional().default(true),onChange:z.custom().optional()});var kt=cva("group flex flex-col gap-1.5 w-full",{variants:{size:{sm:"",default:"",lg:""}},defaultVariants:{size:"default"}}),Gt=cva("text-[var(--text-primary)] font-medium",{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),zt=cva("text-[var(--muted-foreground)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}}),Ut=cva("text-[var(--destructive-background)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}});export{Ke as PasswordField,Ht as PasswordFieldPropsSchema,zt as passwordFieldDescriptionVariants,Ut as passwordFieldErrorVariants,Gt as passwordFieldLabelVariants,kt as passwordFieldVariants};//# sourceMappingURL=index.mjs.map
2
+ import {createContext,memo,forwardRef,useId,useState,useCallback,useMemo,useContext,useEffect}from'react';import {Button,Label,Input,Text,FieldError,TextField}from'react-aria-components';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {Loader2,Zap,Search,X}from'lucide-react';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function c(...t){return twMerge(clsx(t))}var se="data-[pressed]:scale-[0.97]";var ie="data-[hovered]:shadow-md";var W="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",Y="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground",de="disabled:pointer-events-none disabled:opacity-50";var q={sm:"h-9",default:"h-10",lg:"h-11"},D={sm:`${q.sm} px-2 text-xs`,default:`${q.default} px-3 text-sm`,lg:`${q.lg} px-4 text-base`},ce="min-h-[44px] flex items-center";var ue=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}}),pe=cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium 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)] shadow-md 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)] shadow-md 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-8",icon:"h-10 w-10",dot:"h-5 w-5 rounded-full p-0 min-h-0 min-w-0"},paywall:{true:"!bg-[var(--paywall)] !text-[var(--paywall-foreground)] !shadow-md hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var Le=createContext(null);Le.displayName="ButtonGroupContext";function Ve(){return useContext(Le)}var De=createContext(null);De.displayName="ButtonGroupItemContext";function Be(){return useContext(De)}cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var Me=cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var M=memo(forwardRef(({className:t,buttonVisualClassName:o,variant:n,size:a,visualSize:s,fullWidth:p,loading:d=false,loadingText:u="Loading...",shortcut:b,children:x,isDisabled:f,paywall:i=false,paywallRedirect:I,paywallDescription:ee,onPress:te,...k},oe)=>{let y=useId(),N=Ve(),G=Be(),P=n??N?.variant??"default",S=a??N?.size,z=f??N?.isDisabled??false,C=N?.orientation==="vertical",h=p||C,U=G?Me({orientation:N?.orientation??"horizontal",position:G.position}):"",_=s??S??"default";return process.env.NODE_ENV!=="production"&&(_==="dot"||_==="icon")&&!k["aria-label"]&&!x&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsx(Button,{ref:oe,isDisabled:z||d||void 0,"aria-disabled":i?true:void 0,"aria-describedby":i?y:void 0,onPress:E=>{if(i){I&&window.open(I,"_blank","noopener,noreferrer");return}te?.(E);},className:c(ue({fullWidth:h,inVerticalGroup:C}),t),...k,children:E=>jsxs("span",{className:c(pe({variant:P,visualSize:_,paywall:i,fullWidth:h}),U,o,se,ie,W,Y),"data-pressed":E.isPressed||void 0,children:[d&&jsxs(Fragment,{children:[jsx(Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsx("span",{className:"sr-only","aria-live":"polite",children:u})]}),!d&&x,i&&jsx(Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),i&&jsxs("span",{id:y,className:"sr-only",children:["Premium feature: ",ee||"Upgrade required to access this feature"]}),E.isFocusVisible&&b&&jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:b})]})})}));M.displayName="Button";var He=()=>jsxs("svg",{"data-testid":"password-toggle-icon-show",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M1 8s3-5 7-5 7 5 7 5-3 5-7 5-7-5-7-5z"}),jsx("circle",{cx:"8",cy:"8",r:"2"})]}),ke=()=>jsxs("svg",{"data-testid":"password-toggle-icon-hide",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsx("path",{d:"M10.5 5.5l-5 5"}),jsx("path",{d:"M1 8s3-5 7-5c1.5 0 2.8.6 4 1.5M15 8s-1.5 2.5-4 4"}),jsx("path",{d:"M3 13l2-2m7-7l2-2"}),jsx("circle",{cx:"8",cy:"8",r:"2"})]});var xe=cva("flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[var(--content-foreground)] placeholder:text-[var(--menu-muted)] transition-all duration-200",{variants:{size:{sm:`${D.sm} py-1`,default:`${D.default} py-2`,lg:`${D.lg} py-3`},state:{default:"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",error:"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2",success:"border-[var(--success-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--success-ring)] focus-visible:ring-offset-2",disabled:"cursor-not-allowed opacity-50",readonly:"cursor-default bg-[var(--content-background)] opacity-70"}},defaultVariants:{size:"default",state:"default"}}),ge=cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{state:{default:"text-[var(--content-foreground)]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{state:"default"}}),be=cva("text-sm text-[var(--content-foreground)]"),ze=cva("text-sm text-[var(--destructive-background)] font-medium"),ve=cva("text-sm text-[var(--success-foreground)] font-medium");function $e({expandOnFocus:t,collapsedWidth:o,value:n,defaultValue:a,userOnFocus:s,userOnBlur:p}){let[d,u]=useState(false),b=useCallback(i=>{t&&u(true),s?.(i);},[t,s]),x=useCallback(i=>{t&&i.target.value===""&&u(false),p?.(i);},[t,p]),f=useMemo(()=>t?d||(n!==void 0?n!=="":a!==void 0&&a!=="")?"100%":o:void 0,[t,d,n,a,o]);return {handleFocus:b,handleBlur:x,inputWidth:f}}function We({disableCopyPaste:t}){let[o,n]=useState(false),[a,s]=useState("");useEffect(()=>{t&&typeof process<"u"&&process.env.NODE_ENV==="development"&&console.warn("[TextField] Copy/paste prevention should only be used for security-critical fields like password confirmation. This feature can break assistive technology workflows and password managers.");},[t]);let p=useCallback(d=>{t&&(d.preventDefault(),n(true),s("Pasting is not allowed in this field. Please type your entry."),setTimeout(()=>{n(false),s("");},250));},[t]);return {isShaking:o,screenReaderMessage:a,handlePaste:p}}function Ye({type:t,showPasswordToggle:o}){let[n,a]=useState(false),s=useCallback(()=>{a(d=>!d);},[]),p=useMemo(()=>t==="password"&&o&&n?"text":t,[t,o,n]);return {showPassword:n,actualType:p,handlePasswordToggle:s}}var wt=forwardRef(({className:t,state:o="default",children:n,...a},s)=>jsx(Label,{ref:s,className:c(ge({state:o}),t),...a,children:n}));wt.displayName="TextFieldLabel";var Ot=forwardRef(({className:t,size:o="default",state:n="default",...a},s)=>jsx(Input,{ref:s,className:c(xe({size:o,state:n}),de,t),...a}));Ot.displayName="TextFieldInput";var Ct=forwardRef(({className:t,children:o,...n},a)=>jsx(Text,{ref:a,slot:"description",className:c(be(),t),...n,children:o}));Ct.displayName="TextFieldDescription";var Xe=forwardRef(({className:t,children:o,...n},a)=>jsx(FieldError,{ref:a,...n,className:c(ze(),t),children:o}));Xe.displayName="TextFieldError";var Rt=forwardRef(({className:t,children:o,...n},a)=>jsx(Text,{ref:a,slot:"description",className:c(ve(),t),...n,children:o}));Rt.displayName="TextFieldSuccess";var Te=forwardRef(({className:t,size:o="default",label:n,labelHint:a,description:s,errorMessage:p,successMessage:d,type:u="text",isRequired:b=false,isReadOnly:x=false,isDisabled:f=false,isInvalid:i=false,isValid:I=false,id:ee,autoComplete:te,disableCopyPaste:k=false,pattern:oe,patternDescription:y,expandOnFocus:N=false,collapsedWidth:G="200px",prefix:P,suffix:S,prefixSize:z=16,suffixSize:C=16,showPasswordToggle:h,isIconHidden:U=false,onSubmit:_,onClear:ne,value:R,defaultValue:E,onFocus:Qe,onBlur:Je,...L},et)=>{let Ee=useId(),tt=useId(),ot=ee||tt,{handleFocus:nt,handleBlur:at,inputWidth:rt}=$e({expandOnFocus:N,collapsedWidth:G,value:R,defaultValue:E,userOnFocus:Qe,userOnBlur:Je}),{isShaking:st,screenReaderMessage:Ie,handlePaste:it}=We({disableCopyPaste:k}),{showPassword:ae,actualType:lt,handlePasswordToggle:ye}=Ye({type:u,showPasswordToggle:h}),g=u==="search",[dt,Ne]=useState(E??""),V=R!==void 0,T=V?R:dt,ct=useCallback(l=>{V||Ne(l),L.onChange?.(l);},[V,L]),$=useCallback(()=>{V||Ne(""),L.onChange?.(""),ne?.();},[V,L,ne]),ut=useCallback(l=>{l.key==="Enter"&&_&&_(T),l.key==="Escape"&&T&&(l.preventDefault(),$());},[T,_,$]),pt=useMemo(()=>f?"disabled":x?"readonly":i?"error":I?"success":"default",[f,x,i,I]),ft=useMemo(()=>f?"disabled":"default",[f]),_e=useMemo(()=>s&&y?`${s} ${y}`:s||y,[s,y]),A=useMemo(()=>g&&!U&&!P?jsx(Search,{className:o==="sm"?"h-3.5 w-3.5":o==="lg"?"h-5 w-5":"h-4 w-4"}):P,[g,U,P,o]),Pe=useMemo(()=>{let l={left:12,right:12};if(A){let re=typeof A=="string"?A.length*8+16:z+16;l.left=re;}if(u==="password"&&h)l.right=32;else if(g&&T)l.right=44;else if(S){let re=typeof S=="string"?S.length*8+16:C+16;l.right=re;}return l},[A,P,S,z,C,u,h,g,T]),Ae=useMemo(()=>u==="password"&&h?jsx(M,{variant:"ghost",visualSize:"icon",onPress:ye,"aria-label":ae?"Hide password":"Show password",className:"!min-h-0 !min-w-0 h-8 w-8",children:ae?jsx(ke,{}):jsx(He,{})}):g&&T?jsx(M,{variant:"ghost",visualSize:"icon",onPress:$,"aria-label":"Clear search",className:"!min-h-0 !min-w-0 h-8 w-8",children:jsx(X,{className:o==="sm"?"h-3 w-3":o==="lg"?"h-5 w-5":"h-4 w-4"})}):S,[u,h,ae,S,ye,g,T,o,$]),Fe=u==="password"&&h||g&&!!T;return jsxs(TextField,{ref:et,className:c("flex flex-col gap-1.5",t),isRequired:b,isReadOnly:x,isDisabled:f,isInvalid:i,value:g?T:R,defaultValue:g?void 0:E,onChange:g?ct:void 0,...L,children:[n&&jsxs(Label,{className:c(ge({state:ft}),a&&"flex items-baseline justify-between"),children:[jsxs("span",{children:[n,b&&jsx("span",{className:"ml-1 text-[var(--destructive-background)]","aria-hidden":"true",children:jsx("strong",{children:"*"})})]}),a&&jsx("span",{className:"text-xs font-normal text-[var(--muted-foreground)]",children:a})]}),_e&&jsx(Text,{slot:"description",className:c(be()),children:_e}),jsxs("div",{className:c(ce,"relative cursor-text motion-safe:transition-colors motion-safe:duration-200"),style:{width:rt},onClick:l=>{l.target===l.currentTarget&&l.currentTarget.querySelector("input")?.focus();},children:[A&&jsx("div",{"data-testid":"textfield-prefix",className:"absolute left-3 flex items-center justify-center pointer-events-none text-[var(--content-foreground)]","aria-hidden":"true",children:A}),jsx(Input,{type:lt,id:ot,className:c(xe({size:o,state:pt}),de,st&&"shake"),style:{width:"100%",paddingLeft:`${Pe.left}px`,paddingRight:`${Pe.right}px`},autoComplete:te,pattern:oe,onPaste:it,onFocus:nt,onBlur:at,onKeyDown:g?ut:void 0,"aria-required":b?"true":void 0,"aria-readonly":x?"true":void 0,"aria-errormessage":i&&p?Ee:void 0}),Ae&&jsx("div",{"data-testid":"textfield-suffix",className:c("absolute right-3 flex items-center justify-center text-[var(--content-foreground)]",Fe?"":"pointer-events-none"),"aria-hidden":Fe?void 0:"true",children:Ae})]}),I&&d&&!i&&jsx(Text,{slot:"description",className:c(ve()),children:d}),i&&p&&jsx(Xe,{id:Ee,children:p}),Ie&&jsx("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:Ie})]})});Te.displayName="TextField";var Ke=forwardRef(({label:t,description:o,errorMessage:n,successMessage:a,hasToggle:s=true,autoComplete:p="current-password","aria-label":d,"aria-labelledby":u,...b},x)=>{process.env.NODE_ENV!=="production"&&!t&&!d&&!u&&console.warn("[PasswordField] Either label, aria-label, or aria-labelledby is required for accessibility (WCAG 1.1.1)");let f=!!n;return jsx(Te,{ref:x,type:"password",showPasswordToggle:s,autoComplete:p,label:t,description:f?void 0:o,errorMessage:n,successMessage:f?void 0:a,isInvalid:f,isValid:!!a&&!f,"aria-label":t?void 0:d,"aria-labelledby":u,...b})});Ke.displayName="PasswordField";var Q=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var Se=z.enum(["off","on","name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","email","username","new-password","current-password","one-time-code","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-extension","impp","url","photo"]),Dt=[/\(\.\*\)\+/,/\(\.\+\)\+/,/\([^)]*\)\{.*,.*\}/,/\(\?!\)/,/\(\?<=\)/],Bt=t=>{for(let n of Dt)if(n.test(t))return false;return !((t.match(/[*+{}]/g)||[]).length>5)};Q.extend({size:z.enum(["sm","default","lg"]).optional().default("default"),label:z.string().optional(),labelHint:z.string().optional(),description:z.string().optional(),errorMessage:z.string().optional(),successMessage:z.string().optional(),type:z.enum(["text","email","password","url","search"]).optional().default("text"),isRequired:z.boolean().optional(),isReadOnly:z.boolean().optional(),isDisabled:z.boolean().optional(),isInvalid:z.boolean().optional(),isValid:z.boolean().optional(),placeholder:z.string().optional(),value:z.string().optional(),defaultValue:z.string().optional(),name:z.string().optional(),autoFocus:z.boolean().optional(),autoComplete:Se.optional(),maxLength:z.number().optional(),minLength:z.number().optional(),pattern:z.string().optional(),patternDescription:z.string().optional(),disableCopyPaste:z.boolean().optional().default(false),prefix:z.any().optional(),suffix:z.any().optional(),prefixSize:z.number().optional().default(16),suffixSize:z.number().optional().default(16),expandOnFocus:z.boolean().optional().default(false),collapsedWidth:z.string().optional().default("200px"),showPasswordToggle:z.boolean().optional(),isIconHidden:z.boolean().optional().default(false),onSubmit:z.custom().optional(),onClear:z.custom().optional()}).refine(t=>!t.pattern||t.patternDescription,{message:"patternDescription is required when pattern is provided",path:["patternDescription"]}).refine(t=>!t.pattern||Bt(t.pattern),{message:"Unsafe regex pattern detected. Pattern may cause ReDoS vulnerability. Avoid patterns like (.*)+, (.+)+, or excessive quantifiers.",path:["pattern"]}).refine(t=>!(t.successMessage&&t.errorMessage),{message:"Cannot provide both successMessage and errorMessage. Use one based on validation state.",path:["successMessage"]}).refine(t=>(typeof process<"u"&&process.env.NODE_ENV==="development"&&t.isValid&&t.isInvalid&&console.error("[TextField] Both isValid and isInvalid are true. isInvalid takes precedence."),true));z.object({children:z.any().optional(),className:z.string().optional(),htmlFor:z.string().optional(),state:z.enum(["default","disabled"]).optional().default("default")});z.object({className:z.string().optional(),size:z.enum(["sm","default","lg"]).optional().default("default"),state:z.enum(["default","error","success","disabled","readonly"]).optional().default("default")});z.object({children:z.any().optional(),className:z.string().optional()});z.object({children:z.any().optional(),className:z.string().optional()});z.object({children:z.any().optional(),className:z.string().optional()});var Mt=Q.extend({size:z.enum(["sm","default","lg"]).optional().default("default"),label:z.string().optional(),description:z.string().optional(),errorMessage:z.string().optional(),successMessage:z.string().optional(),isRequired:z.boolean().optional(),isReadOnly:z.boolean().optional(),isDisabled:z.boolean().optional(),placeholder:z.string().optional(),value:z.string().optional(),defaultValue:z.string().optional(),name:z.string().optional(),autoComplete:Se.optional(),hasToggle:z.boolean().optional().default(true),onChange:z.custom().optional()});var Ht=cva("group flex flex-col gap-1.5 w-full",{variants:{size:{sm:"",default:"",lg:""}},defaultVariants:{size:"default"}}),kt=cva("text-[var(--text-primary)] font-medium",{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Gt=cva("text-[var(--muted-foreground)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}}),zt=cva("text-[var(--destructive-background)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}});export{Ke as PasswordField,Mt as PasswordFieldPropsSchema,Gt as passwordFieldDescriptionVariants,zt as passwordFieldErrorVariants,kt as passwordFieldLabelVariants,Ht as passwordFieldVariants};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.map