@nice2dev/ui-mobile 1.0.29 → 1.1.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.
package/dist/index.cjs CHANGED
@@ -7,7 +7,7 @@
7
7
  ${T?"nice-mobile-header--safe-area":""}
8
8
  ${Q?"":"nice-mobile-header--hidden"}
9
9
  ${L}
10
- `,style:x,role:"banner",...C,children:[d&&t.jsx("div",{className:"nice-header-background",style:{opacity:v,transform:h},children:d}),t.jsxs("div",{className:"nice-header-toolbar",style:{height:N},children:[l&&t.jsx("div",{className:"nice-header-left",children:l}),t.jsx("div",{className:"nice-header-center",style:{opacity:s?X:1},children:E||t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"nice-header-title",children:r}),c&&!s&&t.jsx("span",{className:"nice-header-subtitle",children:c})]})}),o.length>0&&t.jsx("div",{className:"nice-header-right",children:o.map(a=>t.jsx(Vn,{action:a},a.id))})]}),(s||W)&&t.jsx("div",{className:"nice-header-expanded",style:{opacity:F,visibility:F<=0?"hidden":"visible"},children:W||t.jsxs("div",{className:"nice-header-large-title-container",children:[t.jsx("h1",{className:"nice-header-large-title",children:s}),c&&t.jsx("p",{className:"nice-header-large-subtitle",children:c})]})}),D]}),m&&t.jsx("div",{className:"nice-header-spacer",style:{height:u==="pin"?N:y}})]})}),zn=e.forwardRef(function(r,s){return t.jsx(Ie,{ref:s,mode:"scroll",variant:"blur",collapsedHeight:44,expandedHeight:96,safeArea:!0,...r})}),Wn=e.forwardRef(function(r,s){return t.jsx(Ie,{ref:s,mode:"enterAlways",variant:"solid",collapsedHeight:56,expandedHeight:56,showShadow:!0,...r})}),On=e.forwardRef(function(r,s){return t.jsx(Ie,{ref:s,mode:"scroll",variant:"transparent",collapsedHeight:56,expandedHeight:280,parallax:!0,parallaxSpeed:.5,...r})}),Ct=e.createContext(null);function Un(){const n=e.useContext(Ct);if(!n)throw new Error("useMobilePicker must be used within a NiceMobilePicker");return n}function Xn(n){var T;const{items:r,defaultValue:s,value:c,onChange:l,itemHeight:o=40,visibleItems:d=5,loop:u=!1}=n,b=e.useRef(null),N=e.useRef(),y=e.useCallback(w=>{if(w===void 0)return 0;const A=r.findIndex(Y=>Y.value===w);return A>=0?A:0},[r]),[j,R]=e.useState(()=>y(c??s)),f=c!==void 0,m=f?y(c):j,p=(T=r[m])==null?void 0:T.value,S=e.useCallback((w,A=!0)=>{if(!b.current)return;const E=(u?(w%r.length+r.length)%r.length:Math.max(0,Math.min(w,r.length-1)))*o;b.current.scrollTo({top:E,behavior:A?"smooth":"auto"})},[r.length,o,d,u]),M=e.useCallback(w=>{const A=r[w];!A||A.disabled||(f||R(w),l==null||l(A.value,A))},[r,f,l]);return e.useEffect(()=>{const w=b.current;if(!w)return;const A=()=>{clearTimeout(N.current),N.current=setTimeout(()=>{const Y=w.scrollTop,E=Math.round(Y/o),W=Math.max(0,Math.min(E,r.length-1));S(W,!0),M(W)},100)};return w.addEventListener("scroll",A,{passive:!0}),()=>{w.removeEventListener("scroll",A),clearTimeout(N.current)}},[o,r.length,S,M]),e.useEffect(()=>{S(m,!1)},[]),{selectedValue:p,selectedIndex:m,setSelectedIndex:M,scrollToIndex:S,containerRef:b}}const Pt=e.forwardRef(function({items:r,value:s,defaultValue:c,onChange:l,itemHeight:o=40,visibleItems:d=5,loop:u=!1,renderItem:b,className:N="",style:y,...j},R){const f=e.useRef(null),m=e.useRef(),p=e.useRef(!1),S=e.useRef(0),M=e.useRef(0),T=e.useCallback(O=>{if(O===void 0)return 0;const K=r.findIndex(Z=>Z.value===O);return K>=0?K:0},[r]),[w,A]=e.useState(()=>T(s??c)),Y=s!==void 0,E=Y?T(s):w,W=Math.floor(d/2),L=o*d,g=W*o,D=e.useCallback((O,K=!0)=>{if(!f.current)return;const ee=Math.max(0,Math.min(O,r.length-1))*o;f.current.scrollTo({top:ee,behavior:K?"smooth":"auto"})},[r.length,o]),C=e.useCallback(O=>{const K=r[O];!K||K.disabled||(Y||A(O),l==null||l(K.value,K))},[r,Y,l]),H=e.useCallback(()=>{if(!f.current)return;const O=f.current.scrollTop,K=Math.round(O/o),Z=Math.max(0,Math.min(K,r.length-1));D(Z,!0),C(Z)},[o,r.length,D,C]);e.useEffect(()=>{const O=f.current;if(!O)return;const K=()=>{clearTimeout(m.current),m.current=setTimeout(H,100)};return O.addEventListener("scroll",K,{passive:!0}),()=>{O.removeEventListener("scroll",K),clearTimeout(m.current)}},[H]),e.useEffect(()=>{D(E,!1)},[]);const P=O=>{var K;p.current=!0,S.current=O.touches[0].clientY,M.current=((K=f.current)==null?void 0:K.scrollTop)||0},B=O=>{if(!p.current||!f.current)return;const K=S.current-O.touches[0].clientY;f.current.scrollTop=M.current+K},Q=()=>{p.current=!1},U=O=>{D(O,!0),C(O)};return t.jsx("div",{ref:O=>{f.current=O,typeof R=="function"?R(O):R&&(R.current=O)},className:`nice-picker-column ${N}`,style:{height:L,...y},onTouchStart:P,onTouchMove:B,onTouchEnd:Q,...j,children:t.jsx("div",{className:"nice-picker-column-inner",style:{paddingTop:g,paddingBottom:g},children:r.map((O,K)=>{const Z=K===E,ee=Math.abs(K-E),I=ee===0?1:Math.max(.3,1-ee*.25),V=ee===0?1:Math.max(.85,1-ee*.05);return t.jsx("div",{className:`nice-picker-item ${Z?"nice-picker-item--selected":""} ${O.disabled?"nice-picker-item--disabled":""}`,style:{height:o,lineHeight:`${o}px`,opacity:I,transform:`scale(${V})`},onClick:()=>!O.disabled&&U(K),children:b?b(O,Z):O.label},String(O.value))})})})}),qe=e.forwardRef(function({columns:r,value:s,defaultValue:c,onChange:l,itemHeight:o=40,visibleItems:d=5,loop:u=!1,showLabels:b=!1,renderItem:N,showIndicator:y=!0,indicatorClassName:j="",className:R="",style:f,...m},p){const[S,M]=e.useState(c??{}),T=s!==void 0,w=T?s:S,A=e.useCallback((L,g)=>{const D={...w,[L]:g};T||M(D),l==null||l(D,L)},[w,T,l]),Y=o*d,E=Math.floor(d/2)*o,W={visibleItems:d,itemHeight:o,isScrolling:!1};return t.jsx(Ct.Provider,{value:W,children:t.jsxs("div",{ref:p,className:`nice-mobile-picker ${R}`,style:{height:b?Y+24:Y,...f},...m,children:[b&&t.jsx("div",{className:"nice-picker-labels",children:r.map(L=>t.jsx("div",{className:"nice-picker-label",style:{width:L.width},children:L.label},L.id))}),t.jsxs("div",{className:"nice-picker-body",children:[y&&t.jsx("div",{className:`nice-picker-indicator ${j}`,style:{top:E,height:o}}),t.jsx("div",{className:"nice-picker-columns",children:r.map(L=>t.jsx(Pt,{items:L.items,value:w[L.id],onChange:g=>A(L.id,g),itemHeight:o,visibleItems:d,loop:u,renderItem:N?(g,D)=>N(g,L.id,D):void 0,style:{width:L.width,flex:L.width?"none":1}},L.id))}),t.jsx("div",{className:"nice-picker-gradient nice-picker-gradient--top"}),t.jsx("div",{className:"nice-picker-gradient nice-picker-gradient--bottom"})]})]})})});function we(n,r,s=1,c=2){const l=[];for(let o=n;o<=r;o+=s)l.push({value:o,label:String(o).padStart(c,"0")});return l}const _n=e.forwardRef(function({value:r,defaultValue:s={hour:12,minute:0},onChange:c,use24Hour:l=!1,minuteStep:o=1,...d},u){const b=e.useMemo(()=>we(l?0:1,l?23:12,1,2),[l]),N=e.useMemo(()=>we(0,59,o,2),[o]),y=[{value:"AM",label:"AM"},{value:"PM",label:"PM"}],j=[{id:"hour",items:b,width:60},{id:"minute",items:N,width:60}];l||j.push({id:"period",items:y,width:60});const R=e.useCallback(m=>{const p=m.hour,S=m.minute,M=m.period;let T=p;l||(M==="PM"&&p!==12?T=p+12:M==="AM"&&p===12&&(T=0)),c==null||c({hour:T,minute:S})},[l,c]),f=e.useMemo(()=>{if(!r)return s;if(l)return r;const m=r.hour%12||12,p=r.hour>=12?"PM":"AM";return{hour:m,minute:r.minute,period:p}},[r,s,l]);return t.jsx(qe,{ref:u,columns:j,value:f,onChange:R,...d})}),qn=["January","February","March","April","May","June","July","August","September","October","November","December"],Gn=e.forwardRef(function({value:r,defaultValue:s=new Date,onChange:c,minYear:l=new Date().getFullYear()-100,maxYear:o=new Date().getFullYear()+10,...d},u){const b=e.useMemo(()=>we(1,31,1,2),[]),N=e.useMemo(()=>qn.map((m,p)=>({value:p,label:m})),[]),y=e.useMemo(()=>we(l,o,1,4),[l,o]),j=[{id:"day",items:b,width:60},{id:"month",items:N,flex:1},{id:"year",items:y,width:80}],R=e.useCallback(m=>{const p=m.day,S=m.month,M=m.year,T=new Date(M,S+1,0).getDate(),w=Math.min(p,T);c==null||c(new Date(M,S,w))},[c]),f=e.useMemo(()=>{const m=r??s;return{day:m.getDate(),month:m.getMonth(),year:m.getFullYear()}},[r,s]);return t.jsx(qe,{ref:u,columns:j,value:f,onChange:R,...d})}),$t=e.createContext(null);function Kn(){const n=e.useContext($t);if(!n)throw new Error("useMobileCalendar must be used within a NiceMobileCalendar");return n}const Jn=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],It=["January","February","March","April","May","June","July","August","September","October","November","December"],Qn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function ve(n,r){return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()}function Zn(n,r,s){if(!r||!s)return!1;const c=n.getTime();return c>=r.getTime()&&c<=s.getTime()}function er(n){const r=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate())),s=r.getUTCDay()||7;r.setUTCDate(r.getUTCDate()+4-s);const c=new Date(Date.UTC(r.getUTCFullYear(),0,1));return Math.ceil(((r.getTime()-c.getTime())/864e5+1)/7)}function Se(n,r){const s=new Date(n);return s.setMonth(s.getMonth()+r),s}function at(n,r){const s=new Date(n);return s.setFullYear(s.getFullYear()+r),s}function Et(n={}){const{defaultDate:r=new Date,selectedDate:s,selectedDates:c,selectedRange:l,selectionMode:o="single",minDate:d,maxDate:u,disabledDates:b=[],events:N=[],weekStartDay:y=0,onChange:j}=n,[R,f]=e.useState(r),[m,p]=e.useState("day"),[S,M]=e.useState(null),[T,w]=e.useState([]),[A,Y]=e.useState({start:null,end:null}),E=s??S,W=c??T,L=l??A,g=e.useCallback(I=>d&&I<d||u&&I>u?!0:b.some(V=>ve(V,I)),[d,u,b]),D=e.useCallback(I=>o==="single"&&E?ve(I,E):o==="multiple"?W.some(V=>ve(V,I)):!!(o==="range"&&(L.start&&ve(I,L.start)||L.end&&ve(I,L.end))),[o,E,W,L]),C=e.useCallback(I=>{if(!g(I)){if(o==="single")M(I),j==null||j(I);else if(o==="multiple"){const F=T.some(X=>ve(X,I))?T.filter(X=>!ve(X,I)):[...T,I];w(F),j==null||j(F)}else if(o==="range")if(!A.start||A.start&&A.end){const V={start:I,end:null};Y(V),j==null||j(V)}else{const V=I<A.start?{start:I,end:A.start}:{start:A.start,end:I};Y(V),j==null||j(V)}}},[o,T,A,g,j]),H=e.useCallback(I=>f(I),[]),P=e.useCallback(()=>f(I=>Se(I,-1)),[]),B=e.useCallback(()=>f(I=>Se(I,1)),[]),Q=e.useCallback(()=>f(I=>at(I,-1)),[]),U=e.useCallback(()=>f(I=>at(I,1)),[]),O=e.useCallback(()=>f(new Date),[]),K=e.useCallback(()=>{const I=R.getFullYear(),V=R.getMonth(),F=new Date,v=(new Date(I,V,1).getDay()-y+7)%7,h=42,x=[];for(let i=0;i<h;i++){const a=new Date(I,V,1-v+i),k=a.getMonth()===V,$=a.getDate(),q=N.filter(_=>ve(_.date,a));x.push({date:a,dayOfMonth:$,isCurrentMonth:k,isToday:ve(a,F),isSelected:D(a),isInRange:Zn(a,L.start,L.end),isRangeStart:L.start?ve(a,L.start):!1,isRangeEnd:L.end?ve(a,L.end):!1,isDisabled:g(a),isWeekend:a.getDay()===0||a.getDay()===6,events:q.length>0?q:void 0})}return x},[R,y,N,D,L,g]),Z=e.useCallback(()=>It.map((I,V)=>({month:V,label:I})),[]),ee=e.useCallback(()=>{const I=R.getFullYear(),V=[];for(let F=I-50;F<=I+50;F++)V.push(F);return V},[R]);return{viewDate:R,selectedDate:E,selectedDates:W,selectedRange:L,view:m,setView:p,goToDate:H,goToPrevMonth:P,goToNextMonth:B,goToPrevYear:Q,goToNextYear:U,goToToday:O,selectDate:C,isDateSelected:D,isDateDisabled:g,getDaysInMonth:K,getMonths:Z,getYears:ee}}const tr=()=>t.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"15 18 9 12 15 6"})}),nr=()=>t.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"9 18 15 12 9 6"})}),rr=({cell:n,compact:r,onClick:s,renderDay:c})=>c?t.jsx(t.Fragment,{children:c(n)}):t.jsxs("button",{type:"button",className:`
10
+ `,style:x,role:"banner",...C,children:[d&&t.jsx("div",{className:"nice-header-background",style:{opacity:v,transform:h},children:d}),t.jsxs("div",{className:"nice-header-toolbar",style:{height:N},children:[l&&t.jsx("div",{className:"nice-header-left",children:l}),t.jsx("div",{className:"nice-header-center",style:{opacity:s?X:1},children:E||t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"nice-header-title",children:r}),c&&!s&&t.jsx("span",{className:"nice-header-subtitle",children:c})]})}),o.length>0&&t.jsx("div",{className:"nice-header-right",children:o.map(a=>t.jsx(Vn,{action:a},a.id))})]}),(s||W)&&t.jsx("div",{className:"nice-header-expanded",style:{opacity:F,visibility:F<=0?"hidden":"visible"},children:W||t.jsxs("div",{className:"nice-header-large-title-container",children:[t.jsx("h1",{className:"nice-header-large-title",children:s}),c&&t.jsx("p",{className:"nice-header-large-subtitle",children:c})]})}),D]}),m&&t.jsx("div",{className:"nice-header-spacer",style:{height:u==="pin"?N:y}})]})}),zn=e.forwardRef(function(r,s){return t.jsx(Ie,{ref:s,mode:"scroll",variant:"blur",collapsedHeight:44,expandedHeight:96,safeArea:!0,...r})}),Wn=e.forwardRef(function(r,s){return t.jsx(Ie,{ref:s,mode:"enterAlways",variant:"solid",collapsedHeight:56,expandedHeight:56,showShadow:!0,...r})}),On=e.forwardRef(function(r,s){return t.jsx(Ie,{ref:s,mode:"scroll",variant:"transparent",collapsedHeight:56,expandedHeight:280,parallax:!0,parallaxSpeed:.5,...r})}),Ct=e.createContext(null);function Un(){const n=e.useContext(Ct);if(!n)throw new Error("useMobilePicker must be used within a NiceMobilePicker");return n}function Xn(n){var T;const{items:r,defaultValue:s,value:c,onChange:l,itemHeight:o=40,visibleItems:d=5,loop:u=!1}=n,b=e.useRef(null),N=e.useRef(void 0),y=e.useCallback(w=>{if(w===void 0)return 0;const A=r.findIndex(Y=>Y.value===w);return A>=0?A:0},[r]),[j,R]=e.useState(()=>y(c??s)),f=c!==void 0,m=f?y(c):j,p=(T=r[m])==null?void 0:T.value,S=e.useCallback((w,A=!0)=>{if(!b.current)return;const E=(u?(w%r.length+r.length)%r.length:Math.max(0,Math.min(w,r.length-1)))*o;b.current.scrollTo({top:E,behavior:A?"smooth":"auto"})},[r.length,o,d,u]),M=e.useCallback(w=>{const A=r[w];!A||A.disabled||(f||R(w),l==null||l(A.value,A))},[r,f,l]);return e.useEffect(()=>{const w=b.current;if(!w)return;const A=()=>{clearTimeout(N.current),N.current=setTimeout(()=>{const Y=w.scrollTop,E=Math.round(Y/o),W=Math.max(0,Math.min(E,r.length-1));S(W,!0),M(W)},100)};return w.addEventListener("scroll",A,{passive:!0}),()=>{w.removeEventListener("scroll",A),clearTimeout(N.current)}},[o,r.length,S,M]),e.useEffect(()=>{S(m,!1)},[]),{selectedValue:p,selectedIndex:m,setSelectedIndex:M,scrollToIndex:S,containerRef:b}}const Pt=e.forwardRef(function({items:r,value:s,defaultValue:c,onChange:l,itemHeight:o=40,visibleItems:d=5,loop:u=!1,renderItem:b,className:N="",style:y,...j},R){const f=e.useRef(null),m=e.useRef(void 0),p=e.useRef(!1),S=e.useRef(0),M=e.useRef(0),T=e.useCallback(O=>{if(O===void 0)return 0;const K=r.findIndex(Z=>Z.value===O);return K>=0?K:0},[r]),[w,A]=e.useState(()=>T(s??c)),Y=s!==void 0,E=Y?T(s):w,W=Math.floor(d/2),L=o*d,g=W*o,D=e.useCallback((O,K=!0)=>{if(!f.current)return;const ee=Math.max(0,Math.min(O,r.length-1))*o;f.current.scrollTo({top:ee,behavior:K?"smooth":"auto"})},[r.length,o]),C=e.useCallback(O=>{const K=r[O];!K||K.disabled||(Y||A(O),l==null||l(K.value,K))},[r,Y,l]),H=e.useCallback(()=>{if(!f.current)return;const O=f.current.scrollTop,K=Math.round(O/o),Z=Math.max(0,Math.min(K,r.length-1));D(Z,!0),C(Z)},[o,r.length,D,C]);e.useEffect(()=>{const O=f.current;if(!O)return;const K=()=>{clearTimeout(m.current),m.current=setTimeout(H,100)};return O.addEventListener("scroll",K,{passive:!0}),()=>{O.removeEventListener("scroll",K),clearTimeout(m.current)}},[H]),e.useEffect(()=>{D(E,!1)},[]);const P=O=>{var K;p.current=!0,S.current=O.touches[0].clientY,M.current=((K=f.current)==null?void 0:K.scrollTop)||0},B=O=>{if(!p.current||!f.current)return;const K=S.current-O.touches[0].clientY;f.current.scrollTop=M.current+K},Q=()=>{p.current=!1},U=O=>{D(O,!0),C(O)};return t.jsx("div",{ref:O=>{f.current=O,typeof R=="function"?R(O):R&&(R.current=O)},className:`nice-picker-column ${N}`,style:{height:L,...y},onTouchStart:P,onTouchMove:B,onTouchEnd:Q,...j,children:t.jsx("div",{className:"nice-picker-column-inner",style:{paddingTop:g,paddingBottom:g},children:r.map((O,K)=>{const Z=K===E,ee=Math.abs(K-E),I=ee===0?1:Math.max(.3,1-ee*.25),V=ee===0?1:Math.max(.85,1-ee*.05);return t.jsx("div",{className:`nice-picker-item ${Z?"nice-picker-item--selected":""} ${O.disabled?"nice-picker-item--disabled":""}`,style:{height:o,lineHeight:`${o}px`,opacity:I,transform:`scale(${V})`},onClick:()=>!O.disabled&&U(K),children:b?b(O,Z):O.label},String(O.value))})})})}),qe=e.forwardRef(function({columns:r,value:s,defaultValue:c,onChange:l,itemHeight:o=40,visibleItems:d=5,loop:u=!1,showLabels:b=!1,renderItem:N,showIndicator:y=!0,indicatorClassName:j="",className:R="",style:f,...m},p){const[S,M]=e.useState(c??{}),T=s!==void 0,w=T?s:S,A=e.useCallback((L,g)=>{const D={...w,[L]:g};T||M(D),l==null||l(D,L)},[w,T,l]),Y=o*d,E=Math.floor(d/2)*o,W={visibleItems:d,itemHeight:o,isScrolling:!1};return t.jsx(Ct.Provider,{value:W,children:t.jsxs("div",{ref:p,className:`nice-mobile-picker ${R}`,style:{height:b?Y+24:Y,...f},...m,children:[b&&t.jsx("div",{className:"nice-picker-labels",children:r.map(L=>t.jsx("div",{className:"nice-picker-label",style:{width:L.width},children:L.label},L.id))}),t.jsxs("div",{className:"nice-picker-body",children:[y&&t.jsx("div",{className:`nice-picker-indicator ${j}`,style:{top:E,height:o}}),t.jsx("div",{className:"nice-picker-columns",children:r.map(L=>t.jsx(Pt,{items:L.items,value:w[L.id],onChange:g=>A(L.id,g),itemHeight:o,visibleItems:d,loop:u,renderItem:N?(g,D)=>N(g,L.id,D):void 0,style:{width:L.width,flex:L.width?"none":1}},L.id))}),t.jsx("div",{className:"nice-picker-gradient nice-picker-gradient--top"}),t.jsx("div",{className:"nice-picker-gradient nice-picker-gradient--bottom"})]})]})})});function we(n,r,s=1,c=2){const l=[];for(let o=n;o<=r;o+=s)l.push({value:o,label:String(o).padStart(c,"0")});return l}const _n=e.forwardRef(function({value:r,defaultValue:s={hour:12,minute:0},onChange:c,use24Hour:l=!1,minuteStep:o=1,...d},u){const b=e.useMemo(()=>we(l?0:1,l?23:12,1,2),[l]),N=e.useMemo(()=>we(0,59,o,2),[o]),y=[{value:"AM",label:"AM"},{value:"PM",label:"PM"}],j=[{id:"hour",items:b,width:60},{id:"minute",items:N,width:60}];l||j.push({id:"period",items:y,width:60});const R=e.useCallback(m=>{const p=m.hour,S=m.minute,M=m.period;let T=p;l||(M==="PM"&&p!==12?T=p+12:M==="AM"&&p===12&&(T=0)),c==null||c({hour:T,minute:S})},[l,c]),f=e.useMemo(()=>{if(!r)return s;if(l)return r;const m=r.hour%12||12,p=r.hour>=12?"PM":"AM";return{hour:m,minute:r.minute,period:p}},[r,s,l]);return t.jsx(qe,{ref:u,columns:j,value:f,onChange:R,...d})}),qn=["January","February","March","April","May","June","July","August","September","October","November","December"],Gn=e.forwardRef(function({value:r,defaultValue:s=new Date,onChange:c,minYear:l=new Date().getFullYear()-100,maxYear:o=new Date().getFullYear()+10,...d},u){const b=e.useMemo(()=>we(1,31,1,2),[]),N=e.useMemo(()=>qn.map((m,p)=>({value:p,label:m})),[]),y=e.useMemo(()=>we(l,o,1,4),[l,o]),j=[{id:"day",items:b,width:60},{id:"month",items:N,flex:1},{id:"year",items:y,width:80}],R=e.useCallback(m=>{const p=m.day,S=m.month,M=m.year,T=new Date(M,S+1,0).getDate(),w=Math.min(p,T);c==null||c(new Date(M,S,w))},[c]),f=e.useMemo(()=>{const m=r??s;return{day:m.getDate(),month:m.getMonth(),year:m.getFullYear()}},[r,s]);return t.jsx(qe,{ref:u,columns:j,value:f,onChange:R,...d})}),$t=e.createContext(null);function Kn(){const n=e.useContext($t);if(!n)throw new Error("useMobileCalendar must be used within a NiceMobileCalendar");return n}const Jn=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],It=["January","February","March","April","May","June","July","August","September","October","November","December"],Qn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function ve(n,r){return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()}function Zn(n,r,s){if(!r||!s)return!1;const c=n.getTime();return c>=r.getTime()&&c<=s.getTime()}function er(n){const r=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate())),s=r.getUTCDay()||7;r.setUTCDate(r.getUTCDate()+4-s);const c=new Date(Date.UTC(r.getUTCFullYear(),0,1));return Math.ceil(((r.getTime()-c.getTime())/864e5+1)/7)}function Se(n,r){const s=new Date(n);return s.setMonth(s.getMonth()+r),s}function at(n,r){const s=new Date(n);return s.setFullYear(s.getFullYear()+r),s}function Et(n={}){const{defaultDate:r=new Date,selectedDate:s,selectedDates:c,selectedRange:l,selectionMode:o="single",minDate:d,maxDate:u,disabledDates:b=[],events:N=[],weekStartDay:y=0,onChange:j}=n,[R,f]=e.useState(r),[m,p]=e.useState("day"),[S,M]=e.useState(null),[T,w]=e.useState([]),[A,Y]=e.useState({start:null,end:null}),E=s??S,W=c??T,L=l??A,g=e.useCallback(I=>d&&I<d||u&&I>u?!0:b.some(V=>ve(V,I)),[d,u,b]),D=e.useCallback(I=>o==="single"&&E?ve(I,E):o==="multiple"?W.some(V=>ve(V,I)):!!(o==="range"&&(L.start&&ve(I,L.start)||L.end&&ve(I,L.end))),[o,E,W,L]),C=e.useCallback(I=>{if(!g(I)){if(o==="single")M(I),j==null||j(I);else if(o==="multiple"){const F=T.some(X=>ve(X,I))?T.filter(X=>!ve(X,I)):[...T,I];w(F),j==null||j(F)}else if(o==="range")if(!A.start||A.start&&A.end){const V={start:I,end:null};Y(V),j==null||j(V)}else{const V=I<A.start?{start:I,end:A.start}:{start:A.start,end:I};Y(V),j==null||j(V)}}},[o,T,A,g,j]),H=e.useCallback(I=>f(I),[]),P=e.useCallback(()=>f(I=>Se(I,-1)),[]),B=e.useCallback(()=>f(I=>Se(I,1)),[]),Q=e.useCallback(()=>f(I=>at(I,-1)),[]),U=e.useCallback(()=>f(I=>at(I,1)),[]),O=e.useCallback(()=>f(new Date),[]),K=e.useCallback(()=>{const I=R.getFullYear(),V=R.getMonth(),F=new Date,v=(new Date(I,V,1).getDay()-y+7)%7,h=42,x=[];for(let i=0;i<h;i++){const a=new Date(I,V,1-v+i),k=a.getMonth()===V,$=a.getDate(),q=N.filter(_=>ve(_.date,a));x.push({date:a,dayOfMonth:$,isCurrentMonth:k,isToday:ve(a,F),isSelected:D(a),isInRange:Zn(a,L.start,L.end),isRangeStart:L.start?ve(a,L.start):!1,isRangeEnd:L.end?ve(a,L.end):!1,isDisabled:g(a),isWeekend:a.getDay()===0||a.getDay()===6,events:q.length>0?q:void 0})}return x},[R,y,N,D,L,g]),Z=e.useCallback(()=>It.map((I,V)=>({month:V,label:I})),[]),ee=e.useCallback(()=>{const I=R.getFullYear(),V=[];for(let F=I-50;F<=I+50;F++)V.push(F);return V},[R]);return{viewDate:R,selectedDate:E,selectedDates:W,selectedRange:L,view:m,setView:p,goToDate:H,goToPrevMonth:P,goToNextMonth:B,goToPrevYear:Q,goToNextYear:U,goToToday:O,selectDate:C,isDateSelected:D,isDateDisabled:g,getDaysInMonth:K,getMonths:Z,getYears:ee}}const tr=()=>t.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"15 18 9 12 15 6"})}),nr=()=>t.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("polyline",{points:"9 18 15 12 9 6"})}),rr=({cell:n,compact:r,onClick:s,renderDay:c})=>c?t.jsx(t.Fragment,{children:c(n)}):t.jsxs("button",{type:"button",className:`
11
11
  nice-calendar-day
12
12
  ${n.isCurrentMonth?"":"nice-calendar-day--other-month"}
13
13
  ${n.isToday?"nice-calendar-day--today":""}
@@ -23,4 +23,4 @@
23
23
  ${u?"nice-touch-slider--disabled":""}
24
24
  ${H?"nice-touch-slider--dragging":""}
25
25
  ${Y}
26
- `,style:{"--thumb-size":`${p}px`,"--track-height":`${S}px`,...f?{"--track-color":f}:{},...m?{"--fill-color":m}:{}},...L,children:[R&&t.jsx("span",{className:"nice-touch-slider-min",children:j(c)}),t.jsxs("div",{ref:C,className:"nice-touch-slider-track-container",onPointerDown:F,onPointerMove:X,onPointerUp:v,onPointerCancel:v,children:[t.jsx("div",{className:"nice-touch-slider-track"}),t.jsx("div",{className:"nice-touch-slider-fill",style:x}),Z.length>0&&t.jsx("div",{className:"nice-touch-slider-marks",children:Z.map(a=>{const k=(a.value-c)/(l-c)*100,$=d==="horizontal"?{left:`${k}%`}:{bottom:`${k}%`};return t.jsxs("div",{className:"nice-touch-slider-mark",style:$,children:[t.jsx("span",{className:"nice-touch-slider-mark-dot"}),a.label&&t.jsx("span",{className:"nice-touch-slider-mark-label",children:a.label})]},a.value)})}),D.isRange?t.jsxs(t.Fragment,{children:[i(0,D.percentage[0]),i(1,D.percentage[1])]}):i(0,D.percentage)]}),R&&t.jsx("span",{className:"nice-touch-slider-max",children:j(l)})]})});function Be(n,r,s){r/=100,s/=100;const c=(1-Math.abs(2*s-1))*r,l=c*(1-Math.abs(n/60%2-1)),o=s-c/2;let d=0,u=0,b=0;return n>=0&&n<60?(d=c,u=l,b=0):n>=60&&n<120?(d=l,u=c,b=0):n>=120&&n<180?(d=0,u=c,b=l):n>=180&&n<240?(d=0,u=l,b=c):n>=240&&n<300?(d=l,u=0,b=c):(d=c,u=0,b=l),{r:Math.round((d+o)*255),g:Math.round((u+o)*255),b:Math.round((b+o)*255)}}function Wt(n,r,s){n/=255,r/=255,s/=255;const c=Math.max(n,r,s),l=Math.min(n,r,s),o=(c+l)/2;let d=0,u=0;if(c!==l){const b=c-l;switch(u=o>.5?b/(2-c-l):b/(c+l),c){case n:d=((r-s)/b+(r<s?6:0))*60;break;case r:d=((s-n)/b+2)*60;break;case s:d=((n-r)/b+4)*60;break}}return{h:Math.round(d),s:Math.round(u*100),l:Math.round(o*100)}}function Ot(n){const r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(n);return r?{r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16)}:{r:0,g:0,b:0}}function Ut(n,r,s){return"#"+[n,r,s].map(c=>c.toString(16).padStart(2,"0")).join("")}function ye(n){const r=Ot(n);return Wt(r.r,r.g,r.b)}function Pe(n,r,s){const c=Be(n,r,s);return Ut(c.r,c.g,c.b)}function Oe(n,r){switch(r){case"hsl":return`hsl(${n.h}, ${n.s}%, ${n.l}%)`;case"rgb":{const s=Be(n.h,n.s,n.l);return`rgb(${s.r}, ${s.g}, ${s.b})`}case"hex":default:return Pe(n.h,n.s,n.l)}}const Fr=e.forwardRef(function({value:r,defaultValue:s="var(--color-accent, #6366f1)",format:c="hex",showAlpha:l=!1,showPreview:o=!0,showInput:d=!0,presetColors:u,wheelSize:b=240,haptic:N=!0,onChange:y,presetLabel:j="Presets",className:R="",...f},m){const[p,S]=e.useState(()=>ye(r||s)),[M,T]=e.useState(r||s),[w,A]=e.useState(1),Y=e.useRef(null),E=e.useRef(null),W=e.useRef(!1),L=e.useRef(!1);e.useEffect(()=>{if(r){const v=ye(r);S(v),T(r)}},[r]);const g=e.useCallback(()=>{if(!(!N||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(5)}catch{}},[N]),D=e.useCallback(v=>{const h=Oe(v,c);T(c==="hex"?h:Pe(v.h,v.s,v.l)),y==null||y(h)},[c,y]);e.useEffect(()=>{const v=Y.current;if(!v)return;const h=v.getContext("2d");if(!h)return;const x=b,i=x/2,a=i-10,k=a-30;v.width=x,v.height=x;for(let $=0;$<360;$++){const q=($-1)*Math.PI/180,_=($+1)*Math.PI/180;h.beginPath(),h.arc(i,i,a,q,_),h.arc(i,i,k,_,q,!0),h.closePath(),h.fillStyle=`hsl(${$}, 100%, 50%)`,h.fill()}},[b]),e.useEffect(()=>{const v=E.current;if(!v)return;const h=v.getContext("2d");if(!h)return;const x=b*.5;v.width=x,v.height=x;const i=h.createImageData(x,x);for(let a=0;a<x;a++)for(let k=0;k<x;k++){const $=k/x*100,q=100-a/x*100,_=Be(p.h,$,q),re=(a*x+k)*4;i.data[re]=_.r,i.data[re+1]=_.g,i.data[re+2]=_.b,i.data[re+3]=255}h.putImageData(i,0,0)},[p.h,b]);const C=e.useCallback(v=>{const h=Y.current;if(!h)return;const x=h.getBoundingClientRect(),i=v.clientX-x.left-x.width/2,a=v.clientY-x.top-x.height/2;let k=Math.atan2(a,i)*(180/Math.PI)+90;k<0&&(k+=360);const $={...p,h:Math.round(k)};S($),D($),g()},[p,D,g]),H=e.useCallback(v=>{const h=E.current;if(!h)return;const x=h.getBoundingClientRect(),i=Math.max(0,Math.min(x.width,v.clientX-x.left)),a=Math.max(0,Math.min(x.height,v.clientY-x.top)),k=Math.round(i/x.width*100),$=Math.round(100-a/x.height*100),q={...p,s:k,l:$};S(q),D(q),g()},[p,D,g]),P=e.useCallback(v=>{v.currentTarget.setPointerCapture(v.pointerId),W.current=!0,C(v)},[C]),B=e.useCallback(v=>{W.current&&C(v)},[C]),Q=e.useCallback(v=>{v.currentTarget.releasePointerCapture(v.pointerId),W.current=!1},[]),U=e.useCallback(v=>{v.currentTarget.setPointerCapture(v.pointerId),L.current=!0,H(v)},[H]),O=e.useCallback(v=>{L.current&&H(v)},[H]),K=e.useCallback(v=>{v.currentTarget.releasePointerCapture(v.pointerId),L.current=!1},[]),Z=e.useCallback(v=>{const h=v.target.value;if(T(h),/^#?[0-9a-f]{6}$/i.test(h)){const x=h.startsWith("#")?h:`#${h}`,i=ye(x);S(i),y==null||y(Oe(i,c))}},[c,y]),ee=e.useCallback(v=>{const h=ye(v);S(h),D(h),g()},[D,g]),I=e.useMemo(()=>{const v=b/2,h=v-25,x=(p.h-90)*Math.PI/180;return{x:v+h*Math.cos(x),y:v+h*Math.sin(x)}},[p.h,b]),V=b*.5,F=e.useMemo(()=>({x:p.s/100*V,y:(1-p.l/100)*V}),[p.s,p.l,V]),X=e.useMemo(()=>Pe(p.h,p.s,p.l),[p]);return t.jsxs("div",{ref:m,className:`nice-touch-color-picker ${R}`,...f,children:[t.jsxs("div",{className:"nice-touch-color-picker-wheel-container",style:{width:b,height:b},children:[t.jsx("canvas",{ref:Y,className:"nice-touch-color-picker-wheel",onPointerDown:P,onPointerMove:B,onPointerUp:Q,onPointerCancel:Q}),t.jsx("div",{className:"nice-touch-color-picker-hue-indicator",style:{left:I.x,top:I.y,backgroundColor:`hsl(${p.h}, 100%, 50%)`}}),t.jsxs("div",{className:"nice-touch-color-picker-sl-container",style:{width:V,height:V},children:[t.jsx("canvas",{ref:E,className:"nice-touch-color-picker-sl",onPointerDown:U,onPointerMove:O,onPointerUp:K,onPointerCancel:K}),t.jsx("div",{className:"nice-touch-color-picker-sl-indicator",style:{left:F.x,top:F.y,backgroundColor:X}})]})]}),t.jsxs("div",{className:"nice-touch-color-picker-controls",children:[o&&t.jsx("div",{className:"nice-touch-color-picker-preview",style:{backgroundColor:X}}),d&&t.jsx("input",{type:"text",className:"nice-touch-color-picker-input",value:M,onChange:Z,placeholder:"var(--nice-text, #000000)"})]}),l&&t.jsx("div",{className:"nice-touch-color-picker-alpha",children:t.jsx("input",{type:"range",min:"0",max:"100",value:w*100,onChange:v=>A(Number(v.target.value)/100),className:"nice-touch-color-picker-alpha-slider",style:{background:`linear-gradient(to right, transparent, ${X})`}})}),u&&u.length>0&&t.jsxs("div",{className:"nice-touch-color-picker-presets",children:[t.jsx("span",{className:"nice-touch-color-picker-presets-label",children:j}),t.jsx("div",{className:"nice-touch-color-picker-presets-grid",children:u.map((v,h)=>t.jsx("button",{type:"button",className:`nice-touch-color-picker-preset ${v.toLowerCase()===X.toLowerCase()?"nice-touch-color-picker-preset--selected":""}`,style:{backgroundColor:v},onClick:()=>ee(v),"aria-label":`Select color ${v}`},h))})]})]})}),Vr={hslToRgb:Be,rgbToHsl:Wt,hexToRgb:Ot,rgbToHex:Ut,hexToHsl:ye,hslToHex:Pe,formatColor:Oe};function zr(n,r){return Math.sqrt(Math.pow(r.x-n.x,2)+Math.pow(r.y-n.y,2))}function dt(n,r){const s=r.time-n.time||1;return zr(n,r)/s}const Xt=e.forwardRef(function({width:r="100%",height:s=200,strokeColor:c="var(--text-primary, #1f2937)",strokeWidth:l=2,minWidth:o=.5,maxWidth:d=4,velocityFilterWeight:u=.7,backgroundColor:b="var(--bg-primary, #ffffff)",showGuideline:N=!0,guidelineColor:y="var(--border-color, #e5e7eb)",disabled:j=!1,penPressure:R=!0,haptic:f=!0,placeholder:m="Sign here",onChange:p,onBegin:S,onEnd:M,className:T="",...w},A){const Y=e.useRef(null),E=e.useRef(null),[W,L]=e.useState(!0),[g,D]=e.useState(!1),C=e.useRef([]),H=e.useRef([]),P=e.useRef([]),B=e.useRef(0),Q=e.useRef(l);e.useEffect(()=>{const h=Y.current;if(!h)return;const x=h.getBoundingClientRect(),i=window.devicePixelRatio||1;h.width=x.width*i,h.height=x.height*i;const a=h.getContext("2d");a&&(a.scale(i,i),E.current=a,O())},[]);const U=e.useCallback(()=>{if(!(!f||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(5)}catch{}},[f]),O=e.useCallback(()=>{const h=Y.current,x=E.current;if(!h||!x)return;const i=h.getBoundingClientRect();x.fillStyle=b,x.fillRect(0,0,i.width,i.height),N&&(x.strokeStyle=y,x.lineWidth=1,x.setLineDash([5,5]),x.beginPath(),x.moveTo(20,i.height*.7),x.lineTo(i.width-20,i.height*.7),x.stroke(),x.setLineDash([]))},[b,N,y]),K=e.useCallback(()=>{O();const h=E.current;h&&H.current.forEach(x=>{if(!(x.length<2)){h.strokeStyle=c,h.fillStyle=c,h.lineCap="round",h.lineJoin="round";for(let i=1;i<x.length;i++){const a=x[i-1],k=x[i],$=dt(a,k),q=Math.max(o,Math.min(d,d/($+1)));h.lineWidth=q,h.beginPath(),h.moveTo(a.x,a.y),h.lineTo(k.x,k.y),h.stroke()}}})},[O,c,o,d]),Z=e.useCallback(h=>Math.max(o,d/(h*10+1)),[o,d]),ee=e.useCallback(h=>{const x=E.current;x&&(x.fillStyle=c,x.beginPath(),x.arc(h.x,h.y,l/2,0,Math.PI*2),x.fill())},[c,l]),I=e.useCallback((h,x,i)=>{const a=E.current;a&&(a.strokeStyle=c,a.lineWidth=i,a.lineCap="round",a.lineJoin="round",a.beginPath(),a.moveTo(h.x,h.y),a.lineTo(x.x,x.y),a.stroke())},[c]),V=e.useCallback(h=>{const x=Y.current;if(!x)return{x:0,y:0,time:Date.now()};const i=x.getBoundingClientRect();return{x:h.clientX-i.left,y:h.clientY-i.top,pressure:R?h.pressure:void 0,time:Date.now()}},[R]),F=e.useCallback(h=>{if(j)return;h.preventDefault(),h.currentTarget.setPointerCapture(h.pointerId),D(!0);const x=V(h);C.current=[x],B.current=0,Q.current=l,P.current=[],ee(x),S==null||S(),U()},[j,V,l,ee,S,U]),X=e.useCallback(h=>{if(!g||j)return;const x=V(h),i=C.current;if(i.length===0)return;const a=i[i.length-1],k=dt(a,x),$=u*k+(1-u)*B.current,q=Z($),_=(Q.current+q)/2,re=x.pressure!==void 0?_*Math.max(.5,x.pressure):_;I(a,x,re),i.push(x),B.current=$,Q.current=q},[g,j,V,u,Z,I]),v=e.useCallback(h=>{g&&(h.currentTarget.releasePointerCapture(h.pointerId),D(!1),C.current.length>0&&(H.current.push([...C.current]),C.current=[],L(!1),p==null||p(!1)),M==null||M())},[g,p,M]);return e.useImperativeHandle(A,()=>({clear:()=>{H.current=[],P.current=[],C.current=[],O(),L(!0),p==null||p(!0)},isEmpty:()=>W,toData:()=>[...H.current],fromData:h=>{H.current=h,P.current=[],L(h.length===0),K(),p==null||p(h.length===0)},toDataURL:(h="png",x=1)=>{const i=Y.current;if(!i)return"";if(h==="svg"){const k=i.getBoundingClientRect();let $="";H.current.forEach(_=>{if(_.length<2)return;let re=`M ${_[0].x} ${_[0].y}`;for(let ie=1;ie<_.length;ie++)re+=` L ${_[ie].x} ${_[ie].y}`;$+=`<path d="${re}" stroke="${c}" stroke-width="${l}" fill="none" stroke-linecap="round" stroke-linejoin="round"/>`});const q=`<svg xmlns="http://www.w3.org/2000/svg" width="${k.width}" height="${k.height}" viewBox="0 0 ${k.width} ${k.height}">${$}</svg>`;return`data:image/svg+xml;base64,${btoa(q)}`}if(h==="json")return`data:application/json;base64,${btoa(JSON.stringify(H.current))}`;const a=h==="jpeg"?"image/jpeg":"image/png";return i.toDataURL(a,x)},toSVG:()=>{const h=Y.current;if(!h)return"";const x=h.getBoundingClientRect();let i="";return H.current.forEach(a=>{if(a.length<2)return;let k=`M ${a[0].x} ${a[0].y}`;for(let $=1;$<a.length;$++)k+=` L ${a[$].x} ${a[$].y}`;i+=`<path d="${k}" stroke="${c}" stroke-width="${l}" fill="none" stroke-linecap="round" stroke-linejoin="round"/>`}),`<svg xmlns="http://www.w3.org/2000/svg" width="${x.width}" height="${x.height}" viewBox="0 0 ${x.width} ${x.height}">${i}</svg>`},toBlob:(h="png",x=1)=>new Promise(i=>{const a=Y.current;if(!a){i(null);return}const k=h==="jpeg"?"image/jpeg":"image/png";a.toBlob(i,k,x)}),undo:()=>{if(H.current.length===0)return;const h=H.current.pop();h&&P.current.push(h);const x=H.current.length===0;L(x),K(),p==null||p(x)},redo:()=>{if(P.current.length===0)return;const h=P.current.pop();h&&H.current.push(h),L(!1),K(),p==null||p(!1)}}),[W,O,K,c,l,p]),t.jsxs("div",{className:`nice-signature-pad ${j?"nice-signature-pad--disabled":""} ${T}`,...w,children:[t.jsx("canvas",{ref:Y,className:"nice-signature-pad-canvas",style:{width:r,height:s,backgroundColor:b,touchAction:"none"},onPointerDown:F,onPointerMove:X,onPointerUp:v,onPointerCancel:v,onPointerLeave:v}),W&&m&&t.jsx("div",{className:"nice-signature-pad-placeholder",children:m})]})}),Wr=e.forwardRef(function({width:r="100%",height:s=300,backgroundColor:c="var(--bg-primary, #ffffff)",strokeColor:l="var(--text-primary, #1f2937)",strokeWidth:o=4,tool:d="pen",lineCap:u="round",opacity:b=1,penPressure:N=!0,haptic:y=!0,maxHistory:j=50,disabled:R=!1,onChange:f,onToolChange:m,className:p="",...S},M){const T=e.useRef(null),w=e.useRef(null),[A,Y]=e.useState(!1),[E,W]=e.useState(d),L=e.useRef([]),g=e.useRef(-1),D=e.useRef(null),C=e.useRef(null),H=e.useRef(null);e.useEffect(()=>{W(d)},[d]),e.useEffect(()=>{const v=T.current;if(!v)return;const h=v.getBoundingClientRect(),x=window.devicePixelRatio||1;v.width=h.width*x,v.height=h.height*x;const i=v.getContext("2d",{willReadFrequently:!0});i&&(i.scale(x,x),w.current=i,i.fillStyle=c,i.fillRect(0,0,h.width,h.height),P())},[c]);const P=e.useCallback(()=>{const v=T.current,h=w.current;if(!v||!h)return;const x=v.getBoundingClientRect(),i=h.getImageData(0,0,x.width,x.height);g.current<L.current.length-1&&(L.current=L.current.slice(0,g.current+1)),L.current.push({type:"stroke",imageData:i}),L.current.length>j&&L.current.shift(),g.current=L.current.length-1},[j]),B=e.useCallback(v=>{const h=w.current;if(!h||v<0||v>=L.current.length)return;const x=L.current[v];h.putImageData(x.imageData,0,0)},[]),Q=e.useCallback(()=>{if(!(!y||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(5)}catch{}},[y]),U=e.useCallback(v=>{const h=T.current;if(!h)return{x:0,y:0};const x=h.getBoundingClientRect();return{x:v.clientX-x.left,y:v.clientY-x.top,pressure:N?v.pressure:void 0}},[N]),O=e.useCallback(()=>{const v=w.current;v&&(v.lineCap=u,v.lineJoin="round",v.globalAlpha=b,E==="eraser"?(v.globalCompositeOperation="destination-out",v.strokeStyle="var(--nice-overlay-90, rgba(0, 0, 0, 1))",v.lineWidth=o*2):E==="brush"?(v.globalCompositeOperation="source-over",v.strokeStyle=l,v.lineWidth=o):E==="marker"?(v.globalCompositeOperation="multiply",v.strokeStyle=l,v.lineWidth=o*1.5,v.globalAlpha=.5):(v.globalCompositeOperation="source-over",v.strokeStyle=l,v.lineWidth=o))},[E,l,o,u,b]),K=e.useCallback((v,h)=>{const x=w.current;x&&(O(),h.pressure!==void 0&&E!=="eraser"&&(x.lineWidth=o*Math.max(.3,h.pressure)),x.beginPath(),x.moveTo(v.x,v.y),x.lineTo(h.x,h.y),x.stroke())},[O,o,E]),Z=e.useCallback((v,h)=>{const x=w.current;if(!x||!H.current)return;x.putImageData(H.current,0,0),O();const i=h.x-v.x,a=h.y-v.y;if(x.beginPath(),E==="line")x.moveTo(v.x,v.y),x.lineTo(h.x,h.y),x.stroke();else if(E==="rectangle")x.strokeRect(v.x,v.y,i,a);else if(E==="circle"){const k=Math.sqrt(i*i+a*a);x.arc(v.x,v.y,k,0,Math.PI*2),x.stroke()}},[O,E]),ee=e.useCallback((v,h,x)=>{const i=T.current,a=w.current;if(!i||!a)return;const k=i.getBoundingClientRect(),$=a.getImageData(0,0,k.width,k.height),q=$.data,_=document.createElement("div");_.style.color=x,document.body.appendChild(_);const re=getComputedStyle(_).color;document.body.removeChild(_);const ie=re.match(/\d+/g);if(!ie)return;const[se,oe,ne]=ie.map(Number),te=(Math.floor(h)*k.width+Math.floor(v))*4,ae=q[te],z=q[te+1],G=q[te+2],J=q[te+3];if(ae===se&&z===oe&&G===ne)return;const ce=[[Math.floor(v),Math.floor(h)]],le=new Set;for(;ce.length>0;){const[ue,fe]=ce.pop(),he=(fe*k.width+ue)*4;if(ue<0||ue>=k.width||fe<0||fe>=k.height||le.has(he))continue;const Ae=q[he],Kt=q[he+1],Jt=q[he+2],Qt=q[he+3],je=30;Math.abs(Ae-ae)>je||Math.abs(Kt-z)>je||Math.abs(Jt-G)>je||Math.abs(Qt-J)>je||(le.add(he),q[he]=se,q[he+1]=oe,q[he+2]=ne,q[he+3]=255,ce.push([ue+1,fe],[ue-1,fe],[ue,fe+1],[ue,fe-1]))}a.putImageData($,0,0)},[]),I=e.useCallback(v=>{if(R)return;v.preventDefault(),v.currentTarget.setPointerCapture(v.pointerId);const h=U(v);if(E==="fill"){ee(h.x,h.y,l),P(),f==null||f(),Q();return}if(Y(!0),D.current=h,C.current=h,E==="line"||E==="rectangle"||E==="circle"){const x=T.current,i=w.current;if(x&&i){const a=x.getBoundingClientRect();H.current=i.getImageData(0,0,a.width,a.height)}}else{const x=w.current;x&&(O(),x.beginPath(),x.arc(h.x,h.y,o/2,0,Math.PI*2),x.fill())}Q()},[R,U,E,ee,l,P,f,Q,O,o]),V=e.useCallback(v=>{if(!A||R)return;const h=U(v);E==="line"||E==="rectangle"||E==="circle"?D.current&&Z(D.current,h):C.current&&K(C.current,h),C.current=h},[A,R,U,E,Z,K]),F=e.useCallback(v=>{A&&(v.currentTarget.releasePointerCapture(v.pointerId),Y(!1),(E==="line"||E==="rectangle"||E==="circle")&&D.current&&C.current&&Z(D.current,C.current),H.current=null,D.current=null,C.current=null,P(),f==null||f())},[A,E,Z,P,f]);e.useImperativeHandle(M,()=>({clear:()=>{const v=T.current,h=w.current;if(!v||!h)return;const x=v.getBoundingClientRect();h.fillStyle=c,h.globalCompositeOperation="source-over",h.fillRect(0,0,x.width,x.height),P(),f==null||f()},undo:()=>{g.current>0&&(g.current--,B(g.current),f==null||f())},redo:()=>{g.current<L.current.length-1&&(g.current++,B(g.current),f==null||f())},canUndo:()=>g.current>0,canRedo:()=>g.current<L.current.length-1,toDataURL:(v="png",h=1)=>{const x=T.current;if(!x)return"";const i=v==="jpeg"?"image/jpeg":"image/png";return x.toDataURL(i,h)},toBlob:(v="png",h=1)=>new Promise(x=>{const i=T.current;if(!i){x(null);return}const a=v==="jpeg"?"image/jpeg":"image/png";i.toBlob(x,a,h)}),fromDataURL:async v=>{const h=T.current,x=w.current;if(!(!h||!x))return new Promise(i=>{const a=new Image;a.onload=()=>{const k=h.getBoundingClientRect();x.drawImage(a,0,0,k.width,k.height),P(),i()},a.src=v})},fill:v=>{const h=T.current,x=w.current;if(!h||!x)return;const i=h.getBoundingClientRect();x.fillStyle=v,x.globalCompositeOperation="source-over",x.fillRect(0,0,i.width,i.height),P(),f==null||f()},getTool:()=>E,setTool:v=>{W(v),m==null||m(v)}}),[c,P,B,E,m,f]);const X=()=>{switch(E){case"eraser":return"cell";case"fill":return"crosshair";default:return"crosshair"}};return t.jsx("div",{className:`nice-touch-drawing ${R?"nice-touch-drawing--disabled":""} ${p}`,...S,children:t.jsx("canvas",{ref:T,className:"nice-touch-drawing-canvas",style:{width:r,height:s,cursor:X(),touchAction:"none"},onPointerDown:I,onPointerMove:V,onPointerUp:F,onPointerCancel:F,onPointerLeave:F})})}),Or=["var(--text-primary, #1f2937)","var(--color-error, #ef4444)","var(--nice-warning, #f97316)","var(--color-warning, #eab308)","var(--color-success, #22c55e)","var(--color-primary, #3b82f6)","var(--color-accent, #8b5cf6)","var(--color-accent-pink, #ec4899)","var(--bg-primary, #ffffff)","var(--text-primary, #000000)"],Ur={pen:"✏️",brush:"🖌️",marker:"🖍️",eraser:"🧹",fill:"🪣",line:"📏",rectangle:"⬜",circle:"⭕"},Xr=e.forwardRef(function({tool:r,onToolChange:s,color:c,onColorChange:l,strokeWidth:o,onStrokeWidthChange:d,onUndo:u,onRedo:b,onClear:N,canUndo:y=!0,canRedo:j=!0,colors:R=Or,className:f="",...m},p){const S=["pen","brush","marker","eraser","fill","line","rectangle","circle"];return t.jsxs("div",{ref:p,className:`nice-drawing-toolbar ${f}`,...m,children:[t.jsx("div",{className:"nice-drawing-toolbar-section",children:S.map(M=>t.jsx("button",{type:"button",className:`nice-drawing-tool-btn ${r===M?"active":""}`,onClick:()=>s(M),title:M,children:Ur[M]},M))}),t.jsx("div",{className:"nice-drawing-toolbar-divider"}),t.jsx("div",{className:"nice-drawing-toolbar-section nice-drawing-colors",children:R.map((M,T)=>t.jsx("button",{type:"button",className:`nice-drawing-color-btn ${c===M?"active":""}`,style:{backgroundColor:M,borderColor:M==="var(--bg-primary, #ffffff)"?"var(--border-color, #e5e7eb)":M},onClick:()=>l(M),title:M},T))}),t.jsx("div",{className:"nice-drawing-toolbar-divider"}),t.jsx("div",{className:"nice-drawing-toolbar-section",children:t.jsxs("label",{className:"nice-drawing-stroke-label",children:[t.jsxs("span",{children:[o,"px"]}),t.jsx("input",{type:"range",min:1,max:50,value:o,onChange:M=>d(Number(M.target.value)),className:"nice-drawing-stroke-slider"})]})}),t.jsx("div",{className:"nice-drawing-toolbar-divider"}),t.jsxs("div",{className:"nice-drawing-toolbar-section nice-drawing-actions",children:[u&&t.jsx("button",{type:"button",className:"nice-drawing-action-btn",onClick:u,disabled:!y,title:"Undo",children:"↩️"}),b&&t.jsx("button",{type:"button",className:"nice-drawing-action-btn",onClick:b,disabled:!j,title:"Redo",children:"↪️"}),N&&t.jsx("button",{type:"button",className:"nice-drawing-action-btn danger",onClick:N,title:"Clear",children:"🗑️"})]})]})}),$e={en:{code:"en",name:"English",nativeName:"English",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},pl:{code:"pl",name:"Polish",nativeName:"Polski",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{a:["ą"],c:["ć"],e:["ę"],l:["ł"],n:["ń"],o:["ó"],s:["ś"],z:["ź","ż"]}},de:{code:"de",name:"German",nativeName:"Deutsch",rows:[["q","w","e","r","t","z","u","i","o","p","ü"],["a","s","d","f","g","h","j","k","l","ö","ä"],["y","x","c","v","b","n","m","ß"]],accents:{a:["ä"],o:["ö"],u:["ü"],s:["ß"]}},fr:{code:"fr",name:"French",nativeName:"Français",rows:[["a","z","e","r","t","y","u","i","o","p"],["q","s","d","f","g","h","j","k","l","m"],["w","x","c","v","b","n"]],accents:{a:["à","â","æ"],e:["é","è","ê","ë"],i:["î","ï"],o:["ô","œ"],u:["ù","û","ü"],c:["ç"]}},es:{code:"es",name:"Spanish",nativeName:"Español",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l","ñ"],["z","x","c","v","b","n","m"]],accents:{a:["á"],e:["é"],i:["í"],o:["ó"],u:["ú","ü"],n:["ñ"]}},it:{code:"it",name:"Italian",nativeName:"Italiano",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{a:["à"],e:["è","é"],i:["ì"],o:["ò"],u:["ù"]}},pt:{code:"pt",name:"Portuguese",nativeName:"Português",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l","ç"],["z","x","c","v","b","n","m"]],accents:{a:["á","ã","â","à"],e:["é","ê"],i:["í"],o:["ó","õ","ô"],u:["ú"],c:["ç"]}},ru:{code:"ru",name:"Russian",nativeName:"Русский",rows:[["й","ц","у","к","е","н","г","ш","щ","з","х","ъ"],["ф","ы","в","а","п","р","о","л","д","ж","э"],["я","ч","с","м","и","т","ь","б","ю"]]},uk:{code:"uk",name:"Ukrainian",nativeName:"Українська",rows:[["й","ц","у","к","е","н","г","ш","щ","з","х","ї"],["ф","і","в","а","п","р","о","л","д","ж","є"],["я","ч","с","м","и","т","ь","б","ю","ґ"]]},cs:{code:"cs",name:"Czech",nativeName:"Čeština",rows:[["q","w","e","r","t","z","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["y","x","c","v","b","n","m"]],accents:{a:["á"],c:["č"],d:["ď"],e:["é","ě"],i:["í"],n:["ň"],o:["ó"],r:["ř"],s:["š"],t:["ť"],u:["ú","ů"],y:["ý"],z:["ž"]}},tr:{code:"tr",name:"Turkish",nativeName:"Türkçe",rows:[["q","w","e","r","t","y","u","ı","o","p","ğ","ü"],["a","s","d","f","g","h","j","k","l","ş","i"],["z","x","c","v","b","n","m","ö","ç"]]},nl:{code:"nl",name:"Dutch",nativeName:"Nederlands",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{e:["é","ë"],i:["ï"],o:["ö"],u:["ü"]}},sv:{code:"sv",name:"Swedish",nativeName:"Svenska",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","ö","ä"],["z","x","c","v","b","n","m"]]},no:{code:"no",name:"Norwegian",nativeName:"Norsk",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","ø","æ"],["z","x","c","v","b","n","m"]]},da:{code:"da",name:"Danish",nativeName:"Dansk",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","æ","ø"],["z","x","c","v","b","n","m"]]},fi:{code:"fi",name:"Finnish",nativeName:"Suomi",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","ö","ä"],["z","x","c","v","b","n","m"]]},ro:{code:"ro",name:"Romanian",nativeName:"Română",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{a:["ă","â"],i:["î"],s:["ș"],t:["ț"]}},hr:{code:"hr",name:"Croatian",nativeName:"Hrvatski",rows:[["q","w","e","r","t","z","u","i","o","p","š","đ"],["a","s","d","f","g","h","j","k","l","č","ć"],["y","x","c","v","b","n","m","ž"]]},el:{code:"el",name:"Greek",nativeName:"Ελληνικά",rows:[["ς","ε","ρ","τ","υ","θ","ι","ο","π"],["α","σ","δ","φ","γ","η","ξ","κ","λ"],["ζ","χ","ψ","ω","β","ν","μ"]],accents:{α:["ά"],ε:["έ"],η:["ή"],ι:["ί","ϊ"],ο:["ό"],υ:["ύ","ϋ"],ω:["ώ"]}},hu:{code:"hu",name:"Hungarian",nativeName:"Magyar",rows:[["q","w","e","r","t","z","u","i","o","p","ő","ú"],["a","s","d","f","g","h","j","k","l","é","á"],["y","x","c","v","b","n","m","ö","ü","ó"]],accents:{a:["á"],e:["é"],i:["í"],o:["ó","ö","ő"],u:["ú","ü","ű"]}},sk:{code:"sk",name:"Slovak",nativeName:"Slovenčina",rows:[["q","w","e","r","t","z","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["y","x","c","v","b","n","m"]],accents:{a:["á","ä"],c:["č"],d:["ď"],e:["é"],i:["í"],l:["ĺ","ľ"],n:["ň"],o:["ó","ô"],r:["ŕ"],s:["š"],t:["ť"],u:["ú"],y:["ý"],z:["ž"]}},bg:{code:"bg",name:"Bulgarian",nativeName:"Български",rows:[["я","в","е","р","т","ъ","у","и","о","п","ш","щ"],["а","с","д","ф","г","х","й","к","л"],["з","ь","ц","ж","б","н","м","ч","ю"]]},sr:{code:"sr",name:"Serbian",nativeName:"Српски",rows:[["љ","њ","е","р","т","з","у","и","о","п","ш","ђ"],["а","с","д","ф","г","х","ј","к","л","ч","ћ"],["ж","џ","ц","в","б","н","м"]]},ja:{code:"ja",name:"Japanese (Romaji)",nativeName:"日本語",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},ko:{code:"ko",name:"Korean (Romaji)",nativeName:"한국어",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},zh:{code:"zh",name:"Chinese (Pinyin)",nativeName:"中文",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},ar:{code:"ar",name:"Arabic",nativeName:"العربية",rows:[["ض","ص","ث","ق","ف","غ","ع","ه","خ","ح","ج","د"],["ش","س","ي","ب","ل","ا","ت","ن","م","ك","ط"],["ئ","ء","ؤ","ر","لا","ى","ة","و","ز","ظ"]]},he:{code:"he",name:"Hebrew",nativeName:"עברית",rows:[["/","'","ק","ר","א","ט","ו","ן","ם","פ"],["ש","ד","ג","כ","ע","י","ח","ל","ך","ף"],["ז","ס","ב","ה","נ","מ","צ","ת","ץ"]]}},me={value:"Backspace",label:"⌫",type:"backspace",width:1.5},Te={value:"Enter",label:"⏎",type:"enter",width:1.5},Re={value:" ",label:"Space",type:"space",width:5},De={value:"Shift",label:"⇧",type:"shift",width:1.5},_r={value:"CapsLock",label:"⇪",type:"caps",width:1.75},qr={value:"Tab",label:"⇥",type:"tab",width:1.5},Ve=[{value:"1"},{value:"2"},{value:"3"},{value:"4"},{value:"5"},{value:"6"},{value:"7"},{value:"8"},{value:"9"},{value:"0"},{value:"-"},{value:"="}],Gr=[{value:"!"},{value:"@"},{value:"#"},{value:"$"},{value:"%"},{value:"^"},{value:"&"},{value:"*"},{value:"("},{value:")"}],Kr=[{value:"-"},{value:"_"},{value:"="},{value:"+"},{value:"["},{value:"]"},{value:"{"},{value:"}"},me],Jr=[{value:"Esc",label:"Esc",type:"fn",width:1},{value:"F1",label:"F1",type:"fn"},{value:"F2",label:"F2",type:"fn"},{value:"F3",label:"F3",type:"fn"},{value:"F4",label:"F4",type:"fn"},{value:"F5",label:"F5",type:"fn"},{value:"F6",label:"F6",type:"fn"},{value:"F7",label:"F7",type:"fn"},{value:"F8",label:"F8",type:"fn"},{value:"F9",label:"F9",type:"fn"},{value:"F10",label:"F10",type:"fn"},{value:"F11",label:"F11",type:"fn"},{value:"F12",label:"F12",type:"fn"}],Ue=[[{value:"1"},{value:"2"},{value:"3"}],[{value:"4"},{value:"5"},{value:"6"}],[{value:"7"},{value:"8"},{value:"9"}],[{value:".",width:1},{value:"0"},me]],Qr=[[{value:"7"},{value:"8"},{value:"9"},{value:"/",type:"special"}],[{value:"4"},{value:"5"},{value:"6"},{value:"*",type:"special"}],[{value:"1"},{value:"2"},{value:"3"},{value:"-",type:"special"}],[{value:"0",width:2},{value:"."},{value:"+",type:"special"}],[{value:"C",label:"C",type:"fn"},me,{value:"=",type:"enter",width:2}]],Zr=[[{value:"1",label:"1"},{value:"2",label:"2 ABC"},{value:"3",label:"3 DEF"}],[{value:"4",label:"4 GHI"},{value:"5",label:"5 JKL"},{value:"6",label:"6 MNO"}],[{value:"7",label:"7 PQRS"},{value:"8",label:"8 TUV"},{value:"9",label:"9 WXYZ"}],[{value:"*",label:"*"},{value:"0",label:"0 +"},{value:"#",label:"#"}],[{value:"Call",label:"📞",type:"enter",width:1.5},me]],es=[[{value:"1"},{value:"2"},{value:"3"}],[{value:"4"},{value:"5"},{value:"6"}],[{value:"7"},{value:"8"},{value:"9"}],[{value:"Clear",label:"C",type:"fn"},{value:"0"},me]];function ts(n,r,s,c,l){const o=$e[n]||$e.en,[d,u,b]=o.rows;if(r==="minimal")return Ue;if(s){const j=[Ve.slice(0,10),Gr,Kr],R=[{value:"ABC",label:"ABC",type:"fn",width:1.5}];return c&&R.push({value:"Lang",label:"🌐",type:"lang",width:1}),R.push({value:",",width:1}),R.push({...Re,width:c?3.5:4}),R.push({value:".",width:1}),R.push({...Te,...l?{label:l}:{}}),j.push(R),j}if(r==="compact"){const j=[d.map(f=>({value:f})),u.map(f=>({value:f})),[De,...b.map(f=>({value:f})),me]],R=[{value:"123",label:"123",type:"fn",width:1.5}];return c&&R.push({value:"Lang",label:"🌐",type:"lang",width:1}),R.push({value:",",width:1}),R.push({...Re,width:c?3.5:4}),R.push({value:".",width:1}),R.push({...Te,...l?{label:l}:{}}),j.push(R),j}if(r==="standard"){const j=[Ve.slice(0,10),d.map(f=>({value:f})),u.map(f=>({value:f})),[De,...b.map(f=>({value:f})),me]],R=[{value:"#+=",label:"#+=",type:"fn",width:1.5}];return c&&R.push({value:"Lang",label:"🌐",type:"lang",width:1}),R.push({value:",",width:1}),R.push({...Re,width:c?3:4}),R.push({value:".",width:1}),R.push({...Te,...l?{label:l}:{}}),j.push(R),j}const N=[Jr,[...Ve,me],[qr,...d.map(j=>({value:j}))],[_r,...u.map(j=>({value:j})),{...Te,width:1.75,...l?{label:l}:{}}],[{...De,width:2.25},...b.map(j=>({value:j})),{...De,width:2.25}]],y=[{value:"#+=",label:"#+=",type:"fn",width:1.5}];if(c&&y.push({value:"Lang",label:"🌐",type:"lang",width:1}),y.push({...Re,width:c?6:7}),y.push({value:",",width:1}),y.push({value:".",width:1}),N.push(y),o.accents){const j=[];for(const[,R]of Object.entries(o.accents))for(const f of R)j.find(m=>m.value===f)||j.push({value:f});j.length>0&&N.push(j)}return N}const He=e.forwardRef(function({layout:r="qwerty",customLayout:s,mode:c="standard",languages:l,activeLanguage:o,onLanguageChange:d,value:u="",maxLength:b,theme:N="system",haptic:y=!0,sound:j=!1,onKeyPress:R,onChange:f,onSubmit:m,disabled:p=!1,showPreview:S=!1,previewPlaceholder:M="Type here...",masked:T=!1,showLanguageSwitcher:w,enterLabel:A,className:Y="",...E},W){const L=e.useMemo(()=>l&&l.length>0?l:["en"],[l]),[g,D]=e.useState(L[0]),C=o??g,[H,P]=e.useState(!1),[B,Q]=e.useState(!1),[U,O]=e.useState(!1),K=w??L.length>1,Z=e.useMemo(()=>r==="custom"&&s?s.rows:r!=="qwerty"?{numeric:Ue,numpad:Qr,phone:Zr,pin:es}[r]||Ue:ts(C,c,U,K,A),[r,s,C,c,U,K,A]),ee=e.useCallback(()=>{const i=L.indexOf(C),a=L[(i+1)%L.length];D(a),d==null||d(a)},[L,C,d]),I=e.useCallback(()=>{if(!(!y||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[y]),V=e.useCallback(()=>{if(j)try{const i=new(window.AudioContext||window.webkitAudioContext),a=i.createOscillator(),k=i.createGain();a.connect(k),k.connect(i.destination),a.frequency.value=1e3,a.type="sine",k.gain.value=.1,a.start(),a.stop(i.currentTime+.05)}catch{}},[j]),F=e.useCallback(i=>{if(p)return;I(),V();let a=u;switch(i.type){case"backspace":a=u.slice(0,-1);break;case"enter":m==null||m(u);return;case"shift":P(k=>!k);return;case"caps":Q(k=>!k);return;case"tab":a=u+" ";break;case"lang":ee();return;case"fn":if(i.value==="123"||i.value==="ABC"||i.value==="#+="||i.value==="#+=")O(k=>!k);else if(i.value==="Clear"||i.value==="C")a="";else{R==null||R(i.value);return}return;case"space":a=u+" ";break;default:{let k=i.value;(H||B)&&k.length===1&&(k=k.toUpperCase()),a=u+k,H&&!B&&P(!1)}}b&&a.length>b||(R==null||R(i.value),f==null||f(a))},[p,u,b,H,B,I,V,R,f,m,ee]),X=e.useMemo(()=>T?"•".repeat(u.length):u,[u,T]),v=H||B,h=N==="system"?"":`nice-touch-keyboard--${N}`,x=$e[C];return t.jsxs("div",{ref:W,className:["nice-touch-keyboard",`nice-touch-keyboard--${c}`,h,p?"nice-touch-keyboard--disabled":"",Y].filter(Boolean).join(" "),"data-layout":r,"data-language":C,dir:C==="ar"||C==="he"?"rtl":void 0,...E,children:[K&&L.length>1&&t.jsx("div",{className:"nice-touch-keyboard-langbar",children:L.map(i=>{const a=$e[i];return t.jsx("button",{type:"button",className:`nice-touch-keyboard-langbar__btn ${i===C?"active":""}`,onClick:()=>{D(i),d==null||d(i)},disabled:p,children:(a==null?void 0:a.nativeName)??i.toUpperCase()},i)})}),S&&t.jsxs("div",{className:"nice-touch-keyboard-preview",children:[X||t.jsx("span",{className:"nice-touch-keyboard-placeholder",children:M}),t.jsx("span",{className:"nice-touch-keyboard-cursor"})]}),t.jsx("div",{className:"nice-touch-keyboard-keys",children:Z.map((i,a)=>t.jsx("div",{className:"nice-touch-keyboard-row",children:i.map((k,$)=>{var ie;const q=k.type==="shift"&&H||k.type==="caps"&&B||k.type==="lang"||k.value==="123"&&U||k.value==="ABC"&&!U||k.value==="#+="&&U;let _=k.label||k.value;v&&!k.type&&_.length===1&&(_=_.toUpperCase());const re=!k.type&&k.value.length===1&&((ie=x==null?void 0:x.accents)==null?void 0:ie[k.value.toLowerCase()]);return t.jsx("button",{type:"button",className:["nice-touch-keyboard-key",`nice-touch-keyboard-key--${k.type||"char"}`,q?"active":"",re?"nice-touch-keyboard-key--has-accent":""].filter(Boolean).join(" "),style:{flex:k.width||1},onClick:()=>F(k),disabled:p,"aria-label":k.type==="backspace"?"Backspace":k.type==="enter"?"Enter":void 0,children:k.icon||_},$)})},a))}),t.jsxs("div",{className:"nice-touch-keyboard-status",children:[B&&t.jsx("span",{className:"nice-touch-keyboard-status__item",children:"CAPS"}),x&&t.jsx("span",{className:"nice-touch-keyboard-status__item",children:x.nativeName})]})]})}),ns=e.forwardRef(function(r,s){return t.jsx(He,{ref:s,layout:"pin",masked:!0,maxLength:r.maxLength||6,...r})}),rs=e.forwardRef(function(r,s){return t.jsx(He,{ref:s,layout:"numpad",...r})}),ss=e.forwardRef(function(r,s){return t.jsx(He,{ref:s,layout:"phone",...r})}),_t=e.createContext(null);function cs(n,r=500){const s=e.useRef(),c=e.useRef(null),l=e.useCallback(u=>{c.current={x:u.clientX,y:u.clientY},s.current=setTimeout(()=>{n(u)},r)},[n,r]),o=e.useCallback(u=>{if(!c.current)return;const b=Math.abs(u.clientX-c.current.x),N=Math.abs(u.clientY-c.current.y);(b>10||N>10)&&d()},[]),d=e.useCallback(()=>{s.current&&(clearTimeout(s.current),s.current=void 0),c.current=null},[]);return e.useEffect(()=>()=>{s.current&&clearTimeout(s.current)},[]),{onPointerDown:l,onPointerMove:o,onPointerUp:d,onPointerCancel:d,onPointerLeave:d}}const ft=({item:n,onSelect:r})=>{const s=e.useContext(_t),c=e.useRef(null),[l,o]=e.useState(null),d=e.useCallback(()=>{var y;if(!n.disabled)if(n.children&&n.children.length>0){if(c.current){const j=c.current.getBoundingClientRect();s==null||s.openSubmenu(n.id,{x:j.right,y:j.top})}}else(y=n.onClick)==null||y.call(n),r(n)},[n,r,s]),u=e.useCallback(()=>{if(n.children&&n.children.length>0&&c.current){const y=c.current.getBoundingClientRect();s==null||s.openSubmenu(n.id,{x:y.right,y:y.top})}},[n,s]),b=n.children&&n.children.length>0,N=(s==null?void 0:s.activeSubmenu)===n.id;return t.jsxs(t.Fragment,{children:[t.jsxs("button",{ref:c,type:"button",className:`nice-touch-menu-item ${n.disabled?"disabled":""} ${n.danger?"danger":""} ${N?"active":""}`,onClick:d,onPointerEnter:u,disabled:n.disabled,role:"menuitem","aria-haspopup":b?"menu":void 0,"aria-expanded":b?N:void 0,children:[n.icon&&t.jsx("span",{className:"nice-touch-menu-item-icon",children:n.icon}),t.jsx("span",{className:"nice-touch-menu-item-label",children:n.label}),n.shortcut&&t.jsx("span",{className:"nice-touch-menu-item-shortcut",children:n.shortcut}),b&&t.jsx("span",{className:"nice-touch-menu-item-arrow",children:"›"})]}),n.divider&&t.jsx("div",{className:"nice-touch-menu-divider",role:"separator"})]})},qt=e.forwardRef(function({items:r,open:s,position:c,onClose:l,haptic:o=!0,className:d="",...u},b){var A;const N=e.useRef(null),[y,j]=e.useState(null),[R,f]=e.useState(null),[m,p]=e.useState(c);e.useEffect(()=>{if(!s||!N.current)return;const E=N.current.getBoundingClientRect(),W={width:window.innerWidth,height:window.innerHeight};let L=c.x,g=c.y;L+E.width>W.width-8&&(L=W.width-E.width-8),L<8&&(L=8),g+E.height>W.height-8&&(g=W.height-E.height-8),g<8&&(g=8),p({x:L,y:g})},[s,c]),e.useEffect(()=>{if(!s)return;const Y=W=>{N.current&&!N.current.contains(W.target)&&l()},E=W=>{W.key==="Escape"&&l()};return document.addEventListener("mousedown",Y),document.addEventListener("keydown",E),()=>{document.removeEventListener("mousedown",Y),document.removeEventListener("keydown",E)}},[s,l]);const S=e.useCallback(()=>{if(!(!o||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[o]),M=e.useCallback(Y=>{S(),l()},[S,l]),T={close:l,openSubmenu:(Y,E)=>{j(Y),f(E)},closeSubmenu:()=>{j(null),f(null)},activeSubmenu:y};if(!s)return null;const w=y?(A=r.find(Y=>Y.id===y))==null?void 0:A.children:null;return t.jsx(_t.Provider,{value:T,children:t.jsxs("div",{ref:N,className:`nice-touch-menu-popover ${d}`,style:{left:m.x,top:m.y},role:"menu",...u,children:[r.map(Y=>t.jsx(ft,{item:Y,onSelect:M},Y.id)),w&&R&&t.jsx("div",{className:"nice-touch-menu-popover nice-touch-menu-submenu",style:{left:R.x-m.x,top:R.y-m.y},role:"menu",children:w.map(Y=>t.jsx(ft,{item:Y,onSelect:M},Y.id))})]})})}),is=e.forwardRef(function({items:r,trigger:s,longPress:c=!0,longPressDelay:l=500,enableContextMenu:o=!1,enableClick:d=!1,haptic:u=!0,disabled:b=!1,onOpen:N,onClose:y,className:j="",...R},f){const[m,p]=e.useState(!1),[S,M]=e.useState({x:0,y:0}),T=e.useRef(null),w=e.useCallback(()=>{if(!(!u||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(20)}catch{}},[u]),A=e.useCallback((g,D)=>{b||(w(),M({x:g,y:D}),p(!0),N==null||N())},[b,w,N]),Y=e.useCallback(()=>{p(!1),y==null||y()},[y]),E=cs(g=>{g.preventDefault(),A(g.clientX,g.clientY)},l),W=e.useCallback(g=>{if(!(!d||b)&&(g.preventDefault(),g.stopPropagation(),T.current)){const D=T.current.getBoundingClientRect();A(D.left,D.bottom+4)}},[d,b,A]),L=e.useCallback(g=>{!o||b||(g.preventDefault(),A(g.clientX,g.clientY))},[o,b,A]);return t.jsxs(t.Fragment,{children:[t.jsx("div",{ref:g=>{T.current=g,typeof f=="function"?f(g):f&&(f.current=g)},className:`nice-touch-menu-trigger ${b?"disabled":""} ${j}`,onClick:W,onContextMenu:L,...c&&!b?E:{},...R,children:s}),t.jsx(qt,{items:r,open:m,position:S,onClose:Y,haptic:u})]})}),as=e.forwardRef(function({items:r,open:s,onClose:c,title:l,cancelLabel:o="Cancel",haptic:d=!0,className:u="",...b},N){const y=e.useCallback(()=>{if(!(!d||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[d]),j=e.useCallback(m=>{var p;m.disabled||(y(),(p=m.onClick)==null||p.call(m),c())},[y,c]),R=e.useCallback(()=>{y(),c()},[y,c]),f=e.useCallback(m=>{m.target===m.currentTarget&&c()},[c]);return e.useEffect(()=>{if(!s)return;const m=p=>{p.key==="Escape"&&c()};return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[s,c]),s?t.jsx("div",{className:`nice-action-sheet-backdrop ${s?"open":""}`,onClick:f,children:t.jsxs("div",{ref:N,className:`nice-action-sheet ${u}`,role:"dialog","aria-modal":"true",...b,children:[t.jsxs("div",{className:"nice-action-sheet-content",children:[l&&t.jsx("div",{className:"nice-action-sheet-title",children:l}),r.map(m=>t.jsxs("button",{type:"button",className:`nice-action-sheet-item ${m.disabled?"disabled":""} ${m.danger?"danger":""}`,onClick:()=>j(m),disabled:m.disabled,children:[m.icon&&t.jsx("span",{className:"nice-action-sheet-item-icon",children:m.icon}),t.jsx("span",{className:"nice-action-sheet-item-label",children:m.label})]},m.id))]}),t.jsx("button",{type:"button",className:"nice-action-sheet-cancel",onClick:R,children:o})]})}):null});function ls({row:n,rowIndex:r,rowKey:s,columns:c,swipeActionsLeft:l=[],swipeActionsRight:o=[],selectable:d,selected:u,onSelect:b,onClick:N,haptic:y,swipeThreshold:j=80}){const[R,f]=e.useState(0),[m,p]=e.useState(!1),S=e.useRef(0),M=e.useRef(0),T=e.useRef(null),w=l.length>0,A=o.length>0,Y=e.useCallback(()=>{if(!(!y||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[y]),E=e.useCallback(C=>{!w&&!A||(S.current=C.touches[0].clientX,M.current=C.touches[0].clientX,p(!0))},[w,A]),W=e.useCallback(C=>{if(!m)return;M.current=C.touches[0].clientX;const H=M.current-S.current;let P=H;const B=w?j*l.length:0,Q=A?j*o.length:0;P>B&&(P=B),P<-Q&&(P=-Q),!w&&P>0&&(P=H*.2),!A&&P<0&&(P=H*.2),f(P)},[m,w,A,j,l.length,o.length]),L=e.useCallback(()=>{if(!m)return;p(!1);const C=j*.5;R>C&&w?(f(j*l.length),Y()):R<-C&&A?(f(-j*o.length),Y()):f(0)},[m,R,j,w,A,l.length,o.length,Y]),g=e.useCallback(C=>{Y(),C.onAction(n,r),f(0)},[n,r,Y]),D=e.useCallback(()=>{Math.abs(R)>10||(d&&b?b():N&&N())},[R,d,b,N]);return e.useEffect(()=>{if(R===0)return;const C=H=>{T.current&&!T.current.contains(H.target)&&f(0)};return document.addEventListener("click",C),()=>document.removeEventListener("click",C)},[R]),t.jsxs("tr",{ref:T,className:`nice-touch-table-row ${u?"selected":""} ${m?"swiping":""}`,onTouchStart:E,onTouchMove:W,onTouchEnd:L,onTouchCancel:L,onClick:D,"data-row-key":s,children:[w&&t.jsx("div",{className:"nice-touch-table-actions nice-touch-table-actions--left",style:{width:j*l.length},children:l.map(C=>t.jsxs("button",{type:"button",className:"nice-touch-table-action",style:{backgroundColor:C.color||"var(--color-primary, #3b82f6)",color:C.textColor||"var(--bg-primary, #ffffff)",width:j},onClick:()=>g(C),children:[C.icon&&t.jsx("span",{className:"action-icon",children:C.icon}),t.jsx("span",{className:"action-label",children:C.label})]},C.id))}),t.jsxs("div",{className:"nice-touch-table-row-content",style:{transform:`translateX(${R}px)`,transition:m?"none":"transform 0.2s ease-out"},children:[d&&t.jsx("td",{className:"nice-touch-table-cell nice-touch-table-cell--checkbox",children:t.jsx("input",{type:"checkbox",checked:u,onChange:()=>b==null?void 0:b(),onClick:C=>C.stopPropagation()})}),c.map(C=>{const H=typeof C.accessor=="function"?C.accessor(n):n[C.accessor],P=C.cell?C.cell(H,n,r):H;return t.jsx("td",{className:`nice-touch-table-cell ${C.sticky?"sticky":""}`,style:{width:C.width,minWidth:C.minWidth,textAlign:C.align},children:P},C.id)})]}),A&&t.jsx("div",{className:"nice-touch-table-actions nice-touch-table-actions--right",style:{width:j*o.length},children:o.map(C=>t.jsxs("button",{type:"button",className:"nice-touch-table-action",style:{backgroundColor:C.color||"var(--color-error, #ef4444)",color:C.textColor||"var(--bg-primary, #ffffff)",width:j},onClick:()=>g(C),children:[C.icon&&t.jsx("span",{className:"action-icon",children:C.icon}),t.jsx("span",{className:"action-label",children:C.label})]},C.id))})]})}const os=e.forwardRef(function({data:r,columns:s,rowKey:c,swipeActionsLeft:l,swipeActionsRight:o,selectable:d=!1,selectedKeys:u=[],onSelect:b,onRowClick:N,sortState:y,onSort:j,emptyContent:R="No data",loading:f=!1,haptic:m=!0,swipeThreshold:p=80,className:S="",...M},T){const w=e.useCallback(g=>typeof c=="function"?c(g):String(g[c]),[c]),A=e.useCallback(g=>{if(!g.sortable||!j)return;const D=(y==null?void 0:y.columnId)===g.id&&y.direction==="asc"?"desc":"asc";j({columnId:g.id,direction:D})},[y,j]),Y=e.useCallback(()=>{b&&(u.length===r.length?b([]):b(r.map(g=>w(g))))},[r,u,b,w]),E=e.useCallback(g=>{if(!b)return;const D=u.includes(g)?u.filter(C=>C!==g):[...u,g];b(D)},[u,b]),W=r.length>0&&u.length===r.length,L=u.length>0&&u.length<r.length;return t.jsxs("div",{ref:T,className:`nice-touch-table-container ${f?"loading":""} ${S}`,...M,children:[t.jsx("div",{className:"nice-touch-table-scroll",children:t.jsxs("table",{className:"nice-touch-table",children:[t.jsx("thead",{className:"nice-touch-table-head",children:t.jsxs("tr",{children:[d&&t.jsx("th",{className:"nice-touch-table-header nice-touch-table-header--checkbox",children:t.jsx("input",{type:"checkbox",checked:W,ref:g=>{g&&(g.indeterminate=L)},onChange:Y})}),s.map(g=>t.jsx("th",{className:`nice-touch-table-header ${g.sticky?"sticky":""} ${g.sortable?"sortable":""}`,style:{width:g.width,minWidth:g.minWidth,textAlign:g.align},onClick:()=>A(g),children:t.jsxs("span",{className:"header-content",children:[g.header,g.sortable&&t.jsx("span",{className:"sort-indicator",children:(y==null?void 0:y.columnId)===g.id&&(y.direction==="asc"?"↑":"↓")})]})},g.id))]})}),t.jsx("tbody",{className:"nice-touch-table-body",children:r.length===0?t.jsx("tr",{className:"nice-touch-table-empty",children:t.jsx("td",{colSpan:s.length+(d?1:0),children:R})}):r.map((g,D)=>{const C=w(g);return t.jsx(ls,{row:g,rowIndex:D,rowKey:C,columns:s,swipeActionsLeft:l,swipeActionsRight:o,selectable:d,selected:u.includes(C),onSelect:()=>E(C),onClick:()=>N==null?void 0:N(g,D),haptic:m,swipeThreshold:p},C)})})]})}),f&&t.jsx("div",{className:"nice-touch-table-loading",children:t.jsx("div",{className:"nice-touch-table-spinner"})})]})}),Gt=e.createContext(null);function Qe(){const n=e.useContext(Gt);if(!n)throw new Error("useTouchForm must be used within NiceTouchForm");return n}function ht(n,r){for(const s of r){const c=String(n??"");switch(s.type){case"required":if(!n||typeof n=="string"&&!n.trim())return s.message;break;case"email":if(n&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(c))return s.message;break;case"minLength":if(n&&c.length<s.value)return s.message;break;case"maxLength":if(n&&c.length>s.value)return s.message;break;case"pattern":if(n&&!new RegExp(s.value).test(c))return s.message;break;case"custom":if(s.validator&&!s.validator(n))return s.message;break}}return null}const us=e.forwardRef(function({initialValues:r={},validation:s={},onSubmit:c,onChange:l,onError:o,enableNavigation:d=!0,haptic:u=!0,autoFocus:b=!1,validateOnBlur:N=!0,validateOnChange:y=!1,disabled:j=!1,children:R,className:f="",...m},p){const[S,M]=e.useState(r),[T,w]=e.useState([]),[A,Y]=e.useState(new Set),[E,W]=e.useState(!1),L=e.useRef(new Map),g=e.useRef([]),D=e.useRef(null),C=e.useCallback(()=>{if(!(!u||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[u]),H=e.useCallback((F,X)=>{const v=s[F];return v?ht(X,v):null},[s]),P=e.useCallback(()=>{const F=[];for(const[X,v]of Object.entries(s)){const h=ht(S[X],v);h&&F.push({field:X,message:h})}return F},[S,s]),B=e.useCallback((F,X)=>{if(M(v=>{const h={...v,[F]:X};return l==null||l(h),h}),y){const v=H(F,X);w(h=>{const x=h.filter(i=>i.field!==F);return v?[...x,{field:F,message:v}]:x})}},[l,y,H]),Q=e.useCallback(F=>{if(Y(X=>new Set([...X,F])),N){const X=H(F,S[F]);w(v=>{const h=v.filter(x=>x.field!==F);return X?[...h,{field:F,message:X}]:h})}},[N,H,S]),U=e.useCallback(F=>{var v;const X=L.current.get(F);X&&((v=X.focus)==null||v.call(X),D.current=F)},[]),O=e.useCallback(()=>{if(!d)return;const F=g.current,X=D.current;if(!X){F.length>0&&U(F[0]);return}const v=F.indexOf(X);v<F.length-1&&(U(F[v+1]),C())},[d,U,C]),K=e.useCallback(()=>{if(!d)return;const F=g.current,X=D.current;if(!X)return;const v=F.indexOf(X);v>0&&(U(F[v-1]),C())},[d,U,C]),Z=e.useCallback((F,X)=>{L.current.set(F,X),X&&!g.current.includes(F)&&g.current.push(F)},[]),ee=e.useCallback(F=>{L.current.delete(F),g.current=g.current.filter(X=>X!==F)},[]),I=e.useCallback(async F=>{if(F.preventDefault(),j||E)return;const X=P();if(X.length>0){w(X),o==null||o(X),C();const v=X[0];v&&U(v.field);return}W(!0);try{await(c==null?void 0:c(S)),C()}catch(v){console.error("Form submission error:",v)}finally{W(!1)}},[j,E,P,o,c,S,C,U]);e.useEffect(()=>{b&&g.current.length>0&&setTimeout(()=>U(g.current[0]),100)},[b,U]);const V=e.useMemo(()=>({values:S,errors:T,touched:A,setFieldValue:B,setFieldTouched:Q,focusField:U,focusNext:O,focusPrev:K,registerField:Z,unregisterField:ee}),[S,T,A,B,Q,U,O,K,Z,ee]);return t.jsx(Gt.Provider,{value:V,children:t.jsx("form",{ref:p,className:`nice-touch-form ${j?"disabled":""} ${E?"submitting":""} ${f}`,onSubmit:I,noValidate:!0,...m,children:R})})}),ds=e.forwardRef(function({name:r,label:s,type:c="text",placeholder:l,helperText:o,disabled:d=!1,readOnly:u=!1,autoComplete:b,inputMode:N,iconLeft:y,iconRight:j,maxLength:R,onChange:f,required:m,className:p="",...S},M){const T=Qe(),w=e.useRef(null),[A,Y]=e.useState(!1),E=T.values[r]??"",W=T.errors.find(B=>B.field===r),g=T.touched.has(r)&&W;e.useEffect(()=>(T.registerField(r,w.current),()=>T.unregisterField(r)),[r,T]);const D=e.useCallback(B=>{const Q=B.target.value;T.setFieldValue(r,Q),f==null||f(Q)},[r,T,f]),C=e.useCallback(()=>{Y(!0)},[]),H=e.useCallback(()=>{Y(!1),T.setFieldTouched(r)},[r,T]),P=e.useCallback(B=>{B.key==="Enter"&&(B.preventDefault(),T.focusNext())},[T]);return t.jsxs("div",{ref:M,className:`nice-touch-field ${A?"focused":""} ${g?"error":""} ${d?"disabled":""} ${p}`,...S,children:[s&&t.jsxs("label",{className:"nice-touch-field-label",htmlFor:`field-${r}`,children:[s,m&&t.jsx("span",{className:"required-indicator",children:"*"})]}),t.jsxs("div",{className:"nice-touch-field-input-wrapper",children:[y&&t.jsx("span",{className:"nice-touch-field-icon left",children:y}),t.jsx("input",{ref:w,id:`field-${r}`,name:r,type:c,value:E,placeholder:l,disabled:d,readOnly:u,autoComplete:b,inputMode:N,maxLength:R,onChange:D,onFocus:C,onBlur:H,onKeyDown:P,className:"nice-touch-field-input","aria-invalid":g?"true":void 0,"aria-describedby":g?`${r}-error`:o?`${r}-helper`:void 0}),j&&t.jsx("span",{className:"nice-touch-field-icon right",children:j})]}),g&&t.jsx("div",{id:`${r}-error`,className:"nice-touch-field-error",role:"alert",children:W.message}),!g&&o&&t.jsx("div",{id:`${r}-helper`,className:"nice-touch-field-helper",children:o})]})}),fs=e.forwardRef(function({loading:r=!1,disabled:s=!1,fullWidth:c=!0,children:l,className:o="",...d},u){return t.jsx("button",{ref:u,type:"submit",className:`nice-touch-submit ${c?"full-width":""} ${r?"loading":""} ${o}`,disabled:s||r,...d,children:r?t.jsx("span",{className:"nice-touch-submit-spinner"}):l})}),hs=e.forwardRef(function({doneText:r="Done",showDone:s=!0,onDone:c,className:l="",...o},d){const u=Qe(),b=e.useCallback(()=>{document.activeElement instanceof HTMLElement&&document.activeElement.blur(),c==null||c()},[c]);return t.jsxs("div",{ref:d,className:`nice-touch-navbar ${l}`,...o,children:[t.jsxs("div",{className:"nice-touch-navbar-arrows",children:[t.jsx("button",{type:"button",onClick:u.focusPrev,"aria-label":"Previous field",children:"‹"}),t.jsx("button",{type:"button",onClick:u.focusNext,"aria-label":"Next field",children:"›"})]}),s&&t.jsx("button",{type:"button",className:"nice-touch-navbar-done",onClick:b,children:r})]})});exports.DEFAULT_BREAKPOINTS=Le;exports.DotsIndicator=tn;exports.DrawerIcons=kn;exports.EmojiIndicator=rn;exports.HAPTIC_PATTERNS=Ke;exports.HapticPatternBuilder=At;exports.HeaderIcons=Fn;exports.HeroHeader=On;exports.IOSHeader=zn;exports.IOSIndicator=sn;exports.LineIndicator=nn;exports.MaterialHeader=Wn;exports.MaterialIndicator=cn;exports.NiceBottomSheet=wt;exports.NiceBreakpointProvider=Rr;exports.NiceCalculatorKeyboard=rs;exports.NiceConfirmSheet=Sn;exports.NiceDateRangePicker=sr;exports.NiceDrawingToolbar=Xr;exports.NiceFAB=Ar;exports.NiceGestures=Ee;exports.NiceHapticsProvider=vr;exports.NiceHide=Sr;exports.NiceImageGallery=kt;exports.NiceInfiniteScroll=xn;exports.NiceMobileActionSheet=Dn;exports.NiceMobileCalendar=Ge;exports.NiceMobileDatePicker=Gn;exports.NiceMobileDraggable=lr;exports.NiceMobileDrawer=Tt;exports.NiceMobileHeader=Ie;exports.NiceMobileModal=_e;exports.NiceMobilePicker=qe;exports.NiceMobilePullToRefresh=Xe;exports.NiceMobileTabs=$n;exports.NiceMobileTimePicker=_n;exports.NiceMultiDatePicker=cr;exports.NicePINKeyboard=ns;exports.NicePhoneKeyboard=ss;exports.NicePickerColumn=Pt;exports.NicePinchZoom=ar;exports.NicePullToRefresh=Xe;exports.NiceShow=Dr;exports.NiceSignaturePad=Xt;exports.NiceSwipeActions=yt;exports.NiceSwipeList=an;exports.NiceSwipeable=or;exports.NiceTouchActionSheet=as;exports.NiceTouchButton=Je;exports.NiceTouchColorPicker=Fr;exports.NiceTouchDrawing=Wr;exports.NiceTouchField=ds;exports.NiceTouchForm=us;exports.NiceTouchIconButton=Hr;exports.NiceTouchKeyboard=He;exports.NiceTouchMenu=is;exports.NiceTouchMenuPopover=qt;exports.NiceTouchNavBar=hs;exports.NiceTouchSignaturePad=Xt;exports.NiceTouchSlider=Yr;exports.NiceTouchSubmit=fs;exports.NiceTouchTable=os;exports.PullToRefreshDefaultIndicator=mt;exports.SwipeActionPresets=ln;exports.SwipeGroupProvider=pt;exports.TabIcons=de;exports.TabPresets=In;exports.cancelVibration=xr;exports.colorUtils=Vr;exports.createHapticPattern=Nr;exports.createMediaQuery=Cr;exports.generateNumberItems=we;exports.getCurrentBreakpoint=Vt;exports.hapticFeedback=mr;exports.isMobileDevice=$r;exports.isTouch=Ir;exports.isVibrationSupported=pe;exports.responsive=Pr;exports.useBreakpoint=ke;exports.useBreakpointContext=Tr;exports.useButtonHaptic=gr;exports.useCalendar=Et;exports.useCollapsingHeader=Ln;exports.useDrawer=wn;exports.useGestures=Bt;exports.useGesturesContext=ir;exports.useHaptics=xe;exports.useHapticsContext=hr;exports.useImpactHaptic=jr;exports.useInfiniteData=pn;exports.useInfiniteScroll=dn;exports.useMediaQuery=Ft;exports.useMobileBreakpoint=ke;exports.useMobileCalendar=Kn;exports.useMobileDrawer=yn;exports.useMobileHeader=En;exports.useMobileMediaQuery=Ft;exports.useMobileModal=jn;exports.useMobilePicker=Un;exports.useMobilePullToRefresh=bt;exports.useMobileTabs=Cn;exports.useModal=Nn;exports.useNotificationHaptic=kr;exports.usePullToRefresh=bt;exports.useSelectionHaptic=wr;exports.useSwipeGroup=gt;exports.useTabs=Pn;exports.useToggleHaptic=yr;exports.useTouchForm=Qe;exports.useTouchSlider=zt;exports.useVirtualList=gn;exports.useWheelPicker=Xn;exports.vibrate=br;exports.withHaptics=pr;
26
+ `,style:{"--thumb-size":`${p}px`,"--track-height":`${S}px`,...f?{"--track-color":f}:{},...m?{"--fill-color":m}:{}},...L,children:[R&&t.jsx("span",{className:"nice-touch-slider-min",children:j(c)}),t.jsxs("div",{ref:C,className:"nice-touch-slider-track-container",onPointerDown:F,onPointerMove:X,onPointerUp:v,onPointerCancel:v,children:[t.jsx("div",{className:"nice-touch-slider-track"}),t.jsx("div",{className:"nice-touch-slider-fill",style:x}),Z.length>0&&t.jsx("div",{className:"nice-touch-slider-marks",children:Z.map(a=>{const k=(a.value-c)/(l-c)*100,$=d==="horizontal"?{left:`${k}%`}:{bottom:`${k}%`};return t.jsxs("div",{className:"nice-touch-slider-mark",style:$,children:[t.jsx("span",{className:"nice-touch-slider-mark-dot"}),a.label&&t.jsx("span",{className:"nice-touch-slider-mark-label",children:a.label})]},a.value)})}),D.isRange?t.jsxs(t.Fragment,{children:[i(0,D.percentage[0]),i(1,D.percentage[1])]}):i(0,D.percentage)]}),R&&t.jsx("span",{className:"nice-touch-slider-max",children:j(l)})]})});function Be(n,r,s){r/=100,s/=100;const c=(1-Math.abs(2*s-1))*r,l=c*(1-Math.abs(n/60%2-1)),o=s-c/2;let d=0,u=0,b=0;return n>=0&&n<60?(d=c,u=l,b=0):n>=60&&n<120?(d=l,u=c,b=0):n>=120&&n<180?(d=0,u=c,b=l):n>=180&&n<240?(d=0,u=l,b=c):n>=240&&n<300?(d=l,u=0,b=c):(d=c,u=0,b=l),{r:Math.round((d+o)*255),g:Math.round((u+o)*255),b:Math.round((b+o)*255)}}function Wt(n,r,s){n/=255,r/=255,s/=255;const c=Math.max(n,r,s),l=Math.min(n,r,s),o=(c+l)/2;let d=0,u=0;if(c!==l){const b=c-l;switch(u=o>.5?b/(2-c-l):b/(c+l),c){case n:d=((r-s)/b+(r<s?6:0))*60;break;case r:d=((s-n)/b+2)*60;break;case s:d=((n-r)/b+4)*60;break}}return{h:Math.round(d),s:Math.round(u*100),l:Math.round(o*100)}}function Ot(n){const r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(n);return r?{r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16)}:{r:0,g:0,b:0}}function Ut(n,r,s){return"#"+[n,r,s].map(c=>c.toString(16).padStart(2,"0")).join("")}function ye(n){const r=Ot(n);return Wt(r.r,r.g,r.b)}function Pe(n,r,s){const c=Be(n,r,s);return Ut(c.r,c.g,c.b)}function Oe(n,r){switch(r){case"hsl":return`hsl(${n.h}, ${n.s}%, ${n.l}%)`;case"rgb":{const s=Be(n.h,n.s,n.l);return`rgb(${s.r}, ${s.g}, ${s.b})`}case"hex":default:return Pe(n.h,n.s,n.l)}}const Fr=e.forwardRef(function({value:r,defaultValue:s="var(--color-accent, #6366f1)",format:c="hex",showAlpha:l=!1,showPreview:o=!0,showInput:d=!0,presetColors:u,wheelSize:b=240,haptic:N=!0,onChange:y,presetLabel:j="Presets",className:R="",...f},m){const[p,S]=e.useState(()=>ye(r||s)),[M,T]=e.useState(r||s),[w,A]=e.useState(1),Y=e.useRef(null),E=e.useRef(null),W=e.useRef(!1),L=e.useRef(!1);e.useEffect(()=>{if(r){const v=ye(r);S(v),T(r)}},[r]);const g=e.useCallback(()=>{if(!(!N||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(5)}catch{}},[N]),D=e.useCallback(v=>{const h=Oe(v,c);T(c==="hex"?h:Pe(v.h,v.s,v.l)),y==null||y(h)},[c,y]);e.useEffect(()=>{const v=Y.current;if(!v)return;const h=v.getContext("2d");if(!h)return;const x=b,i=x/2,a=i-10,k=a-30;v.width=x,v.height=x;for(let $=0;$<360;$++){const q=($-1)*Math.PI/180,_=($+1)*Math.PI/180;h.beginPath(),h.arc(i,i,a,q,_),h.arc(i,i,k,_,q,!0),h.closePath(),h.fillStyle=`hsl(${$}, 100%, 50%)`,h.fill()}},[b]),e.useEffect(()=>{const v=E.current;if(!v)return;const h=v.getContext("2d");if(!h)return;const x=b*.5;v.width=x,v.height=x;const i=h.createImageData(x,x);for(let a=0;a<x;a++)for(let k=0;k<x;k++){const $=k/x*100,q=100-a/x*100,_=Be(p.h,$,q),re=(a*x+k)*4;i.data[re]=_.r,i.data[re+1]=_.g,i.data[re+2]=_.b,i.data[re+3]=255}h.putImageData(i,0,0)},[p.h,b]);const C=e.useCallback(v=>{const h=Y.current;if(!h)return;const x=h.getBoundingClientRect(),i=v.clientX-x.left-x.width/2,a=v.clientY-x.top-x.height/2;let k=Math.atan2(a,i)*(180/Math.PI)+90;k<0&&(k+=360);const $={...p,h:Math.round(k)};S($),D($),g()},[p,D,g]),H=e.useCallback(v=>{const h=E.current;if(!h)return;const x=h.getBoundingClientRect(),i=Math.max(0,Math.min(x.width,v.clientX-x.left)),a=Math.max(0,Math.min(x.height,v.clientY-x.top)),k=Math.round(i/x.width*100),$=Math.round(100-a/x.height*100),q={...p,s:k,l:$};S(q),D(q),g()},[p,D,g]),P=e.useCallback(v=>{v.currentTarget.setPointerCapture(v.pointerId),W.current=!0,C(v)},[C]),B=e.useCallback(v=>{W.current&&C(v)},[C]),Q=e.useCallback(v=>{v.currentTarget.releasePointerCapture(v.pointerId),W.current=!1},[]),U=e.useCallback(v=>{v.currentTarget.setPointerCapture(v.pointerId),L.current=!0,H(v)},[H]),O=e.useCallback(v=>{L.current&&H(v)},[H]),K=e.useCallback(v=>{v.currentTarget.releasePointerCapture(v.pointerId),L.current=!1},[]),Z=e.useCallback(v=>{const h=v.target.value;if(T(h),/^#?[0-9a-f]{6}$/i.test(h)){const x=h.startsWith("#")?h:`#${h}`,i=ye(x);S(i),y==null||y(Oe(i,c))}},[c,y]),ee=e.useCallback(v=>{const h=ye(v);S(h),D(h),g()},[D,g]),I=e.useMemo(()=>{const v=b/2,h=v-25,x=(p.h-90)*Math.PI/180;return{x:v+h*Math.cos(x),y:v+h*Math.sin(x)}},[p.h,b]),V=b*.5,F=e.useMemo(()=>({x:p.s/100*V,y:(1-p.l/100)*V}),[p.s,p.l,V]),X=e.useMemo(()=>Pe(p.h,p.s,p.l),[p]);return t.jsxs("div",{ref:m,className:`nice-touch-color-picker ${R}`,...f,children:[t.jsxs("div",{className:"nice-touch-color-picker-wheel-container",style:{width:b,height:b},children:[t.jsx("canvas",{ref:Y,className:"nice-touch-color-picker-wheel",onPointerDown:P,onPointerMove:B,onPointerUp:Q,onPointerCancel:Q}),t.jsx("div",{className:"nice-touch-color-picker-hue-indicator",style:{left:I.x,top:I.y,backgroundColor:`hsl(${p.h}, 100%, 50%)`}}),t.jsxs("div",{className:"nice-touch-color-picker-sl-container",style:{width:V,height:V},children:[t.jsx("canvas",{ref:E,className:"nice-touch-color-picker-sl",onPointerDown:U,onPointerMove:O,onPointerUp:K,onPointerCancel:K}),t.jsx("div",{className:"nice-touch-color-picker-sl-indicator",style:{left:F.x,top:F.y,backgroundColor:X}})]})]}),t.jsxs("div",{className:"nice-touch-color-picker-controls",children:[o&&t.jsx("div",{className:"nice-touch-color-picker-preview",style:{backgroundColor:X}}),d&&t.jsx("input",{type:"text",className:"nice-touch-color-picker-input",value:M,onChange:Z,placeholder:"var(--nice-text, #000000)"})]}),l&&t.jsx("div",{className:"nice-touch-color-picker-alpha",children:t.jsx("input",{type:"range",min:"0",max:"100",value:w*100,onChange:v=>A(Number(v.target.value)/100),className:"nice-touch-color-picker-alpha-slider",style:{background:`linear-gradient(to right, transparent, ${X})`}})}),u&&u.length>0&&t.jsxs("div",{className:"nice-touch-color-picker-presets",children:[t.jsx("span",{className:"nice-touch-color-picker-presets-label",children:j}),t.jsx("div",{className:"nice-touch-color-picker-presets-grid",children:u.map((v,h)=>t.jsx("button",{type:"button",className:`nice-touch-color-picker-preset ${v.toLowerCase()===X.toLowerCase()?"nice-touch-color-picker-preset--selected":""}`,style:{backgroundColor:v},onClick:()=>ee(v),"aria-label":`Select color ${v}`},h))})]})]})}),Vr={hslToRgb:Be,rgbToHsl:Wt,hexToRgb:Ot,rgbToHex:Ut,hexToHsl:ye,hslToHex:Pe,formatColor:Oe};function zr(n,r){return Math.sqrt(Math.pow(r.x-n.x,2)+Math.pow(r.y-n.y,2))}function dt(n,r){const s=r.time-n.time||1;return zr(n,r)/s}const Xt=e.forwardRef(function({width:r="100%",height:s=200,strokeColor:c="var(--text-primary, #1f2937)",strokeWidth:l=2,minWidth:o=.5,maxWidth:d=4,velocityFilterWeight:u=.7,backgroundColor:b="var(--bg-primary, #ffffff)",showGuideline:N=!0,guidelineColor:y="var(--border-color, #e5e7eb)",disabled:j=!1,penPressure:R=!0,haptic:f=!0,placeholder:m="Sign here",onChange:p,onBegin:S,onEnd:M,className:T="",...w},A){const Y=e.useRef(null),E=e.useRef(null),[W,L]=e.useState(!0),[g,D]=e.useState(!1),C=e.useRef([]),H=e.useRef([]),P=e.useRef([]),B=e.useRef(0),Q=e.useRef(l);e.useEffect(()=>{const h=Y.current;if(!h)return;const x=h.getBoundingClientRect(),i=window.devicePixelRatio||1;h.width=x.width*i,h.height=x.height*i;const a=h.getContext("2d");a&&(a.scale(i,i),E.current=a,O())},[]);const U=e.useCallback(()=>{if(!(!f||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(5)}catch{}},[f]),O=e.useCallback(()=>{const h=Y.current,x=E.current;if(!h||!x)return;const i=h.getBoundingClientRect();x.fillStyle=b,x.fillRect(0,0,i.width,i.height),N&&(x.strokeStyle=y,x.lineWidth=1,x.setLineDash([5,5]),x.beginPath(),x.moveTo(20,i.height*.7),x.lineTo(i.width-20,i.height*.7),x.stroke(),x.setLineDash([]))},[b,N,y]),K=e.useCallback(()=>{O();const h=E.current;h&&H.current.forEach(x=>{if(!(x.length<2)){h.strokeStyle=c,h.fillStyle=c,h.lineCap="round",h.lineJoin="round";for(let i=1;i<x.length;i++){const a=x[i-1],k=x[i],$=dt(a,k),q=Math.max(o,Math.min(d,d/($+1)));h.lineWidth=q,h.beginPath(),h.moveTo(a.x,a.y),h.lineTo(k.x,k.y),h.stroke()}}})},[O,c,o,d]),Z=e.useCallback(h=>Math.max(o,d/(h*10+1)),[o,d]),ee=e.useCallback(h=>{const x=E.current;x&&(x.fillStyle=c,x.beginPath(),x.arc(h.x,h.y,l/2,0,Math.PI*2),x.fill())},[c,l]),I=e.useCallback((h,x,i)=>{const a=E.current;a&&(a.strokeStyle=c,a.lineWidth=i,a.lineCap="round",a.lineJoin="round",a.beginPath(),a.moveTo(h.x,h.y),a.lineTo(x.x,x.y),a.stroke())},[c]),V=e.useCallback(h=>{const x=Y.current;if(!x)return{x:0,y:0,time:Date.now()};const i=x.getBoundingClientRect();return{x:h.clientX-i.left,y:h.clientY-i.top,pressure:R?h.pressure:void 0,time:Date.now()}},[R]),F=e.useCallback(h=>{if(j)return;h.preventDefault(),h.currentTarget.setPointerCapture(h.pointerId),D(!0);const x=V(h);C.current=[x],B.current=0,Q.current=l,P.current=[],ee(x),S==null||S(),U()},[j,V,l,ee,S,U]),X=e.useCallback(h=>{if(!g||j)return;const x=V(h),i=C.current;if(i.length===0)return;const a=i[i.length-1],k=dt(a,x),$=u*k+(1-u)*B.current,q=Z($),_=(Q.current+q)/2,re=x.pressure!==void 0?_*Math.max(.5,x.pressure):_;I(a,x,re),i.push(x),B.current=$,Q.current=q},[g,j,V,u,Z,I]),v=e.useCallback(h=>{g&&(h.currentTarget.releasePointerCapture(h.pointerId),D(!1),C.current.length>0&&(H.current.push([...C.current]),C.current=[],L(!1),p==null||p(!1)),M==null||M())},[g,p,M]);return e.useImperativeHandle(A,()=>({clear:()=>{H.current=[],P.current=[],C.current=[],O(),L(!0),p==null||p(!0)},isEmpty:()=>W,toData:()=>[...H.current],fromData:h=>{H.current=h,P.current=[],L(h.length===0),K(),p==null||p(h.length===0)},toDataURL:(h="png",x=1)=>{const i=Y.current;if(!i)return"";if(h==="svg"){const k=i.getBoundingClientRect();let $="";H.current.forEach(_=>{if(_.length<2)return;let re=`M ${_[0].x} ${_[0].y}`;for(let ie=1;ie<_.length;ie++)re+=` L ${_[ie].x} ${_[ie].y}`;$+=`<path d="${re}" stroke="${c}" stroke-width="${l}" fill="none" stroke-linecap="round" stroke-linejoin="round"/>`});const q=`<svg xmlns="http://www.w3.org/2000/svg" width="${k.width}" height="${k.height}" viewBox="0 0 ${k.width} ${k.height}">${$}</svg>`;return`data:image/svg+xml;base64,${btoa(q)}`}if(h==="json")return`data:application/json;base64,${btoa(JSON.stringify(H.current))}`;const a=h==="jpeg"?"image/jpeg":"image/png";return i.toDataURL(a,x)},toSVG:()=>{const h=Y.current;if(!h)return"";const x=h.getBoundingClientRect();let i="";return H.current.forEach(a=>{if(a.length<2)return;let k=`M ${a[0].x} ${a[0].y}`;for(let $=1;$<a.length;$++)k+=` L ${a[$].x} ${a[$].y}`;i+=`<path d="${k}" stroke="${c}" stroke-width="${l}" fill="none" stroke-linecap="round" stroke-linejoin="round"/>`}),`<svg xmlns="http://www.w3.org/2000/svg" width="${x.width}" height="${x.height}" viewBox="0 0 ${x.width} ${x.height}">${i}</svg>`},toBlob:(h="png",x=1)=>new Promise(i=>{const a=Y.current;if(!a){i(null);return}const k=h==="jpeg"?"image/jpeg":"image/png";a.toBlob(i,k,x)}),undo:()=>{if(H.current.length===0)return;const h=H.current.pop();h&&P.current.push(h);const x=H.current.length===0;L(x),K(),p==null||p(x)},redo:()=>{if(P.current.length===0)return;const h=P.current.pop();h&&H.current.push(h),L(!1),K(),p==null||p(!1)}}),[W,O,K,c,l,p]),t.jsxs("div",{className:`nice-signature-pad ${j?"nice-signature-pad--disabled":""} ${T}`,...w,children:[t.jsx("canvas",{ref:Y,className:"nice-signature-pad-canvas",style:{width:r,height:s,backgroundColor:b,touchAction:"none"},onPointerDown:F,onPointerMove:X,onPointerUp:v,onPointerCancel:v,onPointerLeave:v}),W&&m&&t.jsx("div",{className:"nice-signature-pad-placeholder",children:m})]})}),Wr=e.forwardRef(function({width:r="100%",height:s=300,backgroundColor:c="var(--bg-primary, #ffffff)",strokeColor:l="var(--text-primary, #1f2937)",strokeWidth:o=4,tool:d="pen",lineCap:u="round",opacity:b=1,penPressure:N=!0,haptic:y=!0,maxHistory:j=50,disabled:R=!1,onChange:f,onToolChange:m,className:p="",...S},M){const T=e.useRef(null),w=e.useRef(null),[A,Y]=e.useState(!1),[E,W]=e.useState(d),L=e.useRef([]),g=e.useRef(-1),D=e.useRef(null),C=e.useRef(null),H=e.useRef(null);e.useEffect(()=>{W(d)},[d]),e.useEffect(()=>{const v=T.current;if(!v)return;const h=v.getBoundingClientRect(),x=window.devicePixelRatio||1;v.width=h.width*x,v.height=h.height*x;const i=v.getContext("2d",{willReadFrequently:!0});i&&(i.scale(x,x),w.current=i,i.fillStyle=c,i.fillRect(0,0,h.width,h.height),P())},[c]);const P=e.useCallback(()=>{const v=T.current,h=w.current;if(!v||!h)return;const x=v.getBoundingClientRect(),i=h.getImageData(0,0,x.width,x.height);g.current<L.current.length-1&&(L.current=L.current.slice(0,g.current+1)),L.current.push({type:"stroke",imageData:i}),L.current.length>j&&L.current.shift(),g.current=L.current.length-1},[j]),B=e.useCallback(v=>{const h=w.current;if(!h||v<0||v>=L.current.length)return;const x=L.current[v];h.putImageData(x.imageData,0,0)},[]),Q=e.useCallback(()=>{if(!(!y||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(5)}catch{}},[y]),U=e.useCallback(v=>{const h=T.current;if(!h)return{x:0,y:0};const x=h.getBoundingClientRect();return{x:v.clientX-x.left,y:v.clientY-x.top,pressure:N?v.pressure:void 0}},[N]),O=e.useCallback(()=>{const v=w.current;v&&(v.lineCap=u,v.lineJoin="round",v.globalAlpha=b,E==="eraser"?(v.globalCompositeOperation="destination-out",v.strokeStyle="var(--nice-overlay-90, rgba(0, 0, 0, 1))",v.lineWidth=o*2):E==="brush"?(v.globalCompositeOperation="source-over",v.strokeStyle=l,v.lineWidth=o):E==="marker"?(v.globalCompositeOperation="multiply",v.strokeStyle=l,v.lineWidth=o*1.5,v.globalAlpha=.5):(v.globalCompositeOperation="source-over",v.strokeStyle=l,v.lineWidth=o))},[E,l,o,u,b]),K=e.useCallback((v,h)=>{const x=w.current;x&&(O(),h.pressure!==void 0&&E!=="eraser"&&(x.lineWidth=o*Math.max(.3,h.pressure)),x.beginPath(),x.moveTo(v.x,v.y),x.lineTo(h.x,h.y),x.stroke())},[O,o,E]),Z=e.useCallback((v,h)=>{const x=w.current;if(!x||!H.current)return;x.putImageData(H.current,0,0),O();const i=h.x-v.x,a=h.y-v.y;if(x.beginPath(),E==="line")x.moveTo(v.x,v.y),x.lineTo(h.x,h.y),x.stroke();else if(E==="rectangle")x.strokeRect(v.x,v.y,i,a);else if(E==="circle"){const k=Math.sqrt(i*i+a*a);x.arc(v.x,v.y,k,0,Math.PI*2),x.stroke()}},[O,E]),ee=e.useCallback((v,h,x)=>{const i=T.current,a=w.current;if(!i||!a)return;const k=i.getBoundingClientRect(),$=a.getImageData(0,0,k.width,k.height),q=$.data,_=document.createElement("div");_.style.color=x,document.body.appendChild(_);const re=getComputedStyle(_).color;document.body.removeChild(_);const ie=re.match(/\d+/g);if(!ie)return;const[se,oe,ne]=ie.map(Number),te=(Math.floor(h)*k.width+Math.floor(v))*4,ae=q[te],z=q[te+1],G=q[te+2],J=q[te+3];if(ae===se&&z===oe&&G===ne)return;const ce=[[Math.floor(v),Math.floor(h)]],le=new Set;for(;ce.length>0;){const[ue,fe]=ce.pop(),he=(fe*k.width+ue)*4;if(ue<0||ue>=k.width||fe<0||fe>=k.height||le.has(he))continue;const Ae=q[he],Kt=q[he+1],Jt=q[he+2],Qt=q[he+3],je=30;Math.abs(Ae-ae)>je||Math.abs(Kt-z)>je||Math.abs(Jt-G)>je||Math.abs(Qt-J)>je||(le.add(he),q[he]=se,q[he+1]=oe,q[he+2]=ne,q[he+3]=255,ce.push([ue+1,fe],[ue-1,fe],[ue,fe+1],[ue,fe-1]))}a.putImageData($,0,0)},[]),I=e.useCallback(v=>{if(R)return;v.preventDefault(),v.currentTarget.setPointerCapture(v.pointerId);const h=U(v);if(E==="fill"){ee(h.x,h.y,l),P(),f==null||f(),Q();return}if(Y(!0),D.current=h,C.current=h,E==="line"||E==="rectangle"||E==="circle"){const x=T.current,i=w.current;if(x&&i){const a=x.getBoundingClientRect();H.current=i.getImageData(0,0,a.width,a.height)}}else{const x=w.current;x&&(O(),x.beginPath(),x.arc(h.x,h.y,o/2,0,Math.PI*2),x.fill())}Q()},[R,U,E,ee,l,P,f,Q,O,o]),V=e.useCallback(v=>{if(!A||R)return;const h=U(v);E==="line"||E==="rectangle"||E==="circle"?D.current&&Z(D.current,h):C.current&&K(C.current,h),C.current=h},[A,R,U,E,Z,K]),F=e.useCallback(v=>{A&&(v.currentTarget.releasePointerCapture(v.pointerId),Y(!1),(E==="line"||E==="rectangle"||E==="circle")&&D.current&&C.current&&Z(D.current,C.current),H.current=null,D.current=null,C.current=null,P(),f==null||f())},[A,E,Z,P,f]);e.useImperativeHandle(M,()=>({clear:()=>{const v=T.current,h=w.current;if(!v||!h)return;const x=v.getBoundingClientRect();h.fillStyle=c,h.globalCompositeOperation="source-over",h.fillRect(0,0,x.width,x.height),P(),f==null||f()},undo:()=>{g.current>0&&(g.current--,B(g.current),f==null||f())},redo:()=>{g.current<L.current.length-1&&(g.current++,B(g.current),f==null||f())},canUndo:()=>g.current>0,canRedo:()=>g.current<L.current.length-1,toDataURL:(v="png",h=1)=>{const x=T.current;if(!x)return"";const i=v==="jpeg"?"image/jpeg":"image/png";return x.toDataURL(i,h)},toBlob:(v="png",h=1)=>new Promise(x=>{const i=T.current;if(!i){x(null);return}const a=v==="jpeg"?"image/jpeg":"image/png";i.toBlob(x,a,h)}),fromDataURL:async v=>{const h=T.current,x=w.current;if(!(!h||!x))return new Promise(i=>{const a=new Image;a.onload=()=>{const k=h.getBoundingClientRect();x.drawImage(a,0,0,k.width,k.height),P(),i()},a.src=v})},fill:v=>{const h=T.current,x=w.current;if(!h||!x)return;const i=h.getBoundingClientRect();x.fillStyle=v,x.globalCompositeOperation="source-over",x.fillRect(0,0,i.width,i.height),P(),f==null||f()},getTool:()=>E,setTool:v=>{W(v),m==null||m(v)}}),[c,P,B,E,m,f]);const X=()=>{switch(E){case"eraser":return"cell";case"fill":return"crosshair";default:return"crosshair"}};return t.jsx("div",{className:`nice-touch-drawing ${R?"nice-touch-drawing--disabled":""} ${p}`,...S,children:t.jsx("canvas",{ref:T,className:"nice-touch-drawing-canvas",style:{width:r,height:s,cursor:X(),touchAction:"none"},onPointerDown:I,onPointerMove:V,onPointerUp:F,onPointerCancel:F,onPointerLeave:F})})}),Or=["var(--text-primary, #1f2937)","var(--color-error, #ef4444)","var(--nice-warning, #f97316)","var(--color-warning, #eab308)","var(--color-success, #22c55e)","var(--color-primary, #3b82f6)","var(--color-accent, #8b5cf6)","var(--color-accent-pink, #ec4899)","var(--bg-primary, #ffffff)","var(--text-primary, #000000)"],Ur={pen:"✏️",brush:"🖌️",marker:"🖍️",eraser:"🧹",fill:"🪣",line:"📏",rectangle:"⬜",circle:"⭕"},Xr=e.forwardRef(function({tool:r,onToolChange:s,color:c,onColorChange:l,strokeWidth:o,onStrokeWidthChange:d,onUndo:u,onRedo:b,onClear:N,canUndo:y=!0,canRedo:j=!0,colors:R=Or,className:f="",...m},p){const S=["pen","brush","marker","eraser","fill","line","rectangle","circle"];return t.jsxs("div",{ref:p,className:`nice-drawing-toolbar ${f}`,...m,children:[t.jsx("div",{className:"nice-drawing-toolbar-section",children:S.map(M=>t.jsx("button",{type:"button",className:`nice-drawing-tool-btn ${r===M?"active":""}`,onClick:()=>s(M),title:M,children:Ur[M]},M))}),t.jsx("div",{className:"nice-drawing-toolbar-divider"}),t.jsx("div",{className:"nice-drawing-toolbar-section nice-drawing-colors",children:R.map((M,T)=>t.jsx("button",{type:"button",className:`nice-drawing-color-btn ${c===M?"active":""}`,style:{backgroundColor:M,borderColor:M==="var(--bg-primary, #ffffff)"?"var(--border-color, #e5e7eb)":M},onClick:()=>l(M),title:M},T))}),t.jsx("div",{className:"nice-drawing-toolbar-divider"}),t.jsx("div",{className:"nice-drawing-toolbar-section",children:t.jsxs("label",{className:"nice-drawing-stroke-label",children:[t.jsxs("span",{children:[o,"px"]}),t.jsx("input",{type:"range",min:1,max:50,value:o,onChange:M=>d(Number(M.target.value)),className:"nice-drawing-stroke-slider"})]})}),t.jsx("div",{className:"nice-drawing-toolbar-divider"}),t.jsxs("div",{className:"nice-drawing-toolbar-section nice-drawing-actions",children:[u&&t.jsx("button",{type:"button",className:"nice-drawing-action-btn",onClick:u,disabled:!y,title:"Undo",children:"↩️"}),b&&t.jsx("button",{type:"button",className:"nice-drawing-action-btn",onClick:b,disabled:!j,title:"Redo",children:"↪️"}),N&&t.jsx("button",{type:"button",className:"nice-drawing-action-btn danger",onClick:N,title:"Clear",children:"🗑️"})]})]})}),$e={en:{code:"en",name:"English",nativeName:"English",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},pl:{code:"pl",name:"Polish",nativeName:"Polski",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{a:["ą"],c:["ć"],e:["ę"],l:["ł"],n:["ń"],o:["ó"],s:["ś"],z:["ź","ż"]}},de:{code:"de",name:"German",nativeName:"Deutsch",rows:[["q","w","e","r","t","z","u","i","o","p","ü"],["a","s","d","f","g","h","j","k","l","ö","ä"],["y","x","c","v","b","n","m","ß"]],accents:{a:["ä"],o:["ö"],u:["ü"],s:["ß"]}},fr:{code:"fr",name:"French",nativeName:"Français",rows:[["a","z","e","r","t","y","u","i","o","p"],["q","s","d","f","g","h","j","k","l","m"],["w","x","c","v","b","n"]],accents:{a:["à","â","æ"],e:["é","è","ê","ë"],i:["î","ï"],o:["ô","œ"],u:["ù","û","ü"],c:["ç"]}},es:{code:"es",name:"Spanish",nativeName:"Español",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l","ñ"],["z","x","c","v","b","n","m"]],accents:{a:["á"],e:["é"],i:["í"],o:["ó"],u:["ú","ü"],n:["ñ"]}},it:{code:"it",name:"Italian",nativeName:"Italiano",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{a:["à"],e:["è","é"],i:["ì"],o:["ò"],u:["ù"]}},pt:{code:"pt",name:"Portuguese",nativeName:"Português",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l","ç"],["z","x","c","v","b","n","m"]],accents:{a:["á","ã","â","à"],e:["é","ê"],i:["í"],o:["ó","õ","ô"],u:["ú"],c:["ç"]}},ru:{code:"ru",name:"Russian",nativeName:"Русский",rows:[["й","ц","у","к","е","н","г","ш","щ","з","х","ъ"],["ф","ы","в","а","п","р","о","л","д","ж","э"],["я","ч","с","м","и","т","ь","б","ю"]]},uk:{code:"uk",name:"Ukrainian",nativeName:"Українська",rows:[["й","ц","у","к","е","н","г","ш","щ","з","х","ї"],["ф","і","в","а","п","р","о","л","д","ж","є"],["я","ч","с","м","и","т","ь","б","ю","ґ"]]},cs:{code:"cs",name:"Czech",nativeName:"Čeština",rows:[["q","w","e","r","t","z","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["y","x","c","v","b","n","m"]],accents:{a:["á"],c:["č"],d:["ď"],e:["é","ě"],i:["í"],n:["ň"],o:["ó"],r:["ř"],s:["š"],t:["ť"],u:["ú","ů"],y:["ý"],z:["ž"]}},tr:{code:"tr",name:"Turkish",nativeName:"Türkçe",rows:[["q","w","e","r","t","y","u","ı","o","p","ğ","ü"],["a","s","d","f","g","h","j","k","l","ş","i"],["z","x","c","v","b","n","m","ö","ç"]]},nl:{code:"nl",name:"Dutch",nativeName:"Nederlands",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{e:["é","ë"],i:["ï"],o:["ö"],u:["ü"]}},sv:{code:"sv",name:"Swedish",nativeName:"Svenska",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","ö","ä"],["z","x","c","v","b","n","m"]]},no:{code:"no",name:"Norwegian",nativeName:"Norsk",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","ø","æ"],["z","x","c","v","b","n","m"]]},da:{code:"da",name:"Danish",nativeName:"Dansk",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","æ","ø"],["z","x","c","v","b","n","m"]]},fi:{code:"fi",name:"Finnish",nativeName:"Suomi",rows:[["q","w","e","r","t","y","u","i","o","p","å"],["a","s","d","f","g","h","j","k","l","ö","ä"],["z","x","c","v","b","n","m"]]},ro:{code:"ro",name:"Romanian",nativeName:"Română",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],accents:{a:["ă","â"],i:["î"],s:["ș"],t:["ț"]}},hr:{code:"hr",name:"Croatian",nativeName:"Hrvatski",rows:[["q","w","e","r","t","z","u","i","o","p","š","đ"],["a","s","d","f","g","h","j","k","l","č","ć"],["y","x","c","v","b","n","m","ž"]]},el:{code:"el",name:"Greek",nativeName:"Ελληνικά",rows:[["ς","ε","ρ","τ","υ","θ","ι","ο","π"],["α","σ","δ","φ","γ","η","ξ","κ","λ"],["ζ","χ","ψ","ω","β","ν","μ"]],accents:{α:["ά"],ε:["έ"],η:["ή"],ι:["ί","ϊ"],ο:["ό"],υ:["ύ","ϋ"],ω:["ώ"]}},hu:{code:"hu",name:"Hungarian",nativeName:"Magyar",rows:[["q","w","e","r","t","z","u","i","o","p","ő","ú"],["a","s","d","f","g","h","j","k","l","é","á"],["y","x","c","v","b","n","m","ö","ü","ó"]],accents:{a:["á"],e:["é"],i:["í"],o:["ó","ö","ő"],u:["ú","ü","ű"]}},sk:{code:"sk",name:"Slovak",nativeName:"Slovenčina",rows:[["q","w","e","r","t","z","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["y","x","c","v","b","n","m"]],accents:{a:["á","ä"],c:["č"],d:["ď"],e:["é"],i:["í"],l:["ĺ","ľ"],n:["ň"],o:["ó","ô"],r:["ŕ"],s:["š"],t:["ť"],u:["ú"],y:["ý"],z:["ž"]}},bg:{code:"bg",name:"Bulgarian",nativeName:"Български",rows:[["я","в","е","р","т","ъ","у","и","о","п","ш","щ"],["а","с","д","ф","г","х","й","к","л"],["з","ь","ц","ж","б","н","м","ч","ю"]]},sr:{code:"sr",name:"Serbian",nativeName:"Српски",rows:[["љ","њ","е","р","т","з","у","и","о","п","ш","ђ"],["а","с","д","ф","г","х","ј","к","л","ч","ћ"],["ж","џ","ц","в","б","н","м"]]},ja:{code:"ja",name:"Japanese (Romaji)",nativeName:"日本語",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},ko:{code:"ko",name:"Korean (Romaji)",nativeName:"한국어",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},zh:{code:"zh",name:"Chinese (Pinyin)",nativeName:"中文",rows:[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]]},ar:{code:"ar",name:"Arabic",nativeName:"العربية",rows:[["ض","ص","ث","ق","ف","غ","ع","ه","خ","ح","ج","د"],["ش","س","ي","ب","ل","ا","ت","ن","م","ك","ط"],["ئ","ء","ؤ","ر","لا","ى","ة","و","ز","ظ"]]},he:{code:"he",name:"Hebrew",nativeName:"עברית",rows:[["/","'","ק","ר","א","ט","ו","ן","ם","פ"],["ש","ד","ג","כ","ע","י","ח","ל","ך","ף"],["ז","ס","ב","ה","נ","מ","צ","ת","ץ"]]}},me={value:"Backspace",label:"⌫",type:"backspace",width:1.5},Te={value:"Enter",label:"⏎",type:"enter",width:1.5},Re={value:" ",label:"Space",type:"space",width:5},De={value:"Shift",label:"⇧",type:"shift",width:1.5},_r={value:"CapsLock",label:"⇪",type:"caps",width:1.75},qr={value:"Tab",label:"⇥",type:"tab",width:1.5},Ve=[{value:"1"},{value:"2"},{value:"3"},{value:"4"},{value:"5"},{value:"6"},{value:"7"},{value:"8"},{value:"9"},{value:"0"},{value:"-"},{value:"="}],Gr=[{value:"!"},{value:"@"},{value:"#"},{value:"$"},{value:"%"},{value:"^"},{value:"&"},{value:"*"},{value:"("},{value:")"}],Kr=[{value:"-"},{value:"_"},{value:"="},{value:"+"},{value:"["},{value:"]"},{value:"{"},{value:"}"},me],Jr=[{value:"Esc",label:"Esc",type:"fn",width:1},{value:"F1",label:"F1",type:"fn"},{value:"F2",label:"F2",type:"fn"},{value:"F3",label:"F3",type:"fn"},{value:"F4",label:"F4",type:"fn"},{value:"F5",label:"F5",type:"fn"},{value:"F6",label:"F6",type:"fn"},{value:"F7",label:"F7",type:"fn"},{value:"F8",label:"F8",type:"fn"},{value:"F9",label:"F9",type:"fn"},{value:"F10",label:"F10",type:"fn"},{value:"F11",label:"F11",type:"fn"},{value:"F12",label:"F12",type:"fn"}],Ue=[[{value:"1"},{value:"2"},{value:"3"}],[{value:"4"},{value:"5"},{value:"6"}],[{value:"7"},{value:"8"},{value:"9"}],[{value:".",width:1},{value:"0"},me]],Qr=[[{value:"7"},{value:"8"},{value:"9"},{value:"/",type:"special"}],[{value:"4"},{value:"5"},{value:"6"},{value:"*",type:"special"}],[{value:"1"},{value:"2"},{value:"3"},{value:"-",type:"special"}],[{value:"0",width:2},{value:"."},{value:"+",type:"special"}],[{value:"C",label:"C",type:"fn"},me,{value:"=",type:"enter",width:2}]],Zr=[[{value:"1",label:"1"},{value:"2",label:"2 ABC"},{value:"3",label:"3 DEF"}],[{value:"4",label:"4 GHI"},{value:"5",label:"5 JKL"},{value:"6",label:"6 MNO"}],[{value:"7",label:"7 PQRS"},{value:"8",label:"8 TUV"},{value:"9",label:"9 WXYZ"}],[{value:"*",label:"*"},{value:"0",label:"0 +"},{value:"#",label:"#"}],[{value:"Call",label:"📞",type:"enter",width:1.5},me]],es=[[{value:"1"},{value:"2"},{value:"3"}],[{value:"4"},{value:"5"},{value:"6"}],[{value:"7"},{value:"8"},{value:"9"}],[{value:"Clear",label:"C",type:"fn"},{value:"0"},me]];function ts(n,r,s,c,l){const o=$e[n]||$e.en,[d,u,b]=o.rows;if(r==="minimal")return Ue;if(s){const j=[Ve.slice(0,10),Gr,Kr],R=[{value:"ABC",label:"ABC",type:"fn",width:1.5}];return c&&R.push({value:"Lang",label:"🌐",type:"lang",width:1}),R.push({value:",",width:1}),R.push({...Re,width:c?3.5:4}),R.push({value:".",width:1}),R.push({...Te,...l?{label:l}:{}}),j.push(R),j}if(r==="compact"){const j=[d.map(f=>({value:f})),u.map(f=>({value:f})),[De,...b.map(f=>({value:f})),me]],R=[{value:"123",label:"123",type:"fn",width:1.5}];return c&&R.push({value:"Lang",label:"🌐",type:"lang",width:1}),R.push({value:",",width:1}),R.push({...Re,width:c?3.5:4}),R.push({value:".",width:1}),R.push({...Te,...l?{label:l}:{}}),j.push(R),j}if(r==="standard"){const j=[Ve.slice(0,10),d.map(f=>({value:f})),u.map(f=>({value:f})),[De,...b.map(f=>({value:f})),me]],R=[{value:"#+=",label:"#+=",type:"fn",width:1.5}];return c&&R.push({value:"Lang",label:"🌐",type:"lang",width:1}),R.push({value:",",width:1}),R.push({...Re,width:c?3:4}),R.push({value:".",width:1}),R.push({...Te,...l?{label:l}:{}}),j.push(R),j}const N=[Jr,[...Ve,me],[qr,...d.map(j=>({value:j}))],[_r,...u.map(j=>({value:j})),{...Te,width:1.75,...l?{label:l}:{}}],[{...De,width:2.25},...b.map(j=>({value:j})),{...De,width:2.25}]],y=[{value:"#+=",label:"#+=",type:"fn",width:1.5}];if(c&&y.push({value:"Lang",label:"🌐",type:"lang",width:1}),y.push({...Re,width:c?6:7}),y.push({value:",",width:1}),y.push({value:".",width:1}),N.push(y),o.accents){const j=[];for(const[,R]of Object.entries(o.accents))for(const f of R)j.find(m=>m.value===f)||j.push({value:f});j.length>0&&N.push(j)}return N}const He=e.forwardRef(function({layout:r="qwerty",customLayout:s,mode:c="standard",languages:l,activeLanguage:o,onLanguageChange:d,value:u="",maxLength:b,theme:N="system",haptic:y=!0,sound:j=!1,onKeyPress:R,onChange:f,onSubmit:m,disabled:p=!1,showPreview:S=!1,previewPlaceholder:M="Type here...",masked:T=!1,showLanguageSwitcher:w,enterLabel:A,className:Y="",...E},W){const L=e.useMemo(()=>l&&l.length>0?l:["en"],[l]),[g,D]=e.useState(L[0]),C=o??g,[H,P]=e.useState(!1),[B,Q]=e.useState(!1),[U,O]=e.useState(!1),K=w??L.length>1,Z=e.useMemo(()=>r==="custom"&&s?s.rows:r!=="qwerty"?{numeric:Ue,numpad:Qr,phone:Zr,pin:es}[r]||Ue:ts(C,c,U,K,A),[r,s,C,c,U,K,A]),ee=e.useCallback(()=>{const i=L.indexOf(C),a=L[(i+1)%L.length];D(a),d==null||d(a)},[L,C,d]),I=e.useCallback(()=>{if(!(!y||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[y]),V=e.useCallback(()=>{if(j)try{const i=new(window.AudioContext||window.webkitAudioContext),a=i.createOscillator(),k=i.createGain();a.connect(k),k.connect(i.destination),a.frequency.value=1e3,a.type="sine",k.gain.value=.1,a.start(),a.stop(i.currentTime+.05)}catch{}},[j]),F=e.useCallback(i=>{if(p)return;I(),V();let a=u;switch(i.type){case"backspace":a=u.slice(0,-1);break;case"enter":m==null||m(u);return;case"shift":P(k=>!k);return;case"caps":Q(k=>!k);return;case"tab":a=u+" ";break;case"lang":ee();return;case"fn":if(i.value==="123"||i.value==="ABC"||i.value==="#+="||i.value==="#+=")O(k=>!k);else if(i.value==="Clear"||i.value==="C")a="";else{R==null||R(i.value);return}return;case"space":a=u+" ";break;default:{let k=i.value;(H||B)&&k.length===1&&(k=k.toUpperCase()),a=u+k,H&&!B&&P(!1)}}b&&a.length>b||(R==null||R(i.value),f==null||f(a))},[p,u,b,H,B,I,V,R,f,m,ee]),X=e.useMemo(()=>T?"•".repeat(u.length):u,[u,T]),v=H||B,h=N==="system"?"":`nice-touch-keyboard--${N}`,x=$e[C];return t.jsxs("div",{ref:W,className:["nice-touch-keyboard",`nice-touch-keyboard--${c}`,h,p?"nice-touch-keyboard--disabled":"",Y].filter(Boolean).join(" "),"data-layout":r,"data-language":C,dir:C==="ar"||C==="he"?"rtl":void 0,...E,children:[K&&L.length>1&&t.jsx("div",{className:"nice-touch-keyboard-langbar",children:L.map(i=>{const a=$e[i];return t.jsx("button",{type:"button",className:`nice-touch-keyboard-langbar__btn ${i===C?"active":""}`,onClick:()=>{D(i),d==null||d(i)},disabled:p,children:(a==null?void 0:a.nativeName)??i.toUpperCase()},i)})}),S&&t.jsxs("div",{className:"nice-touch-keyboard-preview",children:[X||t.jsx("span",{className:"nice-touch-keyboard-placeholder",children:M}),t.jsx("span",{className:"nice-touch-keyboard-cursor"})]}),t.jsx("div",{className:"nice-touch-keyboard-keys",children:Z.map((i,a)=>t.jsx("div",{className:"nice-touch-keyboard-row",children:i.map((k,$)=>{var ie;const q=k.type==="shift"&&H||k.type==="caps"&&B||k.type==="lang"||k.value==="123"&&U||k.value==="ABC"&&!U||k.value==="#+="&&U;let _=k.label||k.value;v&&!k.type&&_.length===1&&(_=_.toUpperCase());const re=!k.type&&k.value.length===1&&((ie=x==null?void 0:x.accents)==null?void 0:ie[k.value.toLowerCase()]);return t.jsx("button",{type:"button",className:["nice-touch-keyboard-key",`nice-touch-keyboard-key--${k.type||"char"}`,q?"active":"",re?"nice-touch-keyboard-key--has-accent":""].filter(Boolean).join(" "),style:{flex:k.width||1},onClick:()=>F(k),disabled:p,"aria-label":k.type==="backspace"?"Backspace":k.type==="enter"?"Enter":void 0,children:k.icon||_},$)})},a))}),t.jsxs("div",{className:"nice-touch-keyboard-status",children:[B&&t.jsx("span",{className:"nice-touch-keyboard-status__item",children:"CAPS"}),x&&t.jsx("span",{className:"nice-touch-keyboard-status__item",children:x.nativeName})]})]})}),ns=e.forwardRef(function(r,s){return t.jsx(He,{ref:s,layout:"pin",masked:!0,maxLength:r.maxLength||6,...r})}),rs=e.forwardRef(function(r,s){return t.jsx(He,{ref:s,layout:"numpad",...r})}),ss=e.forwardRef(function(r,s){return t.jsx(He,{ref:s,layout:"phone",...r})}),_t=e.createContext(null);function cs(n,r=500){const s=e.useRef(void 0),c=e.useRef(null),l=e.useCallback(u=>{c.current={x:u.clientX,y:u.clientY},s.current=setTimeout(()=>{n(u)},r)},[n,r]),o=e.useCallback(u=>{if(!c.current)return;const b=Math.abs(u.clientX-c.current.x),N=Math.abs(u.clientY-c.current.y);(b>10||N>10)&&d()},[]),d=e.useCallback(()=>{s.current&&(clearTimeout(s.current),s.current=void 0),c.current=null},[]);return e.useEffect(()=>()=>{s.current&&clearTimeout(s.current)},[]),{onPointerDown:l,onPointerMove:o,onPointerUp:d,onPointerCancel:d,onPointerLeave:d}}const ft=({item:n,onSelect:r})=>{const s=e.useContext(_t),c=e.useRef(null),[l,o]=e.useState(null),d=e.useCallback(()=>{var y;if(!n.disabled)if(n.children&&n.children.length>0){if(c.current){const j=c.current.getBoundingClientRect();s==null||s.openSubmenu(n.id,{x:j.right,y:j.top})}}else(y=n.onClick)==null||y.call(n),r(n)},[n,r,s]),u=e.useCallback(()=>{if(n.children&&n.children.length>0&&c.current){const y=c.current.getBoundingClientRect();s==null||s.openSubmenu(n.id,{x:y.right,y:y.top})}},[n,s]),b=n.children&&n.children.length>0,N=(s==null?void 0:s.activeSubmenu)===n.id;return t.jsxs(t.Fragment,{children:[t.jsxs("button",{ref:c,type:"button",className:`nice-touch-menu-item ${n.disabled?"disabled":""} ${n.danger?"danger":""} ${N?"active":""}`,onClick:d,onPointerEnter:u,disabled:n.disabled,role:"menuitem","aria-haspopup":b?"menu":void 0,"aria-expanded":b?N:void 0,children:[n.icon&&t.jsx("span",{className:"nice-touch-menu-item-icon",children:n.icon}),t.jsx("span",{className:"nice-touch-menu-item-label",children:n.label}),n.shortcut&&t.jsx("span",{className:"nice-touch-menu-item-shortcut",children:n.shortcut}),b&&t.jsx("span",{className:"nice-touch-menu-item-arrow",children:"›"})]}),n.divider&&t.jsx("div",{className:"nice-touch-menu-divider",role:"separator"})]})},qt=e.forwardRef(function({items:r,open:s,position:c,onClose:l,haptic:o=!0,className:d="",...u},b){var A;const N=e.useRef(null),[y,j]=e.useState(null),[R,f]=e.useState(null),[m,p]=e.useState(c);e.useEffect(()=>{if(!s||!N.current)return;const E=N.current.getBoundingClientRect(),W={width:window.innerWidth,height:window.innerHeight};let L=c.x,g=c.y;L+E.width>W.width-8&&(L=W.width-E.width-8),L<8&&(L=8),g+E.height>W.height-8&&(g=W.height-E.height-8),g<8&&(g=8),p({x:L,y:g})},[s,c]),e.useEffect(()=>{if(!s)return;const Y=W=>{N.current&&!N.current.contains(W.target)&&l()},E=W=>{W.key==="Escape"&&l()};return document.addEventListener("mousedown",Y),document.addEventListener("keydown",E),()=>{document.removeEventListener("mousedown",Y),document.removeEventListener("keydown",E)}},[s,l]);const S=e.useCallback(()=>{if(!(!o||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[o]),M=e.useCallback(Y=>{S(),l()},[S,l]),T={close:l,openSubmenu:(Y,E)=>{j(Y),f(E)},closeSubmenu:()=>{j(null),f(null)},activeSubmenu:y};if(!s)return null;const w=y?(A=r.find(Y=>Y.id===y))==null?void 0:A.children:null;return t.jsx(_t.Provider,{value:T,children:t.jsxs("div",{ref:N,className:`nice-touch-menu-popover ${d}`,style:{left:m.x,top:m.y},role:"menu",...u,children:[r.map(Y=>t.jsx(ft,{item:Y,onSelect:M},Y.id)),w&&R&&t.jsx("div",{className:"nice-touch-menu-popover nice-touch-menu-submenu",style:{left:R.x-m.x,top:R.y-m.y},role:"menu",children:w.map(Y=>t.jsx(ft,{item:Y,onSelect:M},Y.id))})]})})}),is=e.forwardRef(function({items:r,trigger:s,longPress:c=!0,longPressDelay:l=500,enableContextMenu:o=!1,enableClick:d=!1,haptic:u=!0,disabled:b=!1,onOpen:N,onClose:y,className:j="",...R},f){const[m,p]=e.useState(!1),[S,M]=e.useState({x:0,y:0}),T=e.useRef(null),w=e.useCallback(()=>{if(!(!u||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(20)}catch{}},[u]),A=e.useCallback((g,D)=>{b||(w(),M({x:g,y:D}),p(!0),N==null||N())},[b,w,N]),Y=e.useCallback(()=>{p(!1),y==null||y()},[y]),E=cs(g=>{g.preventDefault(),A(g.clientX,g.clientY)},l),W=e.useCallback(g=>{if(!(!d||b)&&(g.preventDefault(),g.stopPropagation(),T.current)){const D=T.current.getBoundingClientRect();A(D.left,D.bottom+4)}},[d,b,A]),L=e.useCallback(g=>{!o||b||(g.preventDefault(),A(g.clientX,g.clientY))},[o,b,A]);return t.jsxs(t.Fragment,{children:[t.jsx("div",{ref:g=>{T.current=g,typeof f=="function"?f(g):f&&(f.current=g)},className:`nice-touch-menu-trigger ${b?"disabled":""} ${j}`,onClick:W,onContextMenu:L,...c&&!b?E:{},...R,children:s}),t.jsx(qt,{items:r,open:m,position:S,onClose:Y,haptic:u})]})}),as=e.forwardRef(function({items:r,open:s,onClose:c,title:l,cancelLabel:o="Cancel",haptic:d=!0,className:u="",...b},N){const y=e.useCallback(()=>{if(!(!d||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[d]),j=e.useCallback(m=>{var p;m.disabled||(y(),(p=m.onClick)==null||p.call(m),c())},[y,c]),R=e.useCallback(()=>{y(),c()},[y,c]),f=e.useCallback(m=>{m.target===m.currentTarget&&c()},[c]);return e.useEffect(()=>{if(!s)return;const m=p=>{p.key==="Escape"&&c()};return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[s,c]),s?t.jsx("div",{className:`nice-action-sheet-backdrop ${s?"open":""}`,onClick:f,children:t.jsxs("div",{ref:N,className:`nice-action-sheet ${u}`,role:"dialog","aria-modal":"true",...b,children:[t.jsxs("div",{className:"nice-action-sheet-content",children:[l&&t.jsx("div",{className:"nice-action-sheet-title",children:l}),r.map(m=>t.jsxs("button",{type:"button",className:`nice-action-sheet-item ${m.disabled?"disabled":""} ${m.danger?"danger":""}`,onClick:()=>j(m),disabled:m.disabled,children:[m.icon&&t.jsx("span",{className:"nice-action-sheet-item-icon",children:m.icon}),t.jsx("span",{className:"nice-action-sheet-item-label",children:m.label})]},m.id))]}),t.jsx("button",{type:"button",className:"nice-action-sheet-cancel",onClick:R,children:o})]})}):null});function ls({row:n,rowIndex:r,rowKey:s,columns:c,swipeActionsLeft:l=[],swipeActionsRight:o=[],selectable:d,selected:u,onSelect:b,onClick:N,haptic:y,swipeThreshold:j=80}){const[R,f]=e.useState(0),[m,p]=e.useState(!1),S=e.useRef(0),M=e.useRef(0),T=e.useRef(null),w=l.length>0,A=o.length>0,Y=e.useCallback(()=>{if(!(!y||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[y]),E=e.useCallback(C=>{!w&&!A||(S.current=C.touches[0].clientX,M.current=C.touches[0].clientX,p(!0))},[w,A]),W=e.useCallback(C=>{if(!m)return;M.current=C.touches[0].clientX;const H=M.current-S.current;let P=H;const B=w?j*l.length:0,Q=A?j*o.length:0;P>B&&(P=B),P<-Q&&(P=-Q),!w&&P>0&&(P=H*.2),!A&&P<0&&(P=H*.2),f(P)},[m,w,A,j,l.length,o.length]),L=e.useCallback(()=>{if(!m)return;p(!1);const C=j*.5;R>C&&w?(f(j*l.length),Y()):R<-C&&A?(f(-j*o.length),Y()):f(0)},[m,R,j,w,A,l.length,o.length,Y]),g=e.useCallback(C=>{Y(),C.onAction(n,r),f(0)},[n,r,Y]),D=e.useCallback(()=>{Math.abs(R)>10||(d&&b?b():N&&N())},[R,d,b,N]);return e.useEffect(()=>{if(R===0)return;const C=H=>{T.current&&!T.current.contains(H.target)&&f(0)};return document.addEventListener("click",C),()=>document.removeEventListener("click",C)},[R]),t.jsxs("tr",{ref:T,className:`nice-touch-table-row ${u?"selected":""} ${m?"swiping":""}`,onTouchStart:E,onTouchMove:W,onTouchEnd:L,onTouchCancel:L,onClick:D,"data-row-key":s,children:[w&&t.jsx("div",{className:"nice-touch-table-actions nice-touch-table-actions--left",style:{width:j*l.length},children:l.map(C=>t.jsxs("button",{type:"button",className:"nice-touch-table-action",style:{backgroundColor:C.color||"var(--color-primary, #3b82f6)",color:C.textColor||"var(--bg-primary, #ffffff)",width:j},onClick:()=>g(C),children:[C.icon&&t.jsx("span",{className:"action-icon",children:C.icon}),t.jsx("span",{className:"action-label",children:C.label})]},C.id))}),t.jsxs("div",{className:"nice-touch-table-row-content",style:{transform:`translateX(${R}px)`,transition:m?"none":"transform 0.2s ease-out"},children:[d&&t.jsx("td",{className:"nice-touch-table-cell nice-touch-table-cell--checkbox",children:t.jsx("input",{type:"checkbox",checked:u,onChange:()=>b==null?void 0:b(),onClick:C=>C.stopPropagation()})}),c.map(C=>{const H=typeof C.accessor=="function"?C.accessor(n):n[C.accessor],P=C.cell?C.cell(H,n,r):H;return t.jsx("td",{className:`nice-touch-table-cell ${C.sticky?"sticky":""}`,style:{width:C.width,minWidth:C.minWidth,textAlign:C.align},children:P},C.id)})]}),A&&t.jsx("div",{className:"nice-touch-table-actions nice-touch-table-actions--right",style:{width:j*o.length},children:o.map(C=>t.jsxs("button",{type:"button",className:"nice-touch-table-action",style:{backgroundColor:C.color||"var(--color-error, #ef4444)",color:C.textColor||"var(--bg-primary, #ffffff)",width:j},onClick:()=>g(C),children:[C.icon&&t.jsx("span",{className:"action-icon",children:C.icon}),t.jsx("span",{className:"action-label",children:C.label})]},C.id))})]})}const os=e.forwardRef(function({data:r,columns:s,rowKey:c,swipeActionsLeft:l,swipeActionsRight:o,selectable:d=!1,selectedKeys:u=[],onSelect:b,onRowClick:N,sortState:y,onSort:j,emptyContent:R="No data",loading:f=!1,haptic:m=!0,swipeThreshold:p=80,className:S="",...M},T){const w=e.useCallback(g=>typeof c=="function"?c(g):String(g[c]),[c]),A=e.useCallback(g=>{if(!g.sortable||!j)return;const D=(y==null?void 0:y.columnId)===g.id&&y.direction==="asc"?"desc":"asc";j({columnId:g.id,direction:D})},[y,j]),Y=e.useCallback(()=>{b&&(u.length===r.length?b([]):b(r.map(g=>w(g))))},[r,u,b,w]),E=e.useCallback(g=>{if(!b)return;const D=u.includes(g)?u.filter(C=>C!==g):[...u,g];b(D)},[u,b]),W=r.length>0&&u.length===r.length,L=u.length>0&&u.length<r.length;return t.jsxs("div",{ref:T,className:`nice-touch-table-container ${f?"loading":""} ${S}`,...M,children:[t.jsx("div",{className:"nice-touch-table-scroll",children:t.jsxs("table",{className:"nice-touch-table",children:[t.jsx("thead",{className:"nice-touch-table-head",children:t.jsxs("tr",{children:[d&&t.jsx("th",{className:"nice-touch-table-header nice-touch-table-header--checkbox",children:t.jsx("input",{type:"checkbox",checked:W,ref:g=>{g&&(g.indeterminate=L)},onChange:Y})}),s.map(g=>t.jsx("th",{className:`nice-touch-table-header ${g.sticky?"sticky":""} ${g.sortable?"sortable":""}`,style:{width:g.width,minWidth:g.minWidth,textAlign:g.align},onClick:()=>A(g),children:t.jsxs("span",{className:"header-content",children:[g.header,g.sortable&&t.jsx("span",{className:"sort-indicator",children:(y==null?void 0:y.columnId)===g.id&&(y.direction==="asc"?"↑":"↓")})]})},g.id))]})}),t.jsx("tbody",{className:"nice-touch-table-body",children:r.length===0?t.jsx("tr",{className:"nice-touch-table-empty",children:t.jsx("td",{colSpan:s.length+(d?1:0),children:R})}):r.map((g,D)=>{const C=w(g);return t.jsx(ls,{row:g,rowIndex:D,rowKey:C,columns:s,swipeActionsLeft:l,swipeActionsRight:o,selectable:d,selected:u.includes(C),onSelect:()=>E(C),onClick:()=>N==null?void 0:N(g,D),haptic:m,swipeThreshold:p},C)})})]})}),f&&t.jsx("div",{className:"nice-touch-table-loading",children:t.jsx("div",{className:"nice-touch-table-spinner"})})]})}),Gt=e.createContext(null);function Qe(){const n=e.useContext(Gt);if(!n)throw new Error("useTouchForm must be used within NiceTouchForm");return n}function ht(n,r){for(const s of r){const c=String(n??"");switch(s.type){case"required":if(!n||typeof n=="string"&&!n.trim())return s.message;break;case"email":if(n&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(c))return s.message;break;case"minLength":if(n&&c.length<s.value)return s.message;break;case"maxLength":if(n&&c.length>s.value)return s.message;break;case"pattern":if(n&&!new RegExp(s.value).test(c))return s.message;break;case"custom":if(s.validator&&!s.validator(n))return s.message;break}}return null}const us=e.forwardRef(function({initialValues:r={},validation:s={},onSubmit:c,onChange:l,onError:o,enableNavigation:d=!0,haptic:u=!0,autoFocus:b=!1,validateOnBlur:N=!0,validateOnChange:y=!1,disabled:j=!1,children:R,className:f="",...m},p){const[S,M]=e.useState(r),[T,w]=e.useState([]),[A,Y]=e.useState(new Set),[E,W]=e.useState(!1),L=e.useRef(new Map),g=e.useRef([]),D=e.useRef(null),C=e.useCallback(()=>{if(!(!u||typeof navigator>"u"||!("vibrate"in navigator)))try{navigator.vibrate(10)}catch{}},[u]),H=e.useCallback((F,X)=>{const v=s[F];return v?ht(X,v):null},[s]),P=e.useCallback(()=>{const F=[];for(const[X,v]of Object.entries(s)){const h=ht(S[X],v);h&&F.push({field:X,message:h})}return F},[S,s]),B=e.useCallback((F,X)=>{if(M(v=>{const h={...v,[F]:X};return l==null||l(h),h}),y){const v=H(F,X);w(h=>{const x=h.filter(i=>i.field!==F);return v?[...x,{field:F,message:v}]:x})}},[l,y,H]),Q=e.useCallback(F=>{if(Y(X=>new Set([...X,F])),N){const X=H(F,S[F]);w(v=>{const h=v.filter(x=>x.field!==F);return X?[...h,{field:F,message:X}]:h})}},[N,H,S]),U=e.useCallback(F=>{var v;const X=L.current.get(F);X&&((v=X.focus)==null||v.call(X),D.current=F)},[]),O=e.useCallback(()=>{if(!d)return;const F=g.current,X=D.current;if(!X){F.length>0&&U(F[0]);return}const v=F.indexOf(X);v<F.length-1&&(U(F[v+1]),C())},[d,U,C]),K=e.useCallback(()=>{if(!d)return;const F=g.current,X=D.current;if(!X)return;const v=F.indexOf(X);v>0&&(U(F[v-1]),C())},[d,U,C]),Z=e.useCallback((F,X)=>{L.current.set(F,X),X&&!g.current.includes(F)&&g.current.push(F)},[]),ee=e.useCallback(F=>{L.current.delete(F),g.current=g.current.filter(X=>X!==F)},[]),I=e.useCallback(async F=>{if(F.preventDefault(),j||E)return;const X=P();if(X.length>0){w(X),o==null||o(X),C();const v=X[0];v&&U(v.field);return}W(!0);try{await(c==null?void 0:c(S)),C()}catch(v){console.error("Form submission error:",v)}finally{W(!1)}},[j,E,P,o,c,S,C,U]);e.useEffect(()=>{b&&g.current.length>0&&setTimeout(()=>U(g.current[0]),100)},[b,U]);const V=e.useMemo(()=>({values:S,errors:T,touched:A,setFieldValue:B,setFieldTouched:Q,focusField:U,focusNext:O,focusPrev:K,registerField:Z,unregisterField:ee}),[S,T,A,B,Q,U,O,K,Z,ee]);return t.jsx(Gt.Provider,{value:V,children:t.jsx("form",{ref:p,className:`nice-touch-form ${j?"disabled":""} ${E?"submitting":""} ${f}`,onSubmit:I,noValidate:!0,...m,children:R})})}),ds=e.forwardRef(function({name:r,label:s,type:c="text",placeholder:l,helperText:o,disabled:d=!1,readOnly:u=!1,autoComplete:b,inputMode:N,iconLeft:y,iconRight:j,maxLength:R,onChange:f,required:m,className:p="",...S},M){const T=Qe(),w=e.useRef(null),[A,Y]=e.useState(!1),E=T.values[r]??"",W=T.errors.find(B=>B.field===r),g=T.touched.has(r)&&W;e.useEffect(()=>(T.registerField(r,w.current),()=>T.unregisterField(r)),[r,T]);const D=e.useCallback(B=>{const Q=B.target.value;T.setFieldValue(r,Q),f==null||f(Q)},[r,T,f]),C=e.useCallback(()=>{Y(!0)},[]),H=e.useCallback(()=>{Y(!1),T.setFieldTouched(r)},[r,T]),P=e.useCallback(B=>{B.key==="Enter"&&(B.preventDefault(),T.focusNext())},[T]);return t.jsxs("div",{ref:M,className:`nice-touch-field ${A?"focused":""} ${g?"error":""} ${d?"disabled":""} ${p}`,...S,children:[s&&t.jsxs("label",{className:"nice-touch-field-label",htmlFor:`field-${r}`,children:[s,m&&t.jsx("span",{className:"required-indicator",children:"*"})]}),t.jsxs("div",{className:"nice-touch-field-input-wrapper",children:[y&&t.jsx("span",{className:"nice-touch-field-icon left",children:y}),t.jsx("input",{ref:w,id:`field-${r}`,name:r,type:c,value:E,placeholder:l,disabled:d,readOnly:u,autoComplete:b,inputMode:N,maxLength:R,onChange:D,onFocus:C,onBlur:H,onKeyDown:P,className:"nice-touch-field-input","aria-invalid":g?"true":void 0,"aria-describedby":g?`${r}-error`:o?`${r}-helper`:void 0}),j&&t.jsx("span",{className:"nice-touch-field-icon right",children:j})]}),g&&t.jsx("div",{id:`${r}-error`,className:"nice-touch-field-error",role:"alert",children:W.message}),!g&&o&&t.jsx("div",{id:`${r}-helper`,className:"nice-touch-field-helper",children:o})]})}),fs=e.forwardRef(function({loading:r=!1,disabled:s=!1,fullWidth:c=!0,children:l,className:o="",...d},u){return t.jsx("button",{ref:u,type:"submit",className:`nice-touch-submit ${c?"full-width":""} ${r?"loading":""} ${o}`,disabled:s||r,...d,children:r?t.jsx("span",{className:"nice-touch-submit-spinner"}):l})}),hs=e.forwardRef(function({doneText:r="Done",showDone:s=!0,onDone:c,className:l="",...o},d){const u=Qe(),b=e.useCallback(()=>{document.activeElement instanceof HTMLElement&&document.activeElement.blur(),c==null||c()},[c]);return t.jsxs("div",{ref:d,className:`nice-touch-navbar ${l}`,...o,children:[t.jsxs("div",{className:"nice-touch-navbar-arrows",children:[t.jsx("button",{type:"button",onClick:u.focusPrev,"aria-label":"Previous field",children:"‹"}),t.jsx("button",{type:"button",onClick:u.focusNext,"aria-label":"Next field",children:"›"})]}),s&&t.jsx("button",{type:"button",className:"nice-touch-navbar-done",onClick:b,children:r})]})});exports.DEFAULT_BREAKPOINTS=Le;exports.DotsIndicator=tn;exports.DrawerIcons=kn;exports.EmojiIndicator=rn;exports.HAPTIC_PATTERNS=Ke;exports.HapticPatternBuilder=At;exports.HeaderIcons=Fn;exports.HeroHeader=On;exports.IOSHeader=zn;exports.IOSIndicator=sn;exports.LineIndicator=nn;exports.MaterialHeader=Wn;exports.MaterialIndicator=cn;exports.NiceBottomSheet=wt;exports.NiceBreakpointProvider=Rr;exports.NiceCalculatorKeyboard=rs;exports.NiceConfirmSheet=Sn;exports.NiceDateRangePicker=sr;exports.NiceDrawingToolbar=Xr;exports.NiceFAB=Ar;exports.NiceGestures=Ee;exports.NiceHapticsProvider=vr;exports.NiceHide=Sr;exports.NiceImageGallery=kt;exports.NiceInfiniteScroll=xn;exports.NiceMobileActionSheet=Dn;exports.NiceMobileCalendar=Ge;exports.NiceMobileDatePicker=Gn;exports.NiceMobileDraggable=lr;exports.NiceMobileDrawer=Tt;exports.NiceMobileHeader=Ie;exports.NiceMobileModal=_e;exports.NiceMobilePicker=qe;exports.NiceMobilePullToRefresh=Xe;exports.NiceMobileTabs=$n;exports.NiceMobileTimePicker=_n;exports.NiceMultiDatePicker=cr;exports.NicePINKeyboard=ns;exports.NicePhoneKeyboard=ss;exports.NicePickerColumn=Pt;exports.NicePinchZoom=ar;exports.NicePullToRefresh=Xe;exports.NiceShow=Dr;exports.NiceSignaturePad=Xt;exports.NiceSwipeActions=yt;exports.NiceSwipeList=an;exports.NiceSwipeable=or;exports.NiceTouchActionSheet=as;exports.NiceTouchButton=Je;exports.NiceTouchColorPicker=Fr;exports.NiceTouchDrawing=Wr;exports.NiceTouchField=ds;exports.NiceTouchForm=us;exports.NiceTouchIconButton=Hr;exports.NiceTouchKeyboard=He;exports.NiceTouchMenu=is;exports.NiceTouchMenuPopover=qt;exports.NiceTouchNavBar=hs;exports.NiceTouchSignaturePad=Xt;exports.NiceTouchSlider=Yr;exports.NiceTouchSubmit=fs;exports.NiceTouchTable=os;exports.PullToRefreshDefaultIndicator=mt;exports.SwipeActionPresets=ln;exports.SwipeGroupProvider=pt;exports.TabIcons=de;exports.TabPresets=In;exports.cancelVibration=xr;exports.colorUtils=Vr;exports.createHapticPattern=Nr;exports.createMediaQuery=Cr;exports.generateNumberItems=we;exports.getCurrentBreakpoint=Vt;exports.hapticFeedback=mr;exports.isMobileDevice=$r;exports.isTouch=Ir;exports.isVibrationSupported=pe;exports.responsive=Pr;exports.useBreakpoint=ke;exports.useBreakpointContext=Tr;exports.useButtonHaptic=gr;exports.useCalendar=Et;exports.useCollapsingHeader=Ln;exports.useDrawer=wn;exports.useGestures=Bt;exports.useGesturesContext=ir;exports.useHaptics=xe;exports.useHapticsContext=hr;exports.useImpactHaptic=jr;exports.useInfiniteData=pn;exports.useInfiniteScroll=dn;exports.useMediaQuery=Ft;exports.useMobileBreakpoint=ke;exports.useMobileCalendar=Kn;exports.useMobileDrawer=yn;exports.useMobileHeader=En;exports.useMobileMediaQuery=Ft;exports.useMobileModal=jn;exports.useMobilePicker=Un;exports.useMobilePullToRefresh=bt;exports.useMobileTabs=Cn;exports.useModal=Nn;exports.useNotificationHaptic=kr;exports.usePullToRefresh=bt;exports.useSelectionHaptic=wr;exports.useSwipeGroup=gt;exports.useTabs=Pn;exports.useToggleHaptic=yr;exports.useTouchForm=Qe;exports.useTouchSlider=zt;exports.useVirtualList=gn;exports.useWheelPicker=Xn;exports.vibrate=br;exports.withHaptics=pr;
package/dist/index.d.ts CHANGED
@@ -634,7 +634,7 @@ export declare interface NiceBottomSheetRef {
634
634
  * </NiceBreakpointProvider>
635
635
  * ```
636
636
  */
637
- export declare function NiceBreakpointProvider({ breakpoints, debounceDelay, children, }: NiceBreakpointProviderProps): JSX.Element;
637
+ export declare function NiceBreakpointProvider({ breakpoints, debounceDelay, children, }: NiceBreakpointProviderProps): default_2.JSX.Element;
638
638
 
639
639
  /**
640
640
  * Provider props
@@ -808,7 +808,7 @@ export declare interface NiceGesturesProps extends Omit<HTMLAttributes<HTMLDivEl
808
808
  * </NiceHapticsProvider>
809
809
  * ```
810
810
  */
811
- export declare function NiceHapticsProvider({ enabled, intensity, respectReducedMotion, customPatterns, children, }: NiceHapticsProviderProps): JSX.Element;
811
+ export declare function NiceHapticsProvider({ enabled, intensity, respectReducedMotion, customPatterns, children, }: NiceHapticsProviderProps): default_2.JSX.Element;
812
812
 
813
813
  /**
814
814
  * Provider props
@@ -1490,7 +1490,7 @@ export declare const NicePhoneKeyboard: default_2.ForwardRefExoticComponent<Omit
1490
1490
  */
1491
1491
  export declare const NicePickerColumn: <T = string>(props: NicePickerColumnProps<T> & {
1492
1492
  ref?: default_2.Ref<HTMLDivElement>;
1493
- }) => JSX.Element;
1493
+ }) => default_2.JSX.Element;
1494
1494
 
1495
1495
  /**
1496
1496
  * Single column props
@@ -2981,7 +2981,7 @@ export declare interface UseCollapsingHeaderReturn {
2981
2981
  /** Is header visible (for enterAlways mode) */
2982
2982
  isVisible: boolean;
2983
2983
  /** Ref to attach to scroll container */
2984
- scrollRef: default_2.RefObject<HTMLElement>;
2984
+ scrollRef: default_2.RefObject<HTMLElement | null>;
2985
2985
  /** Manual expand */
2986
2986
  expand: () => void;
2987
2987
  /** Manual collapse */
@@ -3345,7 +3345,7 @@ export declare interface UseVirtualListOptions {
3345
3345
  itemCount: number;
3346
3346
  itemHeight: number | ((index: number) => number);
3347
3347
  overscan?: number;
3348
- containerRef: default_2.RefObject<HTMLElement>;
3348
+ containerRef: default_2.RefObject<HTMLElement | null>;
3349
3349
  }
3350
3350
 
3351
3351
  export declare interface UseVirtualListResult {
@@ -3402,7 +3402,7 @@ export declare interface UseWheelPickerReturn<T = string> {
3402
3402
  selectedIndex: number;
3403
3403
  setSelectedIndex: (index: number) => void;
3404
3404
  scrollToIndex: (index: number, animated?: boolean) => void;
3405
- containerRef: default_2.RefObject<HTMLDivElement>;
3405
+ containerRef: default_2.RefObject<HTMLDivElement | null>;
3406
3406
  }
3407
3407
 
3408
3408
  /**
package/dist/index.mjs CHANGED
@@ -3177,7 +3177,7 @@ function Br(e) {
3177
3177
  itemHeight: o = 40,
3178
3178
  visibleItems: u = 5,
3179
3179
  loop: l = !1
3180
- } = e, m = j(null), M = j(), w = d(
3180
+ } = e, m = j(null), M = j(void 0), w = d(
3181
3181
  (x) => {
3182
3182
  if (x === void 0)
3183
3183
  return 0;
@@ -3242,7 +3242,7 @@ const yn = ue(
3242
3242
  style: w,
3243
3243
  ...k
3244
3244
  }, $) {
3245
- const h = j(null), p = j(), b = j(!1), I = j(0), T = j(0), D = d(
3245
+ const h = j(null), p = j(void 0), b = j(!1), I = j(0), T = j(0), D = d(
3246
3246
  (_) => {
3247
3247
  if (_ === void 0)
3248
3248
  return 0;
@@ -6862,7 +6862,7 @@ const nt = ue(
6862
6862
  }
6863
6863
  ), Vt = ye(null);
6864
6864
  function Qn(e, t = 500) {
6865
- const r = j(), c = j(null), s = d(
6865
+ const r = j(void 0), c = j(null), s = d(
6866
6866
  (l) => {
6867
6867
  c.current = { x: l.clientX, y: l.clientY }, r.current = setTimeout(() => {
6868
6868
  e(l);
@@ -0,0 +1 @@
1
+ .nice-ptr{--ptr-primary: var(--nice-info, #6366f1);--ptr-success: var(--nice-success, #22c55e);--ptr-error: var(--nice-danger, #ef4444);--ptr-bg: var(--nice-bg, #FFFFFF);--ptr-text: var(--nice-text, #374151);--ptr-text-muted: var(--nice-text-muted, #9ca3af);--ptr-transition: .3s cubic-bezier(.23, 1, .32, 1);position:relative;width:100%;height:100%;overflow:hidden;touch-action:pan-y;-webkit-overflow-scrolling:touch;outline:none}.nice-ptr:focus-visible{outline:2px solid var(--ptr-primary);outline-offset:-2px}.nice-ptr[data-disabled]{pointer-events:none}.nice-ptr-indicator-wrapper{position:absolute;top:0;left:0;right:0;display:flex;align-items:flex-end;justify-content:center;overflow:hidden;transition:opacity var(--ptr-transition);z-index:10}.nice-ptr-content{position:relative;width:100%;height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;will-change:transform}.ptr-indicator{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-3, 12px);transition:all var(--ptr-transition)}.ptr-indicator-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--nice-radius-full, 50%);background:var(--ptr-bg);box-shadow:0 2px 8px var(--nice-overlay-10, rgba(0, 0, 0, .1));color:var(--ptr-primary);transition:all var(--ptr-transition)}.ptr-indicator--ready .ptr-indicator-icon{background:var(--ptr-primary);color:#fff}.ptr-indicator--success .ptr-indicator-icon{background:var(--ptr-success);color:#fff}.ptr-indicator--error .ptr-indicator-icon{background:var(--ptr-error);color:#fff}.ptr-indicator-text{font-size:12px;font-weight:500;color:var(--ptr-text-muted)}.ptr-indicator--success .ptr-indicator-text{color:var(--ptr-success)}.ptr-indicator--error .ptr-indicator-text{color:var(--ptr-error)}.ptr-icon{width:20px;height:20px;transition:transform var(--ptr-transition)}.ptr-icon-arrow{transition:transform .2s ease}.ptr-icon-ready{animation:ptr-ready-pulse .5s ease}@keyframes ptr-ready-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.2)}}.ptr-icon-spinner{animation:ptr-spin 1s linear infinite}@keyframes ptr-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ptr-icon-success{animation:ptr-success-scale .3s ease}@keyframes ptr-success-scale{0%{transform:scale(0);opacity:0}50%{transform:scale(1.3)}to{transform:scale(1);opacity:1}}.ptr-icon-error{animation:ptr-error-shake .3s ease}@keyframes ptr-error-shake{0%,to{transform:translate(0)}25%{transform:translate(-4px)}75%{transform:translate(4px)}}.ptr-progress-ring{position:absolute}.ptr-progress-bg{stroke:var(--nice-border, #e5e7eb)}.ptr-progress-fill{stroke:var(--ptr-primary);transition:stroke-dasharray .1s ease}.ptr-dots{display:flex;align-items:center;justify-content:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-4, 16px)}.ptr-dot{width:10px;height:10px;border-radius:var(--nice-radius-full, 50%);background:var(--ptr-primary);transition:all var(--ptr-transition)}.ptr-dots--refreshing .ptr-dot{animation:ptr-dots-bounce .6s ease infinite}.ptr-dots--refreshing .ptr-dot:nth-child(2){animation-delay:.2s}.ptr-dots--refreshing .ptr-dot:nth-child(3){animation-delay:.4s}@keyframes ptr-dots-bounce{0%,to{transform:scale(1);opacity:.5}50%{transform:scale(1.4);opacity:1}}.ptr-dots--success .ptr-dot{background:var(--ptr-success)}.ptr-dots--error .ptr-dot{background:var(--ptr-error)}.ptr-line{width:100%;height:3px;background:var(--nice-border, #e5e7eb);overflow:hidden}.ptr-line-fill{height:100%;background:var(--ptr-primary);transition:width .1s ease}.ptr-line--refreshing .ptr-line-fill{width:100%!important;animation:ptr-line-shimmer 1.5s ease infinite;background:linear-gradient(90deg,var(--ptr-primary) 0%,var(--nice-accent, #a5b4fc) 50%,var(--ptr-primary) 100%);background-size:200% 100%}@keyframes ptr-line-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.ptr-line--success .ptr-line-fill{background:var(--ptr-success)}.ptr-line--error .ptr-line-fill{background:var(--ptr-error)}.ptr-emoji{padding:var(--nice-space-4, 16px);text-align:center}.ptr-emoji-icon{font-size:32px;display:inline-block;transition:transform var(--ptr-transition)}.ptr-emoji--refreshing .ptr-emoji-icon{animation:ptr-emoji-spin 1s linear infinite}@keyframes ptr-emoji-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ptr-emoji--success .ptr-emoji-icon,.ptr-emoji--error .ptr-emoji-icon{animation:ptr-emoji-pop .3s ease}@keyframes ptr-emoji-pop{0%{transform:scale(0)}50%{transform:scale(1.3)}to{transform:scale(1)}}.ptr-ios{display:flex;align-items:center;justify-content:center;padding:var(--nice-space-4, 16px)}.ptr-ios-spinner{position:relative;width:24px;height:24px}.ptr-ios-bar{position:absolute;top:50%;left:50%;width:2px;height:6px;background:#8e8e93;border-radius:var(--nice-radius-xs, 1px);transform-origin:center center}.ptr-ios--refreshing .ptr-ios-bar{animation:ptr-ios-fade 1s linear infinite}@keyframes ptr-ios-fade{0%,to{opacity:.2}50%{opacity:1}}.ptr-ios--refreshing .ptr-ios-bar:nth-child(1){animation-delay:0s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(2){animation-delay:83ms}.ptr-ios--refreshing .ptr-ios-bar:nth-child(3){animation-delay:.166s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(4){animation-delay:.25s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(5){animation-delay:.333s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(6){animation-delay:.416s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(7){animation-delay:.5s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(8){animation-delay:.583s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(9){animation-delay:.666s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(10){animation-delay:.75s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(11){animation-delay:.833s}.ptr-ios--refreshing .ptr-ios-bar:nth-child(12){animation-delay:.916s}.ptr-material{display:flex;align-items:center;justify-content:center;padding:var(--nice-space-4, 16px);position:relative}.ptr-material-circle{transition:transform var(--ptr-transition)}.ptr-material--refreshing .ptr-material-circle{animation:ptr-material-rotate 2s linear infinite}@keyframes ptr-material-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ptr-material-bg{stroke:var(--nice-border, #e5e7eb)}.ptr-material-progress{stroke:var(--ptr-primary);transition:stroke-dasharray .1s ease}.ptr-material--refreshing .ptr-material-progress{animation:ptr-material-dash 1.5s ease-in-out infinite}@keyframes ptr-material-dash{0%{stroke-dasharray:1,100;stroke-dashoffset:0}50%{stroke-dasharray:90,100;stroke-dashoffset:-35}to{stroke-dasharray:90,100;stroke-dashoffset:-124}}.ptr-material--success .ptr-material-progress{stroke:var(--ptr-success)}.ptr-material--error .ptr-material-progress{stroke:var(--ptr-error)}.ptr-material-icon{position:absolute;font-size:14px;font-weight:700;animation:ptr-material-icon-pop .3s ease}@keyframes ptr-material-icon-pop{0%{transform:scale(0)}to{transform:scale(1)}}.ptr-material--success .ptr-material-icon{color:var(--ptr-success)}.ptr-material--error .ptr-material-icon{color:var(--ptr-error)}@media(prefers-color-scheme:dark){.nice-ptr{--ptr-bg: var(--nice-text, #1f2937);--ptr-text: var(--nice-bg-secondary, #f9fafb);--ptr-text-muted: var(--nice-text-muted, #9ca3af)}.ptr-indicator-icon{box-shadow:0 2px 8px var(--nice-overlay-30, rgba(0, 0, 0, .3))}.ptr-progress-bg,.ptr-material-bg,.ptr-line{stroke:var(--nice-text, #374151);background:var(--nice-text, #374151)}.ptr-ios-bar{background:var(--nice-text-muted, #9ca3af)}}@media(prefers-reduced-motion:reduce){.nice-ptr,.nice-ptr *{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.nice-swipe-container{position:relative;overflow:hidden;width:100%;touch-action:pan-y;outline:none}.nice-swipe-container:focus-visible{outline:2px solid var(--nice-info, #6366f1);outline-offset:-2px}.nice-swipe-container[data-disabled]{pointer-events:none;opacity:.6}.nice-swipe-content{position:relative;background:var(--nice-bg, #FFFFFF);z-index:1;will-change:transform}@media(prefers-color-scheme:dark){.nice-swipe-content{background:var(--nice-text, #1f2937)}}.nice-swipe-actions{position:absolute;top:0;bottom:0;display:flex;align-items:stretch}.nice-swipe-actions--left{left:0;transform:translate(-100%)}.nice-swipe-actions--right{right:0;transform:translate(100%)}.nice-swipe-container--open-left .nice-swipe-actions--right,.nice-swipe-container--open-right .nice-swipe-actions--left{z-index:0}.nice-swipe-action{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-2, 8px);border:none;cursor:pointer;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .25s ease,background .15s ease;transform-origin:center}.nice-swipe-action:hover{filter:brightness(1.1)}.nice-swipe-action:active{filter:brightness(.9)}.nice-swipe-action--destructive{font-weight:600}.nice-swipe-action-icon{display:flex;align-items:center;justify-content:center;font-size:24px}.nice-swipe-action-icon svg{width:24px;height:24px}.nice-swipe-action-label{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.nice-swipe-list{display:flex;flex-direction:column}.nice-swipe-list>.nice-swipe-container{border-bottom:1px solid var(--nice-border, #e5e7eb)}.nice-swipe-list>.nice-swipe-container:last-child{border-bottom:none}@media(prefers-color-scheme:dark){.nice-swipe-list>.nice-swipe-container{border-bottom-color:var(--nice-text, #374151)}}@keyframes swipe-action-pop{0%{transform:scale(0);opacity:0}50%{transform:scale(1.1)}to{transform:scale(1);opacity:1}}.nice-swipe-container--open-left .nice-swipe-action--left,.nice-swipe-container--open-right .nice-swipe-action--right{animation:swipe-action-pop .3s ease forwards}.nice-swipe-action[data-action=delete]{background:var(--nice-danger, #ef4444)}.nice-swipe-action[data-action=edit]{background:var(--nice-primary, #3b82f6)}.nice-swipe-action[data-action=archive]{background:var(--nice-text-secondary, #6b7280)}.nice-swipe-action[data-action=star]{background:var(--nice-warning, #eab308)}.nice-swipe-action[data-action=share]{background:var(--nice-success, #22c55e)}.nice-swipe-action[data-action=pin]{background:var(--nice-accent, #8b5cf6)}.nice-swipe-action[data-action=mute]{background:var(--nice-text-secondary, #64748b)}.nice-swipe-action[data-action=reply]{background:var(--nice-info, #0ea5e9)}@media(prefers-reduced-motion:reduce){.nice-swipe-action,.nice-swipe-content{transition:none!important;animation:none!important}}@media(forced-colors:active){.nice-swipe-action{border:2px solid ButtonText}.nice-swipe-action:focus{outline:3px solid Highlight}}.nice-bottom-sheet-container{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none}.nice-bottom-sheet-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background-color:var(--nice-text, #000);transition:opacity .3s ease;pointer-events:auto}.nice-bottom-sheet{position:absolute;bottom:0;left:0;right:0;background-color:var(--nice-surface, #ffffff);box-shadow:0 -4px 20px var(--nice-overlay-15, rgba(0, 0, 0, .15));display:flex;flex-direction:column;overflow:hidden;pointer-events:auto;touch-action:none;will-change:height}.nice-bottom-sheet--xs{font-size:12px}.nice-bottom-sheet--sm{font-size:13px}.nice-bottom-sheet--lg{font-size:17px}.nice-bottom-sheet--xl{font-size:19px}.nice-bottom-sheet--disabled{opacity:.55;pointer-events:none}.nice-bottom-sheet-spinner{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:var(--nice-overlay-40, rgba(255, 255, 255, .55));z-index:2}.nice-bottom-sheet-error{color:var(--color-error, #e74c3c);font-size:13px;padding:8px 16px;flex:0 0 auto}.nice-bottom-sheet--dragging{-webkit-user-select:none;user-select:none}.nice-bottom-sheet-handle{flex-shrink:0;display:flex;justify-content:center;align-items:center;padding:var(--nice-space-3, 12px) 0 var(--nice-space-2, 8px);cursor:grab;touch-action:none}.nice-bottom-sheet-handle:active{cursor:grabbing}.nice-bottom-sheet-handle-bar{width:40px;height:5px;border-radius:var(--nice-radius-sm, 2.5px);background-color:var(--nice-border, #d1d5db);transition:background-color .2s ease}.nice-bottom-sheet-handle:hover .nice-bottom-sheet-handle-bar{background-color:var(--nice-border-hover, #9ca3af)}.nice-bottom-sheet-header{flex-shrink:0;padding:0 var(--nice-space-4, 16px) var(--nice-space-3, 12px);border-bottom:1px solid var(--nice-border, #e5e7eb)}.nice-bottom-sheet-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--nice-space-4, 16px);-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.nice-bottom-sheet-footer{flex-shrink:0;padding:var(--nice-space-3, 12px) var(--nice-space-4, 16px);border-top:1px solid var(--nice-border, #e5e7eb);background-color:var(--nice-surface, #ffffff)}@media(prefers-color-scheme:dark){.nice-bottom-sheet{background-color:var(--nice-surface-dark, #1f2937)}.nice-bottom-sheet-backdrop{background-color:var(--nice-text, #000)}.nice-bottom-sheet-handle-bar{background-color:var(--nice-border-dark, #4b5563)}.nice-bottom-sheet-handle:hover .nice-bottom-sheet-handle-bar{background-color:var(--nice-border-hover-dark, #6b7280)}.nice-bottom-sheet-header,.nice-bottom-sheet-footer{border-color:var(--nice-border-dark, #374151)}.nice-bottom-sheet-footer{background-color:var(--nice-surface-dark, #1f2937)}}@keyframes nice-bottom-sheet-in{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes nice-bottom-sheet-out{0%{transform:translateY(0)}to{transform:translateY(100%)}}@supports (padding-bottom: env(safe-area-inset-bottom)){.nice-bottom-sheet{padding-bottom:env(safe-area-inset-bottom)}}@media(prefers-reduced-motion:reduce){.nice-bottom-sheet,.nice-bottom-sheet-backdrop{transition:none!important}}@media(min-width:768px){.nice-bottom-sheet{max-width:640px;left:50%;transform:translate(-50%);border-top-left-radius:var(--nice-radius-xl, 16px);border-top-right-radius:var(--nice-radius-xl, 16px)}}.nice-image-gallery{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;background-color:var(--nice-overlay-95, rgba(0, 0, 0, .95));user-select:none;-webkit-user-select:none;touch-action:none}.nice-image-gallery-header{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:var(--nice-space-3, 12px) var(--nice-space-4, 16px);background:linear-gradient(to bottom,var(--nice-overlay-70, rgba(0, 0, 0, .7)),transparent);z-index:10}.nice-image-gallery-counter{color:var(--nice-bg, #FFF);font-size:14px;font-weight:500;text-shadow:0 1px 2px var(--nice-overlay-50, rgba(0, 0, 0, .5))}.nice-image-gallery-actions{display:flex;gap:var(--nice-space-2, 8px)}.nice-image-gallery-btn{width:40px;height:40px;border:none;border-radius:var(--nice-radius-full, 50%);background-color:var(--nice-overlay-light-15, rgba(255, 255, 255, .15));color:var(--nice-bg, #FFF);font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease}.nice-image-gallery-btn:hover{background-color:var(--nice-overlay-light-25, rgba(255, 255, 255, .25))}.nice-image-gallery-btn:disabled{opacity:.3;cursor:not-allowed}.nice-image-gallery-close{font-size:28px}.nice-image-gallery-viewport{flex:1;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.nice-image-gallery-nav{position:absolute;top:50%;transform:translateY(-50%);width:48px;height:48px;border:none;border-radius:var(--nice-radius-full, 50%);background-color:var(--nice-overlay-light-15, rgba(255, 255, 255, .15));color:var(--nice-bg, #FFF);font-size:32px;cursor:pointer;z-index:10;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease,opacity .2s ease;opacity:.7}.nice-image-gallery-nav:hover{background-color:var(--nice-overlay-light-30, rgba(255, 255, 255, .3));opacity:1}.nice-image-gallery-nav:disabled{opacity:0;pointer-events:none}.nice-image-gallery-nav--prev{left:16px}.nice-image-gallery-nav--next{right:16px}@media(hover:none)and (pointer:coarse){.nice-image-gallery-nav{display:none}}.nice-image-gallery-image-container{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.nice-image-gallery-placeholder{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.nice-image-gallery-image{max-width:100%;max-height:100%;object-fit:contain;touch-action:none;will-change:transform}.nice-image-gallery-image--animating{transition:transform .3s cubic-bezier(.4,0,.2,1)}.nice-image-gallery-caption{flex-shrink:0;padding:var(--nice-space-3, 12px) var(--nice-space-4, 16px);background:linear-gradient(to top,var(--nice-overlay-70, rgba(0, 0, 0, .7)),transparent);color:var(--nice-bg, #FFF);text-align:center}.nice-image-gallery-caption h3{margin:0;font-size:16px;font-weight:600}.nice-image-gallery-caption p{margin:var(--nice-space-1, 4px) 0 0;font-size:14px;opacity:.8}.nice-image-gallery-thumbnails{flex-shrink:0;display:flex;gap:var(--nice-space-2, 8px);padding:var(--nice-space-3, 12px) var(--nice-space-4, 16px);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;background-color:var(--nice-overlay-50, rgba(0, 0, 0, .5))}.nice-image-gallery-thumbnails::-webkit-scrollbar{display:none}.nice-image-gallery-thumb{flex-shrink:0;width:60px;height:60px;padding:0;border:2px solid transparent;border-radius:var(--nice-radius-sm, 4px);background:transparent;cursor:pointer;overflow:hidden;transition:border-color .2s ease,opacity .2s ease;opacity:.6}.nice-image-gallery-thumb:hover{opacity:.9}.nice-image-gallery-thumb--active{border-color:var(--nice-bg, #FFF);opacity:1}.nice-image-gallery-thumb img{width:100%;height:100%;object-fit:cover}.nice-image-gallery-dots{flex-shrink:0;display:flex;justify-content:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-4, 16px)}.nice-image-gallery-dot{width:8px;height:8px;padding:0;border:none;border-radius:var(--nice-radius-full, 50%);background-color:var(--nice-overlay-light-40, rgba(255, 255, 255, .4));cursor:pointer;transition:background-color .2s ease,transform .2s ease}.nice-image-gallery-dot:hover{background-color:var(--nice-overlay-light-60, rgba(255, 255, 255, .6))}.nice-image-gallery-dot--active{background-color:var(--nice-bg, #FFF);transform:scale(1.25)}@supports (padding-top: env(safe-area-inset-top)){.nice-image-gallery-header{padding-top:calc(12px + env(safe-area-inset-top))}.nice-image-gallery-thumbnails,.nice-image-gallery-dots{padding-bottom:calc(12px + env(safe-area-inset-bottom))}}@media(prefers-reduced-motion:reduce){.nice-image-gallery-image,.nice-image-gallery-image--animating,.nice-image-gallery-btn,.nice-image-gallery-nav,.nice-image-gallery-thumb,.nice-image-gallery-dot{transition:none!important}}@keyframes nice-gallery-spin{to{transform:rotate(360deg)}}.nice-image-gallery-loading{width:40px;height:40px;border:3px solid var(--nice-overlay-light-20, rgba(255, 255, 255, .2));border-top-color:var(--nice-bg, #FFF);border-radius:var(--nice-radius-full, 50%);animation:nice-gallery-spin .8s linear infinite}.nice-infinite-container{--infinite-primary: var(--nice-info, #6366f1);--infinite-text: var(--nice-text, #374151);--infinite-text-muted: var(--nice-text-muted, #9ca3af);--infinite-bg: var(--nice-bg, #FFFFFF);--infinite-border: var(--nice-border, #e5e7eb);--infinite-error: var(--nice-danger, #ef4444);position:relative;width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch;outline:none}.nice-infinite-container:focus-visible{outline:2px solid var(--infinite-primary);outline-offset:-2px}.nice-infinite-container--vertical{overflow-y:auto;overflow-x:hidden}.nice-infinite-container--horizontal{overflow-x:auto;overflow-y:hidden;display:flex;flex-direction:row}.nice-infinite-container--horizontal .nice-infinite-items{display:flex;flex-direction:row}.nice-infinite-container--reverse .nice-infinite-items{display:flex;flex-direction:column-reverse}.nice-infinite-container--empty{display:flex;align-items:center;justify-content:center}.nice-infinite-items{display:flex;flex-direction:column}.nice-infinite-item{flex-shrink:0}.nice-infinite-header,.nice-infinite-footer{position:sticky;z-index:10;background:var(--infinite-bg)}.nice-infinite-header{top:0;border-bottom:1px solid var(--infinite-border)}.nice-infinite-footer{bottom:0;border-top:1px solid var(--infinite-border)}.nice-infinite-sentinel{height:1px;width:100%;pointer-events:none}.nice-infinite-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--nice-space-3, 12px);padding:var(--nice-space-6, 24px);color:var(--infinite-text-muted)}.nice-infinite-spinner{animation:infinite-spin 1s linear infinite}.nice-infinite-spinner-track{stroke:var(--infinite-border)}.nice-infinite-spinner-fill{stroke:var(--infinite-primary);stroke-dasharray:60;stroke-dashoffset:0;animation:infinite-dash 1.5s ease-in-out infinite}@keyframes infinite-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes infinite-dash{0%{stroke-dasharray:1,63;stroke-dashoffset:0}50%{stroke-dasharray:45,63;stroke-dashoffset:-15}to{stroke-dasharray:45,63;stroke-dashoffset:-60}}.nice-infinite-loading-text{font-size:13px;font-weight:500}.nice-infinite-end{display:flex;align-items:center;justify-content:center;gap:var(--nice-space-4, 16px);padding:var(--nice-space-6, 24px);color:var(--infinite-text-muted)}.nice-infinite-end-line{flex:1;max-width:100px;height:1px;background:var(--infinite-border)}.nice-infinite-end-text{font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}.nice-infinite-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--nice-space-3, 12px);padding:var(--nice-space-6, 24px);color:var(--infinite-error)}.nice-infinite-error-icon{width:32px;height:32px}.nice-infinite-error-text{font-size:14px;text-align:center}.nice-infinite-error-retry{padding:var(--nice-space-2, 8px) var(--nice-space-5, 20px);border:none;border-radius:var(--nice-radius-md, 6px);background:var(--infinite-error);color:#fff;font-size:13px;font-weight:500;cursor:pointer;transition:background .2s ease}.nice-infinite-error-retry:hover{background:var(--nice-danger-dark, #dc2626)}.nice-infinite-error-retry:focus-visible{outline:2px solid var(--infinite-error);outline-offset:2px}.nice-infinite-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--nice-space-4, 16px);padding:var(--nice-space-12, 48px) var(--nice-space-6, 24px);color:var(--infinite-text-muted);text-align:center}.nice-infinite-empty-icon{opacity:.5}.nice-infinite-empty-text{margin:0;font-size:15px}.nice-infinite-pull{padding:var(--nice-space-4, 16px);text-align:center}.nice-infinite-scroll-top{position:fixed;bottom:24px;right:24px;width:48px;height:48px;display:flex;align-items:center;justify-content:center;border:none;border-radius:var(--nice-radius-full, 50%);background:var(--infinite-primary);color:#fff;box-shadow:0 4px 12px var(--nice-accent-tint-30, rgba(99, 102, 241, .3));cursor:pointer;opacity:0;transform:scale(.8) translateY(10px);transition:all .3s cubic-bezier(.4,0,.2,1);z-index:100}.nice-infinite-scroll-top--visible{opacity:1;transform:scale(1) translateY(0)}.nice-infinite-scroll-top:hover{background:var(--nice-accent, #4f46e5);transform:scale(1.05) translateY(0)}.nice-infinite-scroll-top:active{transform:scale(.95) translateY(0)}.nice-infinite-scroll-top:focus-visible{outline:2px solid var(--infinite-primary);outline-offset:2px}@media(prefers-color-scheme:dark){.nice-infinite-container{--infinite-text: var(--nice-bg-secondary, #f9fafb);--infinite-text-muted: var(--nice-text-muted, #9ca3af);--infinite-bg: var(--nice-text, #1f2937);--infinite-border: var(--nice-text, #374151)}.nice-infinite-scroll-top{box-shadow:0 4px 12px var(--nice-overlay-40, rgba(0, 0, 0, .4))}}@media(prefers-reduced-motion:reduce){.nice-infinite-spinner,.nice-infinite-scroll-top{animation:none!important;transition:opacity .01ms!important}.nice-infinite-spinner-fill{animation:none;stroke-dasharray:45,63}}@media(forced-colors:active){.nice-infinite-error-retry,.nice-infinite-scroll-top{border:2px solid ButtonText}}.nice-drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--nice-overlay-50, rgba(0, 0, 0, .5));opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease;-webkit-tap-highlight-color:transparent}.nice-drawer-overlay--visible{opacity:1;visibility:visible}.nice-drawer{--drawer-bg: var(--nice-bg, #FFFFFF);--drawer-text: var(--nice-text, #1f2937);--drawer-text-muted: var(--nice-text-secondary, #6b7280);--drawer-border: var(--nice-border, #e5e7eb);--drawer-primary: var(--nice-info, #6366f1);--drawer-hover: var(--nice-bg-secondary, #f3f4f6);--drawer-active: var(--nice-primary-bg, #e0e7ff);--drawer-shadow: 0 25px 50px -12px var(--nice-overlay-25, rgba(0, 0, 0, .25));position:fixed;display:flex;flex-direction:column;background:var(--drawer-bg);box-shadow:var(--drawer-shadow);will-change:transform;transition:transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden}.nice-drawer--dragging{transition:none}.nice-drawer--left{top:0;left:0;bottom:0;border-right:1px solid var(--drawer-border)}.nice-drawer--right{top:0;right:0;bottom:0;border-left:1px solid var(--drawer-border)}.nice-drawer--top{top:0;left:0;right:0;border-bottom:1px solid var(--drawer-border)}.nice-drawer--bottom{bottom:0;left:0;right:0;border-top:1px solid var(--drawer-border);border-radius:var(--nice-radius-xl, 16px) var(--nice-radius-xl, 16px) 0 0}.nice-drawer--persistent{box-shadow:none}.nice-drawer--persistent.nice-drawer--left,.nice-drawer--persistent.nice-drawer--right{position:relative}.nice-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--nice-space-4, 16px);border-bottom:1px solid var(--drawer-border);flex-shrink:0}.nice-drawer-close{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:var(--nice-radius-lg, 8px);background:transparent;color:var(--drawer-text-muted);cursor:pointer;transition:all .2s ease}.nice-drawer-close:hover{background:var(--drawer-hover);color:var(--drawer-text)}.nice-drawer-close:focus-visible{outline:2px solid var(--drawer-primary);outline-offset:2px}.nice-drawer-content{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.nice-drawer-footer{padding:var(--nice-space-4, 16px);border-top:1px solid var(--drawer-border);flex-shrink:0}.nice-drawer-nav{padding:var(--nice-space-2, 8px) 0}.nice-drawer-nav-item-wrapper{width:100%}.nice-drawer-nav-item{display:flex;align-items:center;gap:var(--nice-space-3, 12px);width:100%;padding:var(--nice-space-3, 12px) var(--nice-space-4, 16px);border:none;background:transparent;color:var(--drawer-text);font-size:14px;font-weight:500;text-align:left;cursor:pointer;transition:all .15s ease}.nice-drawer-nav-item:hover{background:var(--drawer-hover)}.nice-drawer-nav-item:focus-visible{outline:none;background:var(--drawer-hover);box-shadow:inset 3px 0 0 var(--drawer-primary)}.nice-drawer-nav-item--active{background:var(--drawer-active);color:var(--drawer-primary);box-shadow:inset 3px 0 0 var(--drawer-primary)}.nice-drawer-nav-item--active:hover{background:var(--drawer-active)}.nice-drawer-nav-item--disabled{opacity:.5;cursor:not-allowed}.nice-drawer-nav-item--disabled:hover{background:transparent}.nice-drawer-nav-item--depth-1{font-size:13px}.nice-drawer-nav-item--depth-2{font-size:12px}.nice-drawer-nav-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0;color:var(--drawer-text-muted)}.nice-drawer-nav-item--active .nice-drawer-nav-icon{color:var(--drawer-primary)}.nice-drawer-nav-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nice-drawer-nav-badge{padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);background:var(--drawer-primary);color:#fff;border-radius:var(--nice-radius-lg, 10px);font-size:11px;font-weight:600;flex-shrink:0}.nice-drawer-nav-chevron{display:flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--drawer-text-muted);transition:transform .2s ease}.nice-drawer-nav-chevron--expanded{transform:rotate(180deg)}.nice-drawer-nav-children{background:var(--nice-overlay-3, rgba(0, 0, 0, .02))}.nice-drawer-divider{height:1px;margin:var(--nice-space-2, 8px) var(--nice-space-4, 16px);background:var(--drawer-border)}.nice-drawer-section{padding:var(--nice-space-4, 16px) var(--nice-space-4, 16px) var(--nice-space-2, 8px)}.nice-drawer-section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--drawer-text-muted)}@media(prefers-color-scheme:dark){.nice-drawer{--drawer-bg: var(--nice-text, #1f2937);--drawer-text: var(--nice-bg-secondary, #f9fafb);--drawer-text-muted: var(--nice-text-muted, #9ca3af);--drawer-border: var(--nice-text, #374151);--drawer-hover: var(--nice-text, #374151);--drawer-active: var(--nice-accent-tint-20, rgba(99, 102, 241, .2))}.nice-drawer-overlay{background:var(--nice-overlay-70, rgba(0, 0, 0, .7))}.nice-drawer-nav-children{background:var(--nice-overlay-20, rgba(0, 0, 0, .2))}}@media(prefers-reduced-motion:reduce){.nice-drawer,.nice-drawer-overlay,.nice-drawer-nav-item,.nice-drawer-nav-chevron,.nice-drawer-close{transition:none!important}}@media(forced-colors:active){.nice-drawer{border:2px solid ButtonText}.nice-drawer-nav-item:focus-visible,.nice-drawer-nav-item--active{outline:2px solid Highlight}}@supports (padding-bottom: env(safe-area-inset-bottom)){.nice-drawer--left,.nice-drawer--right{padding-bottom:env(safe-area-inset-bottom)}.nice-drawer--bottom{padding-bottom:calc(16px + env(safe-area-inset-bottom))}}.nice-mobile-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--nice-overlay-50, rgba(0, 0, 0, .5));opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease;z-index:999;-webkit-tap-highlight-color:transparent}.nice-mobile-modal-overlay--visible{opacity:1;visibility:visible}.nice-modal-sheet{--modal-bg: var(--nice-bg, #FFFFFF);--modal-text: var(--nice-text, #1f2937);--modal-text-muted: var(--nice-text-secondary, #6b7280);--modal-border: var(--nice-border, #e5e7eb);--modal-primary: var(--nice-info, #6366f1);--modal-primary-hover: var(--nice-accent, #4f46e5);--modal-danger: var(--nice-danger, #ef4444);--modal-danger-hover: var(--nice-danger-dark, #dc2626);--modal-hover: var(--nice-bg-secondary, #f3f4f6);--modal-shadow: 0 -10px 40px -10px var(--nice-overlay-20, rgba(0, 0, 0, .2));position:fixed;bottom:0;left:0;right:0;display:flex;flex-direction:column;background:var(--modal-bg);box-shadow:var(--modal-shadow);z-index:1000;max-height:calc(100vh - env(safe-area-inset-top,20px));transition:height .3s cubic-bezier(.4,0,.2,1);will-change:height}.nice-modal-sheet--dragging{transition:none}.nice-modal-handle-area{display:flex;align-items:center;justify-content:center;padding:var(--nice-space-3, 12px) 0;cursor:grab;flex-shrink:0;touch-action:none}.nice-modal-handle-area:active{cursor:grabbing}.nice-modal-handle{width:36px;height:5px;background:var(--modal-border);border-radius:var(--nice-radius-sm, 3px);transition:background .2s ease}.nice-modal-handle-area:hover .nice-modal-handle,.nice-modal-sheet--dragging .nice-modal-handle{background:var(--modal-text-muted)}.nice-modal-header{display:flex;align-items:center;justify-content:space-between;padding:0 var(--nice-space-4, 16px) var(--nice-space-4, 16px);flex-shrink:0}.nice-modal-title{margin:0;font-size:18px;font-weight:600;color:var(--modal-text)}.nice-modal-close{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:var(--nice-radius-full, 50%);background:var(--modal-hover);color:var(--modal-text-muted);cursor:pointer;transition:all .2s ease;margin-left:auto}.nice-modal-close:hover{background:var(--modal-border);color:var(--modal-text)}.nice-modal-close:focus-visible{outline:2px solid var(--modal-primary);outline-offset:2px}.nice-modal-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 var(--nice-space-4, 16px) var(--nice-space-4, 16px);-webkit-overflow-scrolling:touch}.nice-modal-footer{padding:var(--nice-space-4, 16px);border-top:1px solid var(--modal-border);flex-shrink:0;background:var(--modal-bg)}.nice-action-sheet{display:flex;flex-direction:column;gap:var(--nice-space-px, 1px);padding:0 var(--nice-space-2, 8px) var(--nice-space-2, 8px)}.nice-action-sheet-item{display:flex;align-items:center;gap:var(--nice-space-3, 12px);width:100%;padding:var(--nice-space-4, 16px);border:none;border-radius:var(--nice-radius-xl, 12px);background:transparent;color:var(--modal-text);font-size:16px;font-weight:500;text-align:left;cursor:pointer;transition:background .15s ease}.nice-action-sheet-item:hover{background:var(--modal-hover)}.nice-action-sheet-item:focus-visible{outline:none;background:var(--modal-hover);box-shadow:inset 0 0 0 2px var(--modal-primary)}.nice-action-sheet-item:disabled{opacity:.4;cursor:not-allowed}.nice-action-sheet-item:disabled:hover{background:transparent}.nice-action-sheet-item--destructive{color:var(--modal-danger)}.nice-action-sheet-item--cancel{font-weight:600;margin-top:var(--nice-space-2, 8px);background:var(--modal-hover)}.nice-action-sheet-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.nice-action-sheet-divider{height:1px;margin:var(--nice-space-2, 8px) 0;background:var(--modal-border)}.nice-confirm-sheet-message{font-size:15px;color:var(--modal-text-muted);line-height:1.5}.nice-confirm-sheet-buttons{display:flex;gap:var(--nice-space-3, 12px)}.nice-confirm-sheet-btn{flex:1;padding:var(--nice-space-3-5, 14px) var(--nice-space-5, 20px);border:none;border-radius:var(--nice-radius-xl, 12px);font-size:15px;font-weight:600;cursor:pointer;transition:all .2s ease}.nice-confirm-sheet-btn--cancel{background:var(--modal-hover);color:var(--modal-text)}.nice-confirm-sheet-btn--cancel:hover{background:var(--modal-border)}.nice-confirm-sheet-btn--confirm{background:var(--modal-primary);color:#fff}.nice-confirm-sheet-btn--confirm:hover{background:var(--modal-primary-hover)}.nice-confirm-sheet-btn--destructive{background:var(--modal-danger)}.nice-confirm-sheet-btn--destructive:hover{background:var(--modal-danger-hover)}.nice-confirm-sheet-btn:focus-visible{outline:2px solid var(--modal-primary);outline-offset:2px}@media(prefers-color-scheme:dark){.nice-modal-sheet{--modal-bg: var(--nice-text, #1f2937);--modal-text: var(--nice-bg-secondary, #f9fafb);--modal-text-muted: var(--nice-text-muted, #9ca3af);--modal-border: var(--nice-text, #374151);--modal-hover: var(--nice-text, #374151)}.nice-mobile-modal-overlay{background:var(--nice-overlay-70, rgba(0, 0, 0, .7))}.nice-action-sheet-item--cancel{background:var(--modal-border)}}@media(prefers-reduced-motion:reduce){.nice-modal-sheet,.nice-mobile-modal-overlay,.nice-modal-close,.nice-modal-handle,.nice-action-sheet-item,.nice-confirm-sheet-btn{transition:none!important}}@media(forced-colors:active){.nice-modal-sheet{border:2px solid ButtonText}.nice-action-sheet-item:focus-visible,.nice-confirm-sheet-btn:focus-visible,.nice-modal-close:focus-visible{outline:2px solid Highlight}}@supports (padding-bottom: env(safe-area-inset-bottom)){.nice-modal-footer{padding-bottom:calc(16px + env(safe-area-inset-bottom))}.nice-action-sheet{padding-bottom:calc(8px + env(safe-area-inset-bottom))}.nice-modal-content:last-child{padding-bottom:calc(16px + env(safe-area-inset-bottom))}}.nice-mobile-tabs{--tabs-bg: var(--nice-bg, #FFFFFF);--tabs-text: var(--nice-text-secondary, #6b7280);--tabs-text-active: var(--nice-info, #6366f1);--tabs-border: var(--nice-border, #e5e7eb);--tabs-badge-bg: var(--nice-danger, #ef4444);--tabs-badge-text: var(--nice-bg, #FFFFFF);--tabs-shadow: 0 -2px 10px var(--nice-overlay-5, rgba(0, 0, 0, .05));display:flex;align-items:stretch;justify-content:space-around;background:var(--tabs-bg);box-shadow:var(--tabs-shadow);transition:transform .3s cubic-bezier(.4,0,.2,1);z-index:50}.nice-mobile-tabs--hidden{transform:translateY(100%)}.nice-mobile-tabs--bottom{position:fixed;bottom:0;left:0;right:0;border-top:1px solid var(--tabs-border)}.nice-mobile-tabs--top{position:fixed;top:0;left:0;right:0;border-bottom:1px solid var(--tabs-border)}.nice-mobile-tabs--top.nice-mobile-tabs--hidden{transform:translateY(-100%)}@supports (padding-bottom: env(safe-area-inset-bottom)){.nice-mobile-tabs--bottom.nice-mobile-tabs--safe-area{padding-bottom:env(safe-area-inset-bottom)}.nice-mobile-tabs--top.nice-mobile-tabs--safe-area{padding-top:env(safe-area-inset-top)}}.nice-mobile-tabs--default{min-height:56px}.nice-mobile-tabs--minimal{min-height:48px;box-shadow:none}.nice-mobile-tabs--floating{position:fixed;bottom:16px;left:16px;right:16px;min-height:64px;border:none;border-radius:var(--nice-radius-xl, 20px);box-shadow:0 4px 20px var(--nice-overlay-15, rgba(0, 0, 0, .15))}@supports (padding-bottom: env(safe-area-inset-bottom)){.nice-mobile-tabs--floating.nice-mobile-tabs--safe-area{bottom:calc(16px + env(safe-area-inset-bottom));padding-bottom:0}}.nice-mobile-tabs--shifted{min-height:56px}.nice-mobile-tabs--shifted .nice-tab-button:nth-child(3){margin-top:-16px;background:var(--tabs-text-active);color:#fff;border-radius:var(--nice-radius-full, 50%);width:56px;height:56px;padding:0;box-shadow:0 4px 12px var(--nice-accent-tint-40, rgba(99, 102, 241, .4))}.nice-mobile-tabs--shifted .nice-tab-button:nth-child(3) .nice-tab-label{display:none}.nice-mobile-tabs--shifted .nice-tab-button:nth-child(3).nice-tab-button--active{background:var(--tabs-text-active)}.nice-tab-button{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-width:64px;max-width:168px;padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);border:none;background:transparent;color:var(--tabs-text);text-decoration:none;cursor:pointer;transition:color .2s ease;position:relative;-webkit-tap-highlight-color:transparent}.nice-tab-button:focus-visible{outline:none;background:var(--nice-accent-tint-10, rgba(99, 102, 241, .1))}.nice-tab-button--active{color:var(--tabs-text-active)}.nice-tab-button--disabled{opacity:.4;cursor:not-allowed}.nice-tab-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;transition:transform .2s cubic-bezier(.4,0,.2,1)}.nice-tab-button--active .nice-tab-icon{transform:scale(1)}.nice-tab-label{margin-top:var(--nice-space-0-5, 2px);font-size:10px;font-weight:500;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.nice-tab-button--active .nice-tab-label{font-weight:600}.nice-tab-badge{position:absolute;top:4px;right:calc(50% - 20px);background:var(--tabs-badge-bg);color:var(--tabs-badge-text);border-radius:var(--nice-radius-lg, 10px);animation:nice-badge-pop .3s ease}.nice-tab-badge--dot{width:8px;height:8px;right:calc(50% - 14px)}.nice-tab-badge--count{min-width:16px;height:16px;padding:0 var(--nice-space-1, 4px);font-size:10px;font-weight:600;line-height:16px;text-align:center}@keyframes nice-badge-pop{0%{transform:scale(0)}50%{transform:scale(1.2)}to{transform:scale(1)}}@media(prefers-color-scheme:dark){.nice-mobile-tabs{--tabs-bg: var(--nice-text, #1f2937);--tabs-text: var(--nice-text-muted, #9ca3af);--tabs-text-active: var(--nice-accent, #818cf8);--tabs-border: var(--nice-text, #374151);--tabs-shadow: 0 -2px 10px var(--nice-overlay-30, rgba(0, 0, 0, .3))}.nice-mobile-tabs--shifted .nice-tab-button:nth-child(3){box-shadow:0 4px 12px var(--nice-accent-tint-30, rgba(99, 102, 241, .3))}}@media(prefers-reduced-motion:reduce){.nice-mobile-tabs,.nice-tab-button,.nice-tab-icon,.nice-tab-badge{transition:none!important;animation:none!important}}@media(forced-colors:active){.nice-mobile-tabs{border:2px solid ButtonText}.nice-tab-button--active{outline:2px solid Highlight}.nice-tab-button:focus-visible{outline:2px solid Highlight}}@media(orientation:landscape)and (max-height:500px){.nice-mobile-tabs--default,.nice-mobile-tabs--minimal{min-height:48px}.nice-tab-button{flex-direction:row;gap:var(--nice-space-2, 8px);padding:var(--nice-space-2, 8px) var(--nice-space-4, 16px)}.nice-tab-label{margin-top:0;font-size:12px}.nice-tab-badge{position:relative;top:auto;right:auto;margin-left:var(--nice-space-1, 4px)}.nice-tab-badge--dot{width:6px;height:6px}}@media(max-width:320px){.nice-tab-button{min-width:48px;padding:var(--nice-space-1-5, 6px) var(--nice-space-1, 4px)}.nice-tab-label{font-size:9px}}.nice-mobile-header{--header-bg: var(--nice-bg, #FFFFFF);--header-text: var(--nice-text, #1f2937);--header-text-muted: var(--nice-text-secondary, #6b7280);--header-border: var(--nice-border, #e5e7eb);--header-primary: var(--nice-info, #6366f1);--header-shadow: 0 2px 8px var(--nice-overlay-10, rgba(0, 0, 0, .1));position:relative;display:flex;flex-direction:column;background:var(--header-bg);color:var(--header-text);overflow:hidden;will-change:height;transition:transform .3s cubic-bezier(.4,0,.2,1)}.nice-mobile-header--sticky{position:fixed;top:0;left:0;right:0}.nice-mobile-header--hidden{transform:translateY(-100%)}.nice-mobile-header--shadow{box-shadow:var(--header-shadow)}.nice-mobile-header--border{border-bottom:1px solid var(--header-border)}@supports (padding-top: env(safe-area-inset-top)){.nice-mobile-header--safe-area{padding-top:env(safe-area-inset-top)}}.nice-header-spacer{flex-shrink:0}.nice-mobile-header--default{background:var(--header-bg)}.nice-mobile-header--transparent{background:transparent}.nice-mobile-header--blur{background:var(--nice-overlay-light-80, rgba(255, 255, 255, .8));backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}.nice-mobile-header--solid{background:var(--header-primary);color:#fff}.nice-mobile-header--solid .nice-header-action{color:#fff}.nice-header-background{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;will-change:transform,opacity}.nice-header-background>*{width:100%;height:100%;object-fit:cover}.nice-header-toolbar{display:flex;align-items:center;padding:0 var(--nice-space-1, 4px);flex-shrink:0;position:relative;z-index:2}.nice-header-left,.nice-header-right{display:flex;align-items:center;gap:var(--nice-space-1, 4px);flex-shrink:0}.nice-header-left{min-width:48px}.nice-header-right{min-width:48px;justify-content:flex-end}.nice-header-center{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;padding:0 var(--nice-space-2, 8px);text-align:center;will-change:opacity}.nice-header-title{font-size:17px;font-weight:600;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.nice-header-subtitle{font-size:12px;color:var(--header-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.nice-mobile-header--solid .nice-header-subtitle{color:var(--nice-overlay-light-80, rgba(255, 255, 255, .8))}.nice-header-action{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border:none;border-radius:var(--nice-radius-xl, 22px);background:transparent;color:inherit;cursor:pointer;transition:background .15s ease;position:relative;-webkit-tap-highlight-color:transparent}.nice-header-action:hover{background:var(--nice-overlay-5, rgba(0, 0, 0, .05))}.nice-mobile-header--solid .nice-header-action:hover{background:var(--nice-overlay-light-10, rgba(255, 255, 255, .1))}.nice-header-action:focus-visible{outline:none;background:var(--nice-accent-tint-10, rgba(99, 102, 241, .1))}.nice-header-action--disabled{opacity:.4;cursor:not-allowed}.nice-header-action--disabled:hover{background:transparent}.nice-header-badge{position:absolute;top:8px;right:8px;min-width:16px;height:16px;padding:0 var(--nice-space-1, 4px);background:var(--nice-danger, #ef4444);color:#fff;border-radius:var(--nice-radius-lg, 8px);font-size:10px;font-weight:600;line-height:16px;text-align:center}.nice-header-badge--dot{width:8px;height:8px;min-width:8px;padding:0;top:10px;right:10px}.nice-header-expanded{flex:1;display:flex;flex-direction:column;justify-content:flex-end;padding:0 var(--nice-space-4, 16px) var(--nice-space-3, 12px);position:relative;z-index:1;will-change:opacity}.nice-header-large-title-container{display:flex;flex-direction:column;gap:var(--nice-space-0-5, 2px)}.nice-header-large-title{margin:0;font-size:34px;font-weight:700;line-height:1.1;letter-spacing:-.5px}.nice-header-large-subtitle{margin:0;font-size:14px;color:var(--header-text-muted)}.nice-mobile-header--transparent .nice-header-large-title,.nice-mobile-header--transparent .nice-header-large-subtitle{color:#fff;text-shadow:0 1px 3px var(--nice-overlay-30, rgba(0, 0, 0, .3))}@media(prefers-color-scheme:dark){.nice-mobile-header{--header-bg: var(--nice-text, #1f2937);--header-text: var(--nice-bg-secondary, #f9fafb);--header-text-muted: var(--nice-text-muted, #9ca3af);--header-border: var(--nice-text, #374151);--header-shadow: 0 2px 8px var(--nice-overlay-30, rgba(0, 0, 0, .3))}.nice-mobile-header--blur{background:var(--nice-overlay-80, rgba(31, 41, 55, .8))}.nice-header-action:hover{background:var(--nice-overlay-light-10, rgba(255, 255, 255, .1))}}@media(prefers-reduced-motion:reduce){.nice-mobile-header,.nice-header-background,.nice-header-center,.nice-header-expanded,.nice-header-action{transition:none!important}}@media(forced-colors:active){.nice-mobile-header{border-bottom:1px solid ButtonText}.nice-header-action:focus-visible{outline:2px solid Highlight}}@media(min-width:768px){.nice-header-center{align-items:flex-start;text-align:left;padding-left:var(--nice-space-4, 16px)}.nice-header-large-title{font-size:28px}}.nice-mobile-picker{--picker-bg: var(--nice-bg, #FFFFFF);--picker-text: var(--nice-text, #1f2937);--picker-text-muted: var(--nice-text-muted, #9ca3af);--picker-indicator: var(--nice-accent-tint-10, rgba(99, 102, 241, .1));--picker-indicator-border: var(--nice-accent-tint-30, rgba(99, 102, 241, .3));--picker-gradient-start: var(--nice-overlay-light-95, rgba(255, 255, 255, 1));--picker-gradient-end: transparent;display:flex;flex-direction:column;background:var(--picker-bg);border-radius:var(--nice-radius-xl, 12px);overflow:hidden;user-select:none;-webkit-user-select:none}.nice-picker-labels{display:flex;padding:0 var(--nice-space-2, 8px);margin-bottom:var(--nice-space-1, 4px)}.nice-picker-label{flex:1;padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);font-size:12px;font-weight:500;color:var(--picker-text-muted);text-align:center}.nice-picker-body{position:relative;flex:1;overflow:hidden}.nice-picker-indicator{position:absolute;left:8px;right:8px;background:var(--picker-indicator);border-top:1px solid var(--picker-indicator-border);border-bottom:1px solid var(--picker-indicator-border);border-radius:var(--nice-radius-lg, 8px);pointer-events:none;z-index:1}.nice-picker-columns{display:flex;height:100%;position:relative;z-index:2}.nice-picker-column{flex:1;overflow-y:auto;overflow-x:hidden;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.nice-picker-column::-webkit-scrollbar{display:none}.nice-picker-column-inner{display:flex;flex-direction:column}.nice-picker-item{display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0 var(--nice-space-2, 8px);font-size:18px;font-weight:500;color:var(--picker-text);text-align:center;cursor:pointer;scroll-snap-align:center;transition:transform .15s ease,opacity .15s ease;will-change:transform,opacity;-webkit-tap-highlight-color:transparent}.nice-picker-item--selected{font-weight:600;color:var(--picker-text)}.nice-picker-item--disabled{opacity:.3;cursor:not-allowed}.nice-picker-gradient{position:absolute;left:0;right:0;height:40%;pointer-events:none;z-index:3}.nice-picker-gradient--top{top:0;background:linear-gradient(to bottom,var(--picker-gradient-start) 0%,var(--picker-gradient-end) 100%)}.nice-picker-gradient--bottom{bottom:0;background:linear-gradient(to top,var(--picker-gradient-start) 0%,var(--picker-gradient-end) 100%)}@media(prefers-color-scheme:dark){.nice-mobile-picker{--picker-bg: var(--nice-text, #1f2937);--picker-text: var(--nice-bg-secondary, #f9fafb);--picker-text-muted: var(--nice-text-secondary, #6b7280);--picker-indicator: var(--nice-accent-tint-20, rgba(99, 102, 241, .2));--picker-indicator-border: var(--nice-accent-tint-40, rgba(99, 102, 241, .4));--picker-gradient-start: rgba(31, 41, 55, 1);--picker-gradient-end: rgba(31, 41, 55, 0)}}@media(prefers-reduced-motion:reduce){.nice-picker-item{transition:none}.nice-picker-column{scroll-behavior:auto}}@media(forced-colors:active){.nice-picker-indicator{border:2px solid Highlight;background:transparent}.nice-picker-item--selected{outline:2px solid Highlight}.nice-picker-gradient--top,.nice-picker-gradient--bottom{display:none}}.nice-picker-item:active:not(.nice-picker-item--disabled){transform:scale(.95)}.nice-mobile-picker--compact .nice-picker-item{font-size:16px}.nice-mobile-picker--compact .nice-picker-indicator{border-radius:var(--nice-radius-md, 6px)}.nice-mobile-picker--large .nice-picker-item{font-size:22px}.nice-mobile-picker--large .nice-picker-indicator{border-radius:var(--nice-radius-xl, 12px)}.nice-mobile-calendar{--calendar-bg: var(--nice-bg, #FFFFFF);--calendar-text: var(--nice-text, #1f2937);--calendar-text-muted: var(--nice-text-muted, #9ca3af);--calendar-border: var(--nice-border, #e5e7eb);--calendar-primary: var(--nice-info, #6366f1);--calendar-primary-light: var(--nice-accent-tint-10, rgba(99, 102, 241, .1));--calendar-today-bg: var(--nice-bg-secondary, #f3f4f6);--calendar-selected-bg: var(--calendar-primary);--calendar-selected-text: var(--nice-bg, #FFFFFF);--calendar-range-bg: var(--nice-accent-tint-15, rgba(99, 102, 241, .15));--calendar-weekend-text: var(--nice-danger, #ef4444);--calendar-disabled-text: var(--nice-border, #d1d5db);--calendar-nav-hover: var(--nice-bg-secondary, #f3f4f6);--calendar-radius: 12px;--calendar-cell-size: 44px;--calendar-gap: var(--nice-space-0-5, 2px);display:flex;flex-direction:column;background:var(--calendar-bg);border-radius:var(--calendar-radius);overflow:hidden;-webkit-user-select:none;user-select:none;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.nice-mobile-calendar--compact{--calendar-cell-size: 36px}@media(prefers-color-scheme:dark){.nice-mobile-calendar{--calendar-bg: var(--nice-text, #1f2937);--calendar-text: var(--nice-bg-secondary, #f9fafb);--calendar-text-muted: var(--nice-text-secondary, #6b7280);--calendar-border: var(--nice-text, #374151);--calendar-today-bg: var(--nice-text, #374151);--calendar-nav-hover: var(--nice-text, #374151);--calendar-disabled-text: var(--nice-text-secondary, #4b5563)}}.nice-calendar-header{display:flex;align-items:center;justify-content:space-between;padding:var(--nice-space-3, 12px) var(--nice-space-2, 8px);gap:var(--nice-space-2, 8px)}.nice-calendar-nav-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:var(--nice-radius-full, 50%);background:transparent;color:var(--calendar-text);cursor:pointer;transition:background-color .15s ease;-webkit-tap-highlight-color:transparent}.nice-calendar-nav-btn:hover{background:var(--calendar-nav-hover)}.nice-calendar-nav-btn:active{transform:scale(.95)}.nice-calendar-nav-btn svg{width:20px;height:20px}.nice-calendar-title-btn{display:flex;align-items:center;justify-content:center;gap:var(--nice-space-1-5, 6px);flex:1;padding:var(--nice-space-2, 8px) var(--nice-space-4, 16px);border:none;border-radius:var(--nice-radius-lg, 8px);background:transparent;color:var(--calendar-text);font-size:16px;font-weight:600;cursor:pointer;transition:background-color .15s ease}.nice-calendar-title-btn:hover{background:var(--calendar-nav-hover)}.nice-calendar-month{flex-shrink:0}.nice-calendar-year{color:var(--calendar-text-muted);font-weight:400}.nice-calendar-weekdays{display:grid;grid-template-columns:repeat(7,1fr);padding:var(--nice-space-2, 8px) var(--nice-space-1, 4px);border-bottom:1px solid var(--calendar-border)}.nice-calendar-weekdays--with-numbers{grid-template-columns:32px repeat(7,1fr)}.nice-calendar-weekday{display:flex;align-items:center;justify-content:center;height:32px;color:var(--calendar-text-muted);font-size:12px;font-weight:500;text-transform:uppercase}.nice-calendar-weekday--number{color:var(--calendar-text-muted);font-size:10px}.nice-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--calendar-gap);padding:var(--nice-space-1, 4px)}.nice-calendar-grid--with-numbers{grid-template-columns:32px repeat(7,1fr)}.nice-calendar-week-number{display:flex;align-items:center;justify-content:center;width:32px;height:var(--calendar-cell-size);color:var(--calendar-text-muted);font-size:11px;font-weight:500}.nice-calendar-day{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;min-height:var(--calendar-cell-size);padding:var(--nice-space-1, 4px);border:none;border-radius:var(--nice-radius-full, 50%);background:transparent;color:var(--calendar-text);font-size:14px;cursor:pointer;transition:all .15s ease;-webkit-tap-highlight-color:transparent}.nice-calendar-day:active:not(:disabled){transform:scale(.9)}.nice-calendar-day--empty{cursor:default}.nice-calendar-day--other-month{color:var(--calendar-text-muted);opacity:.5}.nice-calendar-day--today{background:var(--calendar-today-bg);font-weight:600}.nice-calendar-day--weekend:not(.nice-calendar-day--selected):not(.nice-calendar-day--in-range){color:var(--calendar-weekend-text)}.nice-calendar-day--selected{background:var(--calendar-selected-bg);color:var(--calendar-selected-text);font-weight:600}.nice-calendar-day--selected.nice-calendar-day--today{background:var(--calendar-selected-bg)}.nice-calendar-day--in-range{background:var(--calendar-range-bg);border-radius:0}.nice-calendar-day--range-start{background:var(--calendar-selected-bg);color:var(--calendar-selected-text);border-radius:var(--nice-radius-full, 50%) 0 0 var(--nice-radius-full, 50%)}.nice-calendar-day--range-end{background:var(--calendar-selected-bg);color:var(--calendar-selected-text);border-radius:0 var(--nice-radius-full, 50%) var(--nice-radius-full, 50%) 0}.nice-calendar-day--range-start.nice-calendar-day--range-end{border-radius:var(--nice-radius-full, 50%)}.nice-calendar-day--disabled{color:var(--calendar-disabled-text);cursor:not-allowed;opacity:.5}.nice-calendar-day-number{position:relative;z-index:1}.nice-calendar-day-dots{display:flex;gap:var(--nice-space-0-5, 2px);margin-top:var(--nice-space-0-5, 2px)}.nice-calendar-day-dot{width:4px;height:4px;border-radius:var(--nice-radius-full, 50%);background:var(--calendar-primary)}.nice-calendar-day--selected .nice-calendar-day-dot{background:var(--nice-overlay-light-80, rgba(255, 255, 255, .8))}.nice-calendar-months{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--nice-space-2, 8px);padding:var(--nice-space-4, 16px)}.nice-calendar-month-btn{display:flex;align-items:center;justify-content:center;height:48px;padding:var(--nice-space-2, 8px);border:none;border-radius:var(--nice-radius-xl, 12px);background:transparent;color:var(--calendar-text);font-size:14px;cursor:pointer;transition:all .15s ease;-webkit-tap-highlight-color:transparent}.nice-calendar-month-btn:hover{background:var(--calendar-nav-hover)}.nice-calendar-month-btn:active{transform:scale(.95)}.nice-calendar-month-btn--selected{background:var(--calendar-selected-bg);color:var(--calendar-selected-text);font-weight:600}.nice-calendar-years{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--nice-space-1, 4px);padding:var(--nice-space-4, 16px);max-height:300px;overflow-y:auto;-webkit-overflow-scrolling:touch}.nice-calendar-year-btn{display:flex;align-items:center;justify-content:center;height:40px;padding:var(--nice-space-2, 8px);border:none;border-radius:var(--nice-radius-lg, 8px);background:transparent;color:var(--calendar-text);font-size:14px;cursor:pointer;transition:all .15s ease;-webkit-tap-highlight-color:transparent}.nice-calendar-year-btn:hover{background:var(--calendar-nav-hover)}.nice-calendar-year-btn:active{transform:scale(.95)}.nice-calendar-year-btn--selected{background:var(--calendar-selected-bg);color:var(--calendar-selected-text);font-weight:600}.nice-calendar-footer{display:flex;justify-content:center;padding:var(--nice-space-3, 12px) var(--nice-space-4, 16px);border-top:1px solid var(--calendar-border)}.nice-calendar-today-btn{padding:var(--nice-space-2, 8px) var(--nice-space-6, 24px);border:none;border-radius:var(--nice-radius-lg, 8px);background:var(--calendar-primary-light);color:var(--calendar-primary);font-size:14px;font-weight:500;cursor:pointer;transition:all .15s ease;-webkit-tap-highlight-color:transparent}.nice-calendar-today-btn:hover{background:var(--calendar-primary);color:var(--nice-bg, #FFFFFF)}.nice-calendar-today-btn:active{transform:scale(.95)}@supports (padding-bottom: env(safe-area-inset-bottom)){.nice-calendar-footer{padding-bottom:calc(12px + env(safe-area-inset-bottom))}}@keyframes calendar-slide-in-left{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes calendar-slide-in-right{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}.nice-calendar-grid--slide-left{animation:calendar-slide-in-left .2s ease-out}.nice-calendar-grid--slide-right{animation:calendar-slide-in-right .2s ease-out}@media(prefers-reduced-motion:reduce){.nice-calendar-day,.nice-calendar-nav-btn,.nice-calendar-title-btn,.nice-calendar-month-btn,.nice-calendar-year-btn,.nice-calendar-today-btn{transition:none}.nice-calendar-nav-btn:active,.nice-calendar-day:active:not(:disabled),.nice-calendar-month-btn:active,.nice-calendar-year-btn:active,.nice-calendar-today-btn:active{transform:none}}.nice-gestures{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;will-change:transform}.nice-gestures--active{cursor:grabbing}.nice-gestures[data-debug=true]:after{content:attr(data-scale) " / " attr(data-rotation) "° / " attr(data-x) ", " attr(data-y);position:absolute;top:8px;left:8px;padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);background:var(--nice-overlay-75, rgba(0, 0, 0, .75));color:var(--nice-bg, #FFF);font-size:11px;font-family:monospace;border-radius:var(--nice-radius-sm, 4px);pointer-events:none;z-index:1000}.nice-pinch-zoom{overflow:hidden;touch-action:none}.nice-pinch-zoom>*{pointer-events:none}.nice-pinch-zoom--active>*{pointer-events:auto}.nice-draggable{cursor:grab;touch-action:none}.nice-draggable--dragging{cursor:grabbing}.nice-swipeable{overflow:hidden}.nice-gesture-indicator{position:fixed;pointer-events:none;z-index:10000}.nice-gesture-indicator--pinch{width:60px;height:60px;border:2px solid var(--nice-accent-tint-50, rgba(99, 102, 241, .5));border-radius:var(--nice-radius-full, 50%);transform:translate(-50%,-50%);animation:gesture-pulse .3s ease-out}.nice-gesture-indicator--tap{width:40px;height:40px;background:var(--nice-accent-tint-30, rgba(99, 102, 241, .3));border-radius:var(--nice-radius-full, 50%);transform:translate(-50%,-50%);animation:gesture-ripple .4s ease-out forwards}.nice-gesture-indicator--long-press{width:40px;height:40px;border:3px solid var(--nice-accent-tint-80, rgba(99, 102, 241, .8));border-radius:var(--nice-radius-full, 50%);transform:translate(-50%,-50%);animation:gesture-long-press .5s ease-out forwards}@keyframes gesture-pulse{0%{opacity:1;transform:translate(-50%,-50%) scale(.8)}to{opacity:0;transform:translate(-50%,-50%) scale(1.5)}}@keyframes gesture-ripple{0%{opacity:1;transform:translate(-50%,-50%) scale(0)}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}@keyframes gesture-long-press{0%{opacity:1;border-width:3px;transform:translate(-50%,-50%) scale(1)}50%{border-width:6px}to{opacity:0;border-width:3px;transform:translate(-50%,-50%) scale(1.2)}}@media(prefers-reduced-motion:reduce){.nice-gestures{will-change:auto}.nice-gesture-indicator--pinch,.nice-gesture-indicator--tap,.nice-gesture-indicator--long-press{animation:none;opacity:.5}}.nice-touch-btn{--btn-bg: var(--nice-info, #6366f1);--btn-text: var(--nice-bg, #FFFFFF);--btn-border: transparent;--btn-hover-bg: var(--nice-accent, #5558e6);--btn-active-bg: var(--nice-accent, #4f46e5);--btn-disabled-bg: var(--nice-border, #e5e7eb);--btn-disabled-text: var(--nice-text-muted, #9ca3af);--btn-radius: 12px;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--nice-space-2, 8px);min-height:44px;min-width:44px;padding:var(--nice-space-3, 12px) var(--nice-space-5, 20px);border:2px solid var(--btn-border);border-radius:var(--btn-radius);background:var(--btn-bg);color:var(--btn-text);font-family:inherit;font-size:16px;font-weight:600;line-height:1.25;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:all .15s ease;overflow:hidden}.nice-touch-btn:focus-visible{outline:3px solid var(--nice-accent-tint-50, rgba(99, 102, 241, .5));outline-offset:2px}.nice-touch-btn:disabled{background:var(--btn-disabled-bg);color:var(--btn-disabled-text);border-color:transparent;cursor:not-allowed}.nice-touch-btn--sm{min-height:44px;padding:var(--nice-space-2-5, 10px) var(--nice-space-4, 16px);font-size:14px}.nice-touch-btn--md{min-height:48px;padding:var(--nice-space-3, 12px) var(--nice-space-5, 20px);font-size:16px}.nice-touch-btn--lg{min-height:56px;padding:var(--nice-space-4, 16px) var(--nice-space-7, 28px);font-size:18px}.nice-touch-btn--xl{min-height:64px;padding:var(--nice-space-5, 20px) 36px;font-size:20px}.nice-touch-btn--primary{--btn-bg: var(--nice-info, #6366f1);--btn-hover-bg: var(--nice-accent, #5558e6);--btn-active-bg: var(--nice-accent, #4f46e5)}.nice-touch-btn--secondary{--btn-bg: var(--nice-text-secondary, #64748b);--btn-hover-bg: #5b6879;--btn-active-bg: var(--nice-text-secondary, #475569)}.nice-touch-btn--outline{--btn-bg: transparent;--btn-text: var(--nice-info, #6366f1);--btn-border: var(--nice-info, #6366f1);--btn-hover-bg: var(--nice-accent-tint-10, rgba(99, 102, 241, .1));--btn-active-bg: var(--nice-accent-tint-20, rgba(99, 102, 241, .2))}.nice-touch-btn--ghost{--btn-bg: transparent;--btn-text: var(--nice-text, #374151);--btn-border: transparent;--btn-hover-bg: var(--nice-overlay-5, rgba(0, 0, 0, .05));--btn-active-bg: var(--nice-overlay-10, rgba(0, 0, 0, .1))}.nice-touch-btn--danger{--btn-bg: var(--nice-danger, #ef4444);--btn-hover-bg: var(--nice-danger-dark, #dc2626);--btn-active-bg: #b91c1c}.nice-touch-btn--success{--btn-bg: var(--nice-success, #22c55e);--btn-hover-bg: var(--nice-success-dark, #16a34a);--btn-active-bg: #15803d}.nice-touch-btn--warning{--btn-bg: var(--nice-warning, #f59e0b);--btn-hover-bg: var(--nice-warning-dark, #d97706);--btn-active-bg: var(--nice-warning-dark, #b45309)}.nice-touch-btn--rounded{--btn-radius: 12px}.nice-touch-btn--pill{--btn-radius: 9999px}.nice-touch-btn--square{--btn-radius: 0}.nice-touch-btn--circle{--btn-radius: 50%;padding:var(--nice-space-3, 12px);aspect-ratio:1}.nice-touch-btn--pressed,.nice-touch-btn:active:not(:disabled){background:var(--btn-active-bg);transform:scale(.97)}.nice-touch-btn--active{background:var(--btn-active-bg);box-shadow:inset 0 2px 4px var(--nice-overlay-10, rgba(0, 0, 0, .1))}@media(hover:hover){.nice-touch-btn:hover:not(:disabled){background:var(--btn-hover-bg)}}.nice-touch-btn--full-width{width:100%}.nice-touch-btn--icon-only{padding:var(--nice-space-3, 12px)}.nice-touch-btn--icon-only.nice-touch-btn--sm{padding:var(--nice-space-2-5, 10px)}.nice-touch-btn--icon-only.nice-touch-btn--lg{padding:var(--nice-space-4, 16px)}.nice-touch-btn--icon-only.nice-touch-btn--xl{padding:var(--nice-space-5, 20px)}.nice-touch-btn--loading{cursor:wait;pointer-events:none}.nice-touch-btn-spinner{position:absolute;display:flex;align-items:center;justify-content:center}.nice-touch-btn-spinner-svg{width:20px;height:20px;animation:btn-spinner 1s linear infinite}@keyframes btn-spinner{0%{transform:rotate(0);stroke-dashoffset:32}50%{stroke-dashoffset:8}to{transform:rotate(360deg);stroke-dashoffset:32}}.nice-touch-btn-content{display:flex;align-items:center;justify-content:center;gap:var(--nice-space-2, 8px);transition:opacity .15s ease}.nice-touch-btn-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0}.nice-touch-btn-icon svg{width:1.25em;height:1.25em}.nice-touch-btn-ripple{position:absolute;width:0;height:0;border-radius:var(--nice-radius-full, 50%);background:var(--nice-overlay-light-30, rgba(255, 255, 255, .3));transform:translate(-50%,-50%);animation:btn-ripple .6s ease-out forwards;pointer-events:none}@keyframes btn-ripple{0%{width:0;height:0;opacity:1}to{width:400px;height:400px;opacity:0}}.nice-fab{position:fixed;z-index:1000;box-shadow:0 4px 12px var(--nice-overlay-15, rgba(0, 0, 0, .15)),0 2px 4px var(--nice-overlay-10, rgba(0, 0, 0, .1))}.nice-fab--bottom-right{bottom:24px;right:24px}.nice-fab--bottom-left{bottom:24px;left:24px}.nice-fab--bottom-center{bottom:24px;left:50%;transform:translate(-50%)}.nice-fab--top-right{top:24px;right:24px}.nice-fab--top-left{top:24px;left:24px}@supports (bottom: env(safe-area-inset-bottom)){.nice-fab--bottom-right,.nice-fab--bottom-left,.nice-fab--bottom-center{bottom:calc(24px + env(safe-area-inset-bottom))}}@media(prefers-color-scheme:dark){.nice-touch-btn--ghost{--btn-text: var(--nice-bg-secondary, #f3f4f6);--btn-hover-bg: var(--nice-overlay-light-10, rgba(255, 255, 255, .1));--btn-active-bg: var(--nice-overlay-light-15, rgba(255, 255, 255, .15))}.nice-touch-btn:disabled{--btn-disabled-bg: var(--nice-text, #374151);--btn-disabled-text: var(--nice-text-secondary, #6b7280)}}@media(prefers-reduced-motion:reduce){.nice-touch-btn{transition:none}.nice-touch-btn--pressed,.nice-touch-btn:active:not(:disabled){transform:none}.nice-touch-btn-spinner-svg{animation:none}.nice-touch-btn-ripple{animation:none;display:none}}.nice-touch-slider{--thumb-size: 44px;--track-height: 8px;--track-color: var(--nice-border, #e5e7eb);--fill-color: var(--nice-info, #6366f1);--thumb-color: var(--nice-bg, #FFFFFF);--thumb-border: var(--nice-info, #6366f1);--thumb-shadow: 0 2px 8px var(--nice-overlay-15, rgba(0, 0, 0, .15));--label-bg: var(--nice-text, #1f2937);--label-text: var(--nice-bg, #FFFFFF);display:flex;align-items:center;gap:var(--nice-space-3, 12px);-webkit-user-select:none;user-select:none;touch-action:none;-webkit-tap-highlight-color:transparent}.nice-touch-slider--horizontal{flex-direction:row;width:100%;min-height:var(--thumb-size)}.nice-touch-slider--horizontal .nice-touch-slider-track-container{flex:1;height:var(--thumb-size);display:flex;align-items:center;position:relative;cursor:pointer}.nice-touch-slider--horizontal .nice-touch-slider-track{width:100%;height:var(--track-height);border-radius:calc(var(--track-height) / 2);background:var(--track-color)}.nice-touch-slider--horizontal .nice-touch-slider-fill{position:absolute;height:var(--track-height);border-radius:calc(var(--track-height) / 2);background:var(--fill-color)}.nice-touch-slider--horizontal .nice-touch-slider-thumb{position:absolute;top:50%;transform:translate(-50%,-50%)}.nice-touch-slider--vertical{flex-direction:column;height:200px;width:var(--thumb-size)}.nice-touch-slider--vertical .nice-touch-slider-track-container{flex:1;width:var(--thumb-size);display:flex;justify-content:center;position:relative;cursor:pointer}.nice-touch-slider--vertical .nice-touch-slider-track{width:var(--track-height);height:100%;border-radius:calc(var(--track-height) / 2);background:var(--track-color)}.nice-touch-slider--vertical .nice-touch-slider-fill{position:absolute;width:var(--track-height);border-radius:calc(var(--track-height) / 2);background:var(--fill-color)}.nice-touch-slider--vertical .nice-touch-slider-thumb{position:absolute;left:50%;transform:translate(-50%,50%)}.nice-touch-slider-thumb{display:flex;align-items:center;justify-content:center;border-radius:var(--nice-radius-full, 50%);background:var(--thumb-color);border:3px solid var(--thumb-border);box-shadow:var(--thumb-shadow);cursor:grab;z-index:2;transition:transform .1s ease,box-shadow .15s ease}.nice-touch-slider-thumb:focus-visible{outline:none;box-shadow:var(--thumb-shadow),0 0 0 4px var(--nice-accent-tint-30, rgba(99, 102, 241, .3))}.nice-touch-slider-thumb--active,.nice-touch-slider--dragging .nice-touch-slider-thumb{cursor:grabbing;transform:translate(-50%,-50%) scale(1.1)}.nice-touch-slider--vertical .nice-touch-slider-thumb--active,.nice-touch-slider--vertical.nice-touch-slider--dragging .nice-touch-slider-thumb{transform:translate(-50%,50%) scale(1.1)}.nice-touch-slider-label{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:var(--nice-space-1-5, 6px) var(--nice-space-2-5, 10px);background:var(--label-bg);color:var(--label-text);font-size:12px;font-weight:600;border-radius:var(--nice-radius-md, 6px);white-space:nowrap;pointer-events:none;animation:slider-label-pop .15s ease}.nice-touch-slider-label:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:6px solid transparent;border-top-color:var(--label-bg)}.nice-touch-slider--vertical .nice-touch-slider-label{bottom:auto;left:calc(100% + 8px);transform:translateY(-50%)}.nice-touch-slider--vertical .nice-touch-slider-label:after{top:50%;left:-6px;transform:translateY(-50%);border:6px solid transparent;border-right-color:var(--label-bg)}@keyframes slider-label-pop{0%{opacity:0;transform:translate(-50%) scale(.8)}to{opacity:1;transform:translate(-50%) scale(1)}}.nice-touch-slider-marks{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.nice-touch-slider-mark{position:absolute;display:flex;flex-direction:column;align-items:center}.nice-touch-slider--horizontal .nice-touch-slider-mark{top:50%;transform:translate(-50%)}.nice-touch-slider--vertical .nice-touch-slider-mark{left:50%;transform:translateY(50%);flex-direction:row}.nice-touch-slider-mark-dot{width:6px;height:6px;border-radius:var(--nice-radius-full, 50%);background:var(--track-color);border:2px solid var(--nice-bg, #FFFFFF);z-index:1}.nice-touch-slider-mark-label{margin-top:calc(var(--thumb-size) / 2 + 8px);color:var(--nice-text-secondary, #6b7280);font-size:12px;white-space:nowrap}.nice-touch-slider--vertical .nice-touch-slider-mark-label{margin-top:0;margin-left:calc(var(--thumb-size) / 2 + 8px)}.nice-touch-slider-min,.nice-touch-slider-max{color:var(--nice-text-secondary, #6b7280);font-size:14px;font-weight:500;flex-shrink:0}.nice-touch-slider--disabled{opacity:.5;pointer-events:none}.nice-touch-slider--disabled .nice-touch-slider-thumb{cursor:not-allowed}@media(prefers-color-scheme:dark){.nice-touch-slider{--track-color: var(--nice-text, #374151);--thumb-color: var(--nice-bg-secondary, #f9fafb);--thumb-border: var(--nice-accent, #818cf8)}.nice-touch-slider-mark-dot{border-color:var(--nice-text, #374151)}.nice-touch-slider-min,.nice-touch-slider-max,.nice-touch-slider-mark-label{color:var(--nice-text-muted, #9ca3af)}}@media(prefers-reduced-motion:reduce){.nice-touch-slider-thumb{transition:none}.nice-touch-slider-thumb--active,.nice-touch-slider--dragging .nice-touch-slider-thumb{transform:translate(-50%,-50%)}.nice-touch-slider--vertical .nice-touch-slider-thumb--active,.nice-touch-slider--vertical.nice-touch-slider--dragging .nice-touch-slider-thumb{transform:translate(-50%,50%)}.nice-touch-slider-label{animation:none}}.nice-touch-color-picker{display:flex;flex-direction:column;gap:var(--nice-space-4, 16px);padding:var(--nice-space-4, 16px);background:var(--nice-bg, #FFFFFF);border-radius:var(--nice-radius-xl, 16px);-webkit-user-select:none;user-select:none;touch-action:none;-webkit-tap-highlight-color:transparent}.nice-touch-color-picker-wheel-container{position:relative;display:flex;align-items:center;justify-content:center;margin:0 auto}.nice-touch-color-picker-wheel{position:absolute;touch-action:none;cursor:crosshair}.nice-touch-color-picker-hue-indicator{position:absolute;width:24px;height:24px;border-radius:var(--nice-radius-full, 50%);border:3px solid var(--nice-bg, #FFFFFF);box-shadow:0 2px 8px var(--nice-overlay-30, rgba(0, 0, 0, .3));transform:translate(-50%,-50%);pointer-events:none;z-index:2}.nice-touch-color-picker-sl-container{position:absolute;border-radius:var(--nice-radius-lg, 8px);overflow:hidden;box-shadow:0 2px 8px var(--nice-overlay-10, rgba(0, 0, 0, .1))}.nice-touch-color-picker-sl{display:block;touch-action:none;cursor:crosshair;border-radius:var(--nice-radius-lg, 8px)}.nice-touch-color-picker-sl-indicator{position:absolute;width:20px;height:20px;border-radius:var(--nice-radius-full, 50%);border:3px solid var(--nice-bg, #FFFFFF);box-shadow:0 2px 6px var(--nice-overlay-30, rgba(0, 0, 0, .3));transform:translate(-50%,-50%);pointer-events:none}.nice-touch-color-picker-controls{display:flex;align-items:center;gap:var(--nice-space-3, 12px)}.nice-touch-color-picker-preview{width:48px;height:48px;border-radius:var(--nice-radius-xl, 12px);border:3px solid var(--nice-border, #e5e7eb);flex-shrink:0}.nice-touch-color-picker-input{flex:1;height:48px;padding:0 var(--nice-space-4, 16px);border:2px solid var(--nice-border, #e5e7eb);border-radius:var(--nice-radius-xl, 12px);background:var(--nice-bg, #FFFFFF);color:var(--nice-text, #1f2937);font-size:16px;font-family:monospace;text-transform:uppercase;outline:none;transition:border-color .15s ease}.nice-touch-color-picker-input:focus{border-color:var(--nice-info, #6366f1)}.nice-touch-color-picker-alpha{padding:var(--nice-space-2, 8px) 0}.nice-touch-color-picker-alpha-slider{width:100%;height:24px;-moz-appearance:none;appearance:none;-webkit-appearance:none;border-radius:var(--nice-radius-xl, 12px);cursor:pointer;background-image:linear-gradient(45deg,var(--nice-border, #ccc) 25%,transparent 25%),linear-gradient(-45deg,var(--nice-border, #ccc) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--nice-border, #ccc) 75%),linear-gradient(-45deg,transparent 75%,var(--nice-border, #ccc) 75%);background-size:12px 12px;background-position:0 0,0 6px,6px -6px,-6px 0}.nice-touch-color-picker-alpha-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:28px;height:28px;border-radius:var(--nice-radius-full, 50%);background:var(--nice-bg, #FFFFFF);border:3px solid var(--nice-info, #6366f1);box-shadow:0 2px 6px var(--nice-overlay-20, rgba(0, 0, 0, .2));cursor:grab}.nice-touch-color-picker-alpha-slider::-webkit-slider-thumb:active{cursor:grabbing;transform:scale(1.1)}.nice-touch-color-picker-presets{display:flex;flex-direction:column;gap:var(--nice-space-2, 8px)}.nice-touch-color-picker-presets-label{font-size:12px;font-weight:500;color:var(--nice-text-secondary, #6b7280);text-transform:uppercase;letter-spacing:.05em}.nice-touch-color-picker-presets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:var(--nice-space-2, 8px)}.nice-touch-color-picker-preset{width:100%;aspect-ratio:1;min-height:40px;border:none;border-radius:var(--nice-radius-lg, 10px);cursor:pointer;transition:transform .15s ease,box-shadow .15s ease;-webkit-tap-highlight-color:transparent}.nice-touch-color-picker-preset:hover{transform:scale(1.05)}.nice-touch-color-picker-preset:active{transform:scale(.95)}.nice-touch-color-picker-preset--selected{box-shadow:0 0 0 3px var(--nice-info, #6366f1)}@media(prefers-color-scheme:dark){.nice-touch-color-picker{background:var(--nice-text, #1f2937)}.nice-touch-color-picker-preview{border-color:var(--nice-text, #374151)}.nice-touch-color-picker-input{background:var(--nice-text, #374151);border-color:var(--nice-text-secondary, #4b5563);color:var(--nice-bg-secondary, #f9fafb)}.nice-touch-color-picker-input:focus{border-color:var(--nice-accent, #818cf8)}.nice-touch-color-picker-presets-label{color:var(--nice-text-muted, #9ca3af)}}@media(prefers-reduced-motion:reduce){.nice-touch-color-picker-input,.nice-touch-color-picker-preset{transition:none}.nice-touch-color-picker-preset:hover,.nice-touch-color-picker-preset:active{transform:none}}.nice-signature-pad{position:relative;display:inline-block;border-radius:var(--nice-radius-md, 8px);overflow:hidden;box-shadow:var(--nice-shadow-sm, 0 1px 2px rgba(0, 0, 0, .05));border:1px solid var(--nice-border-color, #e5e7eb)}.nice-signature-pad--disabled{opacity:.6;pointer-events:none}.nice-signature-pad-canvas{display:block;cursor:crosshair;border-radius:inherit;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.nice-signature-pad--disabled .nice-signature-pad-canvas{cursor:not-allowed}.nice-signature-pad-placeholder{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--nice-text-muted, #9ca3af);font-size:.875rem;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.7}.nice-signature-toolbar{display:flex;gap:.5rem;padding:.5rem;background:var(--nice-bg-secondary, #f9fafb);border-top:1px solid var(--nice-border-color, #e5e7eb)}.nice-signature-toolbar button{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:.5rem 1rem;border:none;border-radius:var(--nice-radius-md, 8px);background:var(--nice-bg-primary, #ffffff);color:var(--nice-text-primary, #1f2937);font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .15s,box-shadow .15s}.nice-signature-toolbar button:hover{background:var(--nice-bg-hover, #f3f4f6)}.nice-signature-toolbar button:active{background:var(--nice-bg-active, #e5e7eb)}.nice-signature-toolbar button:disabled{opacity:.5;cursor:not-allowed}.nice-signature-toolbar button.primary{background:var(--nice-primary, #3b82f6);color:#fff}.nice-signature-toolbar button.primary:hover{background:var(--nice-primary-hover, #2563eb)}.nice-signature-toolbar button.danger{background:var(--nice-danger, #ef4444);color:#fff}.nice-signature-toolbar button.danger:hover{background:var(--nice-danger-hover, #dc2626)}@media(max-width:480px){.nice-signature-pad{width:100%}.nice-signature-pad-canvas{width:100%!important;height:150px!important}.nice-signature-pad-placeholder{font-size:.75rem}}@media(prefers-color-scheme:dark){.nice-signature-pad{border-color:var(--nice-border-color-dark, #374151)}.nice-signature-pad-placeholder{color:var(--nice-text-muted-dark, #6b7280)}.nice-signature-toolbar{background:var(--nice-bg-secondary-dark, #1f2937);border-top-color:var(--nice-border-color-dark, #374151)}.nice-signature-toolbar button{background:var(--nice-bg-primary-dark, #111827);color:var(--nice-text-primary-dark, #f9fafb)}.nice-signature-toolbar button:hover{background:var(--nice-bg-hover-dark, #374151)}}@media(prefers-reduced-motion:reduce){.nice-signature-toolbar button{transition:none}}.nice-touch-drawing{position:relative;display:inline-block;border-radius:var(--nice-radius-md, 8px);overflow:hidden;box-shadow:var(--nice-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, .1));border:1px solid var(--nice-border-color, #e5e7eb)}.nice-touch-drawing--disabled{opacity:.6;pointer-events:none}.nice-touch-drawing-canvas{display:block;border-radius:inherit;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.nice-drawing-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.75rem;background:var(--nice-bg-secondary, #f9fafb);border:1px solid var(--nice-border-color, #e5e7eb);border-radius:var(--nice-radius-md, 8px)}.nice-drawing-toolbar-section{display:flex;align-items:center;gap:.25rem}.nice-drawing-toolbar-divider{width:1px;height:32px;background:var(--nice-border-color, #e5e7eb);margin:0 .25rem}.nice-drawing-tool-btn{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:2px solid transparent;border-radius:var(--nice-radius-md, 8px);background:var(--nice-bg-primary, #ffffff);font-size:1.25rem;cursor:pointer;transition:background-color .15s,border-color .15s,transform .1s}.nice-drawing-tool-btn:hover{background:var(--nice-bg-hover, #f3f4f6)}.nice-drawing-tool-btn:active{transform:scale(.95)}.nice-drawing-tool-btn.active{border-color:var(--nice-primary, #3b82f6);background:var(--nice-primary-light, #dbeafe)}.nice-drawing-colors{flex-wrap:wrap;max-width:200px}.nice-drawing-color-btn{width:32px;height:32px;padding:0;border:2px solid transparent;border-radius:var(--nice-radius-full, 50%);cursor:pointer;transition:transform .1s,box-shadow .15s}.nice-drawing-color-btn:hover{transform:scale(1.1)}.nice-drawing-color-btn:active{transform:scale(.95)}.nice-drawing-color-btn.active{box-shadow:0 0 0 3px var(--nice-primary, #3b82f6);transform:scale(1.1)}.nice-drawing-stroke-label{display:flex;flex-direction:column;align-items:center;gap:.25rem;font-size:.75rem;color:var(--nice-text-secondary, #6b7280)}.nice-drawing-stroke-slider{width:80px;height:24px;cursor:pointer;accent-color:var(--nice-primary, #3b82f6)}.nice-drawing-actions{gap:.5rem}.nice-drawing-action-btn{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:none;border-radius:var(--nice-radius-md, 8px);background:var(--nice-bg-primary, #ffffff);font-size:1.25rem;cursor:pointer;transition:background-color .15s,opacity .15s}.nice-drawing-action-btn:hover{background:var(--nice-bg-hover, #f3f4f6)}.nice-drawing-action-btn:disabled{opacity:.4;cursor:not-allowed}.nice-drawing-action-btn.danger:hover:not(:disabled){background:var(--nice-danger-light, #fee2e2)}@media(max-width:480px){.nice-touch-drawing{width:100%}.nice-touch-drawing-canvas{width:100%!important}.nice-drawing-toolbar{padding:.5rem;gap:.25rem}.nice-drawing-toolbar-divider{display:none}.nice-drawing-toolbar-section{flex-wrap:wrap}.nice-drawing-tool-btn,.nice-drawing-action-btn{width:40px;height:40px;font-size:1rem}.nice-drawing-color-btn{width:28px;height:28px}.nice-drawing-colors{max-width:100%}.nice-drawing-stroke-slider{width:60px}}@media(prefers-color-scheme:dark){.nice-touch-drawing{border-color:var(--nice-border-color-dark, #374151)}.nice-drawing-toolbar{background:var(--nice-bg-secondary-dark, #1f2937);border-color:var(--nice-border-color-dark, #374151)}.nice-drawing-toolbar-divider{background:var(--nice-border-color-dark, #374151)}.nice-drawing-tool-btn,.nice-drawing-action-btn{background:var(--nice-bg-primary-dark, #111827)}.nice-drawing-tool-btn:hover,.nice-drawing-action-btn:hover{background:var(--nice-bg-hover-dark, #374151)}.nice-drawing-tool-btn.active{background:var(--nice-primary-dark, #1d4ed8);border-color:var(--nice-primary, #3b82f6)}.nice-drawing-stroke-label{color:var(--nice-text-secondary-dark, #9ca3af)}}@media(prefers-reduced-motion:reduce){.nice-drawing-tool-btn,.nice-drawing-color-btn,.nice-drawing-action-btn{transition:none}}.nice-touch-keyboard{display:flex;flex-direction:column;background:var(--nice-bg-keyboard, var(--bg-secondary, #d1d5db));color:var(--text-primary, #1f2937);--nice-bg-primary: var(--bg-elevated, var(--bg-primary, #ffffff));--nice-bg-secondary: var(--bg-secondary, #9ca3af);--nice-bg-hover: var(--hover-bg, rgba(0,0,0,.06));--nice-bg-active: var(--bg-active, var(--hover-bg, #e5e7eb));--nice-text-primary: var(--text-primary, #1f2937);--nice-text-secondary: var(--text-secondary, #6b7280);--nice-text-muted: var(--text-muted, #9ca3af);--nice-border-color: var(--border-color, #d1d5db);--nice-primary: var(--color-primary, #3b82f6);border-radius:var(--nice-radius-lg, 12px);padding:.5rem;gap:.375rem;user-select:none;-webkit-user-select:none;max-width:100%}.nice-touch-keyboard--disabled{opacity:.6;pointer-events:none}.nice-touch-keyboard--light{background:var(--nice-border, #d1d5db);--nice-bg-primary: #ffffff;--nice-bg-secondary: #9ca3af;--nice-bg-hover: #f3f4f6;--nice-bg-active: #e5e7eb;--nice-text-primary: #1f2937;--nice-text-muted: #6b7280;--nice-border-color: #d1d5db}.nice-touch-keyboard--dark{background:var(--nice-text, #1f2937);--nice-bg-primary: #374151;--nice-bg-secondary: #1f2937;--nice-bg-hover: #4b5563;--nice-bg-active: #6b7280;--nice-text-primary: #f3f4f6;--nice-text-muted: #9ca3af;--nice-border-color: #4b5563}.nice-touch-keyboard[dir=rtl] .nice-touch-keyboard-row{direction:rtl}.nice-touch-keyboard--minimal{max-width:240px}.nice-touch-keyboard--compact{max-width:540px}.nice-touch-keyboard--standard{max-width:640px}.nice-touch-keyboard--full{max-width:900px}.nice-touch-keyboard-langbar{display:flex;gap:var(--nice-space-1, 4px);padding:var(--nice-space-0-5, 2px) 0;overflow-x:auto;scrollbar-width:none}.nice-touch-keyboard-langbar::-webkit-scrollbar{display:none}.nice-touch-keyboard-langbar__btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--nice-space-1, 4px) var(--nice-space-2-5, 10px);border:none;border-radius:var(--nice-radius-sm, 6px);background:transparent;color:var(--nice-text-secondary, #6b7280);font-size:.75rem;font-weight:500;cursor:pointer;white-space:nowrap;transition:background .15s,color .15s}.nice-touch-keyboard-langbar__btn:hover{background:var(--nice-bg-hover, rgba(0,0,0,.06))}.nice-touch-keyboard-langbar__btn.active{background:var(--nice-primary, #3b82f6);color:var(--nice-bg, #FFF)}.nice-touch-keyboard-preview{display:flex;align-items:center;min-height:44px;padding:.5rem .75rem;background:var(--nice-bg-primary, #ffffff);border-radius:var(--nice-radius-md, 8px);font-size:1.125rem;font-family:inherit;letter-spacing:.02em;overflow:hidden}.nice-touch-keyboard-placeholder{color:var(--nice-text-muted, #9ca3af)}.nice-touch-keyboard-cursor{display:inline-block;width:2px;height:1.2em;background:var(--nice-primary, #3b82f6);margin-left:var(--nice-space-0-5, 2px);animation:nice-cursor-blink 1s infinite}@keyframes nice-cursor-blink{0%,50%{opacity:1}51%,to{opacity:0}}.nice-touch-keyboard-keys{display:flex;flex-direction:column;gap:.3rem}.nice-touch-keyboard-row{display:flex;justify-content:center;gap:.3rem}.nice-touch-keyboard-key{display:inline-flex;align-items:center;justify-content:center;position:relative;min-width:28px;min-height:42px;padding:.375rem .5rem;border:none;border-radius:var(--nice-radius-md, 8px);background:var(--nice-bg-primary, #ffffff);color:var(--nice-text-primary, #1f2937);font-size:1rem;font-weight:500;font-family:inherit;cursor:pointer;box-shadow:0 1px 2px var(--nice-overlay-8, rgba(0, 0, 0, .08));transition:background-color .1s,transform .05s,box-shadow .1s}.nice-touch-keyboard-key:hover{background:var(--nice-bg-hover, #f3f4f6)}.nice-touch-keyboard-key:active{transform:scale(.95);box-shadow:none;background:var(--nice-bg-active, #e5e7eb)}.nice-touch-keyboard-key:disabled{opacity:.5;cursor:not-allowed}.nice-touch-keyboard-key.active{background:var(--nice-primary, #3b82f6);color:#fff}.nice-touch-keyboard-key--has-accent:after{content:"";position:absolute;bottom:3px;left:50%;transform:translate(-50%);width:4px;height:4px;border-radius:var(--nice-radius-full, 50%);background:var(--nice-primary, #3b82f6);opacity:.5}.nice-touch-keyboard-key--char{flex:1;max-width:48px}.nice-touch-keyboard-key--space{flex:5;max-width:none;font-size:.8125rem;text-transform:lowercase}.nice-touch-keyboard-key--backspace,.nice-touch-keyboard-key--enter,.nice-touch-keyboard-key--shift,.nice-touch-keyboard-key--caps,.nice-touch-keyboard-key--tab,.nice-touch-keyboard-key--fn,.nice-touch-keyboard-key--lang{background:var(--nice-bg-secondary, #9ca3af);color:var(--nice-text-primary, #1f2937);font-size:.875rem}.nice-touch-keyboard-key--backspace:hover,.nice-touch-keyboard-key--enter:hover,.nice-touch-keyboard-key--shift:hover,.nice-touch-keyboard-key--caps:hover,.nice-touch-keyboard-key--tab:hover,.nice-touch-keyboard-key--fn:hover,.nice-touch-keyboard-key--lang:hover{background:var(--nice-bg-hover-secondary, #6b7280)}.nice-touch-keyboard-key--enter{background:var(--nice-primary, #3b82f6);color:#fff}.nice-touch-keyboard-key--enter:hover{background:var(--nice-primary-hover, #2563eb)}.nice-touch-keyboard-key--lang{font-size:1.125rem}.nice-touch-keyboard-key--special{background:var(--nice-bg-secondary, #f3f4f6);color:var(--nice-primary, #3b82f6);font-weight:600}.nice-touch-keyboard-status{display:flex;justify-content:flex-end;gap:var(--nice-space-2, 8px);padding:var(--nice-space-0-5, 2px) var(--nice-space-1, 4px) 0;min-height:16px}.nice-touch-keyboard-status__item{font-size:.625rem;font-weight:600;text-transform:uppercase;color:var(--nice-text-muted, #9ca3af);letter-spacing:.05em}.nice-touch-keyboard--minimal .nice-touch-keyboard-key{min-width:56px;min-height:48px;font-size:1.25rem}.nice-touch-keyboard--compact .nice-touch-keyboard-key{min-height:40px;font-size:.9375rem}.nice-touch-keyboard--full .nice-touch-keyboard-row:first-child .nice-touch-keyboard-key--fn{min-height:28px;font-size:.6875rem;padding:.25rem .375rem;background:var(--nice-bg-secondary, #e5e7eb)}.nice-touch-keyboard[data-layout=pin] .nice-touch-keyboard-key{min-width:72px;min-height:56px;font-size:1.5rem}.nice-touch-keyboard[data-layout=phone] .nice-touch-keyboard-key{flex-direction:column;min-height:56px;gap:.125rem}.nice-touch-keyboard[data-layout=phone] .nice-touch-keyboard-key .sub-label{font-size:.625rem;text-transform:uppercase;letter-spacing:.05em;opacity:.7}.nice-touch-keyboard[data-layout=numpad]{max-width:280px}.nice-touch-keyboard[data-layout=numpad] .nice-touch-keyboard-key--special{background:var(--nice-warning, #f59e0b);color:#fff}.nice-touch-keyboard[data-layout=numpad] .nice-touch-keyboard-key--enter{background:var(--nice-success, #22c55e)}@media(max-width:480px){.nice-touch-keyboard{padding:.375rem;border-radius:0}.nice-touch-keyboard-row,.nice-touch-keyboard-keys{gap:.2rem}.nice-touch-keyboard-key{min-height:38px;padding:.3rem .375rem;font-size:.875rem;border-radius:var(--nice-radius-sm, 6px)}.nice-touch-keyboard-preview{min-height:36px;padding:.375rem .5rem;font-size:.9375rem}.nice-touch-keyboard--full,.nice-touch-keyboard--standard{max-width:100%}}@media(min-width:768px){.nice-touch-keyboard-key{min-height:48px;font-size:1.125rem}}@media(prefers-color-scheme:dark){.nice-touch-keyboard:not(.nice-touch-keyboard--light){background:var(--nice-bg-keyboard-dark, #1f2937)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-preview{background:var(--nice-bg-primary-dark, #111827);color:var(--nice-text-primary-dark, #f9fafb)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key{background:var(--nice-bg-key-dark, #374151);color:var(--nice-text-primary-dark, #f9fafb);box-shadow:0 1px 3px var(--nice-overlay-30, rgba(0, 0, 0, .3))}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key:hover{background:var(--nice-bg-hover-dark, #4b5563)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key:active{background:var(--nice-bg-active-dark, #6b7280)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key--backspace,.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key--shift,.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key--caps,.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key--tab,.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key--fn,.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-key--lang{background:var(--nice-bg-fn-dark, #4b5563)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-langbar__btn{color:var(--nice-text-muted-dark, #9ca3af)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-langbar__btn:hover{background:var(--nice-overlay-light-8, rgba(255, 255, 255, .08))}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-placeholder{color:var(--nice-text-muted-dark, #6b7280)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard-status__item{color:var(--nice-text-muted-dark, #6b7280)}.nice-touch-keyboard:not(.nice-touch-keyboard--light) .nice-touch-keyboard--full .nice-touch-keyboard-row:first-child .nice-touch-keyboard-key--fn{background:var(--nice-bg-fn-dark, #4b5563)}}@media(prefers-reduced-motion:reduce){.nice-touch-keyboard-key{transition:none}.nice-touch-keyboard-cursor{animation:none;opacity:1}}.nice-touch-menu-trigger{display:inline-block;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.nice-touch-menu-trigger.disabled{opacity:.6;pointer-events:none}.nice-touch-menu-popover{position:fixed;z-index:9999;min-width:200px;max-width:280px;padding:.5rem;background:var(--nice-bg-primary, #ffffff);border:1px solid var(--nice-border-color, #e5e7eb);border-radius:var(--nice-radius-lg, 12px);box-shadow:var(--nice-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04));animation:nice-menu-appear .15s ease-out}@keyframes nice-menu-appear{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}.nice-touch-menu-submenu{position:absolute}.nice-touch-menu-item{display:flex;align-items:center;gap:.75rem;width:100%;min-height:44px;padding:.75rem 1rem;border:none;border-radius:var(--nice-radius-md, 8px);background:transparent;color:var(--nice-text-primary, #1f2937);font-size:1rem;font-family:inherit;text-align:left;cursor:pointer;transition:background-color .1s}.nice-touch-menu-item:hover,.nice-touch-menu-item:focus,.nice-touch-menu-item.active{background:var(--nice-bg-hover, #f3f4f6);outline:none}.nice-touch-menu-item:active{background:var(--nice-bg-active, #e5e7eb)}.nice-touch-menu-item.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.nice-touch-menu-item.danger{color:var(--nice-danger, #ef4444)}.nice-touch-menu-item.danger:hover{background:var(--nice-danger-light, #fee2e2)}.nice-touch-menu-item-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;font-size:1.125rem}.nice-touch-menu-item-label{flex:1}.nice-touch-menu-item-shortcut{font-size:.75rem;color:var(--nice-text-muted, #9ca3af)}.nice-touch-menu-item-arrow{font-size:1.25rem;color:var(--nice-text-muted, #9ca3af)}.nice-touch-menu-divider{height:1px;margin:.25rem .5rem;background:var(--nice-border-color, #e5e7eb)}.nice-action-sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9998;display:flex;flex-direction:column;justify-content:flex-end;background:var(--nice-overlay-40, rgba(0, 0, 0, .4));animation:nice-backdrop-appear .2s ease-out}@keyframes nice-backdrop-appear{0%{opacity:0}to{opacity:1}}.nice-action-sheet{display:flex;flex-direction:column;gap:.5rem;padding:.75rem;padding-bottom:calc(.75rem + env(safe-area-inset-bottom,0));animation:nice-sheet-slide .3s ease-out}@keyframes nice-sheet-slide{0%{transform:translateY(100%)}to{transform:translateY(0)}}.nice-action-sheet-content{background:var(--nice-bg-primary, #ffffff);border-radius:var(--nice-radius-xl, 16px);overflow:hidden}.nice-action-sheet-title{padding:1rem;font-size:.8125rem;font-weight:500;color:var(--nice-text-muted, #9ca3af);text-align:center;border-bottom:1px solid var(--nice-border-color, #e5e7eb)}.nice-action-sheet-item{display:flex;align-items:center;justify-content:center;gap:.75rem;width:100%;min-height:56px;padding:1rem;border:none;background:transparent;color:var(--nice-primary, #3b82f6);font-size:1.125rem;font-family:inherit;cursor:pointer;transition:background-color .1s}.nice-action-sheet-item:not(:last-child){border-bottom:1px solid var(--nice-border-color, #e5e7eb)}.nice-action-sheet-item:hover,.nice-action-sheet-item:focus{background:var(--nice-bg-hover, #f3f4f6);outline:none}.nice-action-sheet-item:active{background:var(--nice-bg-active, #e5e7eb)}.nice-action-sheet-item.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.nice-action-sheet-item.danger{color:var(--nice-danger, #ef4444)}.nice-action-sheet-item-icon{font-size:1.25rem}.nice-action-sheet-item-label{font-weight:500}.nice-action-sheet-cancel{width:100%;min-height:56px;padding:1rem;border:none;border-radius:var(--nice-radius-xl, 16px);background:var(--nice-bg-primary, #ffffff);color:var(--nice-primary, #3b82f6);font-size:1.125rem;font-weight:600;font-family:inherit;cursor:pointer;transition:background-color .1s}.nice-action-sheet-cancel:hover,.nice-action-sheet-cancel:focus{background:var(--nice-bg-hover, #f3f4f6);outline:none}.nice-action-sheet-cancel:active{background:var(--nice-bg-active, #e5e7eb)}@media(max-width:480px){.nice-touch-menu-popover{min-width:180px;max-width:calc(100vw - 32px)}.nice-touch-menu-item{min-height:48px;padding:.875rem 1rem}.nice-action-sheet-item,.nice-action-sheet-cancel{min-height:52px}}@media(prefers-color-scheme:dark){.nice-touch-menu-popover{background:var(--nice-bg-primary-dark, #1f2937);border-color:var(--nice-border-color-dark, #374151)}.nice-touch-menu-item{color:var(--nice-text-primary-dark, #f9fafb)}.nice-touch-menu-item:hover,.nice-touch-menu-item:focus,.nice-touch-menu-item.active{background:var(--nice-bg-hover-dark, #374151)}.nice-touch-menu-item:active{background:var(--nice-bg-active-dark, #4b5563)}.nice-touch-menu-divider{background:var(--nice-border-color-dark, #374151)}.nice-action-sheet-backdrop{background:var(--nice-overlay-60, rgba(0, 0, 0, .6))}.nice-action-sheet-content,.nice-action-sheet-cancel{background:var(--nice-bg-primary-dark, #1f2937)}.nice-action-sheet-title{color:var(--nice-text-muted-dark, #9ca3af);border-bottom-color:var(--nice-border-color-dark, #374151)}.nice-action-sheet-item{color:var(--nice-primary-light, #60a5fa);border-bottom-color:var(--nice-border-color-dark, #374151)}.nice-action-sheet-item:hover,.nice-action-sheet-cancel:hover{background:var(--nice-bg-hover-dark, #374151)}.nice-action-sheet-cancel{color:var(--nice-primary-light, #60a5fa)}}@media(prefers-reduced-motion:reduce){.nice-touch-menu-popover,.nice-action-sheet-backdrop,.nice-action-sheet{animation:none}.nice-touch-menu-item,.nice-action-sheet-item,.nice-action-sheet-cancel{transition:none}}.nice-touch-table-container{position:relative;width:100%;background:var(--nice-bg-primary, #ffffff);border-radius:var(--nice-radius-md, 8px);border:1px solid var(--nice-border-color, #e5e7eb);overflow:hidden}.nice-touch-table-container.loading{pointer-events:none}.nice-touch-table-scroll{width:100%;overflow-x:auto;overflow-y:visible;-webkit-overflow-scrolling:touch;scrollbar-width:thin}.nice-touch-table-scroll::-webkit-scrollbar{height:6px}.nice-touch-table-scroll::-webkit-scrollbar-track{background:var(--nice-bg-secondary, #f3f4f6)}.nice-touch-table-scroll::-webkit-scrollbar-thumb{background:var(--nice-border-color, #d1d5db);border-radius:var(--nice-radius-sm, 3px)}.nice-touch-table{width:100%;min-width:max-content;border-collapse:collapse;table-layout:fixed}.nice-touch-table-head{position:sticky;top:0;z-index:10;background:var(--nice-bg-secondary, #f9fafb)}.nice-touch-table-header{padding:.875rem 1rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--nice-text-secondary, #6b7280);text-align:left;white-space:nowrap;border-bottom:1px solid var(--nice-border-color, #e5e7eb);-webkit-user-select:none;user-select:none}.nice-touch-table-header.sticky{position:sticky;left:0;z-index:11;background:var(--nice-bg-secondary, #f9fafb);box-shadow:2px 0 4px var(--nice-overlay-5, rgba(0, 0, 0, .05))}.nice-touch-table-header.sortable{cursor:pointer}.nice-touch-table-header.sortable:hover{background:var(--nice-bg-hover, #f3f4f6)}.nice-touch-table-header .header-content{display:inline-flex;align-items:center;gap:.5rem}.nice-touch-table-header .sort-indicator{font-size:.875rem;color:var(--nice-primary, #3b82f6)}.nice-touch-table-header--checkbox{width:48px;padding:.875rem;text-align:center}.nice-touch-table-header--checkbox input[type=checkbox]{width:20px;height:20px;cursor:pointer;accent-color:var(--nice-primary, #3b82f6)}.nice-touch-table-body{position:relative}.nice-touch-table-row{position:relative;background:var(--nice-bg-primary, #ffffff);transition:background-color .15s}.nice-touch-table-row:hover{background:var(--nice-bg-hover, #f9fafb)}.nice-touch-table-row.selected{background:var(--nice-primary-light, #dbeafe)}.nice-touch-table-row.swiping{-webkit-user-select:none;user-select:none}.nice-touch-table-row-content{display:table-row;width:100%}.nice-touch-table-cell{padding:1rem;font-size:.9375rem;color:var(--nice-text-primary, #1f2937);border-bottom:1px solid var(--nice-border-color, #e5e7eb);vertical-align:middle}.nice-touch-table-cell.sticky{position:sticky;left:0;z-index:5;background:inherit;box-shadow:2px 0 4px var(--nice-overlay-5, rgba(0, 0, 0, .05))}.nice-touch-table-cell--checkbox{width:48px;padding:1rem;text-align:center}.nice-touch-table-cell--checkbox input[type=checkbox]{width:20px;height:20px;cursor:pointer;accent-color:var(--nice-primary, #3b82f6)}.nice-touch-table-actions{position:absolute;top:0;bottom:0;display:flex;align-items:stretch;z-index:4}.nice-touch-table-actions--left{left:0;transform:translate(-100%)}.nice-touch-table-actions--right{right:0;transform:translate(100%)}.nice-touch-table-action{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.25rem;border:none;cursor:pointer;font-family:inherit;transition:opacity .1s}.nice-touch-table-action:hover{opacity:.9}.nice-touch-table-action .action-icon{font-size:1.25rem}.nice-touch-table-action .action-label{font-size:.6875rem;font-weight:500;text-transform:uppercase}.nice-touch-table-empty{background:var(--nice-bg-primary, #ffffff)}.nice-touch-table-empty td{padding:3rem 1rem;text-align:center;color:var(--nice-text-muted, #9ca3af);font-size:.9375rem}.nice-touch-table-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:var(--nice-overlay-light-80, rgba(255, 255, 255, .8));z-index:20}.nice-touch-table-spinner{width:32px;height:32px;border:3px solid var(--nice-border-color, #e5e7eb);border-top-color:var(--nice-primary, #3b82f6);border-radius:var(--nice-radius-full, 50%);animation:nice-table-spin .8s linear infinite}@keyframes nice-table-spin{to{transform:rotate(360deg)}}@media(max-width:480px){.nice-touch-table-header{padding:.75rem;font-size:.6875rem}.nice-touch-table-cell{padding:.875rem .75rem;font-size:.875rem}.nice-touch-table-action{gap:.125rem}.nice-touch-table-action .action-icon{font-size:1rem}.nice-touch-table-action .action-label{font-size:.5625rem}}@media(prefers-color-scheme:dark){.nice-touch-table-container{background:var(--nice-bg-primary-dark, #111827);border-color:var(--nice-border-color-dark, #374151)}.nice-touch-table-scroll::-webkit-scrollbar-track{background:var(--nice-bg-secondary-dark, #1f2937)}.nice-touch-table-scroll::-webkit-scrollbar-thumb{background:var(--nice-border-color-dark, #4b5563)}.nice-touch-table-head,.nice-touch-table-header.sticky{background:var(--nice-bg-secondary-dark, #1f2937)}.nice-touch-table-header{color:var(--nice-text-secondary-dark, #9ca3af);border-bottom-color:var(--nice-border-color-dark, #374151)}.nice-touch-table-header.sortable:hover{background:var(--nice-bg-hover-dark, #374151)}.nice-touch-table-row{background:var(--nice-bg-primary-dark, #111827)}.nice-touch-table-row:hover{background:var(--nice-bg-hover-dark, #1f2937)}.nice-touch-table-row.selected{background:var(--nice-primary-dark, #1e40af)}.nice-touch-table-cell{color:var(--nice-text-primary-dark, #f9fafb);border-bottom-color:var(--nice-border-color-dark, #374151)}.nice-touch-table-empty td{color:var(--nice-text-muted-dark, #6b7280)}.nice-touch-table-loading{background:var(--nice-overlay-80, rgba(17, 24, 39, .8))}.nice-touch-table-spinner{border-color:var(--nice-border-color-dark, #374151);border-top-color:var(--nice-primary, #3b82f6)}}@media(prefers-reduced-motion:reduce){.nice-touch-table-row,.nice-touch-table-row-content,.nice-touch-table-action{transition:none}.nice-touch-table-spinner{animation:none}}.nice-touch-form{display:flex;flex-direction:column;gap:1.25rem}.nice-touch-form.disabled{opacity:.6;pointer-events:none}.nice-touch-form.submitting{pointer-events:none}.nice-touch-field{display:flex;flex-direction:column;gap:.5rem}.nice-touch-field.disabled{opacity:.6}.nice-touch-field-label{display:flex;align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;color:var(--nice-text-secondary, #374151)}.nice-touch-field-label .required-indicator{color:var(--nice-danger, #ef4444)}.nice-touch-field-input-wrapper{position:relative;display:flex;align-items:center}.nice-touch-field-input{width:100%;min-height:52px;padding:.875rem 1rem;border:2px solid var(--nice-border-color, #d1d5db);border-radius:var(--nice-radius-lg, 12px);background:var(--nice-bg-primary, #ffffff);color:var(--nice-text-primary, #1f2937);font-size:1rem;font-family:inherit;transition:border-color .15s,box-shadow .15s}.nice-touch-field-input::placeholder{color:var(--nice-text-muted, #9ca3af)}.nice-touch-field-input:focus{outline:none;border-color:var(--nice-primary, #3b82f6);box-shadow:0 0 0 3px var(--nice-primary-light, rgba(59, 130, 246, .2))}.nice-touch-field-input:disabled{background:var(--nice-bg-secondary, #f3f4f6);cursor:not-allowed}.nice-touch-field-input:read-only{background:var(--nice-bg-secondary, #f3f4f6)}.nice-touch-field-input-wrapper:has(.nice-touch-field-icon.left) .nice-touch-field-input{padding-left:3rem}.nice-touch-field-input-wrapper:has(.nice-touch-field-icon.right) .nice-touch-field-input{padding-right:3rem}.nice-touch-field-icon{position:absolute;display:flex;align-items:center;justify-content:center;width:44px;height:44px;color:var(--nice-text-muted, #9ca3af);pointer-events:none}.nice-touch-field-icon.left{left:4px}.nice-touch-field-icon.right{right:4px}.nice-touch-field.error .nice-touch-field-input{border-color:var(--nice-danger, #ef4444)}.nice-touch-field.error .nice-touch-field-input:focus{box-shadow:0 0 0 3px var(--nice-danger-light, rgba(239, 68, 68, .2))}.nice-touch-field-helper,.nice-touch-field-error{font-size:.8125rem;padding-left:.25rem}.nice-touch-field-helper{color:var(--nice-text-muted, #6b7280)}.nice-touch-field-error{color:var(--nice-danger, #ef4444);font-weight:500}.nice-touch-submit{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:.875rem 1.5rem;border:none;border-radius:var(--nice-radius-lg, 12px);background:var(--nice-primary, #3b82f6);color:#fff;font-size:1.0625rem;font-weight:600;font-family:inherit;cursor:pointer;transition:background-color .15s,transform .1s}.nice-touch-submit:hover:not(:disabled){background:var(--nice-primary-hover, #2563eb)}.nice-touch-submit:active:not(:disabled){transform:scale(.98)}.nice-touch-submit:disabled{opacity:.6;cursor:not-allowed}.nice-touch-submit.full-width{width:100%}.nice-touch-submit.loading{color:transparent}.nice-touch-submit-spinner{position:absolute;width:24px;height:24px;border:3px solid var(--nice-overlay-light-30, rgba(255, 255, 255, .3));border-top-color:#fff;border-radius:var(--nice-radius-full, 50%);animation:nice-form-spin .8s linear infinite}@keyframes nice-form-spin{to{transform:rotate(360deg)}}.nice-touch-navbar{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;background:var(--nice-bg-secondary, #f3f4f6);border-top:1px solid var(--nice-border-color, #e5e7eb)}.nice-touch-navbar-arrows{display:flex;gap:.5rem}.nice-touch-navbar-arrows button{display:inline-flex;align-items:center;justify-content:center;width:44px;height:36px;border:none;border-radius:var(--nice-radius-md, 8px);background:var(--nice-bg-primary, #ffffff);color:var(--nice-primary, #3b82f6);font-size:1.5rem;font-weight:700;cursor:pointer;transition:background-color .1s}.nice-touch-navbar-arrows button:hover{background:var(--nice-bg-hover, #e5e7eb)}.nice-touch-navbar-arrows button:active{background:var(--nice-bg-active, #d1d5db)}.nice-touch-navbar-done{padding:.5rem 1rem;border:none;border-radius:var(--nice-radius-md, 8px);background:transparent;color:var(--nice-primary, #3b82f6);font-size:1rem;font-weight:600;font-family:inherit;cursor:pointer}.nice-touch-navbar-done:hover{background:var(--nice-bg-primary, #ffffff)}@media(max-width:480px){.nice-touch-form{gap:1rem}.nice-touch-field-input{min-height:48px;padding:.75rem .875rem;font-size:1rem}.nice-touch-submit{min-height:48px;font-size:1rem}}@media(prefers-color-scheme:dark){.nice-touch-field-label{color:var(--nice-text-secondary-dark, #d1d5db)}.nice-touch-field-input{background:var(--nice-bg-primary-dark, #111827);border-color:var(--nice-border-color-dark, #374151);color:var(--nice-text-primary-dark, #f9fafb)}.nice-touch-field-input::placeholder{color:var(--nice-text-muted-dark, #6b7280)}.nice-touch-field-input:focus{border-color:var(--nice-primary, #3b82f6)}.nice-touch-field-input:disabled,.nice-touch-field-input:read-only{background:var(--nice-bg-secondary-dark, #1f2937)}.nice-touch-field-helper{color:var(--nice-text-muted-dark, #9ca3af)}.nice-touch-navbar{background:var(--nice-bg-secondary-dark, #1f2937);border-top-color:var(--nice-border-color-dark, #374151)}.nice-touch-navbar-arrows button{background:var(--nice-bg-primary-dark, #111827);color:var(--nice-primary-light, #60a5fa)}.nice-touch-navbar-arrows button:hover{background:var(--nice-bg-hover-dark, #374151)}.nice-touch-navbar-done{color:var(--nice-primary-light, #60a5fa)}.nice-touch-navbar-done:hover{background:var(--nice-bg-primary-dark, #111827)}}@media(prefers-reduced-motion:reduce){.nice-touch-field-input,.nice-touch-submit,.nice-touch-navbar-arrows button{transition:none}.nice-touch-submit-spinner{animation:none}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice2dev/ui-mobile",
3
- "version": "1.0.29",
3
+ "version": "1.1.5",
4
4
  "description": "Nice2Dev UI Mobile - Touch-first React components: BottomSheet, MobileTabs, TouchKeyboard, SwipeActions, Gestures, Haptics, ImageGallery and more",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -35,15 +35,15 @@
35
35
  "react-dom": ">=17.0.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@testing-library/react": "^14.1.0",
39
- "@types/react": "^18.2.0",
40
- "@types/react-dom": "^18.2.0",
41
- "react": "^18.2.0",
42
- "react-dom": "^18.2.0",
43
- "typescript": "^5.3.0",
44
- "vite": "^5.0.0",
38
+ "@testing-library/react": "^16.3.3",
39
+ "@types/react": "^19.2.18",
40
+ "@types/react-dom": "^19.2.7",
41
+ "react": "^19.2.8",
42
+ "react-dom": "^19.2.8",
43
+ "typescript": "^5.9.3",
44
+ "vite": "^6.4.1",
45
45
  "vite-plugin-dts": "^4.5.4",
46
- "vitest": "^4.1.0"
46
+ "vitest": "^4.1.11"
47
47
  },
48
48
  "keywords": [
49
49
  "mobile",