@elcrm/form 0.1.19 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/styles/Color.module.css +1 -1
  3. package/dist/assets/styles/Field.module.css +1 -1
  4. package/dist/assets/styles/Search.module.css +1 -1
  5. package/dist/assets/styles/Select.module.css +1 -1
  6. package/dist/core/Field.d.ts +7 -3
  7. package/dist/core/Field.js +4 -4
  8. package/dist/dark.css +1 -1
  9. package/dist/fields/Card.js +1 -1
  10. package/dist/fields/Check.js +1 -1
  11. package/dist/fields/Code.js +1 -1
  12. package/dist/fields/Color.js +1 -1
  13. package/dist/fields/Date.js +1 -1
  14. package/dist/fields/Display.js +1 -1
  15. package/dist/fields/DragDrop.js +1 -1
  16. package/dist/fields/File.js +1 -1
  17. package/dist/fields/Input.js +1 -1
  18. package/dist/fields/Mask.js +1 -1
  19. package/dist/fields/Modal.js +1 -1
  20. package/dist/fields/Money.js +1 -1
  21. package/dist/fields/NativeTextField.js +1 -1
  22. package/dist/fields/Numeric.js +1 -1
  23. package/dist/fields/Options.js +1 -1
  24. package/dist/fields/Password.js +1 -1
  25. package/dist/fields/Percent.js +1 -1
  26. package/dist/fields/Phone.js +1 -1
  27. package/dist/fields/Radio.js +1 -1
  28. package/dist/fields/Range.js +1 -1
  29. package/dist/fields/Rating.js +1 -1
  30. package/dist/fields/RichText.js +1 -1
  31. package/dist/fields/Search.js +1 -1
  32. package/dist/fields/Select.js +1 -1
  33. package/dist/fields/Tabs.js +1 -1
  34. package/dist/fields/Tags.js +1 -1
  35. package/dist/fields/Textarea.js +1 -1
  36. package/dist/fields/Time.js +1 -1
  37. package/dist/fields/type.d.ts +2 -1
  38. package/dist/hooks/useFieldSize.d.ts +8 -0
  39. package/dist/hooks/useFieldSize.js +1 -0
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.js +4 -4
  42. package/dist/index.umd.js +3 -3
  43. package/dist/kit-manifest.json +8 -0
  44. package/dist/light.css +1 -1
  45. package/dist/package.js +1 -1
  46. package/dist/style.css +4 -4
  47. package/dist/styles/Color.module.js +1 -1
  48. package/dist/styles/Field.module.js +1 -1
  49. package/dist/styles/Search.module.js +1 -1
  50. package/dist/tokens.css +1 -1
  51. package/package.json +12 -36
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import{isEmptyTextLike as a}from"./visibility.js";import{cardDigits as o,emptyCardBrandLock as s,formatCardNumber as c,stepCardBrand as l,validateCardNumber as u}from"./cardUtils.js";import d from"react";import{jsx as f,jsxs as p}from"react/jsx-runtime";function m({brand:e}){let t=e===`visa`?`Visa`:e===`mastercard`?`Mastercard`:e===`amex`?`Amex`:e===`mir`?`Мир`:e===`unionpay`?`UnionPay`:`Карта`;return f(`span`,{"aria-hidden":!0,title:t,style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,minWidth:36,height:24,padding:`0 4px`,borderRadius:4,fontSize:10,fontWeight:700,letterSpacing:`0.02em`,lineHeight:1,color:`var(--field-color)`,background:`var(--field-background-focus)`,userSelect:`none`},children:e===`visa`?`VISA`:e===`mastercard`?`MC`:e===`amex`?`AMEX`:e===`mir`?`МИР`:e===`unionpay`?`UP`:`••••`})}function h(){return f(`span`,{"aria-hidden":!0,style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:20,height:20,borderRadius:`50%`,background:`var(--field-error-color)`,color:`#fff`,fontSize:12,fontWeight:700,lineHeight:1,flexShrink:0},children:`i`})}function g({value:n=``,form:u,onValue:g,onBlur:v,name:y=``,placeholder:b=`0000 0000 0000 0000`,label:x=``,error:S=``,hidden:C=!1,disabled:w=!1,className:T=``,after:E,before:D,maxLength:O,autoComplete:k=`cc-number`,id:A,size:j=`m`,validate:M=!0}){let{value:N,version:P}=r(u,y,n),F=!w,[I,L]=d.useState(()=>o(N));d.useEffect(()=>{L(o(N))},[N,P]);let R=I,z=c(R),[B,V]=d.useState(()=>l(o(N),s()));d.useEffect(()=>{V(l(o(N),s()))},[N,P]);let H=B.brand,U=d.useRef(null),[W,G]=d.useState(``),K=S||W,q=i(u,y,g);if(d.useEffect(()=>{let e=U.current;if(!e)return;let t=c(R);e.value!==t&&(e.value=t)},[R,P]),C&&a(R))return null;let J=D!=null&&D!==``?D:f(m,{brand:H}),Y=E!=null&&E!==``?E:K?f(h,{}):null;return p(t,{type:`card`,label:x,error:K,id:A,size:j,element_blok:{className:[T||``]},element_input:{className:[e.w],props:{"data-disabled":w||!F?`true`:void 0,"data-brand":H}},children:[f(`span`,{className:e.a,children:J}),f(_,{inputRef:U,name:y,display:z,placeholder:b,maxLength:O,disabled:w,editable:F,autoComplete:k,label:x,validate:M,emit:q,setDraftDigits:e=>{L(e),V(t=>l(e,t))},setLocalError:G,onBlurField:v}),Y?f(`span`,{className:e.a,children:Y}):null]})}function _({inputRef:t,name:r,display:i,placeholder:a,maxLength:s,disabled:l,editable:d,autoComplete:p,label:m,validate:h,emit:g,setDraftDigits:_,setLocalError:v,onBlurField:y}){let b=n(),x=(e,t)=>{let n=t.value,r=t.selectionStart??n.length,i=o(n.slice(0,r)).length,a=o(e),s=c(a);t.value=s;let l=s.length,u=0;for(let e=0;e<s.length;e++)if(/\d/.test(s[e])&&(u++,u>=i)){l=e+1;break}return t.setSelectionRange(l,l),a};return f(`div`,{className:e.x,children:f(`input`,{id:b?.controlId,ref:t,className:e.y,type:`text`,name:r||void 0,defaultValue:i,placeholder:a,maxLength:s??23,disabled:l,readOnly:!d,autoComplete:p,inputMode:`numeric`,spellCheck:!1,"aria-label":m?void 0:a||`Номер карты`,"aria-describedby":b?.describedBy,"aria-invalid":b?.errorId?!0:void 0,onChange:e=>{let t=x(e.target.value,e.target);_(t),h&&v(``),g(t)},onBlur:e=>{let t=o(e.target.value);e.target.value=c(t),_(t),g(t,!0),h&&v(u(t)),y?.({value:t,name:r})},onKeyDown:e=>{e.key===`Enter`&&e.preventDefault()}})})}g.displayName=`CardField`;var v=d.memo(g);export{v as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import{isEmptyTextLike as a}from"./visibility.js";import{cardDigits as o,emptyCardBrandLock as s,formatCardNumber as c,stepCardBrand as l,validateCardNumber as u}from"./cardUtils.js";import d from"react";import{jsx as f,jsxs as p}from"react/jsx-runtime";function m({brand:e}){let t=e===`visa`?`Visa`:e===`mastercard`?`Mastercard`:e===`amex`?`Amex`:e===`mir`?`Мир`:e===`unionpay`?`UnionPay`:`Карта`;return f(`span`,{"aria-hidden":!0,title:t,style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,minWidth:36,height:24,padding:`0 4px`,borderRadius:4,fontSize:10,fontWeight:700,letterSpacing:`0.02em`,lineHeight:1,color:`var(--field-color)`,background:`var(--field-background-focus)`,userSelect:`none`},children:e===`visa`?`VISA`:e===`mastercard`?`MC`:e===`amex`?`AMEX`:e===`mir`?`МИР`:e===`unionpay`?`UP`:`••••`})}function h(){return f(`span`,{"aria-hidden":!0,style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:20,height:20,borderRadius:`50%`,background:`var(--field-error-color)`,color:`#fff`,fontSize:12,fontWeight:700,lineHeight:1,flexShrink:0},children:`i`})}function g({value:n=``,form:u,onValue:g,onBlur:v,name:y=``,placeholder:b=`0000 0000 0000 0000`,label:x=``,error:S=``,hidden:C=!1,disabled:w=!1,className:T=``,after:E,before:D,maxLength:O,autoComplete:k=`cc-number`,id:A,size:j,validate:M=!0}){let{value:N,version:P}=r(u,y,n),F=!w,[I,L]=d.useState(()=>o(N));d.useEffect(()=>{L(o(N))},[N,P]);let R=I,z=c(R),[B,V]=d.useState(()=>l(o(N),s()));d.useEffect(()=>{V(l(o(N),s()))},[N,P]);let H=B.brand,U=d.useRef(null),[W,G]=d.useState(``),K=S||W,q=i(u,y,g);if(d.useEffect(()=>{let e=U.current;if(!e)return;let t=c(R);e.value!==t&&(e.value=t)},[R,P]),C&&a(R))return null;let J=D!=null&&D!==``?D:f(m,{brand:H}),Y=E!=null&&E!==``?E:K?f(h,{}):null;return p(t,{type:`card`,label:x,error:K,id:A,size:j,element_blok:{className:[T||``]},element_input:{className:[e.w],props:{"data-disabled":w||!F?`true`:void 0,"data-brand":H}},children:[f(`span`,{className:e.a,children:J}),f(_,{inputRef:U,name:y,display:z,placeholder:b,maxLength:O,disabled:w,editable:F,autoComplete:k,label:x,validate:M,emit:q,setDraftDigits:e=>{L(e),V(t=>l(e,t))},setLocalError:G,onBlurField:v}),Y?f(`span`,{className:e.a,children:Y}):null]})}function _({inputRef:t,name:r,display:i,placeholder:a,maxLength:s,disabled:l,editable:d,autoComplete:p,label:m,validate:h,emit:g,setDraftDigits:_,setLocalError:v,onBlurField:y}){let b=n(),x=(e,t)=>{let n=t.value,r=t.selectionStart??n.length,i=o(n.slice(0,r)).length,a=o(e),s=c(a);t.value=s;let l=s.length,u=0;for(let e=0;e<s.length;e++)if(/\d/.test(s[e])&&(u++,u>=i)){l=e+1;break}return t.setSelectionRange(l,l),a};return f(`div`,{className:e.x,children:f(`input`,{id:b?.controlId,ref:t,className:e.y,type:`text`,name:r||void 0,defaultValue:i,placeholder:a,maxLength:s??23,disabled:l,readOnly:!d,autoComplete:p,inputMode:`numeric`,spellCheck:!1,"aria-label":m?void 0:a||`Номер карты`,"aria-describedby":b?.describedBy,"aria-invalid":b?.errorId?!0:void 0,onChange:e=>{let t=x(e.target.value,e.target);_(t),h&&v(``),g(t)},onBlur:e=>{let t=o(e.target.value);e.target.value=c(t),_(t),g(t,!0),h&&v(u(t)),y?.({value:t,name:r})},onKeyDown:e=>{e.key===`Enter`&&e.preventDefault()}})})}g.displayName=`CardField`;var v=d.memo(g);export{v as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a from"../styles/Check.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e){if(e===!0||e===1)return!0;if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`1`||t===`true`||t===`on`||t===`yes`}return!1}function u({value:n=!1,form:u,onValue:f,onBlur:p,name:m=``,placeholder:h=``,label:g=``,error:_=``,hidden:v=!1,disabled:y=!1,className:b=``,after:x=``,before:S=``,size:C=`m`,variant:w=`field`,showFocusRing:T=!0,align:E=`center`}){let{value:D}=r(u,m,n),O=l(D),k=!y,A=h||``,j=o.useCallback(e=>{i(u,m,f)(e,!0)},[u,m,f]),M=()=>{k&&j(!O)},N=e=>{k&&(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),M())},P=()=>{!p||!m||p({value:l(u&&m?u.getValue(m,O):O),name:m})};return v&&!O?null:c(t,{type:`checkbox`,label:g,error:_,size:C,element_blok:{className:[b||``,w===`plain`?a.p:``].filter(Boolean)},element_input:{className:[a.r],props:{"data-disabled":y||!k?`true`:void 0,"data-size":C,"data-variant":w}},children:[S?s(`span`,{className:e.a,children:S}):null,s(`div`,{children:s(d,{checked:O,label:g,text:A,disabled:y,editable:k,size:C,variant:w,showFocusRing:T,align:E,toggle:M,onKeyDown:N,onBlur:P})}),x?s(`span`,{className:e.a,children:x}):null]})}u.displayName=`CheckField`;function d({checked:e,label:t,text:r,disabled:i,editable:o,size:l,variant:u,showFocusRing:d,align:f,toggle:p,onKeyDown:m,onBlur:h}){let g=n();return c(`button`,{type:`button`,id:g?.controlId,className:a.c,role:`checkbox`,"aria-checked":e,"aria-label":t?void 0:r||`Чекбокс`,"aria-describedby":g?.describedBy,"aria-invalid":g?.errorId?!0:void 0,"aria-disabled":i||!o?!0:void 0,disabled:i||!o,"data-size":l,"data-variant":u,"data-align":f,"data-focus-ring":d?`true`:`false`,onClick:p,onKeyDown:m,onBlur:h,children:[s(`span`,{className:a.b,"aria-hidden":!0,children:e?s(`span`,{className:a.m}):null}),r?s(`span`,{className:a.t,children:r}):null]})}export{u as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a from"../styles/Check.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e){if(e===!0||e===1)return!0;if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`1`||t===`true`||t===`on`||t===`yes`}return!1}function u({value:n=!1,form:u,onValue:f,onBlur:p,name:m=``,placeholder:h=``,label:g=``,error:_=``,hidden:v=!1,disabled:y=!1,className:b=``,after:x=``,before:S=``,size:C,variant:w=`field`,showFocusRing:T=!0,align:E=`center`}){let{value:D}=r(u,m,n),O=l(D),k=!y,A=h||``,j=o.useCallback(e=>{i(u,m,f)(e,!0)},[u,m,f]),M=()=>{k&&j(!O)},N=e=>{k&&(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),M())},P=()=>{!p||!m||p({value:l(u&&m?u.getValue(m,O):O),name:m})};return v&&!O?null:c(t,{type:`checkbox`,label:g,error:_,size:C,element_blok:{className:[b||``,w===`plain`?a.p:``].filter(Boolean)},element_input:{className:[a.r],props:{"data-disabled":y||!k?`true`:void 0,"data-size":C,"data-variant":w}},children:[S?s(`span`,{className:e.a,children:S}):null,s(`div`,{children:s(d,{checked:O,label:g,text:A,disabled:y,editable:k,size:C,variant:w,showFocusRing:T,align:E,toggle:M,onKeyDown:N,onBlur:P})}),x?s(`span`,{className:e.a,children:x}):null]})}u.displayName=`CheckField`;function d({checked:e,label:t,text:r,disabled:i,editable:o,size:l,variant:u,showFocusRing:d,align:f,toggle:p,onKeyDown:m,onBlur:h}){let g=n();return c(`button`,{type:`button`,id:g?.controlId,className:a.c,role:`checkbox`,"aria-checked":e,"aria-label":t?void 0:r||`Чекбокс`,"aria-describedby":g?.describedBy,"aria-invalid":g?.errorId?!0:void 0,"aria-disabled":i||!o?!0:void 0,disabled:i||!o,"data-size":l,"data-variant":u,"data-align":f,"data-focus-ring":d?`true`:`false`,onClick:p,onKeyDown:m,onBlur:h,children:[s(`span`,{className:a.b,"aria-hidden":!0,children:e?s(`span`,{className:a.m}):null}),r?s(`span`,{className:a.t,children:r}):null]})}export{u as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import a from"../styles/Code.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e,t){return e?e.length===1?e:e[t]||`0`:`0`}function u({value:u=``,form:d,onValue:f,onBlur:p,name:m=``,placeholder:h=``,label:g=``,error:_=``,hidden:v=!1,disabled:y=!1,className:b=``,after:x=``,before:S=``,size:C=`m`,length:w=6,numeric:T=!0,group:E,cellSize:D,autoComplete:O=`one-time-code`}){let{value:k,version:A}=n(d,m,u),j=!y,M=(T?String(k??``).replace(/\D/g,``):String(k??``)).slice(0,w),N=o.useRef([]),P=E&&E>0?E:w===6?3:0,F=o.useMemo(()=>{if(D!=null)return{"--field-code-size":typeof D==`number`?`${D}px`:D}},[D]);o.useEffect(()=>{},[A]);let I=r(d,m,f),L=(e,t)=>{let n=M.padEnd(w,` `).split(``);n[e]=t;let r=n.join(``).replace(/ /g,``).slice(0,w);return I(r,!0),r},R=(e,t)=>{let n=T?t.replace(/\D/g,``):t;if(!n){L(e,``);return}if(n.length>1){let e=n.slice(0,w);I(e,!0);let t=Math.min(e.length,w-1);N.current[t]?.focus();return}L(e,n),e<w-1&&N.current[e+1]?.focus()};if(v&&i(M))return null;let z=[];for(let e=0;e<w;e++)P>0&&e>0&&e%P===0&&z.push(s(`span`,{className:a.s,"aria-hidden":!0,children:`-`},`sep-${e}`)),z.push(s(`input`,{ref:t=>{N.current[e]=t},className:a.c,type:`text`,inputMode:T?`numeric`:`text`,autoComplete:e===0?O:`off`,maxLength:1,disabled:y||!j,value:M[e]||``,placeholder:l(h,e),"aria-label":`${e+1} из ${w}`,onChange:t=>R(e,t.target.value),onKeyDown:t=>{t.key===`Backspace`&&!M[e]&&e>0&&(t.preventDefault(),L(e-1,``),N.current[e-1]?.focus()),t.key===`ArrowLeft`&&e>0&&(t.preventDefault(),N.current[e-1]?.focus()),t.key===`ArrowRight`&&e<w-1&&(t.preventDefault(),N.current[e+1]?.focus())},onBlur:()=>{let e=document.activeElement;N.current.some(t=>t===e)||p?.({value:M,name:m})},onPaste:e=>{e.preventDefault();let t=e.clipboardData.getData(`text`)||``,n=(T?t.replace(/\D/g,``):t).slice(0,w);I(n,!0),N.current[Math.min(n.length,w-1)]?.focus()}},e));return c(t,{type:`code`,label:g,error:_,size:C,element_blok:{className:[b||``]},element_input:{className:[a.r],props:{"data-disabled":y||!j?`true`:void 0}},children:[S?s(`span`,{className:e.a,children:S}):null,s(`div`,{className:a.i,role:`group`,"aria-label":g||h||`Код`,style:F,children:z}),x?s(`span`,{className:e.a,children:x}):null]})}u.displayName=`CodeField`;export{u as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import a from"../styles/Code.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e,t){return e?e.length===1?e:e[t]||`0`:`0`}function u({value:u=``,form:d,onValue:f,onBlur:p,name:m=``,placeholder:h=``,label:g=``,error:_=``,hidden:v=!1,disabled:y=!1,className:b=``,after:x=``,before:S=``,size:C,length:w=6,numeric:T=!0,group:E,cellSize:D,autoComplete:O=`one-time-code`}){let{value:k,version:A}=n(d,m,u),j=!y,M=(T?String(k??``).replace(/\D/g,``):String(k??``)).slice(0,w),N=o.useRef([]),P=E&&E>0?E:w===6?3:0,F=o.useMemo(()=>{if(D!=null)return{"--field-code-size":typeof D==`number`?`${D}px`:D}},[D]);o.useEffect(()=>{},[A]);let I=r(d,m,f),L=(e,t)=>{let n=M.padEnd(w,` `).split(``);n[e]=t;let r=n.join(``).replace(/ /g,``).slice(0,w);return I(r,!0),r},R=(e,t)=>{let n=T?t.replace(/\D/g,``):t;if(!n){L(e,``);return}if(n.length>1){let e=n.slice(0,w);I(e,!0);let t=Math.min(e.length,w-1);N.current[t]?.focus();return}L(e,n),e<w-1&&N.current[e+1]?.focus()};if(v&&i(M))return null;let z=[];for(let e=0;e<w;e++)P>0&&e>0&&e%P===0&&z.push(s(`span`,{className:a.s,"aria-hidden":!0,children:`-`},`sep-${e}`)),z.push(s(`input`,{ref:t=>{N.current[e]=t},className:a.c,type:`text`,inputMode:T?`numeric`:`text`,autoComplete:e===0?O:`off`,maxLength:1,disabled:y||!j,value:M[e]||``,placeholder:l(h,e),"aria-label":`${e+1} из ${w}`,onChange:t=>R(e,t.target.value),onKeyDown:t=>{t.key===`Backspace`&&!M[e]&&e>0&&(t.preventDefault(),L(e-1,``),N.current[e-1]?.focus()),t.key===`ArrowLeft`&&e>0&&(t.preventDefault(),N.current[e-1]?.focus()),t.key===`ArrowRight`&&e<w-1&&(t.preventDefault(),N.current[e+1]?.focus())},onBlur:()=>{let e=document.activeElement;N.current.some(t=>t===e)||p?.({value:M,name:m})},onPaste:e=>{e.preventDefault();let t=e.clipboardData.getData(`text`)||``,n=(T?t.replace(/\D/g,``):t).slice(0,w);I(n,!0),N.current[Math.min(n.length,w-1)]?.focus()}},e));return c(t,{type:`code`,label:g,error:_,size:C,element_blok:{className:[b||``]},element_input:{className:[a.r],props:{"data-disabled":y||!j?`true`:void 0}},children:[S?s(`span`,{className:e.a,children:S}):null,s(`div`,{className:a.i,role:`group`,"aria-label":g||h||`Код`,style:F,children:z}),x?s(`span`,{className:e.a,children:x}):null]})}u.displayName=`CodeField`;export{u as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Color.module.js";import{DEFAULT_COLOR_PALETTE as a,formatHexColor as o,isEditablePasteTarget as s,isEmptyColor as c,normalizeHexCompare as l,parseClipboardColor as u,parseHexColor as d}from"./colorUtils.js";import ee from"./ColorPanel.js";import f from"react";import{Fragment as te,jsx as p,jsxs as m}from"react/jsx-runtime";import{createPortal as ne}from"react-dom";var h={h:0,s:1,v:.76,a:1};function g({value:g=``,form:_,onValue:v,onBlur:re,name:y=``,placeholder:b=`#000000`,label:x=``,error:ie=``,hidden:S=!1,disabled:C=!1,className:ae=``,after:w=``,before:T=``,colors:E,alpha:D=!0,inlinePalette:O=!1,size:k=`m`}){let{value:A}=n(_,y,g),j=typeof A==`string`?A:A==null?``:String(A),[M,N]=f.useState(!1),[oe,P]=f.useState(null),F=f.useRef(null),[I,L]=f.useState(()=>d(j)??{...h}),[se,R]=f.useState(()=>o(d(j)??h,D)),z=f.useCallback(()=>{let e=F.current;if(!e)return;let t=e.getBoundingClientRect();P(e=>e&&e.top===t.top&&e.left===t.left&&e.width===t.width&&e.height===t.height&&e.bottom===t.bottom?e:t)},[]);f.useEffect(()=>{if(!M)return;z();let e=()=>z();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[M,z]);let B=E?.length?E:a,V=d(j),H=V??(c(j)?d(b):null),U=V?o(V,D):``,W=H?o(H,D):`transparent`;f.useEffect(()=>{let e=d(j);e&&(L(e),R(o(e,D)))},[j,D]);let G=f.useCallback((e,t)=>{let n=o(e,D);r(_,y,v)(n,t===`commit`),R(n)},[D,_,y,v]),[K,q]=f.useState(null),[ce,J]=f.useState(!1),Y=f.useRef(null),X=f.useRef(null);f.useEffect(()=>()=>{Y.current&&clearTimeout(Y.current),X.current&&clearTimeout(X.current)},[]);let le=e=>{if(C)return;let t=d(e);if(!t)return;let n={...t,a:D?t.a:1};L(n),G(n,`commit`)},ue=e=>{if(C||K)return;let t=l(e);Z&&t===Z||(q(e),Y.current&&clearTimeout(Y.current),Y.current=setTimeout(()=>{le(e),q(null),J(!0),X.current&&clearTimeout(X.current),X.current=setTimeout(()=>{J(!1)},280)},220))},Z=V?l(o(V,D)):``,de=f.useMemo(()=>{if(!O)return[];let e=K?l(K):``;return B.filter(t=>{let n=l(t);return e&&n===e?!0:!(Z&&n===Z)})},[O,B,Z,K]),Q=e=>{if(C)return;let t=d(j)??{...I};L(t),R(o(t,D)),P(e.getBoundingClientRect()),N(!0)},$=()=>{N(!1),re?.({value:o(I,D),name:y||``})};f.useEffect(()=>{if(!M||C)return;let e=``,t=t=>{let n=u(t);if(!n)return!1;let r={...n,a:D?n.a:1},i=o(r,D);return i===e?!0:(e=i,L(r),G(r,`commit`),!0)},n=e=>{s(e.target)||t(e.clipboardData?.getData(`text/plain`)??``)&&(e.preventDefault(),e.stopPropagation())},r=e=>{(e.ctrlKey||e.metaKey)&&(e.key!==`v`&&e.key!==`V`||s(e.target)||navigator.clipboard?.readText&&(e.preventDefault(),navigator.clipboard.readText().then(e=>{t(e)})))};return document.addEventListener(`paste`,n,!0),window.addEventListener(`keydown`,r,!0),()=>{document.removeEventListener(`paste`,n,!0),window.removeEventListener(`keydown`,r,!0)}},[M,C,D,G]);let fe=e=>{if(!C){if(!M&&(e.key===`Enter`||e.key===` `||e.key===`ArrowDown`)){e.preventDefault(),Q(e.currentTarget);return}M&&e.key===`Escape`&&(e.preventDefault(),$())}};return S&&c(j)?null:m(te,{children:[m(t,{type:`color`,label:x,error:ie,size:k,element_blok:{className:[ae||``]},element_input:{className:[e.w,i.q],props:{"data-disabled":C?`true`:void 0}},children:[T?p(`span`,{className:e.a,children:T}):null,m(`div`,{ref:F,className:i.t,role:`combobox`,tabIndex:C?-1:0,"aria-expanded":M,"aria-haspopup":`dialog`,"aria-disabled":C,"aria-label":x||`Цвет`,onClick:e=>Q(e.currentTarget),onKeyDown:fe,children:[p(`span`,{className:i.c,"data-enter":ce?`true`:void 0,style:{"--preview-color":W}}),p(`span`,{className:[i.g,U?``:i.m].filter(Boolean).join(` `),children:U||b})]}),O?p(`div`,{className:i.j,role:`listbox`,"aria-label":`Палитра`,onClick:e=>e.stopPropagation(),onMouseDown:e=>e.stopPropagation(),children:de.map(e=>{let t=K!=null&&l(e)===l(K);return p(`button`,{type:`button`,role:`option`,"aria-label":e,disabled:C||!!K,className:i.k,"data-exit":t?`true`:void 0,style:{"--swatch":e},onClick:t=>{t.stopPropagation(),ue(e)}},e)})}):null,w?p(`span`,{className:e.a,children:w}):null]}),M&&ne(p(ee,{parent:oe||void 0,hsva:I,setHsva:L,hexDraft:se,setHexDraft:R,alpha:D,palette:B,showPalette:!O,onLive:e=>G(e,`live`),onCommit:e=>G(e,`commit`),onClose:$}),document.body)]})}g.displayName=`ColorField`;export{g as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Color.module.js";import{DEFAULT_COLOR_PALETTE as a,formatHexColor as o,isEditablePasteTarget as s,isEmptyColor as c,normalizeHexCompare as l,parseClipboardColor as u,parseHexColor as d}from"./colorUtils.js";import ee from"./ColorPanel.js";import f from"react";import{Fragment as te,jsx as p,jsxs as m}from"react/jsx-runtime";import{createPortal as ne}from"react-dom";var h={h:0,s:1,v:.76,a:1};function g({value:g=``,form:_,onValue:v,onBlur:re,name:y=``,placeholder:b=`#000000`,label:x=``,error:ie=``,hidden:S=!1,disabled:C=!1,className:ae=``,after:w=``,before:T=``,colors:E,alpha:D=!0,inlinePalette:O=!1,size:k}){let{value:A}=n(_,y,g),j=typeof A==`string`?A:A==null?``:String(A),[M,N]=f.useState(!1),[oe,P]=f.useState(null),F=f.useRef(null),[I,L]=f.useState(()=>d(j)??{...h}),[se,R]=f.useState(()=>o(d(j)??h,D)),z=f.useCallback(()=>{let e=F.current;if(!e)return;let t=e.getBoundingClientRect();P(e=>e&&e.top===t.top&&e.left===t.left&&e.width===t.width&&e.height===t.height&&e.bottom===t.bottom?e:t)},[]);f.useEffect(()=>{if(!M)return;z();let e=()=>z();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[M,z]);let B=E?.length?E:a,V=d(j),H=V??(c(j)?d(b):null),U=V?o(V,D):``,W=H?o(H,D):`transparent`;f.useEffect(()=>{let e=d(j);e&&(L(e),R(o(e,D)))},[j,D]);let G=f.useCallback((e,t)=>{let n=o(e,D);r(_,y,v)(n,t===`commit`),R(n)},[D,_,y,v]),[K,q]=f.useState(null),[ce,J]=f.useState(!1),Y=f.useRef(null),X=f.useRef(null);f.useEffect(()=>()=>{Y.current&&clearTimeout(Y.current),X.current&&clearTimeout(X.current)},[]);let le=e=>{if(C)return;let t=d(e);if(!t)return;let n={...t,a:D?t.a:1};L(n),G(n,`commit`)},ue=e=>{if(C||K)return;let t=l(e);Z&&t===Z||(q(e),Y.current&&clearTimeout(Y.current),Y.current=setTimeout(()=>{le(e),q(null),J(!0),X.current&&clearTimeout(X.current),X.current=setTimeout(()=>{J(!1)},280)},220))},Z=V?l(o(V,D)):``,de=f.useMemo(()=>{if(!O)return[];let e=K?l(K):``;return B.filter(t=>{let n=l(t);return e&&n===e?!0:!(Z&&n===Z)})},[O,B,Z,K]),Q=e=>{if(C)return;let t=d(j)??{...I};L(t),R(o(t,D)),P(e.getBoundingClientRect()),N(!0)},$=()=>{N(!1),re?.({value:o(I,D),name:y||``})};f.useEffect(()=>{if(!M||C)return;let e=``,t=t=>{let n=u(t);if(!n)return!1;let r={...n,a:D?n.a:1},i=o(r,D);return i===e?!0:(e=i,L(r),G(r,`commit`),!0)},n=e=>{s(e.target)||t(e.clipboardData?.getData(`text/plain`)??``)&&(e.preventDefault(),e.stopPropagation())},r=e=>{(e.ctrlKey||e.metaKey)&&(e.key!==`v`&&e.key!==`V`||s(e.target)||navigator.clipboard?.readText&&(e.preventDefault(),navigator.clipboard.readText().then(e=>{t(e)})))};return document.addEventListener(`paste`,n,!0),window.addEventListener(`keydown`,r,!0),()=>{document.removeEventListener(`paste`,n,!0),window.removeEventListener(`keydown`,r,!0)}},[M,C,D,G]);let fe=e=>{if(!C){if(!M&&(e.key===`Enter`||e.key===` `||e.key===`ArrowDown`)){e.preventDefault(),Q(e.currentTarget);return}M&&e.key===`Escape`&&(e.preventDefault(),$())}};return S&&c(j)?null:m(te,{children:[m(t,{type:`color`,label:x,error:ie,size:k,element_blok:{className:[ae||``]},element_input:{className:[e.w],props:{"data-disabled":C?`true`:void 0,"data-color-cap":``}},children:[T?p(`span`,{className:e.a,children:T}):null,m(`div`,{ref:F,className:i.t,role:`combobox`,tabIndex:C?-1:0,"aria-expanded":M,"aria-haspopup":`dialog`,"aria-disabled":C,"aria-label":x||`Цвет`,onClick:e=>Q(e.currentTarget),onKeyDown:fe,children:[p(`span`,{className:i.c,"data-enter":ce?`true`:void 0,style:{"--preview-color":W}}),p(`span`,{className:i.g,"data-ph":U?void 0:``,children:U||b})]}),O?p(`div`,{className:i.j,role:`listbox`,"aria-label":`Палитра`,onClick:e=>e.stopPropagation(),onMouseDown:e=>e.stopPropagation(),children:de.map(e=>{let t=K!=null&&l(e)===l(K);return p(`button`,{type:`button`,role:`option`,"aria-label":e,disabled:C||!!K,className:i.k,"data-exit":t?`true`:void 0,style:{"--swatch":e},onClick:t=>{t.stopPropagation(),ue(e)}},e)})}):null,w?p(`span`,{className:e.a,children:w}):null]}),M&&ne(p(ee,{parent:oe||void 0,hsva:I,setHsva:L,hexDraft:se,setHexDraft:R,alpha:D,palette:B,showPalette:!O,onLive:e=>G(e,`live`),onCommit:e=>G(e,`commit`),onClose:$}),document.body)]})}g.displayName=`ColorField`;export{g as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import{FormatDate as a,clampDateValue as o,isDateDisplayEmpty as s,isEditablePasteTarget as c,parseClipboardDate as l,toStoreDateString as u}from"./dateUtils.js";import d from"./DateCalendar.js";import f from"react";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";import{createPortal as g}from"react-dom";function _({label:_=``,error:v,hidden:y=!1,className:b,placeholder:x,disabled:S=!1,onValue:C,max:w,min:T,form:E,icon:D,name:O=``,value:k,after:A=``,before:j=``,size:M=`m`}){let N=f.useCallback(e=>{if(e==null||typeof e==`string`&&i(e))return``;if(e instanceof Date)return Number.isNaN(e.getTime())?``:e;if(typeof e==`string`||typeof e==`number`){let t=new Date(e);return Number.isNaN(t.getTime())?``:e}return``},[]),{value:P}=n(E,O,k),[F,I]=f.useState(N(P)),L=f.useRef(null),[R,z]=f.useState(null),[B,V]=f.useState(!1),H=f.useCallback(()=>{let e=L.current;if(!e)return;let t=e.getBoundingClientRect();z({x:t.left,y:t.top,b:t.bottom})},[]);f.useEffect(()=>{if(!B)return;H();let e=()=>{H()};return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[B,H]),f.useEffect(()=>{I(N(P))},[P,N]);let U=f.useCallback(e=>{I(e),r(E,O,C)(e,!0)},[E,O,C]);f.useEffect(()=>{if(!B||S)return;let e=``,t=t=>{let n=l(t);if(!n)return!1;let r=u(o(n,T,w));return r===e?!0:(e=r,U(r),V(!1),!0)},n=e=>{c(e.target)||t(e.clipboardData?.getData(`text/plain`)??``)&&(e.preventDefault(),e.stopPropagation())},r=e=>{(e.ctrlKey||e.metaKey)&&(e.key!==`v`&&e.key!==`V`||c(e.target)||navigator.clipboard?.readText&&(e.preventDefault(),navigator.clipboard.readText().then(e=>{t(e)})))};return document.addEventListener(`paste`,n,!0),window.addEventListener(`keydown`,r,!0),()=>{document.removeEventListener(`paste`,n,!0),window.removeEventListener(`keydown`,r,!0)}},[B,S,T,w,U]);let W=e=>{if(S)return;let t=e.currentTarget.getBoundingClientRect();z({x:t.left,y:t.top,b:t.bottom}),V(!0)},G={};x&&(G.placeholder=x);let K=P==null||P===``||typeof P==`string`&&i(P);return y&&K?m(p,{}):h(p,{children:[D?D():h(t,{type:`date`,label:_,error:v,size:M,element_blok:{className:[b||``]},element_input:{className:[e.w],props:{"data-disabled":S?`true`:void 0}},children:[j?m(`span`,{className:e.a,children:j}):null,m(`div`,{ref:L,onClick:W,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),W(e))},tabIndex:S?-1:0,role:`button`,"aria-haspopup":`dialog`,"aria-expanded":B,"aria-label":_||x||`Дата`,"data-edit":S?void 0:`true`,...G,style:{cursor:S?`not-allowed`:`pointer`},children:s(F)?``:a(F,`dd.mm.yyyy`)}),A?m(`span`,{className:e.a,children:A}):null]}),B&&R&&g(m(d,{position:R,onValue:U,date:F,max:w,min:T,onOpen:V,className:b},`elcrm-date-popup`),document.body)]})}_.displayName=`DateField`;export{_ as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import{FormatDate as a,clampDateValue as o,isDateDisplayEmpty as s,isEditablePasteTarget as c,parseClipboardDate as l,toStoreDateString as u}from"./dateUtils.js";import d from"./DateCalendar.js";import f from"react";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";import{createPortal as g}from"react-dom";function _({label:_=``,error:v,hidden:y=!1,className:b,placeholder:x,disabled:S=!1,onValue:C,max:w,min:T,form:E,icon:D,name:O=``,value:k,after:A=``,before:j=``,size:M}){let N=f.useCallback(e=>{if(e==null||typeof e==`string`&&i(e))return``;if(e instanceof Date)return Number.isNaN(e.getTime())?``:e;if(typeof e==`string`||typeof e==`number`){let t=new Date(e);return Number.isNaN(t.getTime())?``:e}return``},[]),{value:P}=n(E,O,k),[F,I]=f.useState(N(P)),L=f.useRef(null),[R,z]=f.useState(null),[B,V]=f.useState(!1),H=f.useCallback(()=>{let e=L.current;if(!e)return;let t=e.getBoundingClientRect();z({x:t.left,y:t.top,b:t.bottom})},[]);f.useEffect(()=>{if(!B)return;H();let e=()=>{H()};return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[B,H]),f.useEffect(()=>{I(N(P))},[P,N]);let U=f.useCallback(e=>{I(e),r(E,O,C)(e,!0)},[E,O,C]);f.useEffect(()=>{if(!B||S)return;let e=``,t=t=>{let n=l(t);if(!n)return!1;let r=u(o(n,T,w));return r===e?!0:(e=r,U(r),V(!1),!0)},n=e=>{c(e.target)||t(e.clipboardData?.getData(`text/plain`)??``)&&(e.preventDefault(),e.stopPropagation())},r=e=>{(e.ctrlKey||e.metaKey)&&(e.key!==`v`&&e.key!==`V`||c(e.target)||navigator.clipboard?.readText&&(e.preventDefault(),navigator.clipboard.readText().then(e=>{t(e)})))};return document.addEventListener(`paste`,n,!0),window.addEventListener(`keydown`,r,!0),()=>{document.removeEventListener(`paste`,n,!0),window.removeEventListener(`keydown`,r,!0)}},[B,S,T,w,U]);let W=e=>{if(S)return;let t=e.currentTarget.getBoundingClientRect();z({x:t.left,y:t.top,b:t.bottom}),V(!0)},G={};x&&(G.placeholder=x);let K=P==null||P===``||typeof P==`string`&&i(P);return y&&K?m(p,{}):h(p,{children:[D?D():h(t,{type:`date`,label:_,error:v,size:M,element_blok:{className:[b||``]},element_input:{className:[e.w],props:{"data-disabled":S?`true`:void 0}},children:[j?m(`span`,{className:e.a,children:j}):null,m(`div`,{ref:L,onClick:W,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),W(e))},tabIndex:S?-1:0,role:`button`,"aria-haspopup":`dialog`,"aria-expanded":B,"aria-label":_||x||`Дата`,"data-edit":S?void 0:`true`,...G,style:{cursor:S?`not-allowed`:`pointer`},children:s(F)?``:a(F,`dd.mm.yyyy`)}),A?m(`span`,{className:e.a,children:A}):null]}),B&&R&&g(m(d,{position:R,onValue:U,date:F,max:w,min:T,onOpen:V,className:b},`elcrm-date-popup`),document.body)]})}_.displayName=`DateField`;export{_ as default};
@@ -1,2 +1,2 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{isEmptyTextLike as r}from"./visibility.js";import"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";function o(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e))return e.map(String).join(`, `);try{return JSON.stringify(e)}catch{return String(e)}}function s({value:s=``,form:c,name:l=``,placeholder:u=``,label:d=``,error:f=``,hidden:p=!1,disabled:m=!1,className:h=``,after:g=``,before:_=``,format:v=o,emptyText:y,size:b=`m`,multiline:x}){let{value:S}=n(c,l,s),C=v(S),w=!C.trim(),T=w?y||u||`—`:C,E=x===!0||x!==!1&&T.includes(`
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{isEmptyTextLike as r}from"./visibility.js";import"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";function o(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e))return e.map(String).join(`, `);try{return JSON.stringify(e)}catch{return String(e)}}function s({value:s=``,form:c,name:l=``,placeholder:u=``,label:d=``,error:f=``,hidden:p=!1,disabled:m=!1,className:h=``,after:g=``,before:_=``,format:v=o,emptyText:y,size:b,multiline:x}){let{value:S}=n(c,l,s),C=v(S),w=!C.trim(),T=w?y||u||`—`:C,E=x===!0||x!==!1&&T.includes(`
2
2
  `);return p&&r(S)?null:a(t,{type:`display`,label:d,error:f,size:b,element_blok:{className:[h||``]},element_input:{className:[E?e.n:e.w,e.d],props:{"data-readonly":`true`,"data-disabled":m?`true`:void 0,"data-multiline":E?`true`:void 0}},children:[_?i(`span`,{className:e.a,children:_}):null,i(`div`,{className:w?e.z:void 0,"aria-label":d||`Значение`,"aria-readonly":`true`,"aria-disabled":m?!0:void 0,children:T}),g?i(`span`,{className:e.a,children:g}):null]})}s.displayName=`DisplayField`;export{s as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/File.module.js";import a from"../styles/Drag.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e){return{name:e.name,size:e.size,type:e.type,lastModified:e.lastModified}}function u(e){return typeof File<`u`&&e instanceof File?l(e):e}function d(e){return e?Array.isArray(e)?e:typeof File<`u`&&e instanceof File||typeof e==`object`&&e&&`name`in e?[e]:[]:[]}function f(e){return e<1024?`${e} Б`:e<1024*1024?`${(e/1024).toFixed(1)} КБ`:`${(e/(1024*1024)).toFixed(1)} МБ`}function p(e,t){if(!t||!t.trim())return!0;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(n.length===0)return!0;let r=e.name.toLowerCase(),i=(e.type||``).toLowerCase();return n.some(e=>{if(e.startsWith(`.`))return r.endsWith(e);if(e.endsWith(`/*`)){let t=e.slice(0,-1);return i.startsWith(t)}return i===e})}function m(e){return`${e.name}:${e.size}`}function h({value:h,form:g,onValue:_,onBlur:v,name:y=``,placeholder:b=`Перетащите файлы сюда или нажмите`,label:x=``,error:S=``,hidden:C=!1,disabled:w=!1,className:T=``,after:E=``,before:D=``,accept:O,multiple:k=!0,maxSize:A,maxFiles:j,keepFile:M=!0,hint:N,append:P=!0,layout:F=`default`,aspectRatio:I,hideList:L=!1,size:R=`m`}){let{value:z}=n(g,y,h),B=d(z),V=!w,H=o.useRef(null),[U,W]=o.useState(``),[G,K]=o.useState(!1),q=o.useRef(0),J=e=>{r(g,y,_)(e,!0)},Y=e=>{if(e.length===0)return;let t=e.filter(e=>!p(e,O));if(t.length>0){W(`Тип файла не подходит: ${t.map(e=>e.name).join(`, `)}`);return}if(A!==void 0){let t=e.find(e=>e.size>A);if(t){W(`Файл «${t.name}» больше ${f(A)}`);return}}let n;if(!k)n=[e[0]];else if(P&&B.length>0){let t=new Set(B.map(e=>m(e))),r=e.filter(e=>!t.has(m(e))),i=B.filter(e=>typeof File<`u`&&e instanceof File);n=M&&i.length===B.length?[...i,...r]:[...e]}else n=e;if(j!==void 0&&n.length>j){W(`Не больше ${j} файлов`);return}W(``);let r=M?k?n:n[0]:k?n.map(l):l(n[0]);J(r),v?.({value:r,name:y})},X=()=>{V&&(J(k?[]:null),H.current&&(H.current.value=``),W(``))},ee=e=>{if(!V)return;if(!k){X();return}let t=B.filter((t,n)=>n!==e);J(M?t:t.map(u)),H.current&&(H.current.value=``)},te=e=>{e.preventDefault(),e.stopPropagation(),V&&(q.current+=1,K(!0))},ne=e=>{e.preventDefault(),e.stopPropagation(),--q.current,q.current<=0&&(q.current=0,K(!1))},re=e=>{e.preventDefault(),e.stopPropagation(),e.dataTransfer&&(e.dataTransfer.dropEffect=V?`copy`:`none`)},ie=e=>{e.preventDefault(),e.stopPropagation(),q.current=0,K(!1),V&&Y(Array.from(e.dataTransfer.files||[]))},Z=B.length===0;if(C&&Z)return null;let ae=S||U,oe=N||b,Q=I==null?void 0:typeof I==`number`?String(I):I,$=!L&&!Z;return c(t,{type:`dragdrop`,label:x,error:ae,size:R,element_blok:{className:[T||``]},element_input:{className:[a.r],props:{"data-disabled":w||!V?`true`:void 0,"data-dragging":G?`true`:void 0,"data-layout":F===`default`?void 0:F,style:Q?{"--field-drag-aspect":Q}:void 0}},children:[D?s(`span`,{className:e.a,children:D}):null,c(`div`,{className:a.i,"data-layout":F===`default`?void 0:F,style:Q?{aspectRatio:Q}:void 0,children:[s(`input`,{ref:H,type:`file`,className:i.p,accept:O,multiple:k,disabled:w||!V,"aria-label":x||b||`Файлы`,onChange:e=>{Y(Array.from(e.target.files||[])),e.target.value=``}}),c(`button`,{type:`button`,className:a.z,disabled:!V,"data-dragging":G?`true`:void 0,"data-layout":F===`default`?void 0:F,onClick:()=>H.current?.click(),onDragEnter:te,onDragLeave:ne,onDragOver:re,onDrop:ie,children:[s(`span`,{className:a.h,children:oe}),O&&F===`default`?s(`span`,{className:a.a,children:O}):null]}),$?s(`ul`,{className:a.l,children:B.map((e,t)=>c(`li`,{className:a.t,children:[c(`div`,{className:a.m,children:[s(`span`,{className:a.n,title:e.name,children:e.name}),s(`span`,{className:a.s,children:f(e.size)})]}),V?s(`button`,{type:`button`,className:a.d,"aria-label":`Удалить ${e.name}`,onClick:()=>ee(t),children:`×`}):null]},`${e.name}-${t}`))}):null,$&&V?s(`button`,{type:`button`,className:a.c,onClick:X,children:`Очистить всё`}):null]}),E?s(`span`,{className:e.a,children:E}):null]})}h.displayName=`DragDropField`;export{h as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/File.module.js";import a from"../styles/Drag.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e){return{name:e.name,size:e.size,type:e.type,lastModified:e.lastModified}}function u(e){return typeof File<`u`&&e instanceof File?l(e):e}function d(e){return e?Array.isArray(e)?e:typeof File<`u`&&e instanceof File||typeof e==`object`&&e&&`name`in e?[e]:[]:[]}function f(e){return e<1024?`${e} Б`:e<1024*1024?`${(e/1024).toFixed(1)} КБ`:`${(e/(1024*1024)).toFixed(1)} МБ`}function p(e,t){if(!t||!t.trim())return!0;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(n.length===0)return!0;let r=e.name.toLowerCase(),i=(e.type||``).toLowerCase();return n.some(e=>{if(e.startsWith(`.`))return r.endsWith(e);if(e.endsWith(`/*`)){let t=e.slice(0,-1);return i.startsWith(t)}return i===e})}function m(e){return`${e.name}:${e.size}`}function h({value:h,form:g,onValue:_,onBlur:v,name:y=``,placeholder:b=`Перетащите файлы сюда или нажмите`,label:x=``,error:S=``,hidden:C=!1,disabled:w=!1,className:T=``,after:E=``,before:D=``,accept:O,multiple:k=!0,maxSize:A,maxFiles:j,keepFile:M=!0,hint:N,append:P=!0,layout:F=`default`,aspectRatio:I,hideList:L=!1,size:R}){let{value:z}=n(g,y,h),B=d(z),V=!w,H=o.useRef(null),[U,W]=o.useState(``),[G,K]=o.useState(!1),q=o.useRef(0),J=e=>{r(g,y,_)(e,!0)},Y=e=>{if(e.length===0)return;let t=e.filter(e=>!p(e,O));if(t.length>0){W(`Тип файла не подходит: ${t.map(e=>e.name).join(`, `)}`);return}if(A!==void 0){let t=e.find(e=>e.size>A);if(t){W(`Файл «${t.name}» больше ${f(A)}`);return}}let n;if(!k)n=[e[0]];else if(P&&B.length>0){let t=new Set(B.map(e=>m(e))),r=e.filter(e=>!t.has(m(e))),i=B.filter(e=>typeof File<`u`&&e instanceof File);n=M&&i.length===B.length?[...i,...r]:[...e]}else n=e;if(j!==void 0&&n.length>j){W(`Не больше ${j} файлов`);return}W(``);let r=M?k?n:n[0]:k?n.map(l):l(n[0]);J(r),v?.({value:r,name:y})},X=()=>{V&&(J(k?[]:null),H.current&&(H.current.value=``),W(``))},ee=e=>{if(!V)return;if(!k){X();return}let t=B.filter((t,n)=>n!==e);J(M?t:t.map(u)),H.current&&(H.current.value=``)},te=e=>{e.preventDefault(),e.stopPropagation(),V&&(q.current+=1,K(!0))},ne=e=>{e.preventDefault(),e.stopPropagation(),--q.current,q.current<=0&&(q.current=0,K(!1))},re=e=>{e.preventDefault(),e.stopPropagation(),e.dataTransfer&&(e.dataTransfer.dropEffect=V?`copy`:`none`)},ie=e=>{e.preventDefault(),e.stopPropagation(),q.current=0,K(!1),V&&Y(Array.from(e.dataTransfer.files||[]))},Z=B.length===0;if(C&&Z)return null;let ae=S||U,oe=N||b,Q=I==null?void 0:typeof I==`number`?String(I):I,$=!L&&!Z;return c(t,{type:`dragdrop`,label:x,error:ae,size:R,element_blok:{className:[T||``]},element_input:{className:[a.r],props:{"data-disabled":w||!V?`true`:void 0,"data-dragging":G?`true`:void 0,"data-layout":F===`default`?void 0:F,style:Q?{"--field-drag-aspect":Q}:void 0}},children:[D?s(`span`,{className:e.a,children:D}):null,c(`div`,{className:a.i,"data-layout":F===`default`?void 0:F,style:Q?{aspectRatio:Q}:void 0,children:[s(`input`,{ref:H,type:`file`,className:i.p,accept:O,multiple:k,disabled:w||!V,"aria-label":x||b||`Файлы`,onChange:e=>{Y(Array.from(e.target.files||[])),e.target.value=``}}),c(`button`,{type:`button`,className:a.z,disabled:!V,"data-dragging":G?`true`:void 0,"data-layout":F===`default`?void 0:F,onClick:()=>H.current?.click(),onDragEnter:te,onDragLeave:ne,onDragOver:re,onDrop:ie,children:[s(`span`,{className:a.h,children:oe}),O&&F===`default`?s(`span`,{className:a.a,children:O}):null]}),$?s(`ul`,{className:a.l,children:B.map((e,t)=>c(`li`,{className:a.t,children:[c(`div`,{className:a.m,children:[s(`span`,{className:a.n,title:e.name,children:e.name}),s(`span`,{className:a.s,children:f(e.size)})]}),V?s(`button`,{type:`button`,className:a.d,"aria-label":`Удалить ${e.name}`,onClick:()=>ee(t),children:`×`}):null]},`${e.name}-${t}`))}):null,$&&V?s(`button`,{type:`button`,className:a.c,onClick:X,children:`Очистить всё`}):null]}),E?s(`span`,{className:e.a,children:E}):null]})}h.displayName=`DragDropField`;export{h as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/File.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e){return{name:e.name,size:e.size,type:e.type,lastModified:e.lastModified}}function l(e){return e?Array.isArray(e)?e:typeof File<`u`&&e instanceof File||typeof e==`object`&&e&&`name`in e?[e]:[]:[]}function u(e){return e<1024?`${e} Б`:e<1024*1024?`${(e/1024).toFixed(1)} КБ`:`${(e/(1024*1024)).toFixed(1)} МБ`}function d({value:d,form:f,onValue:p,onBlur:m,name:h=``,placeholder:g=`Выберите файл`,label:_=``,error:v=``,hidden:y=!1,disabled:b=!1,className:x=``,after:S=``,before:C=``,accept:w,multiple:T=!1,maxSize:E,keepFile:D=!0,size:O=`m`}){let{value:k}=n(f,h,d),A=l(k),j=!b,M=a.useRef(null),[N,P]=a.useState(``),F=e=>{r(f,h,p)(e,!0)},I=e=>{if(!e||e.length===0)return;let t=Array.from(e);if(E!==void 0){let e=t.find(e=>e.size>E);if(e){P(`Файл «${e.name}» больше ${u(E)}`);return}}P(``);let n=D?T?t:t[0]:T?t.map(c):c(t[0]);F(n),m?.({value:n,name:h})},L=()=>{j&&(F(T?[]:null),M.current&&(M.current.value=``),P(``))},R=A.length===0;return y&&R?null:s(t,{type:`file`,label:_,error:v||N,size:O,element_blok:{className:[x||``]},element_input:{className:[i.r],props:{"data-disabled":b||!j?`true`:void 0}},children:[C?o(`span`,{className:e.a,children:C}):null,s(`div`,{className:i.n,children:[o(`input`,{ref:M,type:`file`,className:i.p,accept:w,multiple:T,disabled:b||!j,"aria-label":_||g||`Файл`,onChange:e=>I(e.target.files)}),o(`button`,{type:`button`,className:i.b,disabled:!j,onClick:()=>M.current?.click(),children:g}),o(`div`,{className:i.l,children:R?o(`span`,{className:i.e,children:`Нет файла`}):A.map((e,t)=>s(`span`,{className:i.t,children:[o(`span`,{className:i.m,children:e.name}),o(`span`,{className:i.z,children:u(e.size)})]},`${e.name}-${t}`))}),!R&&j?o(`button`,{type:`button`,className:i.c,"aria-label":`Очистить`,onClick:L,children:`×`}):null]}),S?o(`span`,{className:e.a,children:S}):null]})}d.displayName=`FileField`;export{d as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/File.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e){return{name:e.name,size:e.size,type:e.type,lastModified:e.lastModified}}function l(e){return e?Array.isArray(e)?e:typeof File<`u`&&e instanceof File||typeof e==`object`&&e&&`name`in e?[e]:[]:[]}function u(e){return e<1024?`${e} Б`:e<1024*1024?`${(e/1024).toFixed(1)} КБ`:`${(e/(1024*1024)).toFixed(1)} МБ`}function d({value:d,form:f,onValue:p,onBlur:m,name:h=``,placeholder:g=`Выберите файл`,label:_=``,error:v=``,hidden:y=!1,disabled:b=!1,className:x=``,after:S=``,before:C=``,accept:w,multiple:T=!1,maxSize:E,keepFile:D=!0,size:O}){let{value:k}=n(f,h,d),A=l(k),j=!b,M=a.useRef(null),[N,P]=a.useState(``),F=e=>{r(f,h,p)(e,!0)},I=e=>{if(!e||e.length===0)return;let t=Array.from(e);if(E!==void 0){let e=t.find(e=>e.size>E);if(e){P(`Файл «${e.name}» больше ${u(E)}`);return}}P(``);let n=D?T?t:t[0]:T?t.map(c):c(t[0]);F(n),m?.({value:n,name:h})},L=()=>{j&&(F(T?[]:null),M.current&&(M.current.value=``),P(``))},R=A.length===0;return y&&R?null:s(t,{type:`file`,label:_,error:v||N,size:O,element_blok:{className:[x||``]},element_input:{className:[i.r],props:{"data-disabled":b||!j?`true`:void 0}},children:[C?o(`span`,{className:e.a,children:C}):null,s(`div`,{className:i.n,children:[o(`input`,{ref:M,type:`file`,className:i.p,accept:w,multiple:T,disabled:b||!j,"aria-label":_||g||`Файл`,onChange:e=>I(e.target.files)}),o(`button`,{type:`button`,className:i.b,disabled:!j,onClick:()=>M.current?.click(),children:g}),o(`div`,{className:i.l,children:R?o(`span`,{className:i.e,children:`Нет файла`}):A.map((e,t)=>s(`span`,{className:i.t,children:[o(`span`,{className:i.m,children:e.name}),o(`span`,{className:i.z,children:u(e.size)})]},`${e.name}-${t}`))}),!R&&j?o(`button`,{type:`button`,className:i.c,"aria-label":`Очистить`,onClick:L,children:`×`}):null]}),S?o(`span`,{className:e.a,children:S}):null]})}d.displayName=`FileField`;export{d as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import c from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({value:n,form:d,onValue:m,name:h=``,placeholder:g=``,label:_=``,hidden:v=!1,disabled:y=!1,onBlur:b,className:x=``,after:S=``,before:C=``,error:w=``,inputmode:T=`text`,maxLength:E,spellCheck:D=!0,native:O=!1,autoComplete:k,inputType:A=`text`,id:j,size:M=`m`}){let{value:N,version:P}=r(d,h,n),F=!y,I=typeof N==`string`||typeof N==`number`?String(N):``,L=c.useRef(null),R=c.useRef(null),z=c.useRef(!1);c.useLayoutEffect(()=>{if(O)return;let e=R.current;e&&e.textContent!==I&&(e.textContent=I)},[O,I,P]),c.useEffect(()=>{if(!O)return;let e=L.current;e&&e.value!==I&&(e.value=I)},[O,I]);let B=i(d,h,m),V=e=>{let t=e.target;B((t.textContent||``).trim())},H=e=>{B(e.target.value)},U=e=>{let t=e.target;E&&(t.textContent||``).trim().length>=E&&e.key!==`Backspace`&&e.preventDefault(),e.key===`Enter`&&e.preventDefault()},W=e=>{e.key===`Enter`&&e.preventDefault()},G=e=>a.Paste(E||0,o(e));if(v&&s(N))return``;let K=e=>{a.Blur(e),b?.({value:(e.target.textContent||``).trim(),name:h}),z.current=!1},q=e=>{b?.({value:(e.target.value||``).trim(),name:h})},J=e=>{z.current=!0,a.Focus({target:e.currentTarget})},Y={};return g&&(Y.placeholder=g),F&&(Y.edit=``),O?u(t,{type:`input`,label:_,error:w,id:j,size:M,element_blok:{className:[x||``]},element_input:{className:[e.w],props:{"data-disabled":y||!F?`true`:void 0}},children:[C?l(`span`,{className:e.a,children:C}):null,l(f,{inputRef:L,name:h,displayString:I,placeholder:g,maxLength:E,spellCheck:D,disabled:y,editable:F,autoComplete:k,inputType:A,inputmode:T,label:_,onChangeNative:H,handleBlurNative:q,onKeyDownNative:W}),S?l(`span`,{className:e.a,children:S}):null]}):u(t,{type:`input`,label:_,error:w,id:j,size:M,element_blok:{className:[x]},element_input:{className:[e.w],props:{"data-disabled":y||!F?`true`:void 0}},children:[C?l(`span`,{className:e.a,children:C}):null,l(p,{ceRef:R,editable:F,label:_,placeholder:g,spellCheck:D,inputmode:T,dd:Y,onBlur:K,onFocus:J,onPaste:G,onInput:V,onKeyDown:U}),S?l(`span`,{className:e.a,children:S}):null]})}function f({inputRef:t,name:r,displayString:i,placeholder:a,maxLength:o,spellCheck:s,disabled:c,editable:u,autoComplete:d,inputType:f,inputmode:p,label:m,onChangeNative:h,handleBlurNative:g,onKeyDownNative:_}){let v=n();return l(`div`,{className:e.x,children:l(`input`,{id:v?.controlId,ref:t,className:e.y,type:f,name:r||void 0,defaultValue:i,placeholder:a,maxLength:o,spellCheck:s,disabled:c,readOnly:c,autoComplete:d,inputMode:p||`text`,"aria-label":m?void 0:a||`Текст`,"aria-describedby":v?.describedBy,"aria-invalid":v?.errorId?!0:void 0,"aria-disabled":c||!u?!0:void 0,tabIndex:c?-1:0,onChange:h,onBlur:g,onKeyDown:_})})}function p({ceRef:e,editable:t,label:r,placeholder:i,spellCheck:a,inputmode:o,dd:s,onBlur:c,onFocus:u,onPaste:d,onInput:f,onKeyDown:p}){let m=n();return l(`div`,{ref:e,id:m?.controlId,role:`textbox`,"aria-multiline":`false`,"aria-label":r?void 0:i||`Текст`,"aria-describedby":m?.describedBy,"aria-invalid":m?.errorId?!0:void 0,"aria-disabled":!t,tabIndex:t?0:-1,onBlur:c,onFocus:u,onPaste:d,onInput:f,onKeyDown:p,spellCheck:a,inputMode:o||`text`,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...s})}var m=c.memo(d);export{m as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import c from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({value:n,form:d,onValue:m,name:h=``,placeholder:g=``,label:_=``,hidden:v=!1,disabled:y=!1,onBlur:b,className:x=``,after:S=``,before:C=``,error:w=``,inputmode:T=`text`,maxLength:E,spellCheck:D=!0,native:O=!1,autoComplete:k,inputType:A=`text`,id:j,size:M}){let{value:N,version:P}=r(d,h,n),F=!y,I=typeof N==`string`||typeof N==`number`?String(N):``,L=c.useRef(null),R=c.useRef(null),z=c.useRef(!1);c.useLayoutEffect(()=>{if(O)return;let e=R.current;e&&e.textContent!==I&&(e.textContent=I)},[O,I,P]),c.useEffect(()=>{if(!O)return;let e=L.current;e&&e.value!==I&&(e.value=I)},[O,I]);let B=i(d,h,m),V=e=>{let t=e.target;B((t.textContent||``).trim())},H=e=>{B(e.target.value)},U=e=>{let t=e.target;E&&(t.textContent||``).trim().length>=E&&e.key!==`Backspace`&&e.preventDefault(),e.key===`Enter`&&e.preventDefault()},W=e=>{e.key===`Enter`&&e.preventDefault()},G=e=>a.Paste(E||0,o(e));if(v&&s(N))return``;let K=e=>{a.Blur(e),b?.({value:(e.target.textContent||``).trim(),name:h}),z.current=!1},q=e=>{b?.({value:(e.target.value||``).trim(),name:h})},J=e=>{z.current=!0,a.Focus({target:e.currentTarget})},Y={};return g&&(Y.placeholder=g),F&&(Y.edit=``),O?u(t,{type:`input`,label:_,error:w,id:j,size:M,element_blok:{className:[x||``]},element_input:{className:[e.w],props:{"data-disabled":y||!F?`true`:void 0}},children:[C?l(`span`,{className:e.a,children:C}):null,l(f,{inputRef:L,name:h,displayString:I,placeholder:g,maxLength:E,spellCheck:D,disabled:y,editable:F,autoComplete:k,inputType:A,inputmode:T,label:_,onChangeNative:H,handleBlurNative:q,onKeyDownNative:W}),S?l(`span`,{className:e.a,children:S}):null]}):u(t,{type:`input`,label:_,error:w,id:j,size:M,element_blok:{className:[x]},element_input:{className:[e.w],props:{"data-disabled":y||!F?`true`:void 0}},children:[C?l(`span`,{className:e.a,children:C}):null,l(p,{ceRef:R,editable:F,label:_,placeholder:g,spellCheck:D,inputmode:T,dd:Y,onBlur:K,onFocus:J,onPaste:G,onInput:V,onKeyDown:U}),S?l(`span`,{className:e.a,children:S}):null]})}function f({inputRef:t,name:r,displayString:i,placeholder:a,maxLength:o,spellCheck:s,disabled:c,editable:u,autoComplete:d,inputType:f,inputmode:p,label:m,onChangeNative:h,handleBlurNative:g,onKeyDownNative:_}){let v=n();return l(`div`,{className:e.x,children:l(`input`,{id:v?.controlId,ref:t,className:e.y,type:f,name:r||void 0,defaultValue:i,placeholder:a,maxLength:o,spellCheck:s,disabled:c,readOnly:c,autoComplete:d,inputMode:p||`text`,"aria-label":m?void 0:a||`Текст`,"aria-describedby":v?.describedBy,"aria-invalid":v?.errorId?!0:void 0,"aria-disabled":c||!u?!0:void 0,tabIndex:c?-1:0,onChange:h,onBlur:g,onKeyDown:_})})}function p({ceRef:e,editable:t,label:r,placeholder:i,spellCheck:a,inputmode:o,dd:s,onBlur:c,onFocus:u,onPaste:d,onInput:f,onKeyDown:p}){let m=n();return l(`div`,{ref:e,id:m?.controlId,role:`textbox`,"aria-multiline":`false`,"aria-label":r?void 0:i||`Текст`,"aria-describedby":m?.describedBy,"aria-invalid":m?.errorId?!0:void 0,"aria-disabled":!t,tabIndex:t?0:-1,onBlur:c,onFocus:u,onPaste:d,onInput:f,onKeyDown:p,spellCheck:a,inputMode:o||`text`,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...s})}var m=c.memo(d);export{m as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i,{asEditableClipboard as a}from"../events/onEvent.js";import{isEmptyTextLike as o}from"./visibility.js";import s from"react";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";function d(e){let t=window.getSelection();if(!t||t.rangeCount===0)return 0;let n=t.getRangeAt(0);if(!e.contains(n.startContainer))return 0;let r=document.createRange();return r.selectNodeContents(e),r.setEnd(n.startContainer,n.startOffset),r.toString().length}function f(e,t){if(t<=0)return 0;let n=0;for(let r=0;r<e.length;r++)if(/\d/.test(e[r])&&(n++,n===t))return r+1;return e.length}function p({value:p=``,form:m,onValue:h,onBlur:g,name:_=``,format:v=`+_(___) ___-__-__`,placeholder:y=``,label:b=``,error:x=``,hidden:S=!1,disabled:C=!1,className:w=``,after:T=``,before:E=``,inputmode:D=`numeric`,view:O,size:k=`m`}){let A=!C,{value:j,version:M}=n(m,_,p),N=s.useRef(null),P=s.useRef(!1),F=v,I=!0,L=0,R=(e,t)=>{let n=t.firstChild;if(!n||n.nodeType!==Node.TEXT_NODE)return;let r=n.textContent?.length??0,i=Math.max(0,Math.min(e,r)),a=document.createRange(),o=window.getSelection();o&&(a.setStart(n,i),a.collapse(!0),o.removeAllRanges(),o.addRange(a),t.focus())},z=e=>i.PasteOne(a(e)),B=e=>{F=v,I=!0,L=0;let t=0,n=``,r=e.replace(/\D/g,``);r===``&&(I=!0);let i=r.split(``),a=``;i.forEach(e=>{I&&(a+=e,I&&(L=(``+a).length,F=v.replace(RegExp(`[0-9]`,`g`),`_`),n=``),L>(``+a).length&&(I=!0,F=v.replace(RegExp(`[0-9]`,`g`),`_`),n=``))});let o=F.replace(/\D/g,``);return o.length>=r.length&&(r=o),{q:F.replace(/[_\d]/g,function(){return r.charAt(t++)||`_`}),i:t,v:r,f:n}};s.useLayoutEffect(()=>{if(P.current)return;let e=N.current;if(!e)return;let t=B(String(j||``));e.textContent!==t.q&&(e.textContent=t.q)},[j,M,v]),B(String(j||``));let V=r(m,_,h),H=e=>{let t=e.target,n=t.textContent||``,r=d(t),i=n.slice(0,r).replace(/\D/g,``).length,a=B(n);t.textContent=a.q;let o=f(a.q,i);a.q.length>0&&queueMicrotask(()=>{R(Math.min(o,a.q.length),t)}),V(a.q.replace(/\D/g,``))},U=e=>{e.key===`Enter`&&e.preventDefault()},W=e=>{i.Blur(e),g&&g({value:(e.target.textContent??``).replace(/\D/g,``),name:_}),P.current=!1},G=e=>{P.current=!0,i.Focus({target:e.currentTarget})},K={};y&&(K.placeholder=y),K.inputMode=D??`numeric`;let q=String(j??``).replace(/\D/g,``);return S&&o(q)?l(c,{}):u(t,{type:`input`,label:b,error:x,size:k,element_blok:{className:[w]},element_input:{className:[e.w],props:{"data-disabled":C||!A?`true`:void 0}},children:[E?l(`span`,{className:e.a,children:E}):null,l(`div`,{ref:N,onPaste:z,onInput:H,onKeyDown:U,onBlur:W,onFocus:G,role:`textbox`,spellCheck:!1,"aria-label":b||y||_||`Маска`,"aria-disabled":!A,tabIndex:C?-1:0,"data-disabled":A?void 0:`true`,contentEditable:A?`plaintext-only`:!1,suppressContentEditableWarning:!0,...K}),T?l(`span`,{className:e.a,children:T}):null]})}p.displayName=`MaskField`;export{p as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i,{asEditableClipboard as a}from"../events/onEvent.js";import{isEmptyTextLike as o}from"./visibility.js";import s from"react";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";function d(e){let t=window.getSelection();if(!t||t.rangeCount===0)return 0;let n=t.getRangeAt(0);if(!e.contains(n.startContainer))return 0;let r=document.createRange();return r.selectNodeContents(e),r.setEnd(n.startContainer,n.startOffset),r.toString().length}function f(e,t){if(t<=0)return 0;let n=0;for(let r=0;r<e.length;r++)if(/\d/.test(e[r])&&(n++,n===t))return r+1;return e.length}function p({value:p=``,form:m,onValue:h,onBlur:g,name:_=``,format:v=`+_(___) ___-__-__`,placeholder:y=``,label:b=``,error:x=``,hidden:S=!1,disabled:C=!1,className:w=``,after:T=``,before:E=``,inputmode:D=`numeric`,view:O,size:k}){let A=!C,{value:j,version:M}=n(m,_,p),N=s.useRef(null),P=s.useRef(!1),F=v,I=!0,L=0,R=(e,t)=>{let n=t.firstChild;if(!n||n.nodeType!==Node.TEXT_NODE)return;let r=n.textContent?.length??0,i=Math.max(0,Math.min(e,r)),a=document.createRange(),o=window.getSelection();o&&(a.setStart(n,i),a.collapse(!0),o.removeAllRanges(),o.addRange(a),t.focus())},z=e=>i.PasteOne(a(e)),B=e=>{F=v,I=!0,L=0;let t=0,n=``,r=e.replace(/\D/g,``);r===``&&(I=!0);let i=r.split(``),a=``;i.forEach(e=>{I&&(a+=e,I&&(L=(``+a).length,F=v.replace(RegExp(`[0-9]`,`g`),`_`),n=``),L>(``+a).length&&(I=!0,F=v.replace(RegExp(`[0-9]`,`g`),`_`),n=``))});let o=F.replace(/\D/g,``);return o.length>=r.length&&(r=o),{q:F.replace(/[_\d]/g,function(){return r.charAt(t++)||`_`}),i:t,v:r,f:n}};s.useLayoutEffect(()=>{if(P.current)return;let e=N.current;if(!e)return;let t=B(String(j||``));e.textContent!==t.q&&(e.textContent=t.q)},[j,M,v]),B(String(j||``));let V=r(m,_,h),H=e=>{let t=e.target,n=t.textContent||``,r=d(t),i=n.slice(0,r).replace(/\D/g,``).length,a=B(n);t.textContent=a.q;let o=f(a.q,i);a.q.length>0&&queueMicrotask(()=>{R(Math.min(o,a.q.length),t)}),V(a.q.replace(/\D/g,``))},U=e=>{e.key===`Enter`&&e.preventDefault()},W=e=>{i.Blur(e),g&&g({value:(e.target.textContent??``).replace(/\D/g,``),name:_}),P.current=!1},G=e=>{P.current=!0,i.Focus({target:e.currentTarget})},K={};y&&(K.placeholder=y),K.inputMode=D??`numeric`;let q=String(j??``).replace(/\D/g,``);return S&&o(q)?l(c,{}):u(t,{type:`input`,label:b,error:x,size:k,element_blok:{className:[w]},element_input:{className:[e.w],props:{"data-disabled":C||!A?`true`:void 0}},children:[E?l(`span`,{className:e.a,children:E}):null,l(`div`,{ref:N,onPaste:z,onInput:H,onKeyDown:U,onBlur:W,onFocus:G,role:`textbox`,spellCheck:!1,"aria-label":b||y||_||`Маска`,"aria-disabled":!A,tabIndex:C?-1:0,"data-disabled":A?void 0:`true`,contentEditable:A?`plaintext-only`:!1,suppressContentEditableWarning:!0,...K}),T?l(`span`,{className:e.a,children:T}):null]})}p.displayName=`MaskField`;export{p as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import{useFormInit as a}from"../FormInitContext.js";import"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function l({value:l,form:u,onValue:d,name:f,placeholder:p=``,label:m,error:h,hidden:g=!1,disabled:_=!1,after:v,before:y,view:b,modal:x,options:S,className:C,size:w=`m`}){let{onModal:T}=a(),{value:E}=n(u,f,l),D=E,O=e=>e?Array.isArray(e)?e[1]||``:e:``,k=e=>{if(Array.isArray(e)&&e.length>=2)return[e[0],String(e[1]??``)];if(typeof e==`object`&&e){let t=e;if(t.id!==void 0&&t.name!==void 0)return[t.id,t.name]}return String(e??``)},A=e=>{r(u,f,d)(k(e),!0)},j=()=>{if(_||!x)return;let e=x.split(`.`);if(e.length<2)return;let t=Array.isArray(D)?D[0]:D;T({module:e[0],modalName:e[1],callback:A,onValue:A,options:S,fieldName:f,value:t})},M={};p&&(M.placeholder=p);let N=i(O(D));return g&&N?s(o,{}):c(t,{type:`input`,label:m,size:w,element_blok:{className:[C||``]},error:h,element_input:{className:[e.w],props:{onClick:j,"data-disabled":_?`true`:void 0}},children:[y?s(`span`,{className:e.a,children:y}):null,s(`div`,{...M,children:O(D)}),v?s(`span`,{className:e.a,children:v}):null]})}l.displayName=`ModalField`;export{l as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import{useFormInit as a}from"../FormInitContext.js";import"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function l({value:l,form:u,onValue:d,name:f,placeholder:p=``,label:m,error:h,hidden:g=!1,disabled:_=!1,after:v,before:y,view:b,modal:x,options:S,className:C,size:w}){let{onModal:T}=a(),{value:E}=n(u,f,l),D=E,O=e=>e?Array.isArray(e)?e[1]||``:e:``,k=e=>{if(Array.isArray(e)&&e.length>=2)return[e[0],String(e[1]??``)];if(typeof e==`object`&&e){let t=e;if(t.id!==void 0&&t.name!==void 0)return[t.id,t.name]}return String(e??``)},A=e=>{r(u,f,d)(k(e),!0)},j=()=>{if(_||!x)return;let e=x.split(`.`);if(e.length<2)return;let t=Array.isArray(D)?D[0]:D;T({module:e[0],modalName:e[1],callback:A,onValue:A,options:S,fieldName:f,value:t})},M={};p&&(M.placeholder=p);let N=i(O(D));return g&&N?s(o,{}):c(t,{type:`input`,label:m,size:w,element_blok:{className:[C||``]},error:h,element_input:{className:[e.w],props:{onClick:j,"data-disabled":_?`true`:void 0}},children:[y?s(`span`,{className:e.a,children:y}):null,s(`div`,{...M,children:O(D)}),v?s(`span`,{className:e.a,children:v}):null]})}l.displayName=`ModalField`;export{l as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i,{pastePlainTextIntoSelection as a}from"../events/onEvent.js";import{isEmptyTextLike as o}from"./visibility.js";import s from"react";import{jsx as c,jsxs as l}from"react/jsx-runtime";function u(e){let t=window.getSelection();if(!t||t.rangeCount===0)return 0;let n=t.getRangeAt(0);if(!e.contains(n.startContainer))return 0;let r=document.createRange();return r.selectNodeContents(e),r.setEnd(n.startContainer,n.startOffset),r.toString().length}function d(e,t,n){let r=Math.max(0,Math.min(t,e.length));return n(e.slice(0,r)).length}function f({value:f,form:m,onValue:h,name:g=``,placeholder:_=``,label:v=``,error:y=``,hidden:b=!1,disabled:x=!1,onBlur:S,className:C=``,after:w=``,before:T=``,inputmode:E=`decimal`,course:D=100,view:O,type:k,isClear:A=!1,size:j=`m`}){let{value:M,version:N}=n(m,g||``,f),P=m&&g?M:f,F=s.useRef(null),I=s.useRef(!1);s.useLayoutEffect(()=>{if(I.current)return;let e=F.current;if(!e)return;let t=P!=null&&(typeof P==`number`?!0:!o(String(P))),n=!_||t?p(P??``,D):``;e.textContent!==n&&(e.textContent=n)},[P,N,_,D]);let L=e=>k===`multi`?e.replace(/[^+\d.+-]/g,``):e.replace(/[^+\d.]/g,``),R=(e,t)=>{let n=t.firstChild;if(!n||n.nodeType!==Node.TEXT_NODE)return;let r=n.textContent?.length??0,i=Math.max(0,Math.min(e,r)),a=document.createRange(),o=window.getSelection();o&&(a.setStart(n,i),a.collapse(!0),o.removeAllRanges(),o.addRange(a),t.focus())},z=r(m,g,h),B=e=>{let t=e.target,n=t.textContent||``,r=u(t),i=L(n),a=d(n,r,L);z(Number(i||0)*D),t.textContent=i,i.length>0&&queueMicrotask(()=>{R(Math.min(a,i.length),t)})},V=e=>{let t=e.target;i.Blur(e),(t.textContent||``)===``&&(t.textContent=`0`);let n=Number(L(t.textContent||``))*D;z(n,!0),S?.({value:n,name:g}),t.textContent=p(L(t.textContent||``).trim()||`0`),I.current=!1},H=e=>{I.current=!0;let t=e.target;t.textContent=L(t.textContent||``),i.Focus({target:e.currentTarget})},U=e=>{let t=e.currentTarget.previousElementSibling;t&&(t.textContent=``),z(0,!0)},W=e=>{e.key===`Enter`&&e.preventDefault()},G=e=>{e.preventDefault(),a(L(e.clipboardData?.getData(`text/plain`)??``),e.currentTarget)},K=!x,q=P==null||(typeof P==`number`?!1:o(String(P??``)));if(b&&q)return``;let J={};return J.inputMode=E??`decimal`,_&&(J.placeholder=_),K&&(J.edit=``),l(t,{type:`input`,label:v,error:y,size:j,element_blok:{className:[C]},element_input:{className:[e.w],props:{"data-disabled":x||!K?`true`:void 0}},children:[T?c(`span`,{className:e.a,children:T}):null,c(`div`,{ref:F,...J,onInput:B,onPaste:G,onBlur:V,onKeyDown:W,onFocus:H,role:`textbox`,spellCheck:!1,"aria-label":v||_||`Сумма`,"aria-disabled":!K,tabIndex:x?-1:0,contentEditable:K?`plaintext-only`:!1,suppressContentEditableWarning:!0}),A&&c(`button`,{type:`button`,onClick:U,"aria-label":`Очистить поле`,children:`x`}),w?c(`span`,{className:e.a,children:w}):null]})}f.displayName=`MoneyField`;function p(e,t){let n;if(typeof e==`string`){let t=e.replace(/\s/g,``).replace(`,`,`.`);n=parseFloat(t===``?`0`:t)}else n=Number(e??0);return Number.isNaN(n)&&(n=0),t!=null&&t>0&&(n/=t),n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g,`$1 `)}export{f as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i,{pastePlainTextIntoSelection as a}from"../events/onEvent.js";import{isEmptyTextLike as o}from"./visibility.js";import s from"react";import{jsx as c,jsxs as l}from"react/jsx-runtime";function u(e){let t=window.getSelection();if(!t||t.rangeCount===0)return 0;let n=t.getRangeAt(0);if(!e.contains(n.startContainer))return 0;let r=document.createRange();return r.selectNodeContents(e),r.setEnd(n.startContainer,n.startOffset),r.toString().length}function d(e,t,n){let r=Math.max(0,Math.min(t,e.length));return n(e.slice(0,r)).length}function f({value:f,form:m,onValue:h,name:g=``,placeholder:_=``,label:v=``,error:y=``,hidden:b=!1,disabled:x=!1,onBlur:S,className:C=``,after:w=``,before:T=``,inputmode:E=`decimal`,course:D=100,view:O,type:k,isClear:A=!1,size:j}){let{value:M,version:N}=n(m,g||``,f),P=m&&g?M:f,F=s.useRef(null),I=s.useRef(!1);s.useLayoutEffect(()=>{if(I.current)return;let e=F.current;if(!e)return;let t=P!=null&&(typeof P==`number`?!0:!o(String(P))),n=!_||t?p(P??``,D):``;e.textContent!==n&&(e.textContent=n)},[P,N,_,D]);let L=e=>k===`multi`?e.replace(/[^+\d.+-]/g,``):e.replace(/[^+\d.]/g,``),R=(e,t)=>{let n=t.firstChild;if(!n||n.nodeType!==Node.TEXT_NODE)return;let r=n.textContent?.length??0,i=Math.max(0,Math.min(e,r)),a=document.createRange(),o=window.getSelection();o&&(a.setStart(n,i),a.collapse(!0),o.removeAllRanges(),o.addRange(a),t.focus())},z=r(m,g,h),B=e=>{let t=e.target,n=t.textContent||``,r=u(t),i=L(n),a=d(n,r,L);z(Number(i||0)*D),t.textContent=i,i.length>0&&queueMicrotask(()=>{R(Math.min(a,i.length),t)})},V=e=>{let t=e.target;i.Blur(e),(t.textContent||``)===``&&(t.textContent=`0`);let n=Number(L(t.textContent||``))*D;z(n,!0),S?.({value:n,name:g}),t.textContent=p(L(t.textContent||``).trim()||`0`),I.current=!1},H=e=>{I.current=!0;let t=e.target;t.textContent=L(t.textContent||``),i.Focus({target:e.currentTarget})},U=e=>{let t=e.currentTarget.previousElementSibling;t&&(t.textContent=``),z(0,!0)},W=e=>{e.key===`Enter`&&e.preventDefault()},G=e=>{e.preventDefault(),a(L(e.clipboardData?.getData(`text/plain`)??``),e.currentTarget)},K=!x,q=P==null||(typeof P==`number`?!1:o(String(P??``)));if(b&&q)return``;let J={};return J.inputMode=E??`decimal`,_&&(J.placeholder=_),K&&(J.edit=``),l(t,{type:`input`,label:v,error:y,size:j,element_blok:{className:[C]},element_input:{className:[e.w],props:{"data-disabled":x||!K?`true`:void 0}},children:[T?c(`span`,{className:e.a,children:T}):null,c(`div`,{ref:F,...J,onInput:B,onPaste:G,onBlur:V,onKeyDown:W,onFocus:H,role:`textbox`,spellCheck:!1,"aria-label":v||_||`Сумма`,"aria-disabled":!K,tabIndex:x?-1:0,contentEditable:K?`plaintext-only`:!1,suppressContentEditableWarning:!0}),A&&c(`button`,{type:`button`,onClick:U,"aria-label":`Очистить поле`,children:`x`}),w?c(`span`,{className:e.a,children:w}):null]})}f.displayName=`MoneyField`;function p(e,t){let n;if(typeof e==`string`){let t=e.replace(/\s/g,``).replace(`,`,`.`);n=parseFloat(t===``?`0`:t)}else n=Number(e??0);return Number.isNaN(n)&&(n=0),t!=null&&t>0&&(n/=t),n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g,`$1 `)}export{f as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import{isEmptyTextLike as a}from"./visibility.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({value:n=``,form:l,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,maxLength:S,autoComplete:C,inputmode:w,id:T,size:E=`m`,fieldType:D,inputType:O,defaultAriaLabel:k}){let{value:A,version:j}=r(l,p,n),M=!v,N=typeof A==`string`||typeof A==`number`?String(A):``,P=o.useRef(null),F=i(l,p,d);return o.useEffect(()=>{let e=P.current;!e||e.value===N||(e.value=N)},[N,j]),_&&a(A)?null:c(t,{type:D,label:h,error:g,id:T,size:E,element_blok:{className:[y||``]},element_input:{className:[e.w],props:{"data-disabled":v||!M?`true`:void 0}},children:[x?s(`span`,{className:e.a,children:x}):null,s(u,{inputRef:P,name:p,display:N,placeholder:m,maxLength:S,disabled:v,editable:M,autoComplete:C,inputMode:w,inputType:O,label:h,defaultAriaLabel:k,emit:F,onBlurField:f}),b?s(`span`,{className:e.a,children:b}):null]})}function u({inputRef:t,name:r,display:i,placeholder:a,maxLength:o,disabled:c,editable:l,autoComplete:u,inputMode:d,inputType:f,label:p,defaultAriaLabel:m,emit:h,onBlurField:g}){let _=n();return s(`div`,{className:e.x,children:s(`input`,{id:_?.controlId,ref:t,className:e.y,type:f,name:r||void 0,defaultValue:i,placeholder:a,maxLength:o,disabled:c,readOnly:!l,autoComplete:u,inputMode:d,spellCheck:!1,"aria-label":p?void 0:a||m,"aria-describedby":_?.describedBy,"aria-invalid":_?.errorId?!0:void 0,onChange:e=>h(e.target.value),onBlur:e=>{let t=(e.target.value||``).trim();h(t,!0),g?.({value:t,name:r})},onKeyDown:e=>{e.key===`Enter`&&e.preventDefault()}})})}export{l as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import{isEmptyTextLike as a}from"./visibility.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({value:n=``,form:l,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,maxLength:S,autoComplete:C,inputmode:w,id:T,size:E,fieldType:D,inputType:O,defaultAriaLabel:k}){let{value:A,version:j}=r(l,p,n),M=!v,N=typeof A==`string`||typeof A==`number`?String(A):``,P=o.useRef(null),F=i(l,p,d);return o.useEffect(()=>{let e=P.current;!e||e.value===N||(e.value=N)},[N,j]),_&&a(A)?null:c(t,{type:D,label:h,error:g,id:T,size:E,element_blok:{className:[y||``]},element_input:{className:[e.w],props:{"data-disabled":v||!M?`true`:void 0}},children:[x?s(`span`,{className:e.a,children:x}):null,s(u,{inputRef:P,name:p,display:N,placeholder:m,maxLength:S,disabled:v,editable:M,autoComplete:C,inputMode:w,inputType:O,label:h,defaultAriaLabel:k,emit:F,onBlurField:f}),b?s(`span`,{className:e.a,children:b}):null]})}function u({inputRef:t,name:r,display:i,placeholder:a,maxLength:o,disabled:c,editable:l,autoComplete:u,inputMode:d,inputType:f,label:p,defaultAriaLabel:m,emit:h,onBlurField:g}){let _=n();return s(`div`,{className:e.x,children:s(`input`,{id:_?.controlId,ref:t,className:e.y,type:f,name:r||void 0,defaultValue:i,placeholder:a,maxLength:o,disabled:c,readOnly:!l,autoComplete:u,inputMode:d,spellCheck:!1,"aria-label":p?void 0:a||m,"aria-describedby":_?.describedBy,"aria-invalid":_?.errorId?!0:void 0,onChange:e=>h(e.target.value),onBlur:e=>{let t=(e.target.value||``).trim();h(t,!0),g?.({value:t,name:r})},onKeyDown:e=>{e.key===`Enter`&&e.preventDefault()}})})}export{l as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import c from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({value:n,form:d,onValue:p,name:m=``,placeholder:h=``,label:g=``,hidden:_=!1,disabled:v=!1,onBlur:y,className:b=``,after:x=``,before:S=``,error:C=``,size:w=`m`,inputmode:T=`numeric`,maxLength:E,max:D,view:O}){let k=!v,{value:A,version:j}=r(d,m,n);h=h===void 0?``:h,D=D===void 0?99:D;let M=A!=null&&A!==``?String(A):``,N=c.useRef(null),P=c.useRef(!1);c.useLayoutEffect(()=>{if(P.current)return;let e=N.current;e&&e.textContent!==M&&(e.textContent=M)},[M,j]);let F=E??D,I=(e,t)=>{e.textContent!==t&&(e.textContent=t,queueMicrotask(()=>{let n=e.firstChild;if(n&&n.nodeType===Node.TEXT_NODE){let e=t.length,r=window.getSelection(),i=document.createRange();i.setStart(n,e),i.collapse(!0),r?.removeAllRanges(),r?.addRange(i)}else t||(e.innerHTML=`<br>`)}))},L=i(d,m,p),R=e=>{let t=e.currentTarget,n=(t.textContent||``).replace(/\D/g,``);F>0&&n.length>F&&(n=n.slice(0,F)),I(t,n),L(n)},z=e=>{P.current=!0;let t=e.currentTarget;t.textContent=(t.textContent||``).replace(/\D/g,``),a.Focus({target:e.currentTarget})},B=e=>{if((e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`v`||e.key===`Backspace`)return;let t=(e.currentTarget.textContent??``).replace(/\D/g,``).length;F>0&&t>=F&&e.key.length===1&&/\d/.test(e.key)&&e.preventDefault(),e.key===`Enter`&&e.preventDefault(),e.key.length===1&&!/\d/.test(e.key)&&!e.metaKey&&!e.ctrlKey&&e.preventDefault()},V=e=>{a.PasteDigits(F,o(e)),queueMicrotask(()=>{let e=N.current;if(!e)return;let t=(e.textContent||``).replace(/\D/g,``);F>0&&t.length>F&&(t=t.slice(0,F)),I(e,t),L(t)})},H=e=>{e.preventDefault()},U=e=>{a.Blur(e);let t=(e.currentTarget.textContent||``).replace(/\D/g,``);e.currentTarget.textContent!==t&&(e.currentTarget.textContent=t),y?.({value:t,name:m}),P.current=!1},W={};return k&&(W.edit=``),W.inputMode=T??`numeric`,h&&(W.placeholder=h),_&&s(A)?null:u(t,{type:`numeric`,label:g,error:C,size:w,element_blok:{className:[b||``]},element_input:{className:[e.w],props:{"data-disabled":v||!k?`true`:void 0}},children:[S?l(`span`,{className:e.a,children:S}):null,l(f,{divRef:N,editable:k,label:g,placeholder:h,dd:W,onPaste:V,onDrop:H,onInput:R,onFocus:z,onBlur:U,onKeyDown:B}),x?l(`span`,{className:e.a,children:x}):null]})}function f({divRef:e,editable:t,label:r,placeholder:i,dd:a,onPaste:o,onDrop:s,onInput:c,onFocus:u,onBlur:d,onKeyDown:f}){let p=n();return l(`div`,{ref:e,id:p?.controlId,onPaste:o,onDrop:s,onDragOver:e=>e.preventDefault(),onInput:c,onFocus:u,onBlur:d,onKeyDown:f,spellCheck:!1,role:`textbox`,"aria-multiline":`false`,tabIndex:t?0:-1,"aria-label":r?void 0:i||`Число`,"aria-disabled":t?void 0:!0,"aria-describedby":p?.describedBy,"aria-invalid":p?.errorId?!0:void 0,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...a})}d.displayName=`NumberField`;export{d as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import c from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({value:n,form:d,onValue:p,name:m=``,placeholder:h=``,label:g=``,hidden:_=!1,disabled:v=!1,onBlur:y,className:b=``,after:x=``,before:S=``,error:C=``,size:w,inputmode:T=`numeric`,maxLength:E,max:D,view:O}){let k=!v,{value:A,version:j}=r(d,m,n);h=h===void 0?``:h,D=D===void 0?99:D;let M=A!=null&&A!==``?String(A):``,N=c.useRef(null),P=c.useRef(!1);c.useLayoutEffect(()=>{if(P.current)return;let e=N.current;e&&e.textContent!==M&&(e.textContent=M)},[M,j]);let F=E??D,I=(e,t)=>{e.textContent!==t&&(e.textContent=t,queueMicrotask(()=>{let n=e.firstChild;if(n&&n.nodeType===Node.TEXT_NODE){let e=t.length,r=window.getSelection(),i=document.createRange();i.setStart(n,e),i.collapse(!0),r?.removeAllRanges(),r?.addRange(i)}else t||(e.innerHTML=`<br>`)}))},L=i(d,m,p),R=e=>{let t=e.currentTarget,n=(t.textContent||``).replace(/\D/g,``);F>0&&n.length>F&&(n=n.slice(0,F)),I(t,n),L(n)},z=e=>{P.current=!0;let t=e.currentTarget;t.textContent=(t.textContent||``).replace(/\D/g,``),a.Focus({target:e.currentTarget})},B=e=>{if((e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`v`||e.key===`Backspace`)return;let t=(e.currentTarget.textContent??``).replace(/\D/g,``).length;F>0&&t>=F&&e.key.length===1&&/\d/.test(e.key)&&e.preventDefault(),e.key===`Enter`&&e.preventDefault(),e.key.length===1&&!/\d/.test(e.key)&&!e.metaKey&&!e.ctrlKey&&e.preventDefault()},V=e=>{a.PasteDigits(F,o(e)),queueMicrotask(()=>{let e=N.current;if(!e)return;let t=(e.textContent||``).replace(/\D/g,``);F>0&&t.length>F&&(t=t.slice(0,F)),I(e,t),L(t)})},H=e=>{e.preventDefault()},U=e=>{a.Blur(e);let t=(e.currentTarget.textContent||``).replace(/\D/g,``);e.currentTarget.textContent!==t&&(e.currentTarget.textContent=t),y?.({value:t,name:m}),P.current=!1},W={};return k&&(W.edit=``),W.inputMode=T??`numeric`,h&&(W.placeholder=h),_&&s(A)?null:u(t,{type:`numeric`,label:g,error:C,size:w,element_blok:{className:[b||``]},element_input:{className:[e.w],props:{"data-disabled":v||!k?`true`:void 0}},children:[S?l(`span`,{className:e.a,children:S}):null,l(f,{divRef:N,editable:k,label:g,placeholder:h,dd:W,onPaste:V,onDrop:H,onInput:R,onFocus:z,onBlur:U,onKeyDown:B}),x?l(`span`,{className:e.a,children:x}):null]})}function f({divRef:e,editable:t,label:r,placeholder:i,dd:a,onPaste:o,onDrop:s,onInput:c,onFocus:u,onBlur:d,onKeyDown:f}){let p=n();return l(`div`,{ref:e,id:p?.controlId,onPaste:o,onDrop:s,onDragOver:e=>e.preventDefault(),onInput:c,onFocus:u,onBlur:d,onKeyDown:f,spellCheck:!1,role:`textbox`,"aria-multiline":`false`,tabIndex:t?0:-1,"aria-label":r?void 0:i||`Число`,"aria-disabled":t?void 0:!0,"aria-describedby":p?.describedBy,"aria-invalid":p?.errorId?!0:void 0,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...a})}d.displayName=`NumberField`;export{d as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{useFormInit as i}from"../FormInitContext.js";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";var c=(e,t=`,`)=>(e!==void 0&&e!==``?e.split(t):[]).filter(e=>e!==``).reduce((e,t)=>(e[t]=!0,e),{});function l({value:l,form:u,onValue:d,name:f,placeholder:p=``,separator:m=`,`,label:h,error:g,hidden:_=!1,disabled:v=!1,outFormat:y=`object`,after:b,before:x,modal:S,options:C,className:w,size:T=`m`}){let{onModal:E}=i(),{value:D}=n(u,f,l),O=D,k=typeof O==`string`?c(O,m):O&&typeof O==`object`?O:{},A=()=>{if(v||!S)return;let e=S.split(`.`);E({module:e[0],modalName:e[1],callback:e=>{let t=e,n=y===`array`?Object.keys(t):y===`string`?Object.keys(t).filter(e=>t[e]).join(m):t;r(u,f,d)(n,!0)},onValue:d,options:C,fieldName:f,value:k})},j=Object.keys(k).length===0;return _&&j?o(a,{}):s(t,{type:`options`,label:h,error:g,size:T,element_blok:{className:[w||``]},element_input:{className:[],props:{onClick:A,"data-disabled":v?`true`:void 0}},children:[x?o(`span`,{className:e.a,children:x}):null,j?o(`div`,{"data-empty":`true`,children:p||`\xA0`}):Object.keys(k).map(e=>o(`div`,{children:C?.[e]?.label},e)),b?o(`span`,{className:e.a,children:b}):null]})}l.displayName=`OptionsField`;export{l as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{useFormInit as i}from"../FormInitContext.js";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";var c=(e,t=`,`)=>(e!==void 0&&e!==``?e.split(t):[]).filter(e=>e!==``).reduce((e,t)=>(e[t]=!0,e),{});function l({value:l,form:u,onValue:d,name:f,placeholder:p=``,separator:m=`,`,label:h,error:g,hidden:_=!1,disabled:v=!1,outFormat:y=`object`,after:b,before:x,modal:S,options:C,className:w,size:T}){let{onModal:E}=i(),{value:D}=n(u,f,l),O=D,k=typeof O==`string`?c(O,m):O&&typeof O==`object`?O:{},A=()=>{if(v||!S)return;let e=S.split(`.`);E({module:e[0],modalName:e[1],callback:e=>{let t=e,n=y===`array`?Object.keys(t):y===`string`?Object.keys(t).filter(e=>t[e]).join(m):t;r(u,f,d)(n,!0)},onValue:d,options:C,fieldName:f,value:k})},j=Object.keys(k).length===0;return _&&j?o(a,{}):s(t,{type:`options`,label:h,error:g,size:T,element_blok:{className:[w||``]},element_input:{className:[],props:{onClick:A,"data-disabled":v?`true`:void 0}},children:[x?o(`span`,{className:e.a,children:x}):null,j?o(`div`,{"data-empty":`true`,children:p||`\xA0`}):Object.keys(k).map(e=>o(`div`,{children:C?.[e]?.label},e)),b?o(`span`,{className:e.a,children:b}):null]})}l.displayName=`OptionsField`;export{l as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a from"../events/onEvent.js";import{isEmptyTextLike as o}from"./visibility.js";import{generatePasswordValue as s,resolveGeneratePool as c}from"./passwordUtils.js";import l from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";function f(){return d(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[u(`path`,{d:`M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z`}),u(`circle`,{cx:`12`,cy:`12`,r:`3`})]})}function p(){return d(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[u(`path`,{d:`M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24`}),u(`line`,{x1:`1`,y1:`1`,x2:`23`,y2:`23`})]})}function m({value:n,form:m,onValue:g,name:_=``,placeholder:v=``,label:y,error:b,hidden:x=!1,disabled:S=!1,onBlur:C,className:w,after:T=``,before:E=``,native:D=!1,maxLength:O,eyes:k,generate:A,id:j,size:M=`m`}){let{value:N}=r(m,_,n),[P,F]=l.useState(!1),I=l.useRef(null),L=typeof N==`string`?N:N==null?``:String(N);l.useEffect(()=>{let e=I.current;e&&e.value!==L&&(e.value=L)},[L]);let R=i(m,_,g),z=e=>{R(e.target.value)},B=e=>{e.key===`Enter`&&e.preventDefault()},V=e=>{a.Blur(e),C?.({value:(e.target.value||``).trim(),name:_||``})};if(D)return``;let H=!S;if(x&&o(L))return``;let U=k?.[0]??u(f,{}),W=k?.[1]??u(p,{}),G=c(A),K=O??12,[q,J]=l.useState(0);return d(t,{type:`input`,label:y,error:b,id:j,size:M,element_blok:{className:[w||``]},element_input:{className:[e.w],props:{"data-disabled":S||!H?`true`:void 0}},children:[E?u(`span`,{className:e.a,children:E}):null,u(h,{inputRef:I,passwordVisible:P,currentValue:L,disabled:S,editable:H,maxLength:O,placeholder:v,label:y,onChangeInput:z,keyDown:B,handleBlur:V}),G?u(`button`,{type:`button`,className:e.a,tabIndex:S?-1:0,disabled:S,"aria-label":`Сгенерировать пароль`,title:`Сгенерировать пароль`,onClick:()=>{!H||!G||(J(e=>e+1),R(s(G,K),!0),I.current?.focus())},children:d(`svg`,{className:q>0?e.j:void 0,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,viewBox:`0 0 24 24`,children:[u(`path`,{d:`m18.75 6.938-.99-1.152A8.973 8.973 0 0 0 11.25 3c-4.969 0-9 4.031-9 9s4.031 9 9 9a9.004 9.004 0 0 0 8.488-6`}),u(`path`,{fill:`currentColor`,stroke:`none`,d:`M21.75 4.565v5.183a.75.75 0 0 1-.75.75h-5.184a.75.75 0 0 1-.53-1.28l5.184-5.184a.75.75 0 0 1 1.28.53Z`})]},q)}):null,u(`button`,{type:`button`,className:e.a,tabIndex:S?-1:0,"aria-label":P?`Скрыть пароль`:`Показать пароль`,"aria-pressed":P,disabled:S,onClick:()=>!S&&F(!P),children:P?W:U}),T?u(`span`,{className:e.a,children:T}):null]})}function h({inputRef:t,passwordVisible:r,currentValue:i,disabled:a,editable:o,maxLength:s,placeholder:c,label:l,onChangeInput:d,keyDown:f,handleBlur:p}){let m=n();return u(`div`,{className:e.x,children:u(`input`,{id:m?.controlId,className:e.y,type:r?`text`:`password`,defaultValue:i,ref:t,onChange:d,onKeyDown:f,onBlur:p,disabled:a,readOnly:a,maxLength:s,spellCheck:!1,autoComplete:`current-password`,"aria-label":l?void 0:c||`Пароль`,"aria-describedby":m?.describedBy,"aria-invalid":m?.errorId?!0:void 0,"aria-disabled":a||!o,tabIndex:a?-1:0,placeholder:c})})}m.displayName=`PasswordField`;export{m as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a from"../events/onEvent.js";import{isEmptyTextLike as o}from"./visibility.js";import{generatePasswordValue as s,resolveGeneratePool as c}from"./passwordUtils.js";import l from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";function f(){return d(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[u(`path`,{d:`M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z`}),u(`circle`,{cx:`12`,cy:`12`,r:`3`})]})}function p(){return d(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[u(`path`,{d:`M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24`}),u(`line`,{x1:`1`,y1:`1`,x2:`23`,y2:`23`})]})}function m({value:n,form:m,onValue:g,name:_=``,placeholder:v=``,label:y,error:b,hidden:x=!1,disabled:S=!1,onBlur:C,className:w,after:T=``,before:E=``,native:D=!1,maxLength:O,eyes:k,generate:A,id:j,size:M}){let{value:N}=r(m,_,n),[P,F]=l.useState(!1),I=l.useRef(null),L=typeof N==`string`?N:N==null?``:String(N);l.useEffect(()=>{let e=I.current;e&&e.value!==L&&(e.value=L)},[L]);let R=i(m,_,g),z=e=>{R(e.target.value)},B=e=>{e.key===`Enter`&&e.preventDefault()},V=e=>{a.Blur(e),C?.({value:(e.target.value||``).trim(),name:_||``})};if(D)return``;let H=!S;if(x&&o(L))return``;let U=k?.[0]??u(f,{}),W=k?.[1]??u(p,{}),G=c(A),K=O??12,[q,J]=l.useState(0);return d(t,{type:`input`,label:y,error:b,id:j,size:M,element_blok:{className:[w||``]},element_input:{className:[e.w],props:{"data-disabled":S||!H?`true`:void 0}},children:[E?u(`span`,{className:e.a,children:E}):null,u(h,{inputRef:I,passwordVisible:P,currentValue:L,disabled:S,editable:H,maxLength:O,placeholder:v,label:y,onChangeInput:z,keyDown:B,handleBlur:V}),G?u(`button`,{type:`button`,className:e.a,tabIndex:S?-1:0,disabled:S,"aria-label":`Сгенерировать пароль`,title:`Сгенерировать пароль`,onClick:()=>{!H||!G||(J(e=>e+1),R(s(G,K),!0),I.current?.focus())},children:d(`svg`,{className:q>0?e.j:void 0,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,viewBox:`0 0 24 24`,children:[u(`path`,{d:`m18.75 6.938-.99-1.152A8.973 8.973 0 0 0 11.25 3c-4.969 0-9 4.031-9 9s4.031 9 9 9a9.004 9.004 0 0 0 8.488-6`}),u(`path`,{fill:`currentColor`,stroke:`none`,d:`M21.75 4.565v5.183a.75.75 0 0 1-.75.75h-5.184a.75.75 0 0 1-.53-1.28l5.184-5.184a.75.75 0 0 1 1.28.53Z`})]},q)}):null,u(`button`,{type:`button`,className:e.a,tabIndex:S?-1:0,"aria-label":P?`Скрыть пароль`:`Показать пароль`,"aria-pressed":P,disabled:S,onClick:()=>!S&&F(!P),children:P?W:U}),T?u(`span`,{className:e.a,children:T}):null]})}function h({inputRef:t,passwordVisible:r,currentValue:i,disabled:a,editable:o,maxLength:s,placeholder:c,label:l,onChangeInput:d,keyDown:f,handleBlur:p}){let m=n();return u(`div`,{className:e.x,children:u(`input`,{id:m?.controlId,className:e.y,type:r?`text`:`password`,defaultValue:i,ref:t,onChange:d,onKeyDown:f,onBlur:p,disabled:a,readOnly:a,maxLength:s,spellCheck:!1,autoComplete:`current-password`,"aria-label":l?void 0:c||`Пароль`,"aria-describedby":m?.describedBy,"aria-invalid":m?.errorId?!0:void 0,"aria-disabled":a||!o,tabIndex:a?-1:0,placeholder:c})})}m.displayName=`PasswordField`;export{m as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i,{asEditableClipboard as a}from"../events/onEvent.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e,t,n){return Number.isFinite(e)?Math.min(n,Math.max(t,e)):t}function u(e,t){let n=e.replace(`,`,`.`).replace(/[^\d.]/g,``);if(!n)return null;let r=Number(n);if(!Number.isFinite(r))return null;if(t<=0)return Math.round(r);let i=10**t;return Math.round(r*i)/i}function d(e,t){return Number.isFinite(e)?String(t<=0?Math.round(e):Number(e.toFixed(t))):``}function f({value:f=0,form:p,onValue:m,onBlur:h,name:g=``,placeholder:_=`0`,label:v=``,error:y=``,hidden:b=!1,disabled:x=!1,className:S=``,after:C,before:w=``,min:T=0,max:E=100,decimals:D=0,inputmode:O=`decimal`,size:k=`m`}){let{value:A,version:j}=n(p,g,f),M=!x,N=l(Number(A),T,E),P=A==null||A===``?``:d(N,D),F=o.useRef(null),I=o.useRef(!1);o.useLayoutEffect(()=>{if(I.current)return;let e=F.current;e&&e.textContent!==P&&(e.textContent=P)},[P,j]);let L=r(p,g,m),R=e=>{let t=(e.currentTarget.textContent||``).replace(/[^\d.,]/g,``);e.currentTarget.textContent!==t&&(e.currentTarget.textContent=t);let n=u(t,D);if(n===null){L(``);return}L(l(n,T,E))},z=e=>{i.Blur(e),I.current=!1;let t=u(e.currentTarget.textContent||``,D),n=t===null?T:l(t,T,E),r=d(n,D);e.currentTarget.textContent!==r&&(e.currentTarget.textContent=r),L(n,!0),h?.({value:n,name:g})};if(b&&(A==null||A===``))return null;let B={};return _&&(B.placeholder=_),M&&(B.edit=``),B.inputMode=O||`decimal`,c(t,{type:`percent`,label:v,error:y,size:k,element_blok:{className:[S||``]},element_input:{className:[e.w],props:{"data-disabled":x||!M?`true`:void 0}},children:[w?s(`span`,{className:e.a,children:w}):null,s(`div`,{ref:F,onInput:R,onFocus:e=>{I.current=!0,i.Focus({target:e.currentTarget})},onBlur:z,onPaste:e=>i.Paste(12,a(e)),onKeyDown:e=>{e.key===`Enter`&&e.preventDefault(),e.key.length===1&&!/[\d.,]/.test(e.key)&&!e.metaKey&&!e.ctrlKey&&e.preventDefault()},spellCheck:!1,role:`textbox`,tabIndex:M?0:-1,"aria-label":v||_||`Процент`,contentEditable:M?`plaintext-only`:!1,suppressContentEditableWarning:!0,...B}),C===void 0?s(`span`,{className:e.a,children:`%`}):s(`span`,{className:e.a,children:C})]})}f.displayName=`PercentField`;export{f as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i,{asEditableClipboard as a}from"../events/onEvent.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l(e,t,n){return Number.isFinite(e)?Math.min(n,Math.max(t,e)):t}function u(e,t){let n=e.replace(`,`,`.`).replace(/[^\d.]/g,``);if(!n)return null;let r=Number(n);if(!Number.isFinite(r))return null;if(t<=0)return Math.round(r);let i=10**t;return Math.round(r*i)/i}function d(e,t){return Number.isFinite(e)?String(t<=0?Math.round(e):Number(e.toFixed(t))):``}function f({value:f=0,form:p,onValue:m,onBlur:h,name:g=``,placeholder:_=`0`,label:v=``,error:y=``,hidden:b=!1,disabled:x=!1,className:S=``,after:C,before:w=``,min:T=0,max:E=100,decimals:D=0,inputmode:O=`decimal`,size:k}){let{value:A,version:j}=n(p,g,f),M=!x,N=l(Number(A),T,E),P=A==null||A===``?``:d(N,D),F=o.useRef(null),I=o.useRef(!1);o.useLayoutEffect(()=>{if(I.current)return;let e=F.current;e&&e.textContent!==P&&(e.textContent=P)},[P,j]);let L=r(p,g,m),R=e=>{let t=(e.currentTarget.textContent||``).replace(/[^\d.,]/g,``);e.currentTarget.textContent!==t&&(e.currentTarget.textContent=t);let n=u(t,D);if(n===null){L(``);return}L(l(n,T,E))},z=e=>{i.Blur(e),I.current=!1;let t=u(e.currentTarget.textContent||``,D),n=t===null?T:l(t,T,E),r=d(n,D);e.currentTarget.textContent!==r&&(e.currentTarget.textContent=r),L(n,!0),h?.({value:n,name:g})};if(b&&(A==null||A===``))return null;let B={};return _&&(B.placeholder=_),M&&(B.edit=``),B.inputMode=O||`decimal`,c(t,{type:`percent`,label:v,error:y,size:k,element_blok:{className:[S||``]},element_input:{className:[e.w],props:{"data-disabled":x||!M?`true`:void 0}},children:[w?s(`span`,{className:e.a,children:w}):null,s(`div`,{ref:F,onInput:R,onFocus:e=>{I.current=!0,i.Focus({target:e.currentTarget})},onBlur:z,onPaste:e=>i.Paste(12,a(e)),onKeyDown:e=>{e.key===`Enter`&&e.preventDefault(),e.key.length===1&&!/[\d.,]/.test(e.key)&&!e.metaKey&&!e.ctrlKey&&e.preventDefault()},spellCheck:!1,role:`textbox`,tabIndex:M?0:-1,"aria-label":v||_||`Процент`,contentEditable:M?`plaintext-only`:!1,suppressContentEditableWarning:!0,...B}),C===void 0?s(`span`,{className:e.a,children:`%`}):s(`span`,{className:e.a,children:C})]})}f.displayName=`PercentField`;export{f as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import{PHONE_MASK_DEFAULTS as c}from"../mask/phoneDefaults.js";import{useFormInit as l}from"../FormInitContext.js";import u from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p={...c},m=!1,h=null;function g(){return m?Promise.resolve(!1):h||(h=import(`../mask/MaskPhone.js`).then(e=>(p={...c,...e.default},m=!0,!0)),h)}function _(e){let t=window.getSelection();if(!t||t.rangeCount===0)return 0;let n=t.getRangeAt(0);if(!e.contains(n.startContainer))return 0;let r=document.createRange();return r.selectNodeContents(e),r.setEnd(n.startContainer,n.startOffset),r.toString().length}function v(e,t){if(t<=0)return 0;let n=0;for(let r=0;r<e.length;r++)if(/\d/.test(e[r])&&(n++,n===t))return r+1;return e.length}function y(e){let t=`+_(___) ___-__-__`,n=!0,r=0,i=0,a=``,o=e.replace(/\D/g,``);o===``&&(n=!0);let s=o.split(``),c=``;s.forEach(e=>{n&&(c+=e,p[c]!==void 0&&n?(n=!1,t=p[c].mask.replace(RegExp(`[0-9]`,`g`),`_`),a=p[c].code):(n&&(r=(``+c).length,t=`+${c}_(___) ___-__-__`.replace(RegExp(`[0-9]`,`g`),`_`),a=``),r>(``+c).length&&(n=!0,t=`+${c}_(___) ___-__-__`.replace(RegExp(`[0-9]`,`g`),`_`),a=``)))});let l=t.replace(/\D/g,``);return l.length>=o.length&&(o=l),{q:t.replace(/[_\d]/g,function(){return o.charAt(i++)||`_`}),i,v:o,f:a}}function b({value:n,form:c,onValue:p,onBlur:m,name:h=``,placeholder:b=``,label:S=``,error:C=``,hidden:w=!1,disabled:T=!1,className:E=``,after:D=``,before:O=``,inputmode:k=`tel`,id:A,size:j=`m`}){let{onNotice:M}=l(),N=!T,{value:P,version:F}=r(c,h,n),[,I]=u.useState(0),L=u.useRef(null),R=u.useRef(!1),z=(e,t)=>{let n=t.firstChild;if(!n||n.nodeType!==Node.TEXT_NODE)return;let r=n.textContent?.length??0,i=Math.max(0,Math.min(e,r)),a=document.createRange(),o=window.getSelection();o&&(a.setStart(n,i),a.collapse(!0),o.removeAllRanges(),o.addRange(a),t.focus())},B=i(c,h,p),V=e=>{let t=e.target,n=t.textContent||``,r=_(t),i=n.slice(0,r).replace(/\D/g,``).length,a=y(n);t.textContent=a.q;let o=v(a.q,i);a.q.length>0&&queueMicrotask(()=>{z(Math.min(o,a.q.length),t)}),B(a.q.replace(/\D/g,``))},H=e=>a.PasteOne(o(e));u.useLayoutEffect(()=>{if(R.current)return;let e=L.current;if(!e)return;let t=y(String(P||``));e.textContent!==t.q&&(e.textContent=t.q)},[P,F]);let U=e=>{e.preventDefault();let t=e.target;navigator.clipboard.writeText((t.textContent||``).replace(/\D/g,``)).then(function(){M(`Данные в буфер обмене`)},function(e){})},W=e=>{e.key===`Enter`&&e.preventDefault()},G=e=>{a.Blur(e),m&&m({value:(e.target.textContent||``).replace(/\D/g,``),name:h||``}),R.current=!1},K=e=>{R.current=!0,a.Focus({target:e.currentTarget}),g().then(e=>{if(!e)return;I(e=>e+1);let t=L.current;if(!t||document.activeElement!==t)return;let n=t.textContent||``,r=_(t),i=n.slice(0,r).replace(/\D/g,``).length,a=y(n);t.textContent!==a.q&&(t.textContent=a.q,queueMicrotask(()=>{z(Math.min(v(a.q,i),a.q.length),t)}))})},q={};b&&(q.placeholder=b),q.inputMode=k??`tel`;let J=String(P??``).replace(/\D/g,``);return w&&s(J)?null:f(t,{type:`input`,label:S,error:C,id:A,size:j,element_blok:{className:[E]},element_input:{className:[e.w],props:{"data-disabled":T||!N?`true`:void 0}},children:[O?d(`span`,{className:e.a,children:O}):null,d(x,{divRef:L,editable:N,disabled:T,label:S,placeholder:b,dd:q,onPaste:H,onInput:V,onKeyDown:W,onContextMenu:U,onBlur:G,onFocus:K}),D?d(`span`,{className:e.a,children:D}):null]})}function x({divRef:e,editable:t,disabled:r,label:i,placeholder:a,dd:o,onPaste:s,onInput:c,onKeyDown:l,onContextMenu:u,onBlur:f,onFocus:p}){let m=n();return d(`div`,{ref:e,id:m?.controlId,onPaste:s,onInput:c,onKeyDown:l,onContextMenu:u,onBlur:f,onFocus:p,spellCheck:!1,role:`textbox`,"aria-label":i?void 0:a||`Телефон`,"aria-describedby":m?.describedBy,"aria-invalid":m?.errorId?!0:void 0,"aria-disabled":!t,tabIndex:r?-1:0,"data-disabled":t?void 0:`true`,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...o})}b.displayName=`PhoneField`;export{b as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import{PHONE_MASK_DEFAULTS as c}from"../mask/phoneDefaults.js";import{useFormInit as l}from"../FormInitContext.js";import u from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p={...c},m=!1,h=null;function g(){return m?Promise.resolve(!1):h||(h=import(`../mask/MaskPhone.js`).then(e=>(p={...c,...e.default},m=!0,!0)),h)}function _(e){let t=window.getSelection();if(!t||t.rangeCount===0)return 0;let n=t.getRangeAt(0);if(!e.contains(n.startContainer))return 0;let r=document.createRange();return r.selectNodeContents(e),r.setEnd(n.startContainer,n.startOffset),r.toString().length}function v(e,t){if(t<=0)return 0;let n=0;for(let r=0;r<e.length;r++)if(/\d/.test(e[r])&&(n++,n===t))return r+1;return e.length}function y(e){let t=`+_(___) ___-__-__`,n=!0,r=0,i=0,a=``,o=e.replace(/\D/g,``);o===``&&(n=!0);let s=o.split(``),c=``;s.forEach(e=>{n&&(c+=e,p[c]!==void 0&&n?(n=!1,t=p[c].mask.replace(RegExp(`[0-9]`,`g`),`_`),a=p[c].code):(n&&(r=(``+c).length,t=`+${c}_(___) ___-__-__`.replace(RegExp(`[0-9]`,`g`),`_`),a=``),r>(``+c).length&&(n=!0,t=`+${c}_(___) ___-__-__`.replace(RegExp(`[0-9]`,`g`),`_`),a=``)))});let l=t.replace(/\D/g,``);return l.length>=o.length&&(o=l),{q:t.replace(/[_\d]/g,function(){return o.charAt(i++)||`_`}),i,v:o,f:a}}function b({value:n,form:c,onValue:p,onBlur:m,name:h=``,placeholder:b=``,label:S=``,error:C=``,hidden:w=!1,disabled:T=!1,className:E=``,after:D=``,before:O=``,inputmode:k=`tel`,id:A,size:j}){let{onNotice:M}=l(),N=!T,{value:P,version:F}=r(c,h,n),[,I]=u.useState(0),L=u.useRef(null),R=u.useRef(!1),z=(e,t)=>{let n=t.firstChild;if(!n||n.nodeType!==Node.TEXT_NODE)return;let r=n.textContent?.length??0,i=Math.max(0,Math.min(e,r)),a=document.createRange(),o=window.getSelection();o&&(a.setStart(n,i),a.collapse(!0),o.removeAllRanges(),o.addRange(a),t.focus())},B=i(c,h,p),V=e=>{let t=e.target,n=t.textContent||``,r=_(t),i=n.slice(0,r).replace(/\D/g,``).length,a=y(n);t.textContent=a.q;let o=v(a.q,i);a.q.length>0&&queueMicrotask(()=>{z(Math.min(o,a.q.length),t)}),B(a.q.replace(/\D/g,``))},H=e=>a.PasteOne(o(e));u.useLayoutEffect(()=>{if(R.current)return;let e=L.current;if(!e)return;let t=y(String(P||``));e.textContent!==t.q&&(e.textContent=t.q)},[P,F]);let U=e=>{e.preventDefault();let t=e.target;navigator.clipboard.writeText((t.textContent||``).replace(/\D/g,``)).then(function(){M(`Данные в буфер обмене`)},function(e){})},W=e=>{e.key===`Enter`&&e.preventDefault()},G=e=>{a.Blur(e),m&&m({value:(e.target.textContent||``).replace(/\D/g,``),name:h||``}),R.current=!1},K=e=>{R.current=!0,a.Focus({target:e.currentTarget}),g().then(e=>{if(!e)return;I(e=>e+1);let t=L.current;if(!t||document.activeElement!==t)return;let n=t.textContent||``,r=_(t),i=n.slice(0,r).replace(/\D/g,``).length,a=y(n);t.textContent!==a.q&&(t.textContent=a.q,queueMicrotask(()=>{z(Math.min(v(a.q,i),a.q.length),t)}))})},q={};b&&(q.placeholder=b),q.inputMode=k??`tel`;let J=String(P??``).replace(/\D/g,``);return w&&s(J)?null:f(t,{type:`input`,label:S,error:C,id:A,size:j,element_blok:{className:[E]},element_input:{className:[e.w],props:{"data-disabled":T||!N?`true`:void 0}},children:[O?d(`span`,{className:e.a,children:O}):null,d(x,{divRef:L,editable:N,disabled:T,label:S,placeholder:b,dd:q,onPaste:H,onInput:V,onKeyDown:W,onContextMenu:U,onBlur:G,onFocus:K}),D?d(`span`,{className:e.a,children:D}):null]})}function x({divRef:e,editable:t,disabled:r,label:i,placeholder:a,dd:o,onPaste:s,onInput:c,onKeyDown:l,onContextMenu:u,onBlur:f,onFocus:p}){let m=n();return d(`div`,{ref:e,id:m?.controlId,onPaste:s,onInput:c,onKeyDown:l,onContextMenu:u,onBlur:f,onFocus:p,spellCheck:!1,role:`textbox`,"aria-label":i?void 0:a||`Телефон`,"aria-describedby":m?.describedBy,"aria-invalid":m?.errorId?!0:void 0,"aria-disabled":!t,tabIndex:r?-1:0,"data-disabled":t?void 0:`true`,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...o})}b.displayName=`PhoneField`;export{b as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Radio.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e){return e?Array.isArray(e)?e.map(e=>({id:e.id??e.i??``,label:e.n||``,hidden:e.s===0})).filter(e=>e.label.length>0&&e.id!==``):Object.keys(e).map(t=>{let n=e[t],r=Number(t);return{id:Number.isFinite(r)&&String(r)===t?r:t,label:n?.n||``,hidden:n?.s===0}}).filter(e=>e.label.length>0):[]}function l(e,t){return e===t?!0:String(e)===String(t)}function u({value:u=``,form:d,onValue:f,onBlur:p,name:m=``,placeholder:h=``,label:g=``,error:_=``,hidden:v=!1,disabled:y=!1,className:b=``,after:x=``,before:S=``,options:C,inline:w=!1,align:T=`center`,size:E=`m`}){let{value:D}=n(d,m,u),O=!y,k=c(C).filter(e=>!e.hidden),A=a.useId(),j=e=>{r(d,m,f)(e,!0)};return v&&(D==null||D===``)?null:s(t,{type:`radio`,label:g,error:_,size:E,element_blok:{className:[b||``]},element_input:{className:[i.d,w?i.i:``],props:{"data-disabled":y||!O?`true`:void 0,role:`radiogroup`,"aria-label":g||h||`Выбор`}},children:[S?o(`span`,{className:e.a,children:S}):null,o(`div`,{children:k.map(e=>{let t=l(D,e.id);return s(`button`,{type:`button`,className:i.t,role:`radio`,"aria-checked":t,"aria-disabled":y||!O?!0:void 0,disabled:y||!O,"data-align":T,name:A,onClick:()=>{O&&j(e.id)},onBlur:()=>{!p||!m||p({value:d?d.getValue(m,D):D,name:m})},children:[o(`span`,{className:i.o,"aria-hidden":!0,children:t?o(`span`,{className:i.f}):null}),o(`span`,{className:i.x,children:e.label})]},String(e.id))})}),x?o(`span`,{className:e.a,children:x}):null]})}u.displayName=`RadioField`;export{u as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Radio.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e){return e?Array.isArray(e)?e.map(e=>({id:e.id??e.i??``,label:e.n||``,hidden:e.s===0})).filter(e=>e.label.length>0&&e.id!==``):Object.keys(e).map(t=>{let n=e[t],r=Number(t);return{id:Number.isFinite(r)&&String(r)===t?r:t,label:n?.n||``,hidden:n?.s===0}}).filter(e=>e.label.length>0):[]}function l(e,t){return e===t?!0:String(e)===String(t)}function u({value:u=``,form:d,onValue:f,onBlur:p,name:m=``,placeholder:h=``,label:g=``,error:_=``,hidden:v=!1,disabled:y=!1,className:b=``,after:x=``,before:S=``,options:C,inline:w=!1,align:T=`center`,size:E}){let{value:D}=n(d,m,u),O=!y,k=c(C).filter(e=>!e.hidden),A=a.useId(),j=e=>{r(d,m,f)(e,!0)};return v&&(D==null||D===``)?null:s(t,{type:`radio`,label:g,error:_,size:E,element_blok:{className:[b||``]},element_input:{className:[i.d,w?i.i:``],props:{"data-disabled":y||!O?`true`:void 0,role:`radiogroup`,"aria-label":g||h||`Выбор`}},children:[S?o(`span`,{className:e.a,children:S}):null,o(`div`,{children:k.map(e=>{let t=l(D,e.id);return s(`button`,{type:`button`,className:i.t,role:`radio`,"aria-checked":t,"aria-disabled":y||!O?!0:void 0,disabled:y||!O,"data-align":T,name:A,onClick:()=>{O&&j(e.id)},onBlur:()=>{!p||!m||p({value:d?d.getValue(m,D):D,name:m})},children:[o(`span`,{className:i.o,"aria-hidden":!0,children:t?o(`span`,{className:i.f}):null}),o(`span`,{className:i.x,children:e.label})]},String(e.id))})}),x?o(`span`,{className:e.a,children:x}):null]})}u.displayName=`RadioField`;export{u as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(e,t,n){let r=e;return Number.isFinite(r)||(r=t),Math.min(n,Math.max(t,r))}function c(e,t,n,r){return s(!Number.isFinite(r)||r<=0?e:t+Math.round((e-t)/r)*r,t,n)}function l({value:l=0,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,min:S=0,max:C=100,step:w=1,variant:T=`bar`,size:E=`m`}){let{value:D}=n(u,p,l),O=s(Number(D),S,C),k=C===S?0:(O-S)/(C-S)*100,A=k>=99.999,j=!v,M=i.useRef(null),N=i.useCallback(e=>{let t=c(e,S,C,w);r(u,p,d)(t,!0)},[u,p,d,S,C,w]),P=i.useCallback(e=>{let t=M.current;if(!t)return S;let n=t.getBoundingClientRect(),r=n.width||1;return c(S+(e-n.left)/r*(C-S),S,C,w)},[S,C,w]),F=e=>{j&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),N(P(e.clientX)))},I=e=>{j&&e.currentTarget.hasPointerCapture(e.pointerId)&&N(P(e.clientX))},L=e=>{try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}},R=e=>{if(!j)return;let t=O;if(e.key===`ArrowRight`||e.key===`ArrowUp`)t=O+w;else if(e.key===`ArrowLeft`||e.key===`ArrowDown`)t=O-w;else if(e.key===`Home`)t=S;else if(e.key===`End`)t=C;else if(e.key===`PageUp`)t=O+w*10;else if(e.key===`PageDown`)t=O-w*10;else return;e.preventDefault(),N(c(t,S,C,w))},z=()=>{if(!f||!p)return;let e=u&&p?u.getValue(p,l):O;f({value:s(Number(e),S,C),name:p})};return _&&(D==null||D===``)?null:o(t,{type:`range`,label:h,error:g,size:E,element_blok:{className:[y||``]},element_input:{className:[e.w,e.r],props:{"data-disabled":v||!j?`true`:void 0,"data-variant":T}},children:[x?a(`span`,{className:e.a,children:x}):null,a(`div`,{children:o(`div`,{ref:M,className:e.k,role:`slider`,tabIndex:j?0:-1,"aria-label":h||m||`Диапазон`,"aria-valuemin":S,"aria-valuemax":C,"aria-valuenow":O,"data-disabled":v||!j?`true`:void 0,onPointerDown:F,onPointerMove:I,onPointerUp:L,onPointerCancel:L,onKeyDown:R,onBlur:z,children:[a(`div`,{className:A?`${e.u} ${e.v}`:e.u,style:{width:`${k}%`},"aria-hidden":!0}),T===`line`?a(`div`,{className:e.h,style:{left:`${k}%`},"aria-hidden":!0}):null]})}),b?a(`span`,{className:e.a,children:b}):null]})}l.displayName=`RangeField`;export{l as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(e,t,n){let r=e;return Number.isFinite(r)||(r=t),Math.min(n,Math.max(t,r))}function c(e,t,n,r){return s(!Number.isFinite(r)||r<=0?e:t+Math.round((e-t)/r)*r,t,n)}function l({value:l=0,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,min:S=0,max:C=100,step:w=1,variant:T=`bar`,size:E}){let{value:D}=n(u,p,l),O=s(Number(D),S,C),k=C===S?0:(O-S)/(C-S)*100,A=k>=99.999,j=!v,M=i.useRef(null),N=i.useCallback(e=>{let t=c(e,S,C,w);r(u,p,d)(t,!0)},[u,p,d,S,C,w]),P=i.useCallback(e=>{let t=M.current;if(!t)return S;let n=t.getBoundingClientRect(),r=n.width||1;return c(S+(e-n.left)/r*(C-S),S,C,w)},[S,C,w]),F=e=>{j&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),N(P(e.clientX)))},I=e=>{j&&e.currentTarget.hasPointerCapture(e.pointerId)&&N(P(e.clientX))},L=e=>{try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}},R=e=>{if(!j)return;let t=O;if(e.key===`ArrowRight`||e.key===`ArrowUp`)t=O+w;else if(e.key===`ArrowLeft`||e.key===`ArrowDown`)t=O-w;else if(e.key===`Home`)t=S;else if(e.key===`End`)t=C;else if(e.key===`PageUp`)t=O+w*10;else if(e.key===`PageDown`)t=O-w*10;else return;e.preventDefault(),N(c(t,S,C,w))},z=()=>{if(!f||!p)return;let e=u&&p?u.getValue(p,l):O;f({value:s(Number(e),S,C),name:p})};return _&&(D==null||D===``)?null:o(t,{type:`range`,label:h,error:g,size:E,element_blok:{className:[y||``]},element_input:{className:[e.w,e.r],props:{"data-disabled":v||!j?`true`:void 0,"data-variant":T}},children:[x?a(`span`,{className:e.a,children:x}):null,a(`div`,{children:o(`div`,{ref:M,className:e.k,role:`slider`,tabIndex:j?0:-1,"aria-label":h||m||`Диапазон`,"aria-valuemin":S,"aria-valuemax":C,"aria-valuenow":O,"data-disabled":v||!j?`true`:void 0,onPointerDown:F,onPointerMove:I,onPointerUp:L,onPointerCancel:L,onKeyDown:R,onBlur:z,children:[a(`div`,{className:A?`${e.u} ${e.v}`:e.u,style:{width:`${k}%`},"aria-hidden":!0}),T===`line`?a(`div`,{className:e.h,style:{left:`${k}%`},"aria-hidden":!0}):null]})}),b?a(`span`,{className:e.a,children:b}):null]})}l.displayName=`RangeField`;export{l as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Rating.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e,t){return Number.isFinite(e)?Math.min(t,Math.max(0,Math.round(e))):0}function l({value:l=0,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,max:S=5,allowClear:C=!0,size:w=`m`}){let{value:T}=n(u,p,l),E=c(Number(T),S),D=!v,[O,k]=a.useState(0),A=e=>{r(u,p,d)(e,!0)};if(_&&!E)return null;let j=O||E;return s(t,{type:`rating`,label:h,error:g,size:w,element_blok:{className:[y||``]},element_input:{className:[i.r],props:{"data-disabled":v||!D?`true`:void 0}},children:[x?o(`span`,{className:e.a,children:x}):null,o(`div`,{role:`slider`,"aria-label":h||m||`Оценка`,"aria-valuemin":0,"aria-valuemax":S,"aria-valuenow":E,tabIndex:D?0:-1,onMouseLeave:()=>k(0),onBlur:()=>{k(0),f?.({value:E,name:p})},onKeyDown:e=>{if(!D)return;let t=E;if(e.key===`ArrowRight`||e.key===`ArrowUp`)t=Math.min(S,E+1);else if(e.key===`ArrowLeft`||e.key===`ArrowDown`)t=Math.max(0,E-1);else if(e.key===`Home`)t=0;else if(e.key===`End`)t=S;else return;e.preventDefault(),A(t)},children:Array.from({length:S},(e,t)=>{let n=t+1;return o(`button`,{type:`button`,className:n<=j?`${i.s} ${i.o}`:i.s,"aria-label":`${n} из ${S}`,disabled:!D,onMouseEnter:()=>D&&k(n),onClick:()=>{D&&A(C&&E===n?0:n)},children:`★`},n)})}),b?o(`span`,{className:e.a,children:b}):null]})}l.displayName=`RatingField`;export{l as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Rating.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e,t){return Number.isFinite(e)?Math.min(t,Math.max(0,Math.round(e))):0}function l({value:l=0,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,max:S=5,allowClear:C=!0,size:w}){let{value:T}=n(u,p,l),E=c(Number(T),S),D=!v,[O,k]=a.useState(0),A=e=>{r(u,p,d)(e,!0)};if(_&&!E)return null;let j=O||E;return s(t,{type:`rating`,label:h,error:g,size:w,element_blok:{className:[y||``]},element_input:{className:[i.r],props:{"data-disabled":v||!D?`true`:void 0}},children:[x?o(`span`,{className:e.a,children:x}):null,o(`div`,{role:`slider`,"aria-label":h||m||`Оценка`,"aria-valuemin":0,"aria-valuemax":S,"aria-valuenow":E,tabIndex:D?0:-1,onMouseLeave:()=>k(0),onBlur:()=>{k(0),f?.({value:E,name:p})},onKeyDown:e=>{if(!D)return;let t=E;if(e.key===`ArrowRight`||e.key===`ArrowUp`)t=Math.min(S,E+1);else if(e.key===`ArrowLeft`||e.key===`ArrowDown`)t=Math.max(0,E-1);else if(e.key===`Home`)t=0;else if(e.key===`End`)t=S;else return;e.preventDefault(),A(t)},children:Array.from({length:S},(e,t)=>{let n=t+1;return o(`button`,{type:`button`,className:n<=j?`${i.s} ${i.o}`:i.s,"aria-label":`${n} из ${S}`,disabled:!D,onMouseEnter:()=>D&&k(n),onClick:()=>{D&&A(C&&E===n?0:n)},children:`★`},n)})}),b?o(`span`,{className:e.a,children:b}):null]})}l.displayName=`RatingField`;export{l as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import a from"../styles/Rich.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({value:l=``,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,maxLength:S,spellCheck:C=!0,toolbar:w=!0,size:T=`m`}){let{value:E,version:D}=n(u,p,l),O=!v,k=typeof E==`string`?E:``,A=o.useRef(null),j=o.useRef(!1);o.useLayoutEffect(()=>{if(j.current)return;let e=A.current;e&&e.innerHTML!==k&&(e.innerHTML=k||``)},[k,D]);let M=r(u,p,d),N=(e,t=!1)=>{S&&e.replace(/<[^>]+>/g,``).length>S||M(e,t)},P=e=>{if(O){A.current?.focus();try{document.execCommand(e,!1)}catch{}N(A.current?.innerHTML||``)}};if(_&&i(k.replace(/<[^>]+>/g,``)))return null;let F={};return m&&!k&&(F.placeholder=m),O&&(F.edit=``),c(t,{type:`richtext`,label:h,error:g,size:T,element_blok:{className:[y||``]},element_input:{className:[a.r],props:{"data-disabled":v||!O?`true`:void 0}},children:[x?s(`span`,{className:e.a,children:x}):null,c(`div`,{className:a.w,children:[w?c(`div`,{className:a.t,role:`toolbar`,children:[s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Жирный`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`bold`),children:`B`}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Курсив`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`italic`),children:s(`em`,{children:`I`})}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Подчёркивание`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`underline`),children:s(`u`,{children:`U`})}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Маркированный список`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`insertUnorderedList`),children:`•`}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Нумерованный список`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`insertOrderedList`),children:`1.`})]}):null,s(`div`,{ref:A,className:a.e,contentEditable:O,suppressContentEditableWarning:!0,spellCheck:C,role:`textbox`,"aria-multiline":!0,"aria-label":h||m||`Текст`,tabIndex:O?0:-1,onFocus:()=>{j.current=!0},onInput:()=>N(A.current?.innerHTML||``),onBlur:()=>{j.current=!1;let e=A.current?.innerHTML||``;N(e,!0),f?.({value:e,name:p})},...F})]}),b?s(`span`,{className:e.a,children:b}):null]})}l.displayName=`RichTextField`;export{l as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{isEmptyTextLike as i}from"./visibility.js";import a from"../styles/Rich.module.js";import o from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({value:l=``,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,maxLength:S,spellCheck:C=!0,toolbar:w=!0,size:T}){let{value:E,version:D}=n(u,p,l),O=!v,k=typeof E==`string`?E:``,A=o.useRef(null),j=o.useRef(!1);o.useLayoutEffect(()=>{if(j.current)return;let e=A.current;e&&e.innerHTML!==k&&(e.innerHTML=k||``)},[k,D]);let M=r(u,p,d),N=(e,t=!1)=>{S&&e.replace(/<[^>]+>/g,``).length>S||M(e,t)},P=e=>{if(O){A.current?.focus();try{document.execCommand(e,!1)}catch{}N(A.current?.innerHTML||``)}};if(_&&i(k.replace(/<[^>]+>/g,``)))return null;let F={};return m&&!k&&(F.placeholder=m),O&&(F.edit=``),c(t,{type:`richtext`,label:h,error:g,size:T,element_blok:{className:[y||``]},element_input:{className:[a.r],props:{"data-disabled":v||!O?`true`:void 0}},children:[x?s(`span`,{className:e.a,children:x}):null,c(`div`,{className:a.w,children:[w?c(`div`,{className:a.t,role:`toolbar`,children:[s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Жирный`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`bold`),children:`B`}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Курсив`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`italic`),children:s(`em`,{children:`I`})}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Подчёркивание`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`underline`),children:s(`u`,{children:`U`})}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Маркированный список`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`insertUnorderedList`),children:`•`}),s(`button`,{type:`button`,className:a.b,disabled:!O,"aria-label":`Нумерованный список`,onMouseDown:e=>e.preventDefault(),onClick:()=>P(`insertOrderedList`),children:`1.`})]}):null,s(`div`,{ref:A,className:a.e,contentEditable:O,suppressContentEditableWarning:!0,spellCheck:C,role:`textbox`,"aria-multiline":!0,"aria-label":h||m||`Текст`,tabIndex:O?0:-1,onFocus:()=>{j.current=!0},onInput:()=>N(A.current?.innerHTML||``),onBlur:()=>{j.current=!1;let e=A.current?.innerHTML||``;N(e,!0),f?.({value:e,name:p})},...F})]}),b?s(`span`,{className:e.a,children:b}):null]})}l.displayName=`RichTextField`;export{l as default};
@@ -1 +1 @@
1
- import e,{useFieldA11y as t}from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as ee}from"./emit.js";import{isEmptyTextLike as r}from"./visibility.js";import i from"../styles/Search.module.js";import{formatResultsCount as te}from"./searchAnnounce.js";import{hotkeyBadgeLabel as ne,matchHotkey as re}from"./searchHotkey.js";import{SearchSuggestions as ie}from"./SearchSuggestions.js";import{useCallback as a,useEffect as o,useId as s,useRef as c,useState as l}from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";import{createPortal as ae}from"react-dom";function oe(e){return e?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.tagName===`SELECT`||e.isContentEditable:!1}function se(){return!!document.querySelector(`[data-elcrm-modal], .elcrm-modal, [role="dialog"]`)}function ce(){return u(`svg`,{"aria-hidden":!0,viewBox:`0 0 24 24`,className:i.v,children:u(`path`,{d:`M17.5 17.5L22 22m-2-11a9 9 0 1 0-18 0a9 9 0 0 0 18 0`})})}function le(){return u(`svg`,{"aria-hidden":!0,viewBox:`0 0 24 24`,className:i.v,children:u(`path`,{d:`M17 6L6 17M6 6L17 17`})})}function f(){return u(`svg`,{"aria-hidden":!0,viewBox:`0 0 24 24`,className:`${i.v} ${i.i}`,children:u(`circle`,{cx:`12`,cy:`12`,r:`9`,fill:`none`,strokeDasharray:`40 20`})})}function p({value:t,form:p,onValue:de,onBlur:fe,name:m=``,placeholder:pe=`Поиск…`,label:me=``,error:he=``,hidden:ge=!1,disabled:h=!1,className:_e=``,after:ve=``,before:ye,id:be,size:xe=`m`,maxLength:Se,autoComplete:Ce=`off`,timeout:we=250,onSearch:g,loading:Te=!1,suggestions:_,loadSuggestions:v,onSuggestionSelect:Ee,renderSuggestion:De,suggestionsOpen:y,onSuggestionsOpenChange:b,width:Oe=`m`,variant:ke=`default`,dir:Ae,resultsCount:x=null,resultsAnnounce:S,minimal:C=!1,collapseDelay:je=180,hotkeyBadge:Me,clearable:Ne=!0,hotkey:w=!1}){let{value:T}=n(p,m,t),E=typeof T==`string`?T:T==null?``:String(T),Pe=`${s()}-list`,D=c(null),O=c(null),k=c(null),A=c(null),j=c(0),M=c(0),N=c(!1),P=c(E),[F,I]=l(E),[Fe,L]=l(!1),[Ie,R]=l(!1),[Le,z]=l(!1),[Re,ze]=l(!1),[Be,B]=l(null),[Ve,V]=l(!1),[H,U]=l(-1),[He,Ue]=l(null),We=Me??!!(C&&w),Ge=Te||Le||Re,Ke=!h,W=Be??_??[],G=!!(v||_!==void 0);o(()=>{N.current||(I(E),P.current=E)},[E]);let K=e=>{e.current!=null&&(window.clearTimeout(e.current),e.current=null)},q=ee(p,m,de),J=a(async e=>{if(!v){B(null);return}let t=++M.current;ze(!0);try{let n=await Promise.resolve(v(e));if(t!==M.current)return;B(n),U(n.length?0:-1)}catch{if(t!==M.current)return;B([]),U(-1)}finally{t===M.current&&ze(!1)}},[v]),qe=a((e,t=!1)=>{K(k);let n=()=>{if(P.current=e,q(e,!0),g){let t=++j.current,n=g(e);n&&typeof n.then==`function`&&(z(!0),Promise.resolve(n).finally(()=>{t===j.current&&z(!1)}))}v&&J(e)};t||we<=0?n():k.current=window.setTimeout(n,we)},[q,g,v,J,we]);o(()=>()=>{K(k),K(A)},[]);let Y=a(()=>{O.current?.focus()},[]);o(()=>{if(!w||h)return;let e=e=>{oe(e.target)||se()||re(e,w)&&(e.preventDefault(),Y(),O.current?.select())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[w,h,Y]);let Je=a(()=>{!G||h||(V(!0),b?.(!0))},[G,h,b]),X=a(()=>{V(!1),U(-1),b?.(!1)},[b]);o(()=>{y!==void 0&&(V(y),y||U(-1))},[y]);let Z=y===void 0?Ve:y,Q=a(()=>{let e=D.current;e&&Ue(e.getBoundingClientRect())},[]);o(()=>{if(!Z)return;Q();let e=()=>Q();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[Z,Q]);let Ye=a(e=>{let t=e.value??e.label;if(I(t),P.current=t,q(t,!0),Ee?.(e),X(),g){let e=++j.current,n=g(t);n&&typeof n.then==`function`&&(z(!0),Promise.resolve(n).finally(()=>{e===j.current&&z(!1)}))}Y()},[q,Ee,g,X,Y]),Xe=e=>{let t=e.target.value;I(t),Je(),qe(t)},Ze=()=>{I(``),P.current=``,qe(``,!0),Je(),Y()},Qe=e=>{if(Z&&W.length){if(e.key===`ArrowDown`){e.preventDefault(),U(e=>(e+1)%W.length);return}if(e.key===`ArrowUp`){e.preventDefault(),U(e=>e<=0?W.length-1:e-1);return}if(e.key===`Enter`&&H>=0){e.preventDefault(),Ye(W[H]);return}}if(e.key===`Escape`){if(Z){e.preventDefault(),X();return}F&&(e.preventDefault(),Ze())}},$e=()=>{N.current=!0,K(A),R(!1),L(!0),Je(),v?J(F):_&&U(_.length?0:-1)},et=()=>{N.current=!1,F!==P.current&&qe(F,!0),fe?.({value:F,name:m});let e=document.activeElement;if(e&&D.current?.contains(e)){L(!1);return}L(!1),C&&(F||Z||je>0)?(R(!0),K(A),A.current=window.setTimeout(()=>{R(!1),X()},Math.max(0,je))):X()},$=!C||Fe||Ie||!!F||Z,tt=Z&&G&&$,nt=x==null?``:typeof S==`string`?S:typeof S==`function`?S(x):te(x),rt=e=>{!C||h||$||e.target!==O.current&&(e.preventDefault(),Y())};if(ge&&r(F)&&r(E))return null;let it=Ge?u(f,{}):ye??u(ce,{}),at=Oe===`s`?i.s:Oe===`l`?i.l:i.m;return d(e,{type:`search`,label:me,error:he,id:be,size:xe,element_blok:{className:[_e||``,i.c,at,C?i.p:``,C&&$?i.e:``,C&&We&&!$?i.y:``]},element_input:{className:[i.r],props:{"data-disabled":h||!Ke?`true`:void 0,"data-variant":ke===`default`?void 0:ke,"data-minimal":C?`true`:void 0,"data-expanded":C?$?`true`:`false`:void 0,"data-loading":Ge?`true`:void 0,dir:Ae,onMouseDown:rt}},children:[d(`div`,{ref:D,className:i.d,role:`search`,children:[u(`span`,{className:i.b,"aria-hidden":!0,children:it}),u(ue,{inputRef:O,draft:F,disabled:h,maxLength:Se,placeholder:pe,autoComplete:Ce,name:m,id:be,expanded:$,minimal:C,hasSuggestSource:G,showList:tt,listId:Pe,activeIndex:H,label:me,onChange:Xe,onKeyDown:Qe,onBlur:et,onFocus:$e}),C&&We&&!$&&w?u(`kbd`,{className:i.k,children:ne(w)}):null,Ne&&F&&$?u(`button`,{type:`button`,className:i.x,"aria-label":`Очистить поиск`,tabIndex:-1,disabled:h,onClick:Ze,children:u(le,{})}):u(`span`,{className:i.u,"aria-hidden":!0}),ve?u(`span`,{className:i.w,children:ve}):null,u(`span`,{"data-live":!0,"aria-live":`polite`,"aria-atomic":`true`,children:nt})]}),tt&&He?ae(u(ie,{id:Pe,items:W,activeIndex:H,parent:He,onHover:U,onSelect:e=>Ye(e),renderItem:De}),document.body):null]})}function ue({inputRef:e,draft:n,disabled:ee,maxLength:r,placeholder:te,autoComplete:ne,name:re,id:ie,expanded:a,minimal:o,hasSuggestSource:s,showList:c,listId:l,activeIndex:d,label:ae,onChange:oe,onKeyDown:se,onBlur:ce,onFocus:le}){let f=t();return u(`input`,{ref:e,id:ie||f?.controlId,name:re||void 0,type:`search`,className:i.n,placeholder:te,value:n,disabled:ee,maxLength:r,autoComplete:ne,tabIndex:o&&!a?-1:void 0,role:s?`combobox`:void 0,"aria-label":ae?void 0:te||`Поиск`,"aria-expanded":s?c:o?a:void 0,"aria-controls":c?l:void 0,"aria-activedescendant":c&&d>=0?`${l}-opt-${d}`:void 0,"aria-autocomplete":s?`list`:void 0,"aria-describedby":f?.describedBy,"aria-invalid":f?.errorId?!0:void 0,onChange:oe,onKeyDown:se,onBlur:ce,onFocus:le})}p.displayName=`SearchField`;export{p as default};
1
+ import e,{useFieldA11y as t}from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as ee}from"./emit.js";import{isEmptyTextLike as r}from"./visibility.js";import i from"../styles/Search.module.js";import{formatResultsCount as te}from"./searchAnnounce.js";import{hotkeyBadgeLabel as ne,matchHotkey as re}from"./searchHotkey.js";import{SearchSuggestions as ie}from"./SearchSuggestions.js";import{useCallback as a,useEffect as o,useId as s,useRef as c,useState as l}from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";import{createPortal as ae}from"react-dom";function oe(e){return e?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.tagName===`SELECT`||e.isContentEditable:!1}function se(){return!!document.querySelector(`[data-elcrm-modal], .elcrm-modal, [role="dialog"]`)}function ce(){return u(`svg`,{"aria-hidden":!0,viewBox:`0 0 24 24`,className:i.v,children:u(`path`,{d:`M17.5 17.5L22 22m-2-11a9 9 0 1 0-18 0a9 9 0 0 0 18 0`})})}function le(){return u(`svg`,{"aria-hidden":!0,viewBox:`0 0 24 24`,className:i.v,children:u(`path`,{d:`M17 6L6 17M6 6L17 17`})})}function f(){return u(`svg`,{"aria-hidden":!0,viewBox:`0 0 24 24`,className:`${i.v} ${i.i}`,children:u(`circle`,{cx:`12`,cy:`12`,r:`9`,fill:`none`,strokeDasharray:`40 20`})})}function p({value:t,form:p,onValue:de,onBlur:fe,name:m=``,placeholder:pe=`Поиск…`,label:me=``,error:he=``,hidden:ge=!1,disabled:h=!1,className:_e=``,after:ve=``,before:ye,id:be,size:xe,maxLength:Se,autoComplete:Ce=`off`,timeout:we=250,onSearch:g,loading:Te=!1,suggestions:_,loadSuggestions:v,onSuggestionSelect:Ee,renderSuggestion:De,suggestionsOpen:y,onSuggestionsOpenChange:b,width:Oe=`m`,variant:ke=`default`,dir:Ae,resultsCount:x=null,resultsAnnounce:S,minimal:C=!1,collapseDelay:je=180,hotkeyBadge:Me,clearable:Ne=!0,hotkey:w=!1}){let{value:T}=n(p,m,t),E=typeof T==`string`?T:T==null?``:String(T),Pe=`${s()}-list`,D=c(null),O=c(null),k=c(null),A=c(null),j=c(0),M=c(0),N=c(!1),P=c(E),[F,I]=l(E),[Fe,L]=l(!1),[Ie,R]=l(!1),[Le,z]=l(!1),[Re,ze]=l(!1),[Be,B]=l(null),[Ve,V]=l(!1),[H,U]=l(-1),[He,Ue]=l(null),We=Me??!!(C&&w),Ge=Te||Le||Re,Ke=!h,W=Be??_??[],G=!!(v||_!==void 0);o(()=>{N.current||(I(E),P.current=E)},[E]);let K=e=>{e.current!=null&&(window.clearTimeout(e.current),e.current=null)},q=ee(p,m,de),J=a(async e=>{if(!v){B(null);return}let t=++M.current;ze(!0);try{let n=await Promise.resolve(v(e));if(t!==M.current)return;B(n),U(n.length?0:-1)}catch{if(t!==M.current)return;B([]),U(-1)}finally{t===M.current&&ze(!1)}},[v]),qe=a((e,t=!1)=>{K(k);let n=()=>{if(P.current=e,q(e,!0),g){let t=++j.current,n=g(e);n&&typeof n.then==`function`&&(z(!0),Promise.resolve(n).finally(()=>{t===j.current&&z(!1)}))}v&&J(e)};t||we<=0?n():k.current=window.setTimeout(n,we)},[q,g,v,J,we]);o(()=>()=>{K(k),K(A)},[]);let Y=a(()=>{O.current?.focus()},[]);o(()=>{if(!w||h)return;let e=e=>{oe(e.target)||se()||re(e,w)&&(e.preventDefault(),Y(),O.current?.select())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[w,h,Y]);let Je=a(()=>{!G||h||(V(!0),b?.(!0))},[G,h,b]),X=a(()=>{V(!1),U(-1),b?.(!1)},[b]);o(()=>{y!==void 0&&(V(y),y||U(-1))},[y]);let Z=y===void 0?Ve:y,Q=a(()=>{let e=D.current;e&&Ue(e.getBoundingClientRect())},[]);o(()=>{if(!Z)return;Q();let e=()=>Q();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[Z,Q]);let Ye=a(e=>{let t=e.value??e.label;if(I(t),P.current=t,q(t,!0),Ee?.(e),X(),g){let e=++j.current,n=g(t);n&&typeof n.then==`function`&&(z(!0),Promise.resolve(n).finally(()=>{e===j.current&&z(!1)}))}Y()},[q,Ee,g,X,Y]),Xe=e=>{let t=e.target.value;I(t),Je(),qe(t)},Ze=()=>{I(``),P.current=``,qe(``,!0),Je(),Y()},Qe=e=>{if(Z&&W.length){if(e.key===`ArrowDown`){e.preventDefault(),U(e=>(e+1)%W.length);return}if(e.key===`ArrowUp`){e.preventDefault(),U(e=>e<=0?W.length-1:e-1);return}if(e.key===`Enter`&&H>=0){e.preventDefault(),Ye(W[H]);return}}if(e.key===`Escape`){if(Z){e.preventDefault(),X();return}F&&(e.preventDefault(),Ze())}},$e=()=>{N.current=!0,K(A),R(!1),L(!0),Je(),v?J(F):_&&U(_.length?0:-1)},et=()=>{N.current=!1,F!==P.current&&qe(F,!0),fe?.({value:F,name:m});let e=document.activeElement;if(e&&D.current?.contains(e)){L(!1);return}L(!1),C&&(F||Z||je>0)?(R(!0),K(A),A.current=window.setTimeout(()=>{R(!1),X()},Math.max(0,je))):X()},$=!C||Fe||Ie||!!F||Z,tt=Z&&G&&$,nt=x==null?``:typeof S==`string`?S:typeof S==`function`?S(x):te(x),rt=e=>{!C||h||$||e.target!==O.current&&(e.preventDefault(),Y())};if(ge&&r(F)&&r(E))return null;let it=Ge?u(f,{}):ye??u(ce,{}),at=Oe===`s`?i.s:Oe===`l`?i.l:i.m;return d(e,{type:`search`,label:me,error:he,id:be,size:xe,element_blok:{className:[_e||``,i.c,at,C?i.p:``,C&&$?i.e:``,C&&We&&!$?i.y:``]},element_input:{className:[i.r],props:{"data-disabled":h||!Ke?`true`:void 0,"data-variant":ke===`default`?void 0:ke,"data-minimal":C?`true`:void 0,"data-expanded":C?$?`true`:`false`:void 0,"data-loading":Ge?`true`:void 0,dir:Ae,onMouseDown:rt}},children:[d(`div`,{ref:D,className:i.d,role:`search`,children:[u(`span`,{className:i.b,"aria-hidden":!0,children:it}),u(ue,{inputRef:O,draft:F,disabled:h,maxLength:Se,placeholder:pe,autoComplete:Ce,name:m,id:be,expanded:$,minimal:C,hasSuggestSource:G,showList:tt,listId:Pe,activeIndex:H,label:me,onChange:Xe,onKeyDown:Qe,onBlur:et,onFocus:$e}),C&&We&&!$&&w?u(`kbd`,{className:i.k,children:ne(w)}):null,Ne&&F&&$?u(`button`,{type:`button`,className:i.x,"aria-label":`Очистить поиск`,tabIndex:-1,disabled:h,onClick:Ze,children:u(le,{})}):u(`span`,{className:i.u,"aria-hidden":!0}),ve?u(`span`,{className:i.w,children:ve}):null,u(`span`,{"data-live":!0,"aria-live":`polite`,"aria-atomic":`true`,children:nt})]}),tt&&He?ae(u(ie,{id:Pe,items:W,activeIndex:H,parent:He,onHover:U,onSelect:e=>Ye(e),renderItem:De}),document.body):null]})}function ue({inputRef:e,draft:n,disabled:ee,maxLength:r,placeholder:te,autoComplete:ne,name:re,id:ie,expanded:a,minimal:o,hasSuggestSource:s,showList:c,listId:l,activeIndex:d,label:ae,onChange:oe,onKeyDown:se,onBlur:ce,onFocus:le}){let f=t();return u(`input`,{ref:e,id:ie||f?.controlId,name:re||void 0,type:`search`,className:i.n,placeholder:te,value:n,disabled:ee,maxLength:r,autoComplete:ne,tabIndex:o&&!a?-1:void 0,role:s?`combobox`:void 0,"aria-label":ae?void 0:te||`Поиск`,"aria-expanded":s?c:o?a:void 0,"aria-controls":c?l:void 0,"aria-activedescendant":c&&d>=0?`${l}-opt-${d}`:void 0,"aria-autocomplete":s?`list`:void 0,"aria-describedby":f?.describedBy,"aria-invalid":f?.errorId?!0:void 0,onChange:oe,onKeyDown:se,onBlur:ce,onFocus:le})}p.displayName=`SearchField`;export{p as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{acquireOverlayZIndex as i,releaseOverlayZIndex as a}from"../overlayZ.js";import o from"../styles/Select.module.js";import s,{useEffect as c,useState as l}from"react";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";import{createPortal as p}from"react-dom";function m({value:i=0,form:a,onValue:l,name:m=``,placeholder:h=``,label:_,error:v,hidden:y=!1,disabled:b=!1,className:x,after:S=``,before:C=``,options:w,order:T,size:E=`m`}){let[D,O]=s.useState(!1),[k,A]=s.useState(0),[j,M]=s.useState(null),N=s.useRef(null),P=s.useId(),F=s.useCallback(()=>{let e=N.current;if(!e)return;let t=e.getBoundingClientRect();M(e=>e&&e.top===t.top&&e.left===t.left&&e.width===t.width&&e.height===t.height&&e.bottom===t.bottom?e:t)},[]);c(()=>{if(!D)return;F();let e=()=>F();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[D,F]);let{value:I}=n(a,m,i??0),L=Number(I),R=[];w&&(R=Array.isArray(w)?w.map(e=>({id:e.id??e.i??0,label:e.n||``,hidden:e.s===0})).filter(e=>e.id!==0&&e.label.length>0):Object.keys(w).map(e=>{let t=Number(e),n=w[t];return{id:t,label:n?.n||``,hidden:n?.s===0}}).filter(e=>e.label.length>0));let z=(()=>{if(!T||T.length===0)return R;let e=new Map(R.map(e=>[e.id,e]));return T.map(t=>e.get(t)).filter(e=>!!e)})().filter(e=>!e.hidden),B=e=>z.find(t=>t.id===e)?.label,V=D&&z.length>0?`${P}-opt-${k}`:void 0,H=e=>{r(a,m,l)(e,!0)},U=e=>{if(z.length===0||b)return;let t=z.findIndex(e=>e.id===L);N.current=e;let n=e.getBoundingClientRect(),r=t>=0?t:0;M(n),A(r),O(!0)},W=e=>{U(e.currentTarget)},G=e=>{if(!b&&z.length!==0){if(!D&&(e.key===`ArrowDown`||e.key===`Enter`||e.key===` `)){e.preventDefault(),U(e.currentTarget);return}if(D){if(e.key===`Escape`){e.preventDefault(),O(!1);return}if(e.key===`ArrowDown`){e.preventDefault(),A(e=>(e+1)%z.length);return}if(e.key===`ArrowUp`){e.preventDefault(),A(e=>e-1<0?z.length-1:e-1);return}if(e.key===`Enter`){e.preventDefault();let t=z[k];t&&H(t.id),O(!1)}}}},K={};h&&(K.placeholder=h);let q=B(L),J=(q===void 0||q===``)&&!!h,Y=L===0||B(L)===void 0;return y&&Y?``:f(u,{children:[f(t,{type:`select`,label:_,element_blok:{className:[x||``]},error:v,size:E,element_input:{className:[e.w,o.f],props:{onClick:W,onKeyDown:G,tabIndex:b?-1:0,role:`combobox`,"aria-expanded":D,"aria-haspopup":`listbox`,"aria-controls":P,...V?{"aria-activedescendant":V}:{},"aria-disabled":b?!0:void 0,"data-disabled":b?`true`:void 0}},children:[C?d(`span`,{className:e.a,children:C}):null,d(`div`,{...K,className:[e.x,J?o.p:``].filter(Boolean).join(` `),children:q??h??``}),S?d(`span`,{className:e.a,children:S}):null]}),D&&p(d(g,{parent:j||void 0,onValue:H,className:x,items:z,setOpen:O,listId:P,activeIndex:k,currentValue:L}),document.body)]})}m.displayName=`SelectField`;var h=s.memo(m),g=({onValue:e,parent:t,className:n,items:r,setOpen:s,listId:p,activeIndex:m,currentValue:h})=>{let[g]=l(()=>i());if(c(()=>()=>a(g),[g]),!t)return null;let v=()=>{s(!1)},y=t=>{s(!1),e(t)},b=Math.min(300,Math.max(52,r.length*52+8)),x=window.innerHeight-t.bottom-6-8,S=t.top-6-8,C=x<Math.min(b,160)&&S>x,w=Math.max(t.width,260),T=Math.min(Math.max(8,t.left),window.innerWidth-w-8),E=C?t.top-b-6:t.bottom+6;return E=Math.min(E,window.innerHeight-b-8),E=Math.max(8,E),f(u,{children:[d(`div`,{className:o.o,style:{zIndex:g},onClick:v,"aria-hidden":!0}),d(`div`,{className:[o.l,n].filter(e=>e!==void 0).join(` `),style:{top:`${E}px`,left:T+`px`,width:w,zIndex:g+1},children:d(_,{listId:p,items:r,link:y,activeIndex:m,currentValue:h})})]})},_=({listId:e,items:t,link:n,activeIndex:r,currentValue:i})=>d(`ul`,{id:e,role:`listbox`,children:t.map((t,a)=>d(`li`,{id:`${e}-opt-${a}`,role:`option`,"aria-selected":i===t.id,"data-focus":r===a?`true`:`false`,onClick:()=>n(t.id),children:t.label},t.id))});export{h as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import{acquireOverlayZIndex as i,releaseOverlayZIndex as a}from"../overlayZ.js";import o from"../styles/Select.module.js";import s,{useEffect as c,useState as l}from"react";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";import{createPortal as p}from"react-dom";function m({value:i=0,form:a,onValue:l,name:m=``,placeholder:h=``,label:_,error:v,hidden:y=!1,disabled:b=!1,className:x,after:S=``,before:C=``,options:w,order:T,size:E}){let[D,O]=s.useState(!1),[k,A]=s.useState(0),[j,M]=s.useState(null),N=s.useRef(null),P=s.useId(),F=s.useCallback(()=>{let e=N.current;if(!e)return;let t=e.getBoundingClientRect();M(e=>e&&e.top===t.top&&e.left===t.left&&e.width===t.width&&e.height===t.height&&e.bottom===t.bottom?e:t)},[]);c(()=>{if(!D)return;F();let e=()=>F();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[D,F]);let{value:I}=n(a,m,i??0),L=Number(I),R=[];w&&(R=Array.isArray(w)?w.map(e=>({id:e.id??e.i??0,label:e.n||``,hidden:e.s===0})).filter(e=>e.id!==0&&e.label.length>0):Object.keys(w).map(e=>{let t=Number(e),n=w[t];return{id:t,label:n?.n||``,hidden:n?.s===0}}).filter(e=>e.label.length>0));let z=(()=>{if(!T||T.length===0)return R;let e=new Map(R.map(e=>[e.id,e]));return T.map(t=>e.get(t)).filter(e=>!!e)})().filter(e=>!e.hidden),B=e=>z.find(t=>t.id===e)?.label,V=D&&z.length>0?`${P}-opt-${k}`:void 0,H=e=>{r(a,m,l)(e,!0)},U=e=>{if(z.length===0||b)return;let t=z.findIndex(e=>e.id===L);N.current=e;let n=e.getBoundingClientRect(),r=t>=0?t:0;M(n),A(r),O(!0)},W=e=>{U(e.currentTarget)},G=e=>{if(!b&&z.length!==0){if(!D&&(e.key===`ArrowDown`||e.key===`Enter`||e.key===` `)){e.preventDefault(),U(e.currentTarget);return}if(D){if(e.key===`Escape`){e.preventDefault(),O(!1);return}if(e.key===`ArrowDown`){e.preventDefault(),A(e=>(e+1)%z.length);return}if(e.key===`ArrowUp`){e.preventDefault(),A(e=>e-1<0?z.length-1:e-1);return}if(e.key===`Enter`){e.preventDefault();let t=z[k];t&&H(t.id),O(!1)}}}},K={};h&&(K.placeholder=h);let q=B(L),J=(q===void 0||q===``)&&!!h,Y=L===0||B(L)===void 0;return y&&Y?``:f(u,{children:[f(t,{type:`select`,label:_,element_blok:{className:[x||``]},error:v,size:E,element_input:{className:[e.w,o.f],props:{onClick:W,onKeyDown:G,tabIndex:b?-1:0,role:`combobox`,"aria-expanded":D,"aria-haspopup":`listbox`,"aria-controls":P,...V?{"aria-activedescendant":V}:{},"aria-disabled":b?!0:void 0,"data-disabled":b?`true`:void 0}},children:[C?d(`span`,{className:e.a,children:C}):null,d(`div`,{...K,className:[e.x,J?o.p:``].filter(Boolean).join(` `),children:q??h??``}),S?d(`span`,{className:e.a,children:S}):null]}),D&&p(d(g,{parent:j||void 0,onValue:H,className:x,items:z,setOpen:O,listId:P,activeIndex:k,currentValue:L}),document.body)]})}m.displayName=`SelectField`;var h=s.memo(m),g=({onValue:e,parent:t,className:n,items:r,setOpen:s,listId:p,activeIndex:m,currentValue:h})=>{let[g]=l(()=>i());if(c(()=>()=>a(g),[g]),!t)return null;let v=()=>{s(!1)},y=t=>{s(!1),e(t)},b=Math.min(300,Math.max(52,r.length*52+8)),x=window.innerHeight-t.bottom-6-8,S=t.top-6-8,C=x<Math.min(b,160)&&S>x,w=Math.max(t.width,260),T=Math.min(Math.max(8,t.left),window.innerWidth-w-8),E=C?t.top-b-6:t.bottom+6;return E=Math.min(E,window.innerHeight-b-8),E=Math.max(8,E),f(u,{children:[d(`div`,{className:o.o,style:{zIndex:g},onClick:v,"aria-hidden":!0}),d(`div`,{className:[o.l,n].filter(e=>e!==void 0).join(` `),style:{top:`${E}px`,left:T+`px`,width:w,zIndex:g+1},children:d(_,{listId:p,items:r,link:y,activeIndex:m,currentValue:h})})]})},_=({listId:e,items:t,link:n,activeIndex:r,currentValue:i})=>d(`ul`,{id:e,role:`listbox`,children:t.map((t,a)=>d(`li`,{id:`${e}-opt-${a}`,role:`option`,"aria-selected":i===t.id,"data-focus":r===a?`true`:`false`,onClick:()=>n(t.id),children:t.label},t.id))});export{h as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Tabs.module.js";import"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(e){return e?Array.isArray(e)?e.map(e=>({id:e.id??e.i??``,label:e.n||``,disabled:e.s===0,icon:e.icon})).filter(e=>e.label.length>0&&e.id!==``):Object.keys(e).map(t=>{let n=e[t],r=Number(t);return{id:Number.isFinite(r)&&String(r)===t?r:t,label:n?.n||``,disabled:n?.s===0,icon:n?.icon}}).filter(e=>e.label.length>0):[]}function c(e,t){return e===t?!0:String(e)===String(t)}function l({value:l=``,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,options:S,equal:C,variant:w=`field`,size:T=`m`}){let{value:E}=n(u,p,l),D=!v,O=s(S),k=C!==!1,A=e=>{r(u,p,d)(e,!0)};return _&&(E==null||E===``)?null:o(t,{type:`tabs`,label:h,error:g,size:T,element_blok:{className:[y||``]},element_input:{className:[i.r],props:{"data-tabs":`true`,"data-disabled":v||!D?`true`:void 0,"data-variant":w}},children:[x?a(`span`,{className:e.a,children:x}):null,a(`div`,{className:[i.i,k?``:i.u].filter(Boolean).join(` `),role:`tablist`,"aria-label":h||m||`Вкладки`,children:O.map(e=>{let t=c(E,e.id),n=v||!D||e.disabled;return o(`div`,{role:`tab`,tabIndex:n?-1:t?0:-1,"aria-selected":t,"aria-disabled":n||void 0,className:[i.t,t?i.a:``].filter(Boolean).join(` `),onMouseDown:e=>{e.button===0&&e.preventDefault()},onClick:()=>{n||A(e.id)},onKeyDown:t=>{n||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),A(e.id))},onFocus:e=>{let t=e.currentTarget;requestAnimationFrame(()=>{t.matches(`:focus-visible`)||t.blur()})},onBlur:()=>{!f||!p||f({value:u?u.getValue(p,E):E,name:p})},children:[e.icon==null?null:a(`span`,{className:i.o,"aria-hidden":!0,children:e.icon}),a(`span`,{className:i.l,children:e.label})]},String(e.id))})}),b?a(`span`,{className:e.a,children:b}):null]})}l.displayName=`TabsField`;export{l as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Tabs.module.js";import"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(e){return e?Array.isArray(e)?e.map(e=>({id:e.id??e.i??``,label:e.n||``,disabled:e.s===0,icon:e.icon})).filter(e=>e.label.length>0&&e.id!==``):Object.keys(e).map(t=>{let n=e[t],r=Number(t);return{id:Number.isFinite(r)&&String(r)===t?r:t,label:n?.n||``,disabled:n?.s===0,icon:n?.icon}}).filter(e=>e.label.length>0):[]}function c(e,t){return e===t?!0:String(e)===String(t)}function l({value:l=``,form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=``,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,options:S,equal:C,variant:w=`field`,size:T}){let{value:E}=n(u,p,l),D=!v,O=s(S),k=C!==!1,A=e=>{r(u,p,d)(e,!0)};return _&&(E==null||E===``)?null:o(t,{type:`tabs`,label:h,error:g,size:T,element_blok:{className:[y||``]},element_input:{className:[i.r],props:{"data-tabs":`true`,"data-disabled":v||!D?`true`:void 0,"data-variant":w}},children:[x?a(`span`,{className:e.a,children:x}):null,a(`div`,{className:[i.i,k?``:i.u].filter(Boolean).join(` `),role:`tablist`,"aria-label":h||m||`Вкладки`,children:O.map(e=>{let t=c(E,e.id),n=v||!D||e.disabled;return o(`div`,{role:`tab`,tabIndex:n?-1:t?0:-1,"aria-selected":t,"aria-disabled":n||void 0,className:[i.t,t?i.a:``].filter(Boolean).join(` `),onMouseDown:e=>{e.button===0&&e.preventDefault()},onClick:()=>{n||A(e.id)},onKeyDown:t=>{n||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),A(e.id))},onFocus:e=>{let t=e.currentTarget;requestAnimationFrame(()=>{t.matches(`:focus-visible`)||t.blur()})},onBlur:()=>{!f||!p||f({value:u?u.getValue(p,E):E,name:p})},children:[e.icon==null?null:a(`span`,{className:i.o,"aria-hidden":!0,children:e.icon}),a(`span`,{className:i.l,children:e.label})]},String(e.id))})}),b?a(`span`,{className:e.a,children:b}):null]})}l.displayName=`TabsField`;export{l as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Tags.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e){return Array.isArray(e)?e.map(String).map(e=>e.trim()).filter(Boolean):typeof e==`string`&&e.trim()?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function l({value:l=[],form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=`Добавить…`,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,maxTags:S,maxLength:C,separators:w=[`,`,`Enter`],size:T=`m`}){let{value:E}=n(u,p,l),D=c(E),O=!v,[k,A]=a.useState(``),j=a.useRef(null),M=e=>{r(u,p,d)(e,!0)},N=e=>{let t=e.trim();if(t&&!(C&&t.length>C)){if(D.some(e=>e.toLowerCase()===t.toLowerCase())){A(``);return}S!==void 0&&D.length>=S||(M([...D,t]),A(``))}},P=e=>{O&&M(D.filter((t,n)=>n!==e))},F=e=>{if(O){if(w.includes(e.key)||e.key===`,`&&w.includes(`,`)){e.preventDefault(),N(k);return}e.key===`Backspace`&&!k&&D.length>0&&(e.preventDefault(),P(D.length-1))}},I=D.length===0;return _&&I?null:s(t,{type:`tags`,label:h,error:g,size:T,element_blok:{className:[y||``]},element_input:{className:[i.r],props:{"data-disabled":v||!O?`true`:void 0,onClick:()=>j.current?.focus()}},children:[x?o(`span`,{className:e.a,children:x}):null,s(`div`,{className:i.i,children:[D.map((e,t)=>s(`span`,{className:i.c,children:[o(`span`,{className:i.l,children:e}),O?o(`button`,{type:`button`,className:i.m,"aria-label":`Удалить ${e}`,onClick:e=>{e.stopPropagation(),P(t)},children:`×`}):null]},`${e}-${t}`)),O&&(S===void 0||D.length<S)?o(`input`,{ref:j,className:i.n,value:k,placeholder:D.length===0?m:``,disabled:v,maxLength:C,"aria-label":h||m||`Теги`,onChange:e=>A(e.target.value),onKeyDown:F,onBlur:()=>{k.trim()&&N(k),f?.({value:D,name:p})}}):null]}),b?o(`span`,{className:e.a,children:b}):null]})}l.displayName=`TagsField`;export{l as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../styles/Tags.module.js";import a from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(e){return Array.isArray(e)?e.map(String).map(e=>e.trim()).filter(Boolean):typeof e==`string`&&e.trim()?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function l({value:l=[],form:u,onValue:d,onBlur:f,name:p=``,placeholder:m=`Добавить…`,label:h=``,error:g=``,hidden:_=!1,disabled:v=!1,className:y=``,after:b=``,before:x=``,maxTags:S,maxLength:C,separators:w=[`,`,`Enter`],size:T}){let{value:E}=n(u,p,l),D=c(E),O=!v,[k,A]=a.useState(``),j=a.useRef(null),M=e=>{r(u,p,d)(e,!0)},N=e=>{let t=e.trim();if(t&&!(C&&t.length>C)){if(D.some(e=>e.toLowerCase()===t.toLowerCase())){A(``);return}S!==void 0&&D.length>=S||(M([...D,t]),A(``))}},P=e=>{O&&M(D.filter((t,n)=>n!==e))},F=e=>{if(O){if(w.includes(e.key)||e.key===`,`&&w.includes(`,`)){e.preventDefault(),N(k);return}e.key===`Backspace`&&!k&&D.length>0&&(e.preventDefault(),P(D.length-1))}},I=D.length===0;return _&&I?null:s(t,{type:`tags`,label:h,error:g,size:T,element_blok:{className:[y||``]},element_input:{className:[i.r],props:{"data-disabled":v||!O?`true`:void 0,onClick:()=>j.current?.focus()}},children:[x?o(`span`,{className:e.a,children:x}):null,s(`div`,{className:i.i,children:[D.map((e,t)=>s(`span`,{className:i.c,children:[o(`span`,{className:i.l,children:e}),O?o(`button`,{type:`button`,className:i.m,"aria-label":`Удалить ${e}`,onClick:e=>{e.stopPropagation(),P(t)},children:`×`}):null]},`${e}-${t}`)),O&&(S===void 0||D.length<S)?o(`input`,{ref:j,className:i.n,value:k,placeholder:D.length===0?m:``,disabled:v,maxLength:C,"aria-label":h||m||`Теги`,onChange:e=>A(e.target.value),onKeyDown:F,onBlur:()=>{k.trim()&&N(k),f?.({value:D,name:p})}}):null]}),b?o(`span`,{className:e.a,children:b}):null]})}l.displayName=`TagsField`;export{l as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import c from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({value:n,form:d,onValue:p,name:m=``,placeholder:h=``,label:g=``,hidden:_=!1,disabled:v=!1,onBlur:y,className:b=``,after:x=``,before:S=``,error:C=``,size:w=`m`,inputmode:T=`text`,maxLength:E,spellCheck:D=!0}){let{value:O,version:k}=r(d,m||``,n),A=!v,j=String(O??``),M=c.useRef(null),N=c.useRef(!1);c.useLayoutEffect(()=>{if(N.current)return;let e=M.current;e&&e.innerText!==j&&(e.innerText=j)},[j,k]);let P=i(d,m,p),F=e=>{P(e.currentTarget.innerText)},I=e=>{let t=(e.currentTarget.textContent??``).trim();E&&t.length>=E&&e.key!==`Backspace`&&e.preventDefault(),e.key===`Enter`&&!e.shiftKey&&e.preventDefault()},L=e=>a.Paste(E||0,o(e));if(_&&s(O))return null;let R={};h&&(R.placeholder=h),A&&(R.edit=``),R.inputMode=T||`text`;let z=e=>{a.Blur(e),y?.({value:(e.currentTarget.textContent??``).trim(),name:m||``}),N.current=!1},B=()=>{N.current=!0};return u(t,{type:`note`,label:g,error:C,size:w,element_blok:{className:[b||``]},element_input:{className:[e.n],props:{"data-disabled":v||!A?`true`:void 0}},children:[S?l(`span`,{className:e.a,children:S}):null,l(f,{divRef:M,editable:A,label:g,placeholder:h,spellCheck:D,dd:R,onPaste:L,onInput:F,onFocus:B,onBlur:z,onKeyDown:I}),x?l(`span`,{className:e.a,children:x}):null]})}function f({divRef:e,editable:t,label:r,placeholder:i,spellCheck:a,dd:o,onPaste:s,onInput:c,onFocus:u,onBlur:d,onKeyDown:f}){let p=n();return l(`div`,{ref:e,id:p?.controlId,role:`textbox`,"aria-multiline":`true`,"aria-label":r?void 0:i||`Текст`,"aria-describedby":p?.describedBy,"aria-invalid":p?.errorId?!0:void 0,tabIndex:t?0:-1,"aria-disabled":t?void 0:!0,onPaste:s,onInput:c,onFocus:u,onBlur:d,onKeyDown:f,spellCheck:a,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...o})}d.displayName=`TextareaField`;export{d as default};
1
+ import e from"../styles/Field.module.js";import t,{useFieldA11y as n}from"../core/Field.js";import{useFormFieldState as r}from"../hooks/use.js";import{createFieldEmit as i}from"./emit.js";import a,{asEditableClipboard as o}from"../events/onEvent.js";import{isEmptyTextLike as s}from"./visibility.js";import c from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({value:n,form:d,onValue:p,name:m=``,placeholder:h=``,label:g=``,hidden:_=!1,disabled:v=!1,onBlur:y,className:b=``,after:x=``,before:S=``,error:C=``,size:w,inputmode:T=`text`,maxLength:E,spellCheck:D=!0}){let{value:O,version:k}=r(d,m||``,n),A=!v,j=String(O??``),M=c.useRef(null),N=c.useRef(!1);c.useLayoutEffect(()=>{if(N.current)return;let e=M.current;e&&e.innerText!==j&&(e.innerText=j)},[j,k]);let P=i(d,m,p),F=e=>{P(e.currentTarget.innerText)},I=e=>{let t=(e.currentTarget.textContent??``).trim();E&&t.length>=E&&e.key!==`Backspace`&&e.preventDefault(),e.key===`Enter`&&!e.shiftKey&&e.preventDefault()},L=e=>a.Paste(E||0,o(e));if(_&&s(O))return null;let R={};h&&(R.placeholder=h),A&&(R.edit=``),R.inputMode=T||`text`;let z=e=>{a.Blur(e),y?.({value:(e.currentTarget.textContent??``).trim(),name:m||``}),N.current=!1},B=()=>{N.current=!0};return u(t,{type:`note`,label:g,error:C,size:w,element_blok:{className:[b||``]},element_input:{className:[e.n],props:{"data-disabled":v||!A?`true`:void 0}},children:[S?l(`span`,{className:e.a,children:S}):null,l(f,{divRef:M,editable:A,label:g,placeholder:h,spellCheck:D,dd:R,onPaste:L,onInput:F,onFocus:B,onBlur:z,onKeyDown:I}),x?l(`span`,{className:e.a,children:x}):null]})}function f({divRef:e,editable:t,label:r,placeholder:i,spellCheck:a,dd:o,onPaste:s,onInput:c,onFocus:u,onBlur:d,onKeyDown:f}){let p=n();return l(`div`,{ref:e,id:p?.controlId,role:`textbox`,"aria-multiline":`true`,"aria-label":r?void 0:i||`Текст`,"aria-describedby":p?.describedBy,"aria-invalid":p?.errorId?!0:void 0,tabIndex:t?0:-1,"aria-disabled":t?void 0:!0,onPaste:s,onInput:c,onFocus:u,onBlur:d,onKeyDown:f,spellCheck:a,contentEditable:t?`plaintext-only`:!1,suppressContentEditableWarning:!0,...o})}d.displayName=`TextareaField`;export{d as default};
@@ -1 +1 @@
1
- import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../events/onEvent.js";import a from"../styles/Time.module.js";import o from"./TimePicker.js";import{buildTimeSlots as s,clampToRange as c,combine as l,digitsOnly as u,getRangeStartOffsetInElement as ee,normalizeTime as d,pad2 as f,parsePartDigits as p,setCursorPosition as m,snapMinute as h,splitTime as g}from"./timeUtils.js";import _ from"react";import{Fragment as te,jsx as v,jsxs as y}from"react/jsx-runtime";import{createPortal as ne}from"react-dom";function re(){return y(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,"aria-hidden":!0,children:[v(`circle`,{cx:`12`,cy:`12`,r:`8.25`,stroke:`currentColor`,strokeWidth:`1.75`}),v(`path`,{d:`M12 7.5V12l3 2`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`})]})}function b({value:b=``,form:x,onValue:S,onBlur:C,name:w=``,placeholder:T=``,label:E=``,hidden:ie=!1,disabled:D=!1,error:ae=``,className:O=``,after:oe=``,before:se=``,step:k=60,min:A,max:j,id:ce,spellCheck:M=!1,align:le=`start`,picker:N=!1,presets:P,size:ue=`m`}){let{value:de,version:fe}=n(x,w,b),F=d(de),I=!D,L=_.useRef(null),R=_.useRef(null),z=_.useRef(null),B=_.useRef(null),[V,H]=_.useState(!1),[U,W]=_.useState(!1),[G,pe]=_.useState(null),[K,q]=_.useState(0),J=_.useId(),Y=_.useMemo(()=>s(k,A,j,P),[k,A,j,P]);_.useLayoutEffect(()=>{if(!V||!I)return;let{h:e,m:t}=g(F),n=(e,t)=>{e&&(t===null?e.innerHTML=`<br>`:e.textContent=String(t))};n(L.current,e),n(R.current,t)},[V,F,fe,I]);let me=_.useCallback(()=>{let e=p(L.current?.textContent||``,23),t=p(R.current?.textContent||``,59);if(e===null&&t===null)return``;let n=l(e,t);if(!n)return``;let{h:r,m:i}=g(n);return i!==null&&(n=l(r,h(i,k))),n&&=c(n,A,j),n||``},[A,j,k]),X=_.useCallback(e=>{let t=d(e);if(t){let{h:e,m:n}=g(t);n!==null&&(t=l(e,h(n,k))),t=c(t,A,j)}return r(x,w,S)(t,!0),t},[x,w,S,A,j,k]),he=_.useCallback(()=>{if(!N||!I||Y.length===0)return;let e=B.current;if(!e)return;let t=Math.max(0,Y.findIndex(e=>e===F));q(t>=0?t:0),pe(e.getBoundingClientRect()),W(!0)},[N,I,Y,F]);_.useEffect(()=>{if(!U)return;let e=()=>{let e=B.current;e&&pe(e.getBoundingClientRect())};return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[U]),_.useEffect(()=>{if(!U)return;let e=e=>{if(e.key===`Escape`){e.preventDefault(),W(!1);return}if(Y.length!==0){if(e.key===`ArrowDown`)e.preventDefault(),q(e=>(e+1)%Y.length);else if(e.key===`ArrowUp`)e.preventDefault(),q(e=>e-1<0?Y.length-1:e-1);else if(e.key===`Enter`){e.preventDefault();let t=Y[K];t&&(X(t),W(!1))}}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[U,Y,K,X]);let ge=e=>t=>{if(t.preventDefault(),!I)return;let n=u(t.clipboardData?.getData(`text/plain`)??``),r=e===`hour`?23:59;if(n.length>=4){let e=Math.min(23,Math.max(0,parseInt(n.slice(0,2),10))),t=Math.min(59,Math.max(0,parseInt(n.slice(2,4),10))),r=L.current,i=R.current;r&&(r.textContent=String(e),queueMicrotask(()=>m(String(e).length,r))),i&&(i.textContent=String(t),queueMicrotask(()=>m(String(t).length,i)));return}let i=n.slice(0,2),a=t.currentTarget;if(i===``){a.innerHTML=`<br>`,queueMicrotask(()=>m(0,a));return}let o=parseInt(i,10);if(Number.isNaN(o))return;let s=String(Math.min(r,Math.max(0,o)));a.textContent=s,queueMicrotask(()=>m(s.length,a))},_e=e=>{let t=e.target,n=t.textContent||``,r=ee(t),i=n.slice(0,r).replace(/\D/g,``).length,a=u(n).slice(0,2);if(a===``){t.innerHTML=`<br>`,queueMicrotask(()=>m(0,t));return}let o=parseInt(a,10);if(Number.isNaN(o))return;let s=String(Math.min(23,Math.max(0,o)));t.textContent=s;let c=Math.min(i,s.length);queueMicrotask(()=>m(c,t))},ve=e=>{let t=e.target,n=t.textContent||``,r=ee(t),i=n.slice(0,r).replace(/\D/g,``).length,a=u(n).slice(0,2);if(a===``){t.innerHTML=`<br>`,queueMicrotask(()=>m(0,t));return}let o=parseInt(a,10);if(Number.isNaN(o))return;let s=String(Math.min(59,Math.max(0,o)));t.textContent=s;let c=Math.min(i,s.length);queueMicrotask(()=>m(c,t))},ye=e=>{(e.key===`Enter`||e.key===`:`)&&(e.preventDefault(),R.current?.focus())},be=e=>{e.key===`Enter`&&e.preventDefault()},xe=e=>{let t=e.currentTarget;(t.textContent||``).trim().length||(t.innerHTML=`<br>`),I&&H(!0)},Se=e=>{i.Blur(e)};_.useEffect(()=>{let e=z.current;if(!e)return;let t=t=>{let n=t.relatedTarget;if(n&&e.contains(n))return;let i=me();r(x,w,S)(i,!0),C&&w&&C({value:i,name:w}),H(!1)};return e.addEventListener(`focusout`,t),()=>e.removeEventListener(`focusout`,t)},[x,w,S,C,A,j,k,me]);let{h:Z,m:Ce}=g(F),Q={};I&&(Q.edit=``);let $={...Q},we={...Q};T&&($.placeholder=T);let Te=F!==``||V;return ie&&F===``?null:y(te,{children:[v(`div`,{ref:B,children:y(t,{type:`time`,label:E,error:ae,size:ue,element_blok:{className:[O||``]},element_input:{className:[e.w,a.r,le===`center`?a.c:``].filter(Boolean),props:{"data-disabled":D||!I?`true`:void 0}},children:[se?v(`span`,{className:e.a,children:se}):null,y(`div`,{ref:z,className:a.i,role:`group`,"aria-label":E||`Время`,children:[v(`div`,{id:ce,ref:L,className:a.p,contentEditable:I?`plaintext-only`:!1,suppressContentEditableWarning:!0,spellCheck:M,inputMode:`numeric`,onPaste:ge(`hour`),onInput:_e,onKeyDown:ye,onFocus:xe,onBlur:Se,"aria-label":`Часы, 0–23`,...$,children:!I||!V?Z===null?``:f(Z):null}),Te&&v(`span`,{className:a.s,"aria-hidden":`true`,children:`:`}),v(`div`,{ref:R,className:a.p,contentEditable:I?`plaintext-only`:!1,suppressContentEditableWarning:!0,spellCheck:M,inputMode:`numeric`,onPaste:ge(`minute`),onInput:ve,onKeyDown:be,onFocus:xe,onBlur:Se,"aria-label":`Минуты, 0–59`,...we,children:!I||!V?Ce===null?``:f(Ce):null})]}),N?v(`button`,{type:`button`,className:a.b,disabled:!I||Y.length===0,"aria-label":`Быстрый выбор времени`,"aria-haspopup":`listbox`,"aria-expanded":U,"aria-controls":J,onMouseDown:e=>e.preventDefault(),onClick:he,children:v(re,{})}):null,oe?v(`span`,{className:e.a,children:oe}):null]})}),U&&G&&ne(v(o,{parent:G,slots:Y,current:F,activeIndex:K,listId:J,className:O,setOpen:W,setActiveIndex:q,onPick:e=>{X(e),W(!1)}}),document.body)]})}b.displayName=`TimeField`;export{b as default};
1
+ import e from"../styles/Field.module.js";import t from"../core/Field.js";import{useFormFieldState as n}from"../hooks/use.js";import{createFieldEmit as r}from"./emit.js";import i from"../events/onEvent.js";import a from"../styles/Time.module.js";import o from"./TimePicker.js";import{buildTimeSlots as s,clampToRange as c,combine as l,digitsOnly as u,getRangeStartOffsetInElement as ee,normalizeTime as d,pad2 as f,parsePartDigits as p,setCursorPosition as m,snapMinute as h,splitTime as g}from"./timeUtils.js";import _ from"react";import{Fragment as te,jsx as v,jsxs as y}from"react/jsx-runtime";import{createPortal as ne}from"react-dom";function re(){return y(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,"aria-hidden":!0,children:[v(`circle`,{cx:`12`,cy:`12`,r:`8.25`,stroke:`currentColor`,strokeWidth:`1.75`}),v(`path`,{d:`M12 7.5V12l3 2`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`})]})}function b({value:b=``,form:x,onValue:S,onBlur:C,name:w=``,placeholder:T=``,label:E=``,hidden:ie=!1,disabled:D=!1,error:ae=``,className:O=``,after:oe=``,before:se=``,step:k=60,min:A,max:j,id:ce,spellCheck:M=!1,align:le=`start`,picker:N=!1,presets:P,size:ue}){let{value:de,version:fe}=n(x,w,b),F=d(de),I=!D,L=_.useRef(null),R=_.useRef(null),z=_.useRef(null),B=_.useRef(null),[V,H]=_.useState(!1),[U,W]=_.useState(!1),[G,pe]=_.useState(null),[K,q]=_.useState(0),J=_.useId(),Y=_.useMemo(()=>s(k,A,j,P),[k,A,j,P]);_.useLayoutEffect(()=>{if(!V||!I)return;let{h:e,m:t}=g(F),n=(e,t)=>{e&&(t===null?e.innerHTML=`<br>`:e.textContent=String(t))};n(L.current,e),n(R.current,t)},[V,F,fe,I]);let me=_.useCallback(()=>{let e=p(L.current?.textContent||``,23),t=p(R.current?.textContent||``,59);if(e===null&&t===null)return``;let n=l(e,t);if(!n)return``;let{h:r,m:i}=g(n);return i!==null&&(n=l(r,h(i,k))),n&&=c(n,A,j),n||``},[A,j,k]),X=_.useCallback(e=>{let t=d(e);if(t){let{h:e,m:n}=g(t);n!==null&&(t=l(e,h(n,k))),t=c(t,A,j)}return r(x,w,S)(t,!0),t},[x,w,S,A,j,k]),he=_.useCallback(()=>{if(!N||!I||Y.length===0)return;let e=B.current;if(!e)return;let t=Math.max(0,Y.findIndex(e=>e===F));q(t>=0?t:0),pe(e.getBoundingClientRect()),W(!0)},[N,I,Y,F]);_.useEffect(()=>{if(!U)return;let e=()=>{let e=B.current;e&&pe(e.getBoundingClientRect())};return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[U]),_.useEffect(()=>{if(!U)return;let e=e=>{if(e.key===`Escape`){e.preventDefault(),W(!1);return}if(Y.length!==0){if(e.key===`ArrowDown`)e.preventDefault(),q(e=>(e+1)%Y.length);else if(e.key===`ArrowUp`)e.preventDefault(),q(e=>e-1<0?Y.length-1:e-1);else if(e.key===`Enter`){e.preventDefault();let t=Y[K];t&&(X(t),W(!1))}}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[U,Y,K,X]);let ge=e=>t=>{if(t.preventDefault(),!I)return;let n=u(t.clipboardData?.getData(`text/plain`)??``),r=e===`hour`?23:59;if(n.length>=4){let e=Math.min(23,Math.max(0,parseInt(n.slice(0,2),10))),t=Math.min(59,Math.max(0,parseInt(n.slice(2,4),10))),r=L.current,i=R.current;r&&(r.textContent=String(e),queueMicrotask(()=>m(String(e).length,r))),i&&(i.textContent=String(t),queueMicrotask(()=>m(String(t).length,i)));return}let i=n.slice(0,2),a=t.currentTarget;if(i===``){a.innerHTML=`<br>`,queueMicrotask(()=>m(0,a));return}let o=parseInt(i,10);if(Number.isNaN(o))return;let s=String(Math.min(r,Math.max(0,o)));a.textContent=s,queueMicrotask(()=>m(s.length,a))},_e=e=>{let t=e.target,n=t.textContent||``,r=ee(t),i=n.slice(0,r).replace(/\D/g,``).length,a=u(n).slice(0,2);if(a===``){t.innerHTML=`<br>`,queueMicrotask(()=>m(0,t));return}let o=parseInt(a,10);if(Number.isNaN(o))return;let s=String(Math.min(23,Math.max(0,o)));t.textContent=s;let c=Math.min(i,s.length);queueMicrotask(()=>m(c,t))},ve=e=>{let t=e.target,n=t.textContent||``,r=ee(t),i=n.slice(0,r).replace(/\D/g,``).length,a=u(n).slice(0,2);if(a===``){t.innerHTML=`<br>`,queueMicrotask(()=>m(0,t));return}let o=parseInt(a,10);if(Number.isNaN(o))return;let s=String(Math.min(59,Math.max(0,o)));t.textContent=s;let c=Math.min(i,s.length);queueMicrotask(()=>m(c,t))},ye=e=>{(e.key===`Enter`||e.key===`:`)&&(e.preventDefault(),R.current?.focus())},be=e=>{e.key===`Enter`&&e.preventDefault()},xe=e=>{let t=e.currentTarget;(t.textContent||``).trim().length||(t.innerHTML=`<br>`),I&&H(!0)},Se=e=>{i.Blur(e)};_.useEffect(()=>{let e=z.current;if(!e)return;let t=t=>{let n=t.relatedTarget;if(n&&e.contains(n))return;let i=me();r(x,w,S)(i,!0),C&&w&&C({value:i,name:w}),H(!1)};return e.addEventListener(`focusout`,t),()=>e.removeEventListener(`focusout`,t)},[x,w,S,C,A,j,k,me]);let{h:Z,m:Ce}=g(F),Q={};I&&(Q.edit=``);let $={...Q},we={...Q};T&&($.placeholder=T);let Te=F!==``||V;return ie&&F===``?null:y(te,{children:[v(`div`,{ref:B,children:y(t,{type:`time`,label:E,error:ae,size:ue,element_blok:{className:[O||``]},element_input:{className:[e.w,a.r,le===`center`?a.c:``].filter(Boolean),props:{"data-disabled":D||!I?`true`:void 0}},children:[se?v(`span`,{className:e.a,children:se}):null,y(`div`,{ref:z,className:a.i,role:`group`,"aria-label":E||`Время`,children:[v(`div`,{id:ce,ref:L,className:a.p,contentEditable:I?`plaintext-only`:!1,suppressContentEditableWarning:!0,spellCheck:M,inputMode:`numeric`,onPaste:ge(`hour`),onInput:_e,onKeyDown:ye,onFocus:xe,onBlur:Se,"aria-label":`Часы, 0–23`,...$,children:!I||!V?Z===null?``:f(Z):null}),Te&&v(`span`,{className:a.s,"aria-hidden":`true`,children:`:`}),v(`div`,{ref:R,className:a.p,contentEditable:I?`plaintext-only`:!1,suppressContentEditableWarning:!0,spellCheck:M,inputMode:`numeric`,onPaste:ge(`minute`),onInput:ve,onKeyDown:be,onFocus:xe,onBlur:Se,"aria-label":`Минуты, 0–59`,...we,children:!I||!V?Ce===null?``:f(Ce):null})]}),N?v(`button`,{type:`button`,className:a.b,disabled:!I||Y.length===0,"aria-label":`Быстрый выбор времени`,"aria-haspopup":`listbox`,"aria-expanded":U,"aria-controls":J,onMouseDown:e=>e.preventDefault(),onClick:he,children:v(re,{})}):null,oe?v(`span`,{className:e.a,children:oe}):null]})}),U&&G&&ne(v(o,{parent:G,slots:Y,current:F,activeIndex:K,listId:J,className:O,setOpen:W,setActiveIndex:q,onPick:e=>{X(e),W(!1)}}),document.body)]})}b.displayName=`TimeField`;export{b as default};
@@ -85,8 +85,9 @@ export type TFieldPresentation = {
85
85
  /**
86
86
  * Высота капсулы: `s` | `m` | `l` (как кнопка/поиск).
87
87
  * Меняет `--field-height` → padding пересчитывается.
88
+ * Внутри `<Toolbar>` без своего `size` берётся `Toolbar.size` (обычно `s`).
88
89
  * `sm` / `md` — устаревшие алиасы (`elcrm migrate size-sml`).
89
- * @default "m"
90
+ * @default `"m"` вне Toolbar; в Toolbar — его `size`
90
91
  */
91
92
  size?: "s" | "m" | "l" | "sm" | "md";
92
93
  /** Зарезервировано (копирование); у Phone работает через `Form.Init` / notice. */
@@ -0,0 +1,8 @@
1
+ export type FieldSize = "s" | "m" | "l" | "sm" | "md";
2
+ /** Нормализация `s`/`m`/`l` (+ устаревшие `sm`/`md`). */
3
+ export declare function normalizeFieldSize(size: FieldSize | undefined): "s" | "m" | "l";
4
+ /**
5
+ * Размер поля: явный `size` → {@link useToolbar} → `"m"`.
6
+ * В `<Toolbar size="s">` без своего size все `*Field` становятся `s`.
7
+ */
8
+ export declare function useFieldSize(sizeProp?: FieldSize): "s" | "m" | "l";
@@ -0,0 +1 @@
1
+ import{useToolbar as e}from"@elcrm/components";function t(e){return e===`s`||e===`sm`?`s`:e===`l`?`l`:`m`}function n(n){let r=e();return t(n??r?.size)}export{t as normalizeFieldSize,n as useFieldSize};
package/dist/index.d.ts CHANGED
@@ -32,6 +32,7 @@ export { default as SearchField } from './fields/Search';
32
32
  export { default as FieldGroup } from './fields/FieldGroup';
33
33
  export type { FieldGroupFieldKind, FieldGroupItem, FieldGroupProps, } from './fields/FieldGroup';
34
34
  export { useForm, useFormField, useFormFieldState } from './hooks/use';
35
+ export { useFieldSize, normalizeFieldSize, type FieldSize, } from './hooks/useFieldSize';
35
36
  export type TFieldSize = "s" | "m" | "l" | "sm" | "md";
36
37
  export type { TInput, TValue, TPasswordField, TFieldFormBindings, TFieldPresentation, } from './fields/type';
37
38
  export type { TRange, TRangeVariant } from './fields/Range';