@tribepad/themis 1.5.2 → 1.5.3
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 +6 -0
- package/dist/elements/NumberField/NumberField.variants.d.ts.map +1 -1
- package/dist/elements/NumberField/index.js +1 -1
- package/dist/elements/NumberField/index.js.map +1 -1
- package/dist/elements/NumberField/index.mjs +1 -1
- package/dist/elements/NumberField/index.mjs.map +1 -1
- package/dist/elements/PasswordField/index.js +1 -1
- package/dist/elements/PasswordField/index.js.map +1 -1
- package/dist/elements/PasswordField/index.mjs +1 -1
- package/dist/elements/PasswordField/index.mjs.map +1 -1
- package/dist/elements/Resizable/index.js +1 -1
- package/dist/elements/Resizable/index.js.map +1 -1
- package/dist/elements/Resizable/index.mjs +1 -1
- package/dist/elements/Resizable/index.mjs.map +1 -1
- package/dist/elements/SearchField/index.js +1 -1
- package/dist/elements/SearchField/index.js.map +1 -1
- package/dist/elements/SearchField/index.mjs +1 -1
- package/dist/elements/SearchField/index.mjs.map +1 -1
- package/dist/elements/TextField/TextField.styles.d.ts +1 -1
- package/dist/elements/TextField/TextField.styles.d.ts.map +1 -1
- package/dist/elements/TextField/TextField.types.d.ts +1 -2
- package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
- package/dist/elements/TextField/index.js +1 -1
- package/dist/elements/TextField/index.js.map +1 -1
- package/dist/elements/TextField/index.mjs +1 -1
- package/dist/elements/TextField/index.mjs.map +1 -1
- package/dist/elements/index.js +1 -1
- package/dist/elements/index.js.map +1 -1
- package/dist/elements/index.mjs +1 -1
- package/dist/elements/index.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -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 as X$1}from'lucide-react';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function d(...t){return twMerge(clsx(t))}var ie="data-[pressed]:scale-[0.97]";var se="data-[hovered]:shadow-md";var j="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",Z="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"},V={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 Oe=createContext(null);Oe.displayName="ButtonGroupContext";function Ce(){return useContext(Oe)}var Le=createContext(null);Le.displayName="ButtonGroupItemContext";function we(){return useContext(Le)}cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var Re=cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var B=memo(forwardRef(({className:t,buttonVisualClassName:o,variant:n,size:r,visualSize:s,fullWidth:u,loading:c=false,loadingText:p="Loading...",shortcut:v,children:x,isDisabled:g,paywall:i=false,paywallRedirect:E,paywallDescription:ee,onPress:te,...z},oe)=>{let I=useId(),N=Ce(),U=we(),_=n??N?.variant??"default",h=r??N?.size,$=g??N?.isDisabled??false,C=N?.orientation==="vertical",T=u||C,W=U?Re({orientation:N?.orientation??"horizontal",position:U.position}):"",y=s??h??"default";return process.env.NODE_ENV!=="production"&&(y==="dot"||y==="icon")&&!z["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:$||c||void 0,"aria-disabled":i?true:void 0,"aria-describedby":i?I:void 0,onPress:S=>{if(i){E&&window.open(E,"_blank","noopener,noreferrer");return}te?.(S);},className:d(ue({fullWidth:T,inVerticalGroup:C}),t),...z,children:S=>jsxs("span",{className:d(pe({variant:_,visualSize:y,paywall:i,fullWidth:T}),W,o,ie,se,j,Z),"data-pressed":S.isPressed||void 0,children:[c&&jsxs(Fragment,{children:[jsx(Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsx("span",{className:"sr-only","aria-live":"polite",children:p})]}),!c&&x,i&&jsx(Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),i&&jsxs("span",{id:I,className:"sr-only",children:["Premium feature: ",ee||"Upgrade required to access this feature"]}),S.isFocusVisible&&v&&jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:v})]})})}));B.displayName="Button";var Ve=()=>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"})]}),De=()=>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 H=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:`${V.sm} py-1`,default:`${V.default} py-2`,lg:`${V.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"}}),k=cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{state:{default:"text-[var(--content-foreground)]",error:"text-[var(--destructive-background)]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{state:"default"}}),xe=cva("text-sm text-[var(--content-foreground)]"),Me=cva("text-sm text-[var(--destructive-background)] font-medium"),X=cva("text-sm text-[var(--success-foreground)] font-medium");function ke({expandOnFocus:t,collapsedWidth:o,value:n,defaultValue:r,userOnFocus:s,userOnBlur:u}){let[c,p]=useState(false),v=useCallback(i=>{t&&p(true),s?.(i);},[t,s]),x=useCallback(i=>{t&&i.target.value===""&&p(false),u?.(i);},[t,u]),g=useMemo(()=>t?c||(n!==void 0?n!=="":r!==void 0&&r!=="")?"100%":o:void 0,[t,c,n,r,o]);return {handleFocus:v,handleBlur:x,inputWidth:g}}function Ge({disableCopyPaste:t}){let[o,n]=useState(false),[r,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 u=useCallback(c=>{t&&(c.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:r,handlePaste:u}}function ze({type:t,showPasswordToggle:o}){let[n,r]=useState(false),s=useCallback(()=>{r(c=>!c);},[]),u=useMemo(()=>t==="password"&&o&&n?"text":t,[t,o,n]);return {showPassword:n,actualType:u,handlePasswordToggle:s}}var Ye=forwardRef(({className:t,state:o="default",children:n,...r},s)=>jsx(Label,{ref:s,className:d(k({state:o}),t),...r,children:n}));Ye.displayName="TextFieldLabel";var je=forwardRef(({className:t,size:o="default",state:n="default",...r},s)=>jsx(Input,{ref:s,className:d(H({size:o,state:n}),de,t),...r}));je.displayName="TextFieldInput";var Ze=forwardRef(({className:t,children:o,...n},r)=>jsx(Text,{ref:r,slot:"description",className:d(xe(),t),...n,children:o}));Ze.displayName="TextFieldDescription";var Te=forwardRef(({className:t,children:o,...n},r)=>jsx(FieldError,{ref:r,...n,className:d(Me(),t),children:jsxs("span",{className:"flex items-center gap-2",role:"alert",children:[jsx(CircleAlert,{className:"h-4 w-4"}),o]})}));Te.displayName="TextFieldError";var qe=forwardRef(({className:t,children:o,...n},r)=>jsx(Text,{ref:r,slot:"description",className:d(X(),t),...n,children:o}));qe.displayName="TextFieldSuccess";var Xe=forwardRef(({className:t,size:o="default",label:n,labelHint:r,description:s,errorMessage:u,successMessage:c,type:p="text",isRequired:v=false,isReadOnly:x=false,isDisabled:g=false,isInvalid:i=false,isValid:E=false,id:ee,autoComplete:te,disableCopyPaste:z=false,pattern:oe,patternDescription:I,expandOnFocus:N=false,collapsedWidth:U="200px",prefix:_,suffix:h,prefixSize:$=16,suffixSize:C=16,showPasswordToggle:T,isIconHidden:W=false,onSubmit:y,onClear:ne,value:L,defaultValue:S,onFocus:et,onBlur:tt,...w},ot)=>{let be=useId(),nt=useId(),rt=ee||nt,{handleFocus:at,handleBlur:it,inputWidth:st}=ke({expandOnFocus:N,collapsedWidth:U,value:L,defaultValue:S,userOnFocus:et,userOnBlur:tt}),{isShaking:lt,screenReaderMessage:ve,handlePaste:dt}=Ge({disableCopyPaste:z}),{showPassword:re,actualType:ct,handlePasswordToggle:he}=ze({type:p,showPasswordToggle:T}),f=p==="search",[ut,Se]=useState(S??""),R=L!==void 0,b=R?L:ut,pt=useCallback(l=>{R||Se(l),w.onChange?.(l);},[R,w]),Y=useCallback(()=>{R||Se(""),w.onChange?.(""),ne?.();},[R,w,ne]),ft=useCallback(l=>{l.key==="Enter"&&y&&y(b),l.key==="Escape"&&b&&(l.preventDefault(),Y());},[b,y,Y]),mt=useMemo(()=>g?"disabled":x?"readonly":i?"error":E?"success":"default",[g,x,i,E]),xt=useMemo(()=>g?"disabled":i?"error":"default",[g,i]),Ee=useMemo(()=>s&&I?`${s} ${I}`:s||I,[s,I]),A=useMemo(()=>f&&!W&&!_?jsx(Search,{className:o==="sm"?"h-3.5 w-3.5":o==="lg"?"h-5 w-5":"h-4 w-4"}):_,[f,W,_,o]),Ie=useMemo(()=>{let l={left:12,right:12};if(A){let ae=typeof A=="string"?A.length*8+16:$+16;l.left=ae;}if(p==="password"&&T)l.right=32;else if(f&&b)l.right=44;else if(h){let ae=typeof h=="string"?h.length*8+16:C+16;l.right=ae;}return l},[A,_,h,$,C,p,T,f,b]),Ne=useMemo(()=>p==="password"&&T?jsx(B,{variant:"ghost",visualSize:"icon",onPress:he,"aria-label":re?"Hide password":"Show password",className:"!min-h-0 !min-w-0 h-8 w-8",children:re?jsx(De,{}):jsx(Ve,{})}):f&&b?jsx(B,{variant:"ghost",visualSize:"icon",onPress:Y,"aria-label":"Clear search",className:"!min-h-0 !min-w-0 h-8 w-8",children:jsx(X$1,{className:o==="sm"?"h-3 w-3":o==="lg"?"h-5 w-5":"h-4 w-4"})}):h,[p,T,re,h,he,f,b,o,Y]),ye=p==="password"&&T||f&&!!b;return jsxs(TextField,{ref:ot,className:d("flex flex-col gap-1.5",t),isRequired:v,isReadOnly:x,isDisabled:g,isInvalid:i,value:f?b:L,defaultValue:f?void 0:S,onChange:f?pt:void 0,...w,children:[n&&jsxs(Label,{className:d(k({state:xt}),r&&"flex items-baseline justify-between"),children:[jsxs("span",{children:[n,v&&jsx("span",{className:"ml-1 text-[var(--destructive-background)]","aria-hidden":"true",children:jsx("strong",{children:"*"})})]}),r&&jsx("span",{className:"text-xs font-normal text-[var(--muted-foreground)]",children:r})]}),Ee&&jsx(Text,{slot:"description",className:d(xe()),children:Ee}),jsxs("div",{className:d(ce,"relative cursor-text motion-safe:transition-colors motion-safe:duration-200"),style:{width:st},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:ct,id:rt,className:d(H({size:o,state:mt}),de,lt&&"shake"),style:{width:"100%",paddingLeft:`${Ie.left}px`,paddingRight:`${Ie.right}px`},autoComplete:te,pattern:oe,onPaste:dt,onFocus:at,onBlur:it,onKeyDown:f?ft:void 0,"aria-required":v?"true":void 0,"aria-readonly":x?"true":void 0,"aria-errormessage":i&&u?be:void 0}),Ne&&jsx("div",{"data-testid":"textfield-suffix",className:d("absolute right-3 flex items-center justify-center text-[var(--content-foreground)]",ye?"":"pointer-events-none"),"aria-hidden":ye?void 0:"true",children:Ne})]}),E&&c&&!i&&jsx(Text,{slot:"description",className:d(X()),children:c}),i&&u&&jsx(Te,{id:be,children:u}),ve&&jsx("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:ve})]})});Xe.displayName="TextField";var Ke=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 Qe=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"]),wt=[/\(\.\*\)\+/,/\(\.\+\)\+/,/\([^)]*\)\{.*,.*\}/,/\(\?!\)/,/\(\?<=\)/],Je=t=>{for(let n of wt)if(n.test(t))return false;return !((t.match(/[*+{}]/g)||[]).length>5)},Rt=Ke.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:Qe.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||Je(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)),Vt=z.object({children:z.any().optional(),className:z.string().optional(),htmlFor:z.string().optional(),state:z.enum(["default","error","disabled"]).optional().default("default")}),Dt=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")}),Bt=z.object({children:z.any().optional(),className:z.string().optional()}),Mt=z.object({children:z.any().optional(),className:z.string().optional()}),Ht=z.object({children:z.any().optional(),className:z.string().optional()});export{Qe as AutoCompleteValueSchema,Xe as TextField,Ze as TextFieldDescription,Bt as TextFieldDescriptionPropsSchema,Te as TextFieldError,Mt as TextFieldErrorPropsSchema,je as TextFieldInput,Dt as TextFieldInputPropsSchema,Ye as TextFieldLabel,Vt as TextFieldLabelPropsSchema,Rt as TextFieldPropsSchema,qe as TextFieldSuccess,Ht as TextFieldSuccessPropsSchema,H as inputVariants,k as labelVariants,X as successMessageVariants,H as textFieldInputVariants,k as textFieldLabelVariants,Je as validatePatternSafety};//# 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,CircleAlert,Search,X as X$1}from'lucide-react';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function d(...t){return twMerge(clsx(t))}var ie="data-[pressed]:scale-[0.97]";var se="data-[hovered]:shadow-md";var j="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",Z="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"},V={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 Oe=createContext(null);Oe.displayName="ButtonGroupContext";function Ce(){return useContext(Oe)}var Le=createContext(null);Le.displayName="ButtonGroupItemContext";function we(){return useContext(Le)}cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var Re=cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var B=memo(forwardRef(({className:t,buttonVisualClassName:o,variant:n,size:a,visualSize:s,fullWidth:u,loading:c=false,loadingText:p="Loading...",shortcut:v,children:x,isDisabled:g,paywall:i=false,paywallRedirect:E,paywallDescription:ee,onPress:te,...z},oe)=>{let I=useId(),N=Ce(),U=we(),_=n??N?.variant??"default",h=a??N?.size,$=g??N?.isDisabled??false,C=N?.orientation==="vertical",T=u||C,W=U?Re({orientation:N?.orientation??"horizontal",position:U.position}):"",y=s??h??"default";return process.env.NODE_ENV!=="production"&&(y==="dot"||y==="icon")&&!z["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:$||c||void 0,"aria-disabled":i?true:void 0,"aria-describedby":i?I:void 0,onPress:S=>{if(i){E&&window.open(E,"_blank","noopener,noreferrer");return}te?.(S);},className:d(ue({fullWidth:T,inVerticalGroup:C}),t),...z,children:S=>jsxs("span",{className:d(pe({variant:_,visualSize:y,paywall:i,fullWidth:T}),W,o,ie,se,j,Z),"data-pressed":S.isPressed||void 0,children:[c&&jsxs(Fragment,{children:[jsx(Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsx("span",{className:"sr-only","aria-live":"polite",children:p})]}),!c&&x,i&&jsx(Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),i&&jsxs("span",{id:I,className:"sr-only",children:["Premium feature: ",ee||"Upgrade required to access this feature"]}),S.isFocusVisible&&v&&jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:v})]})})}));B.displayName="Button";var Ve=()=>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"})]}),De=()=>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 H=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:`${V.sm} py-1`,default:`${V.default} py-2`,lg:`${V.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"}}),k=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"}}),xe=cva("text-sm text-[var(--content-foreground)]"),Me=cva("text-sm text-[var(--destructive-background)] font-medium"),X=cva("text-sm text-[var(--success-foreground)] font-medium");function ke({expandOnFocus:t,collapsedWidth:o,value:n,defaultValue:a,userOnFocus:s,userOnBlur:u}){let[c,p]=useState(false),v=useCallback(i=>{t&&p(true),s?.(i);},[t,s]),x=useCallback(i=>{t&&i.target.value===""&&p(false),u?.(i);},[t,u]),g=useMemo(()=>t?c||(n!==void 0?n!=="":a!==void 0&&a!=="")?"100%":o:void 0,[t,c,n,a,o]);return {handleFocus:v,handleBlur:x,inputWidth:g}}function Ge({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 u=useCallback(c=>{t&&(c.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:u}}function ze({type:t,showPasswordToggle:o}){let[n,a]=useState(false),s=useCallback(()=>{a(c=>!c);},[]),u=useMemo(()=>t==="password"&&o&&n?"text":t,[t,o,n]);return {showPassword:n,actualType:u,handlePasswordToggle:s}}var Ye=forwardRef(({className:t,state:o="default",children:n,...a},s)=>jsx(Label,{ref:s,className:d(k({state:o}),t),...a,children:n}));Ye.displayName="TextFieldLabel";var je=forwardRef(({className:t,size:o="default",state:n="default",...a},s)=>jsx(Input,{ref:s,className:d(H({size:o,state:n}),de,t),...a}));je.displayName="TextFieldInput";var Ze=forwardRef(({className:t,children:o,...n},a)=>jsx(Text,{ref:a,slot:"description",className:d(xe(),t),...n,children:o}));Ze.displayName="TextFieldDescription";var Te=forwardRef(({className:t,children:o,...n},a)=>jsx(FieldError,{ref:a,...n,className:d(Me(),t),children:jsxs("span",{className:"flex items-center gap-2",role:"alert",children:[jsx(CircleAlert,{className:"h-4 w-4"}),o]})}));Te.displayName="TextFieldError";var qe=forwardRef(({className:t,children:o,...n},a)=>jsx(Text,{ref:a,slot:"description",className:d(X(),t),...n,children:o}));qe.displayName="TextFieldSuccess";var Xe=forwardRef(({className:t,size:o="default",label:n,labelHint:a,description:s,errorMessage:u,successMessage:c,type:p="text",isRequired:v=false,isReadOnly:x=false,isDisabled:g=false,isInvalid:i=false,isValid:E=false,id:ee,autoComplete:te,disableCopyPaste:z=false,pattern:oe,patternDescription:I,expandOnFocus:N=false,collapsedWidth:U="200px",prefix:_,suffix:h,prefixSize:$=16,suffixSize:C=16,showPasswordToggle:T,isIconHidden:W=false,onSubmit:y,onClear:ne,value:L,defaultValue:S,onFocus:et,onBlur:tt,...w},ot)=>{let be=useId(),nt=useId(),at=ee||nt,{handleFocus:rt,handleBlur:it,inputWidth:st}=ke({expandOnFocus:N,collapsedWidth:U,value:L,defaultValue:S,userOnFocus:et,userOnBlur:tt}),{isShaking:lt,screenReaderMessage:ve,handlePaste:dt}=Ge({disableCopyPaste:z}),{showPassword:ae,actualType:ct,handlePasswordToggle:he}=ze({type:p,showPasswordToggle:T}),f=p==="search",[ut,Se]=useState(S??""),R=L!==void 0,b=R?L:ut,pt=useCallback(l=>{R||Se(l),w.onChange?.(l);},[R,w]),Y=useCallback(()=>{R||Se(""),w.onChange?.(""),ne?.();},[R,w,ne]),ft=useCallback(l=>{l.key==="Enter"&&y&&y(b),l.key==="Escape"&&b&&(l.preventDefault(),Y());},[b,y,Y]),mt=useMemo(()=>g?"disabled":x?"readonly":i?"error":E?"success":"default",[g,x,i,E]),xt=useMemo(()=>g?"disabled":"default",[g]),Ee=useMemo(()=>s&&I?`${s} ${I}`:s||I,[s,I]),A=useMemo(()=>f&&!W&&!_?jsx(Search,{className:o==="sm"?"h-3.5 w-3.5":o==="lg"?"h-5 w-5":"h-4 w-4"}):_,[f,W,_,o]),Ie=useMemo(()=>{let l={left:12,right:12};if(A){let re=typeof A=="string"?A.length*8+16:$+16;l.left=re;}if(p==="password"&&T)l.right=32;else if(f&&b)l.right=44;else if(h){let re=typeof h=="string"?h.length*8+16:C+16;l.right=re;}return l},[A,_,h,$,C,p,T,f,b]),Ne=useMemo(()=>p==="password"&&T?jsx(B,{variant:"ghost",visualSize:"icon",onPress:he,"aria-label":ae?"Hide password":"Show password",className:"!min-h-0 !min-w-0 h-8 w-8",children:ae?jsx(De,{}):jsx(Ve,{})}):f&&b?jsx(B,{variant:"ghost",visualSize:"icon",onPress:Y,"aria-label":"Clear search",className:"!min-h-0 !min-w-0 h-8 w-8",children:jsx(X$1,{className:o==="sm"?"h-3 w-3":o==="lg"?"h-5 w-5":"h-4 w-4"})}):h,[p,T,ae,h,he,f,b,o,Y]),ye=p==="password"&&T||f&&!!b;return jsxs(TextField,{ref:ot,className:d("flex flex-col gap-1.5",t),isRequired:v,isReadOnly:x,isDisabled:g,isInvalid:i,value:f?b:L,defaultValue:f?void 0:S,onChange:f?pt:void 0,...w,children:[n&&jsxs(Label,{className:d(k({state:xt}),a&&"flex items-baseline justify-between"),children:[jsxs("span",{children:[n,v&&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})]}),Ee&&jsx(Text,{slot:"description",className:d(xe()),children:Ee}),jsxs("div",{className:d(ce,"relative cursor-text motion-safe:transition-colors motion-safe:duration-200"),style:{width:st},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:ct,id:at,className:d(H({size:o,state:mt}),de,lt&&"shake"),style:{width:"100%",paddingLeft:`${Ie.left}px`,paddingRight:`${Ie.right}px`},autoComplete:te,pattern:oe,onPaste:dt,onFocus:rt,onBlur:it,onKeyDown:f?ft:void 0,"aria-required":v?"true":void 0,"aria-readonly":x?"true":void 0,"aria-errormessage":i&&u?be:void 0}),Ne&&jsx("div",{"data-testid":"textfield-suffix",className:d("absolute right-3 flex items-center justify-center text-[var(--content-foreground)]",ye?"":"pointer-events-none"),"aria-hidden":ye?void 0:"true",children:Ne})]}),E&&c&&!i&&jsx(Text,{slot:"description",className:d(X()),children:c}),i&&u&&jsx(Te,{id:be,children:u}),ve&&jsx("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:ve})]})});Xe.displayName="TextField";var Ke=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 Qe=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"]),wt=[/\(\.\*\)\+/,/\(\.\+\)\+/,/\([^)]*\)\{.*,.*\}/,/\(\?!\)/,/\(\?<=\)/],Je=t=>{for(let n of wt)if(n.test(t))return false;return !((t.match(/[*+{}]/g)||[]).length>5)},Rt=Ke.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:Qe.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||Je(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)),Vt=z.object({children:z.any().optional(),className:z.string().optional(),htmlFor:z.string().optional(),state:z.enum(["default","disabled"]).optional().default("default")}),Dt=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")}),Bt=z.object({children:z.any().optional(),className:z.string().optional()}),Mt=z.object({children:z.any().optional(),className:z.string().optional()}),Ht=z.object({children:z.any().optional(),className:z.string().optional()});export{Qe as AutoCompleteValueSchema,Xe as TextField,Ze as TextFieldDescription,Bt as TextFieldDescriptionPropsSchema,Te as TextFieldError,Mt as TextFieldErrorPropsSchema,je as TextFieldInput,Dt as TextFieldInputPropsSchema,Ye as TextFieldLabel,Vt as TextFieldLabelPropsSchema,Rt as TextFieldPropsSchema,qe as TextFieldSuccess,Ht as TextFieldSuccessPropsSchema,H as inputVariants,k as labelVariants,X as successMessageVariants,H as textFieldInputVariants,k as textFieldLabelVariants,Je as validatePatternSafety};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|