aha-components 1.5.9 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Form.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as r}from"react/jsx-runtime";import n,{createContext as t,useContext as i,useRef as l,useCallback as o,useMemo as u,useEffect as a,useState as c,useImperativeHandle as d}from"react";var s=function(){return s=Object.assign||function(e){for(var r,n=1,t=arguments.length;n<t;n++)for(var i in r=arguments[n])Object.prototype.hasOwnProperty.call(r,i)&&(e[i]=r[i]);return e},s.apply(this,arguments)};function v(e,r,n,t){return new(n||(n=Promise))(function(i,l){function o(e){try{a(t.next(e))}catch(e){l(e)}}function u(e){try{a(t.throw(e))}catch(e){l(e)}}function a(e){var r;e.done?i(e.value):(r=e.value,r instanceof n?r:new n(function(e){e(r)})).then(o,u)}a((t=t.apply(e,r||[])).next())})}function f(e,r){var n,t,i,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=u(0),o.throw=u(1),o.return=u(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(a){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(l=0)),l;)try{if(n=1,t&&(i=2&u[0]?t.return:u[0]?t.throw||((i=t.return)&&i.call(t),0):t.next)&&!(i=i.call(t,u[1])).done)return i;switch(t=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,t=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(i=l.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){l=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){l.label=u[1];break}if(6===u[0]&&l.label<i[1]){l.label=i[1],i=u;break}if(i&&l.label<i[2]){l.label=i[2],l.ops.push(u);break}i[2]&&l.ops.pop(),l.trys.pop();continue}u=r.call(e,l)}catch(e){u=[6,e],t=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,a])}}}"function"==typeof SuppressedError&&SuppressedError;var h=t(null),p=function(n){var t=n.className,i=n.style;return e("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:t,style:i,children:[r("g",{clipPath:"url(#clip0_54_1653)",children:r("path",{d:"M6.06 6C6.21674 5.55444 6.5261 5.17873 6.9333 4.93942C7.34051 4.7001 7.81926 4.61262 8.28479 4.69247C8.75031 4.77232 9.17255 5.01434 9.47672 5.37568C9.78089 5.73702 9.94737 6.19434 9.94667 6.66666C9.94667 8 7.94667 8.66666 7.94667 8.66666M8 11.3333H8.00667M14.6667 8C14.6667 11.6819 11.6819 14.6667 8 14.6667C4.3181 14.6667 1.33333 11.6819 1.33333 8C1.33333 4.3181 4.3181 1.33333 8 1.33333C11.6819 1.33333 14.6667 4.3181 14.6667 8Z",stroke:"currentColor",strokeWidth:"1.33333",strokeLinecap:"round",strokeLinejoin:"round"})}),r("defs",{children:r("clipPath",{id:"clip0_54_1653",children:r("rect",{width:"16",height:"16",fill:"currentColor"})})})]})},g=n.forwardRef(function(e,n){var t=e.initialValues,i=void 0===t?{}:t,p=e.onValuesChange,g=e.onFinish,m=e.onFinishFailed,y=e.labelWidth,b=void 0===y?"120px":y,F=e.labelAlign,x=void 0===F?"right":F,w=e.layout,C=void 0===w?"horizontal":w;e.size;var k=e.className,E=void 0===k?"":k,T=e.style,S=e.children,q=c(function(){var e={};return Object.keys(i).forEach(function(r){e[r]={value:i[r],error:void 0,touched:!1,validating:!1}}),e}),V=q[0],j=q[1],N=l(V);a(function(){N.current=V},[V]);var O=l({}),D=o(function(e){var r;return null===(r=N.current[e])||void 0===r?void 0:r.value},[]),B=o(function(e,r){j(function(n){var t=s({},n);if(t[e]?t[e]=s(s({},t[e]),{value:r}):t[e]={value:r,error:void 0,touched:!1,validating:!1},N.current[e]?N.current[e]=s(s({},N.current[e]),{value:r}):N.current[e]={value:r,error:void 0,touched:!1,validating:!1},p){var i={};i[e]=r;var l={};Object.keys(t).forEach(function(e){l[e]=t[e].value}),p(i,l)}return t})},[p]),R=o(function(e){var r;return null===(r=N.current[e])||void 0===r?void 0:r.error},[]),I=o(function(e,r){N.current[e]&&(N.current[e]=s(s({},N.current[e]),{error:r})),j(function(n){var t=s({},n);return t[e]?t[e]=s(s({},t[e]),{error:r}):t[e]={value:void 0,error:r,touched:!1,validating:!1},t})},[]),L=o(function(e){var r;return(null===(r=N.current[e])||void 0===r?void 0:r.touched)||!1},[]),P=o(function(e,r){N.current[e]&&(N.current[e]=s(s({},N.current[e]),{touched:r})),j(function(n){var t=s({},n);return t[e]?t[e]=s(s({},t[e]),{touched:r}):t[e]={value:void 0,error:void 0,touched:r,validating:!1},t})},[]),z=o(function(e){var r;return(null===(r=N.current[e])||void 0===r?void 0:r.validating)||!1},[]),A=o(function(e,r){N.current[e]&&(N.current[e]=s(s({},N.current[e]),{validating:r})),j(function(n){var t=s({},n);return t[e]?t[e]=s(s({},t[e]),{validating:r}):t[e]={value:void 0,error:void 0,touched:!1,validating:r},t})},[]),M=l();M.current=function(e,r){j(function(n){if(n[e]){var t=n[e].rules||[],l=r.rules||[],o=t.length===l.length;if(o&&t.length>0)for(var u=0;u<t.length;u++){var a=t[u],c=l[u];if((null==a?void 0:a.required)!==(null==c?void 0:c.required)||(null==a?void 0:a.message)!==(null==c?void 0:c.message)||(null==a?void 0:a.type)!==(null==c?void 0:c.type)||(null==a?void 0:a.pattern)!==(null==c?void 0:c.pattern)||(null==a?void 0:a.min)!==(null==c?void 0:c.min)||(null==a?void 0:a.max)!==(null==c?void 0:c.max)||(null==a?void 0:a.len)!==(null==c?void 0:c.len)||(null==a?void 0:a.whitespace)!==(null==c?void 0:c.whitespace)){o=!1;break}}if(o&&n[e].required===r.required)return n}var d=s({},n);return d[e]?d[e]=s(s({},d[e]),{rules:r.rules,required:r.required}):d[e]={value:i[e],error:void 0,touched:!1,validating:!1,rules:r.rules,required:r.required},d})};var W=o(function(e,r){var n;null===(n=M.current)||void 0===n||n.call(M,e,r)},[]),H=o(function(e){delete O.current[e],j(function(r){var n=s({},r);return delete n[e],n}),delete N.current[e]},[]),_=o(function(e){return v(void 0,void 0,void 0,function(){var r,n,t,i,l,o,u,a,c;return f(this,function(d){switch(d.label){case 0:if(!(r=N.current[e]))return[2,void 0];A(e,!0),n=r.rules||[],i=0,l=n,d.label=1;case 1:if(!(i<l.length))return[3,6];if(o=l[i],u=r.value,o.required&&(null==u||""===u))return t=o.message||"".concat(e," is required"),[3,6];if(o.type&&null!=u&&""!==u&&(a={string:function(e){return"string"==typeof e},number:function(e){return"number"==typeof e&&!isNaN(e)},boolean:function(e){return"boolean"==typeof e},email:function(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(e))},url:function(e){try{return new URL(String(e)),!0}catch(e){return!1}}}[o.type])&&!a(u))return t=o.message||"".concat(e," must be a valid ").concat(o.type),[3,6];if(o.pattern&&null!=u&&""!==u&&!o.pattern.test(String(u)))return t=o.message||"".concat(e," format is invalid"),[3,6];if(void 0!==o.min&&null!=u&&""!==u&&("string"==typeof u?u.length:Number(u))<o.min)return t=o.message||"".concat(e," must be at least ").concat(o.min),[3,6];if(void 0!==o.max&&null!=u&&""!==u&&("string"==typeof u?u.length:Number(u))>o.max)return t=o.message||"".concat(e," must be at most ").concat(o.max),[3,6];if(void 0!==o.len&&null!=u&&""!==u&&("string"==typeof u?u.length:Number(u))!==o.len)return t=o.message||"".concat(e," must be exactly ").concat(o.len),[3,6];if(o.whitespace&&"string"==typeof u&&u.trim()!==u)return t=o.message||"".concat(e," cannot be whitespace"),[3,6];if(!o.validator)return[3,5];d.label=2;case 2:return d.trys.push([2,4,,5]),[4,o.validator(o,u)];case 3:return d.sent(),[3,5];case 4:return c=d.sent(),t=(null==c?void 0:c.message)||o.message||"".concat(e," validation failed"),[3,6];case 5:return i++,[3,1];case 6:return N.current[e]?N.current[e]=s(s({},N.current[e]),{error:t,validating:!1,touched:!0}):N.current[e]={value:r.value,error:t,touched:!0,validating:!1,rules:r.rules,required:r.required},j(function(n){var i=s({},n);return i[e]?i[e]=s(s({},i[e]),{error:t,validating:!1,touched:!0}):i[e]={value:r.value,error:t,touched:!0,validating:!1,rules:r.rules,required:r.required},i}),[2,t]}})})},[]),X=o(function(e){var r=N.current,n={};return(e||Object.keys(r)).forEach(function(e){var t;n[e]=null===(t=r[e])||void 0===t?void 0:t.value}),n},[]),G=o(function(e){return v(void 0,void 0,void 0,function(){var r,n,t,i;return f(this,function(l){switch(l.label){case 0:return r=N.current,n=e||Object.keys(r),t=[],[4,Promise.all(n.map(function(e){return v(void 0,void 0,void 0,function(){var n,t;return f(this,function(i){switch(i.label){case 0:return(n=r[e])&&n.rules&&n.rules.length>0?[4,_(e)]:[3,2];case 1:return t=i.sent(),[2,{name:e,error:t}];case 2:return[2,{name:e,error:void 0}]}})})}))];case 1:return l.sent().forEach(function(e){var r=e.name,n=e.error;n&&t.push({name:r,errors:[n]})}),[4,new Promise(function(e){return requestAnimationFrame(function(){setTimeout(e,0)})})];case 2:if(l.sent(),t.length>0)throw i={values:X(),errorFields:t},null==m||m(i),i;return[2,X()]}})})},[_,X,m]),U=o(function(e){j(function(r){var n=s({},r);return(e||Object.keys(n)).forEach(function(e){n[e]&&(n[e]=s(s({},n[e]),{value:i[e],error:void 0,touched:!1,validating:!1}),N.current[e]=s({},n[e]))}),n})},[i]),Z=o(function(e){j(function(r){var n=s({},r);if(Object.keys(e).forEach(function(r){n[r]?n[r]=s(s({},n[r]),{value:e[r]}):n[r]={value:e[r],error:void 0,touched:!1,validating:!1},N.current[r]=s({},n[r])}),p){var t={};Object.keys(n).forEach(function(e){t[e]=n[e].value}),p(e,t)}return n})},[p]),$=o(function(){return v(void 0,void 0,void 0,function(){var e;return f(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,G()];case 1:return e=r.sent(),null==g||g(e),[2,e];case 2:throw r.sent();case 3:return[2]}})})},[G,g]),J=o(function(e){if(j(function(r){var n=s({},r);return e.forEach(function(e){var r=e.name,t=e.value,i=e.errors,l=i&&i.length>0?i[0]:void 0;n[r]?n[r]=s(s(s({},n[r]),void 0!==t&&{value:t}),{error:l,touched:!0}):n[r]={value:void 0!==t?t:void 0,error:l,touched:!0,validating:!1},N.current[r]=s({},n[r])}),n}),p&&e.some(function(e){return void 0!==e.value})){var r={};e.forEach(function(e){void 0!==e.value&&(r[e.name]=e.value)}),setTimeout(function(){return p(r,X())},0)}},[p,X]),K=o(function(e,r){r?O.current[e]=r:delete O.current[e]},[]),Q=o(function(e,r){var n=O.current[e];null==n||n.scrollIntoView(s({behavior:"smooth",block:"center"},r))},[]);d(n,function(){return{getFieldValue:D,getFieldsValue:X,setFieldValue:B,setFieldsValue:Z,setFields:J,getFieldError:R,validateField:_,validateFields:G,resetFields:U,submit:$,scrollToField:Q}});var Y=u(function(){return{fields:V,getFieldValue:D,setFieldValue:B,getFieldError:R,setFieldError:I,isFieldTouched:L,setFieldTouched:P,isFieldValidating:z,setFieldValidating:A,registerField:W,unregisterField:H,validateField:_,validateFields:G,resetFields:U,getFieldsValue:X,setFieldsValue:Z,setFields:J,submit:$,scrollToField:Q,registerFieldRef:K,labelWidth:b,labelAlign:x}},[V,D,B,R,I,L,P,z,A,W,H,_,G,U,X,Z,J,$,Q,K,b,x]),ee=s({},T);return"vertical"===C?(ee.display="flex",ee.flexDirection="column"):"inline"===C&&(ee.display="inline-flex",ee.flexWrap="wrap",ee.gap="16px"),r(h.Provider,{value:Y,children:r("form",{className:"aha-form ".concat(E),style:ee,onSubmit:function(e){return v(void 0,void 0,void 0,function(){var r;return f(this,function(n){switch(n.label){case 0:e.preventDefault(),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,G()];case 2:return r=n.sent(),null==g||g(r),[3,4];case 3:return n.sent(),[3,4];case 4:return[2]}})})},children:S})})});function m(){return[l(null)]}g.displayName="Form";var y=g;y.Item=function(t){var c=t.name,d=t.label,v=t.htmlFor;t.labelCol,t.wrapperCol;var f=t.required,g=void 0!==f&&f,m=t.rules,y=void 0===m?[]:m;t.hasFeedback;var b=t.validateStatus,F=t.help,x=t.extra,w=t.className,C=void 0===w?"":w,k=t.style,E=t.children;t.labelAlign,t.labelWidth;var T=t.hidden,S=void 0!==T&&T,q=t.tooltip,V=i(h),j=l(null),N=o(function(e){j.current=e,c&&(null==V?void 0:V.registerFieldRef)&&V.registerFieldRef(c,e)},[c,V]),O=(null==V?void 0:V.fields)||{};c&&V&&V.getFieldValue(c);var D=c&&V?V.getFieldError(c):void 0,B=!(!c||!V)&&V.isFieldTouched(c),R=!(!c||!V)&&V.isFieldValidating(c);c&&O[c];var I=b||(D?"error":R?"validating":B&&!D?"success":void 0),L=void 0!==F?F:D||void 0,P=l(y),z=l(g),A=l(!1),M=g||y.some(function(e){return e.required}),W=u(function(){if(!A.current)return A.current=!0,!0;if(P.current.length!==y.length)return!0;if(P.current===y)return!1;for(var e=0;e<y.length;e++){var r=P.current[e],n=y[e];if((null==r?void 0:r.required)!==(null==n?void 0:n.required)||(null==r?void 0:r.message)!==(null==n?void 0:n.message)||(null==r?void 0:r.type)!==(null==n?void 0:n.type)||(null==r?void 0:r.pattern)!==(null==n?void 0:n.pattern)||(null==r?void 0:r.min)!==(null==n?void 0:n.min)||(null==r?void 0:r.max)!==(null==n?void 0:n.max)||(null==r?void 0:r.len)!==(null==n?void 0:n.len)||(null==r?void 0:r.whitespace)!==(null==n?void 0:n.whitespace))return!0}return!1},[y]);a(function(){if(c&&V)return(!P.current||W||z.current!==g)&&(P.current=y,z.current=g,V.registerField(c,{rules:y,required:M})),function(){c&&V&&V.unregisterField(c)}},[c]);if(S)return null;return e("div",{ref:N,className:"aha-form-item ".concat(C),style:s({display:"flex",flexDirection:"column",marginBottom:"16px"},k),children:[d&&e("label",{htmlFor:v,style:{display:"flex",alignItems:"center",marginBottom:"6px",fontSize:"14px",lineHeight:"20px",color:"#44403C",fontFamily:"DM Sans, sans-serif",fontWeight:500},children:[d,M&&r("span",{style:{color:"#EC470A",marginLeft:"4px"},children:"*"}),q&&r(function(t){var i=t.content,l=n.useState(!1),o=l[0],u=l[1],a=n.useRef(null);return n.useEffect(function(){var e=function(e){a.current&&!a.current.contains(e.target)&&u(!1)};if(o)return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}},[o]),e("div",{style:{position:"relative",display:"inline-block",marginLeft:"4px"},children:[r("div",{onClick:function(e){e.stopPropagation(),u(!o)},style:{display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:"#A9A29D"},children:r(p,{})}),o&&e("div",{ref:a,style:{position:"absolute",top:"100%",left:"50%",transform:"translateX(-50%)",marginTop:"4px",padding:"8px 12px",backgroundColor:"#1C1917",color:"#FFFFFF",fontSize:"12px",lineHeight:"18px",fontFamily:"DM Sans, sans-serif",borderRadius:"6px",whiteSpace:"nowrap",zIndex:1e3,boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)"},children:[i,r("div",{style:{position:"absolute",top:"-4px",left:"50%",transform:"translateX(-50%)",width:0,height:0,borderLeft:"4px solid transparent",borderRight:"4px solid transparent",borderBottom:"4px solid #1C1917"}})]})]})},{content:q})]}),e("div",{style:{width:"100%"},children:[r("div",{children:n.Children.map(E,function(e){return n.isValidElement(e)?function(e){var r,t,i,l,o,u,a,d,v;if(!n.isValidElement(e))return e;var f=s({},e.props);if(c&&V){var h=V.getFieldValue(c),p=V.setFieldValue;if(!p)return e;var g=e.type;if(g&&("object"==typeof g||"function"==typeof g)&&"displayName"in g){var m=g.displayName;if("Input"===m||"Textarea"===m){f.value=h||"";var y=null===(r=e.props)||void 0===r?void 0:r.onChange,b=null===(t=e.props)||void 0===t?void 0:t.onBlur;f.onChange=function(e){p(c,e.target.value),null==y||y(e),c&&V&&setTimeout(function(){V.validateField(c)},0)},f.onBlur=function(e){c&&V&&(V.setFieldTouched(c,!0),V.validateField(c)),null==b||b(e)},f.error="error"===I}else if("Select"===m){f.value=h;var F=null===(i=e.props)||void 0===i?void 0:i.onChange,x=null===(l=e.props)||void 0===l?void 0:l.onBlur;f.onChange=function(e,r){p(c,e),null==F||F(e,r),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))},f.onBlur=function(e){c&&V&&(V.setFieldTouched(c,!0),V.validateField(c)),null==x||x(e)},f.error="error"===I}else if("Switch"===m){f.checked=h||!1;var w=null===(o=e.props)||void 0===o?void 0:o.onChange;f.onChange=function(e,r){p(c,e),null==w||w(e,r),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))}}else if("Checkbox"===m){f.checked=h||!1;var C=null===(u=e.props)||void 0===u?void 0:u.onChange;f.onChange=function(e){p(c,e.target.checked),null==C||C(e),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))}}else if("Radio"===m){var k=null===(a=e.props)||void 0===a?void 0:a.value;if(void 0!==k){f.checked=h===k;var E=null===(d=e.props)||void 0===d?void 0:d.onChange;f.onChange=function(e){p(c,k),null==E||E(e),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))}}}}else{void 0!==h&&(f.value=h);var T=null===(v=e.props)||void 0===v?void 0:v.onChange;f.onChange=function(e){var r,n,t=null!==(n=null===(r=null==e?void 0:e.target)||void 0===r?void 0:r.value)&&void 0!==n?n:e;p(c,t),null==T||T(e)}}}return"error"===I&&"error"in f&&(f.error=!0),n.cloneElement(e,f)}(e):e})}),L&&r("div",{style:{marginTop:"6px",fontSize:"14px",lineHeight:"20px",fontWeight:400,color:"error"===I?"#D92D20":"warning"===I?"#F59E0B":"#78716C",fontFamily:"DM Sans, sans-serif"},children:L}),x&&!L&&r("div",{style:{marginTop:"4px",fontSize:"12px",lineHeight:"18px",color:"#78716C",fontFamily:"DM Sans, sans-serif"},children:x})]})]})},y.useForm=m;export{y as default,m as useForm};
1
+ import{jsxs as e,jsx as r}from"react/jsx-runtime";import n,{createContext as t,useContext as i,useRef as o,useCallback as l,useMemo as u,useEffect as a,useState as c,useImperativeHandle as d}from"react";var s=function(e,r){return s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])},s(e,r)};var v=function(){return v=Object.assign||function(e){for(var r,n=1,t=arguments.length;n<t;n++)for(var i in r=arguments[n])Object.prototype.hasOwnProperty.call(r,i)&&(e[i]=r[i]);return e},v.apply(this,arguments)};function f(e,r,n,t){return new(n||(n=Promise))(function(i,o){function l(e){try{a(t.next(e))}catch(e){o(e)}}function u(e){try{a(t.throw(e))}catch(e){o(e)}}function a(e){var r;e.done?i(e.value):(r=e.value,r instanceof n?r:new n(function(e){e(r)})).then(l,u)}a((t=t.apply(e,r||[])).next())})}function h(e,r){var n,t,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=u(0),l.throw=u(1),l.return=u(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function u(u){return function(a){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(o=0)),o;)try{if(n=1,t&&(i=2&u[0]?t.return:u[0]?t.throw||((i=t.return)&&i.call(t),0):t.next)&&!(i=i.call(t,u[1])).done)return i;switch(t=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,t=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){o=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){o.label=u[1];break}if(6===u[0]&&o.label<i[1]){o.label=i[1],i=u;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(u);break}i[2]&&o.ops.pop(),o.trys.pop();continue}u=r.call(e,o)}catch(e){u=[6,e],t=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,a])}}}"function"==typeof SuppressedError&&SuppressedError;var p=t(null),g=function(n){var t=n.className,i=n.style;return e("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:t,style:i,children:[r("g",{clipPath:"url(#clip0_54_1653)",children:r("path",{d:"M6.06 6C6.21674 5.55444 6.5261 5.17873 6.9333 4.93942C7.34051 4.7001 7.81926 4.61262 8.28479 4.69247C8.75031 4.77232 9.17255 5.01434 9.47672 5.37568C9.78089 5.73702 9.94737 6.19434 9.94667 6.66666C9.94667 8 7.94667 8.66666 7.94667 8.66666M8 11.3333H8.00667M14.6667 8C14.6667 11.6819 11.6819 14.6667 8 14.6667C4.3181 14.6667 1.33333 11.6819 1.33333 8C1.33333 4.3181 4.3181 1.33333 8 1.33333C11.6819 1.33333 14.6667 4.3181 14.6667 8Z",stroke:"currentColor",strokeWidth:"1.33333",strokeLinecap:"round",strokeLinejoin:"round"})}),r("defs",{children:r("clipPath",{id:"clip0_54_1653",children:r("rect",{width:"16",height:"16",fill:"currentColor"})})})]})},m=function(e){function r(n,t,i){var o=e.call(this,n)||this;return o.name="FormValidationError",o.values=t,o.errorFields=i,Object.setPrototypeOf(o,r.prototype),o}return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=e}s(e,r),e.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}(r,e),r}(Error),y=n.forwardRef(function(e,n){var t=e.initialValues,i=void 0===t?{}:t,s=e.onValuesChange,g=e.onFinish,y=e.onFinishFailed,b=e.labelWidth,F=void 0===b?"120px":b,x=e.labelAlign,w=void 0===x?"right":x,C=e.layout,E=void 0===C?"horizontal":C;e.size;var k=e.className,T=void 0===k?"":k,S=e.style,q=e.children,V=c(function(){var e={};return Object.keys(i).forEach(function(r){e[r]={value:i[r],error:void 0,touched:!1,validating:!1}}),e}),j=V[0],O=V[1],N=o(j);a(function(){N.current=j},[j]);var _=o({}),P=l(function(e){var r;return null===(r=N.current[e])||void 0===r?void 0:r.value},[]),D=l(function(e,r){O(function(n){var t=v({},n);if(t[e]?t[e]=v(v({},t[e]),{value:r}):t[e]={value:r,error:void 0,touched:!1,validating:!1},N.current[e]?N.current[e]=v(v({},N.current[e]),{value:r}):N.current[e]={value:r,error:void 0,touched:!1,validating:!1},s){var i={};i[e]=r;var o={};Object.keys(t).forEach(function(e){o[e]=t[e].value}),s(i,o)}return t})},[s]),B=l(function(e){var r;return null===(r=N.current[e])||void 0===r?void 0:r.error},[]),R=l(function(e,r){N.current[e]&&(N.current[e]=v(v({},N.current[e]),{error:r})),O(function(n){var t=v({},n);return t[e]?t[e]=v(v({},t[e]),{error:r}):t[e]={value:void 0,error:r,touched:!1,validating:!1},t})},[]),A=l(function(e){var r;return(null===(r=N.current[e])||void 0===r?void 0:r.touched)||!1},[]),I=l(function(e,r){N.current[e]&&(N.current[e]=v(v({},N.current[e]),{touched:r})),O(function(n){var t=v({},n);return t[e]?t[e]=v(v({},t[e]),{touched:r}):t[e]={value:void 0,error:void 0,touched:r,validating:!1},t})},[]),L=l(function(e){var r;return(null===(r=N.current[e])||void 0===r?void 0:r.validating)||!1},[]),z=l(function(e,r){N.current[e]&&(N.current[e]=v(v({},N.current[e]),{validating:r})),O(function(n){var t=v({},n);return t[e]?t[e]=v(v({},t[e]),{validating:r}):t[e]={value:void 0,error:void 0,touched:!1,validating:r},t})},[]),M=o();M.current=function(e,r){O(function(n){if(n[e]){var t=n[e].rules||[],o=r.rules||[],l=t.length===o.length;if(l&&t.length>0)for(var u=0;u<t.length;u++){var a=t[u],c=o[u];if((null==a?void 0:a.required)!==(null==c?void 0:c.required)||(null==a?void 0:a.message)!==(null==c?void 0:c.message)||(null==a?void 0:a.type)!==(null==c?void 0:c.type)||(null==a?void 0:a.pattern)!==(null==c?void 0:c.pattern)||(null==a?void 0:a.min)!==(null==c?void 0:c.min)||(null==a?void 0:a.max)!==(null==c?void 0:c.max)||(null==a?void 0:a.len)!==(null==c?void 0:c.len)||(null==a?void 0:a.whitespace)!==(null==c?void 0:c.whitespace)){l=!1;break}}if(l&&n[e].required===r.required)return n}var d=v({},n);return d[e]?d[e]=v(v({},d[e]),{rules:r.rules,required:r.required}):d[e]={value:i[e],error:void 0,touched:!1,validating:!1,rules:r.rules,required:r.required},d})};var W=l(function(e,r){var n;null===(n=M.current)||void 0===n||n.call(M,e,r)},[]),H=l(function(e){delete _.current[e],O(function(r){var n=v({},r);return delete n[e],n}),delete N.current[e]},[]),X=l(function(e){return f(void 0,void 0,void 0,function(){var r,n,t,i,o,l,u,a,c;return h(this,function(d){switch(d.label){case 0:if(!(r=N.current[e]))return[2,void 0];z(e,!0),n=r.rules||[],i=0,o=n,d.label=1;case 1:if(!(i<o.length))return[3,6];if(l=o[i],u=r.value,l.required&&(null==u||""===u))return t=l.message||"".concat(e," is required"),[3,6];if(l.type&&null!=u&&""!==u&&(a={string:function(e){return"string"==typeof e},number:function(e){return"number"==typeof e&&!isNaN(e)},boolean:function(e){return"boolean"==typeof e},email:function(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(e))},url:function(e){try{return new URL(String(e)),!0}catch(e){return!1}}}[l.type])&&!a(u))return t=l.message||"".concat(e," must be a valid ").concat(l.type),[3,6];if(l.pattern&&null!=u&&""!==u&&!l.pattern.test(String(u)))return t=l.message||"".concat(e," format is invalid"),[3,6];if(void 0!==l.min&&null!=u&&""!==u&&("string"==typeof u?u.length:Number(u))<l.min)return t=l.message||"".concat(e," must be at least ").concat(l.min),[3,6];if(void 0!==l.max&&null!=u&&""!==u&&("string"==typeof u?u.length:Number(u))>l.max)return t=l.message||"".concat(e," must be at most ").concat(l.max),[3,6];if(void 0!==l.len&&null!=u&&""!==u&&("string"==typeof u?u.length:Number(u))!==l.len)return t=l.message||"".concat(e," must be exactly ").concat(l.len),[3,6];if(l.whitespace&&"string"==typeof u&&u.trim()!==u)return t=l.message||"".concat(e," cannot be whitespace"),[3,6];if(!l.validator)return[3,5];d.label=2;case 2:return d.trys.push([2,4,,5]),[4,l.validator(l,u)];case 3:return d.sent(),[3,5];case 4:return c=d.sent(),t=(null==c?void 0:c.message)||l.message||"".concat(e," validation failed"),[3,6];case 5:return i++,[3,1];case 6:return N.current[e]?N.current[e]=v(v({},N.current[e]),{error:t,validating:!1,touched:!0}):N.current[e]={value:r.value,error:t,touched:!0,validating:!1,rules:r.rules,required:r.required},O(function(n){var i=v({},n);return i[e]?i[e]=v(v({},i[e]),{error:t,validating:!1,touched:!0}):i[e]={value:r.value,error:t,touched:!0,validating:!1,rules:r.rules,required:r.required},i}),[2,t]}})})},[]),G=l(function(e){var r=N.current,n={};return(e||Object.keys(r)).forEach(function(e){var t;n[e]=null===(t=r[e])||void 0===t?void 0:t.value}),n},[]),U=l(function(e){return f(void 0,void 0,void 0,function(){var r,n,t,i,o;return h(this,function(l){switch(l.label){case 0:return r=N.current,n=e||Object.keys(r),t=[],[4,Promise.all(n.map(function(e){return f(void 0,void 0,void 0,function(){var n,t;return h(this,function(i){switch(i.label){case 0:return(n=r[e])&&n.rules&&n.rules.length>0?[4,X(e)]:[3,2];case 1:return t=i.sent(),[2,{name:e,error:t}];case 2:return[2,{name:e,error:void 0}]}})})}))];case 1:return l.sent().forEach(function(e){var r=e.name,n=e.error;n&&t.push({name:r,errors:[n]})}),[4,new Promise(function(e){return requestAnimationFrame(function(){setTimeout(e,0)})})];case 2:if(l.sent(),t.length>0)throw i=G(),o={values:i,errorFields:t},null==y||y(o),new m("Form validation failed",i,t);return[2,G()]}})})},[X,G,y]),Z=l(function(e){O(function(r){var n=v({},r);return(e||Object.keys(n)).forEach(function(e){n[e]&&(n[e]=v(v({},n[e]),{value:i[e],error:void 0,touched:!1,validating:!1}),N.current[e]=v({},n[e]))}),n})},[i]),$=l(function(e){O(function(r){var n=v({},r);if(Object.keys(e).forEach(function(r){n[r]?n[r]=v(v({},n[r]),{value:e[r]}):n[r]={value:e[r],error:void 0,touched:!1,validating:!1},N.current[r]=v({},n[r])}),s){var t={};Object.keys(n).forEach(function(e){t[e]=n[e].value}),s(e,t)}return n})},[s]),J=l(function(){return f(void 0,void 0,void 0,function(){var e;return h(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,U()];case 1:return e=r.sent(),null==g||g(e),[2,e];case 2:throw r.sent();case 3:return[2]}})})},[U,g]),K=l(function(e){if(O(function(r){var n=v({},r);return e.forEach(function(e){var r=e.name,t=e.value,i=e.errors,o=i&&i.length>0?i[0]:void 0;n[r]?n[r]=v(v(v({},n[r]),void 0!==t&&{value:t}),{error:o,touched:!0}):n[r]={value:void 0!==t?t:void 0,error:o,touched:!0,validating:!1},N.current[r]=v({},n[r])}),n}),s&&e.some(function(e){return void 0!==e.value})){var r={};e.forEach(function(e){void 0!==e.value&&(r[e.name]=e.value)}),setTimeout(function(){return s(r,G())},0)}},[s,G]),Q=l(function(e,r){r?_.current[e]=r:delete _.current[e]},[]),Y=l(function(e,r){var n=_.current[e];null==n||n.scrollIntoView(v({behavior:"smooth",block:"center"},r))},[]);d(n,function(){return{getFieldValue:P,getFieldsValue:G,setFieldValue:D,setFieldsValue:$,setFields:K,getFieldError:B,validateField:X,validateFields:U,resetFields:Z,submit:J,scrollToField:Y}});var ee=u(function(){return{fields:j,getFieldValue:P,setFieldValue:D,getFieldError:B,setFieldError:R,isFieldTouched:A,setFieldTouched:I,isFieldValidating:L,setFieldValidating:z,registerField:W,unregisterField:H,validateField:X,validateFields:U,resetFields:Z,getFieldsValue:G,setFieldsValue:$,setFields:K,submit:J,scrollToField:Y,registerFieldRef:Q,labelWidth:F,labelAlign:w}},[j,P,D,B,R,A,I,L,z,W,H,X,U,Z,G,$,K,J,Y,Q,F,w]),re=v({},S);return"vertical"===E?(re.display="flex",re.flexDirection="column"):"inline"===E&&(re.display="inline-flex",re.flexWrap="wrap",re.gap="16px"),r(p.Provider,{value:ee,children:r("form",{className:"aha-form ".concat(T),style:re,onSubmit:function(e){return f(void 0,void 0,void 0,function(){var r;return h(this,function(n){switch(n.label){case 0:e.preventDefault(),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,U()];case 2:return r=n.sent(),null==g||g(r),[3,4];case 3:return n.sent(),[3,4];case 4:return[2]}})})},children:q})})});function b(){return[o(null)]}y.displayName="Form";var F=y;F.Item=function(t){var c=t.name,d=t.label,s=t.htmlFor;t.labelCol,t.wrapperCol;var f=t.required,h=void 0!==f&&f,m=t.rules,y=void 0===m?[]:m;t.hasFeedback;var b=t.validateStatus,F=t.help,x=t.extra,w=t.className,C=void 0===w?"":w,E=t.style,k=t.children;t.labelAlign,t.labelWidth;var T=t.hidden,S=void 0!==T&&T,q=t.tooltip,V=i(p),j=o(null),O=l(function(e){j.current=e,c&&(null==V?void 0:V.registerFieldRef)&&V.registerFieldRef(c,e)},[c,V]),N=(null==V?void 0:V.fields)||{};c&&V&&V.getFieldValue(c);var _=c&&V?V.getFieldError(c):void 0,P=!(!c||!V)&&V.isFieldTouched(c),D=!(!c||!V)&&V.isFieldValidating(c);c&&N[c];var B=b||(_?"error":D?"validating":P&&!_?"success":void 0),R=void 0!==F?F:_||void 0,A=o(y),I=o(h),L=o(!1),z=h||y.some(function(e){return e.required}),M=u(function(){if(!L.current)return L.current=!0,!0;if(A.current.length!==y.length)return!0;if(A.current===y)return!1;for(var e=0;e<y.length;e++){var r=A.current[e],n=y[e];if((null==r?void 0:r.required)!==(null==n?void 0:n.required)||(null==r?void 0:r.message)!==(null==n?void 0:n.message)||(null==r?void 0:r.type)!==(null==n?void 0:n.type)||(null==r?void 0:r.pattern)!==(null==n?void 0:n.pattern)||(null==r?void 0:r.min)!==(null==n?void 0:n.min)||(null==r?void 0:r.max)!==(null==n?void 0:n.max)||(null==r?void 0:r.len)!==(null==n?void 0:n.len)||(null==r?void 0:r.whitespace)!==(null==n?void 0:n.whitespace))return!0}return!1},[y]);a(function(){if(c&&V)return(!A.current||M||I.current!==h)&&(A.current=y,I.current=h,V.registerField(c,{rules:y,required:z})),function(){c&&V&&V.unregisterField(c)}},[c]);if(S)return null;return e("div",{ref:O,className:"aha-form-item ".concat(C),style:v({display:"flex",flexDirection:"column",marginBottom:"16px"},E),children:[d&&e("label",{htmlFor:s,style:{display:"flex",alignItems:"center",marginBottom:"6px",fontSize:"14px",lineHeight:"20px",color:"#44403C",fontFamily:"DM Sans, sans-serif",fontWeight:500},children:[d,z&&r("span",{style:{color:"#EC470A",marginLeft:"4px"},children:"*"}),q&&r(function(t){var i=t.content,o=n.useState(!1),l=o[0],u=o[1],a=n.useRef(null);return n.useEffect(function(){var e=function(e){a.current&&!a.current.contains(e.target)&&u(!1)};if(l)return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}},[l]),e("div",{style:{position:"relative",display:"inline-block",marginLeft:"4px"},children:[r("div",{onClick:function(e){e.stopPropagation(),u(!l)},style:{display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:"#A9A29D"},children:r(g,{})}),l&&e("div",{ref:a,style:{position:"absolute",top:"100%",left:"50%",transform:"translateX(-50%)",marginTop:"4px",padding:"8px 12px",backgroundColor:"#1C1917",color:"#FFFFFF",fontSize:"12px",lineHeight:"18px",fontFamily:"DM Sans, sans-serif",borderRadius:"6px",whiteSpace:"nowrap",zIndex:1e3,boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)"},children:[i,r("div",{style:{position:"absolute",top:"-4px",left:"50%",transform:"translateX(-50%)",width:0,height:0,borderLeft:"4px solid transparent",borderRight:"4px solid transparent",borderBottom:"4px solid #1C1917"}})]})]})},{content:q})]}),e("div",{style:{width:"100%"},children:[r("div",{children:n.Children.map(k,function(e){return n.isValidElement(e)?function(e){var r,t,i,o,l,u,a,d,s;if(!n.isValidElement(e))return e;var f=v({},e.props);if(c&&V){var h=V.getFieldValue(c),p=V.setFieldValue;if(!p)return e;var g=e.type;if(g&&("object"==typeof g||"function"==typeof g)&&"displayName"in g){var m=g.displayName;if("Input"===m||"Textarea"===m){f.value=h||"";var y=null===(r=e.props)||void 0===r?void 0:r.onChange,b=null===(t=e.props)||void 0===t?void 0:t.onBlur;f.onChange=function(e){p(c,e.target.value),null==y||y(e),c&&V&&setTimeout(function(){V.validateField(c)},0)},f.onBlur=function(e){c&&V&&(V.setFieldTouched(c,!0),V.validateField(c)),null==b||b(e)},f.error="error"===B}else if("Select"===m){f.value=h;var F=null===(i=e.props)||void 0===i?void 0:i.onChange,x=null===(o=e.props)||void 0===o?void 0:o.onBlur;f.onChange=function(e,r){p(c,e),null==F||F(e,r),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))},f.onBlur=function(e){c&&V&&(V.setFieldTouched(c,!0),V.validateField(c)),null==x||x(e)},f.error="error"===B}else if("Switch"===m){f.checked=h||!1;var w=null===(l=e.props)||void 0===l?void 0:l.onChange;f.onChange=function(e,r){p(c,e),null==w||w(e,r),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))}}else if("Checkbox"===m){f.checked=h||!1;var C=null===(u=e.props)||void 0===u?void 0:u.onChange;f.onChange=function(e){p(c,e.target.checked),null==C||C(e),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))}}else if("Radio"===m){var E=null===(a=e.props)||void 0===a?void 0:a.value;if(void 0!==E){f.checked=h===E;var k=null===(d=e.props)||void 0===d?void 0:d.onChange;f.onChange=function(e){p(c,E),null==k||k(e),c&&V&&(V.setFieldTouched(c,!0),setTimeout(function(){V.validateField(c)},0))}}}}else{void 0!==h&&(f.value=h);var T=null===(s=e.props)||void 0===s?void 0:s.onChange;f.onChange=function(e){var r,n,t=null!==(n=null===(r=null==e?void 0:e.target)||void 0===r?void 0:r.value)&&void 0!==n?n:e;p(c,t),null==T||T(e)}}}return"error"===B&&"error"in f&&(f.error=!0),n.cloneElement(e,f)}(e):e})}),R&&r("div",{style:{marginTop:"6px",fontSize:"14px",lineHeight:"20px",fontWeight:400,color:"error"===B?"#D92D20":"warning"===B?"#F59E0B":"#78716C",fontFamily:"DM Sans, sans-serif"},children:R}),x&&!R&&r("div",{style:{marginTop:"4px",fontSize:"12px",lineHeight:"18px",color:"#78716C",fontFamily:"DM Sans, sans-serif"},children:x})]})]})},F.useForm=b;export{m as FormValidationError,F as default,b as useForm};
2
2
  //# sourceMappingURL=Form.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Form.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/components/Form/FormContext.tsx","../src/icons/index.tsx","../src/components/Form/index.tsx","../src/components/Form/FormItem.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { createContext } from 'react';\n\nexport interface FieldData {\n value?: any;\n error?: string;\n touched?: boolean;\n validating?: boolean;\n rules?: any[];\n required?: boolean;\n}\n\nexport interface FormContextValue {\n // 字段管理\n fields: Record<string, FieldData>;\n // 获取字段值\n getFieldValue: (name: string) => any;\n // 设置字段值\n setFieldValue: (name: string, value: any) => void;\n // 获取字段错误\n getFieldError: (name: string) => string | undefined;\n // 设置字段错误\n setFieldError: (name: string, error: string | undefined) => void;\n // 是否字段被触摸\n isFieldTouched: (name: string) => boolean;\n // 设置字段触摸状态\n setFieldTouched: (name: string, touched: boolean) => void;\n // 是否字段正在校验\n isFieldValidating: (name: string) => boolean;\n // 设置字段校验状态\n setFieldValidating: (name: string, validating: boolean) => void;\n // 注册字段\n registerField: (name: string, options: { rules?: any[]; required?: boolean }) => void;\n // 注销字段\n unregisterField: (name: string) => void;\n // 校验字段\n validateField: (name: string) => Promise<string | undefined>;\n // 校验所有字段\n validateFields: (nameList?: string[]) => Promise<any>;\n // 重置字段\n resetFields: (nameList?: string[]) => void;\n // 获取所有字段值\n getFieldsValue: (nameList?: string[]) => any;\n // 设置所有字段值\n setFieldsValue: (values: Record<string, any>) => void;\n // 提交表单\n submit: () => Promise<any>;\n // 批量设置字段(值 + 错误),类似 antd setFields\n setFields: (fields: Array<{ name: string; value?: any; errors?: string[] }>) => void;\n // 滚动到指定字段,类似 antd scrollToField\n scrollToField: (name: string, options?: ScrollIntoViewOptions) => void;\n // 注册字段 DOM 节点(供 scrollToField 使用,FormItem 内部调用)\n registerFieldRef: (name: string, element: HTMLElement | null) => void;\n // 标签宽度\n labelWidth?: number | string;\n // 标签对齐\n labelAlign?: 'left' | 'right';\n}\n\nexport const FormContext = createContext<FormContextValue | null>(null);\n\n","import React from \"react\";\n\n// Checkbox 选中图标\nexport const CheckIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Checkbox 半选中图标(减号)\nexport const MinusIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 7H10.5\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标\nexport const SortIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 降序\nexport const SortDescIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 升序\nexport const SortAscIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M8.5 7.5L6 10L3.5 7.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.5 4.5L6 2L3.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向左的箭头\nexport const LeftArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M15.8334 10H4.16675M4.16675 10L10.0001 15.8334M4.16675 10L10.0001 4.16669\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向右的箭头\nexport const RightArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M4.16675 10H15.8334M15.8334 10L10.0001 4.16669M15.8334 10L10.0001 15.8334\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 提示信息图标\nexport const TooltipIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <g clipPath=\"url(#clip0_54_1653)\">\n <path\n d=\"M6.06 6C6.21674 5.55444 6.5261 5.17873 6.9333 4.93942C7.34051 4.7001 7.81926 4.61262 8.28479 4.69247C8.75031 4.77232 9.17255 5.01434 9.47672 5.37568C9.78089 5.73702 9.94737 6.19434 9.94667 6.66666C9.94667 8 7.94667 8.66666 7.94667 8.66666M8 11.3333H8.00667M14.6667 8C14.6667 11.6819 11.6819 14.6667 8 14.6667C4.3181 14.6667 1.33333 11.6819 1.33333 8C1.33333 4.3181 4.3181 1.33333 8 1.33333C11.6819 1.33333 14.6667 4.3181 14.6667 8Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_54_1653\">\n <rect width=\"16\" height=\"16\" fill=\"currentColor\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React, { useRef, useCallback, useState, useImperativeHandle, useEffect, useMemo } from 'react';\nimport { FormContext, FormContextValue, FieldData } from './FormContext';\nimport FormItem from './FormItem';\n\nexport interface FormProps {\n /** 表单初始值 */\n initialValues?: Record<string, any>;\n /** 表单值变化回调 */\n onValuesChange?: (changedValues: Record<string, any>, allValues: Record<string, any>) => void;\n /** 表单提交回调 */\n onFinish?: (values: Record<string, any>) => void;\n /** 表单提交失败回调 */\n onFinishFailed?: (errorInfo: { values: Record<string, any>; errorFields: Array<{ name: string; errors: string[] }> }) => void;\n /** 标签宽度 */\n labelWidth?: number | string;\n /** 标签对齐方式 */\n labelAlign?: 'left' | 'right';\n /** 布局方式 */\n layout?: 'horizontal' | 'vertical' | 'inline';\n /** 尺寸 */\n size?: 'small' | 'medium' | 'large';\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 子元素 */\n children?: React.ReactNode;\n}\n\n/** scrollToField 的选项,与 Element.scrollIntoView 一致 */\nexport type ScrollToFieldOptions = ScrollIntoViewOptions;\n\nexport interface FormInstance {\n /** 获取字段值 */\n getFieldValue: (name: string) => any;\n /** 获取所有字段值 */\n getFieldsValue: (nameList?: string[]) => any;\n /** 设置字段值 */\n setFieldValue: (name: string, value: any) => void;\n /** 设置所有字段值 */\n setFieldsValue: (values: Record<string, any>) => void;\n /** 批量设置字段(值 + 错误),类似 antd 的 setFields */\n setFields: (fields: Array<{ name: string; value?: any; errors?: string[] }>) => void;\n /** 获取字段错误 */\n getFieldError: (name: string) => string | undefined;\n /** 校验字段 */\n validateField: (name: string) => Promise<string | undefined>;\n /** 校验所有字段 */\n validateFields: (nameList?: string[]) => Promise<any>;\n /** 重置字段 */\n resetFields: (nameList?: string[]) => void;\n /** 提交表单 */\n submit: () => Promise<any>;\n /** 滚动到指定字段(如第一个报错项) */\n scrollToField: (name: string, options?: ScrollToFieldOptions) => void;\n}\n\nconst Form = React.forwardRef<FormInstance, FormProps>(\n (\n {\n initialValues = {},\n onValuesChange,\n onFinish,\n onFinishFailed,\n labelWidth = '120px',\n labelAlign = 'right',\n layout = 'horizontal',\n size = 'medium',\n className = '',\n style,\n children,\n },\n ref\n ) => {\n const [fields, setFieldsState] = useState<Record<string, FieldData>>(() => {\n const initialFields: Record<string, FieldData> = {};\n Object.keys(initialValues).forEach((key) => {\n initialFields[key] = {\n value: initialValues[key],\n error: undefined,\n touched: false,\n validating: false,\n };\n });\n return initialFields;\n });\n\n // 使用 ref 保存最新的 fields,避免闭包问题\n const fieldsRef = useRef(fields);\n useEffect(() => {\n fieldsRef.current = fields;\n }, [fields]);\n\n // 存储每个字段的 DOM 元素,供 scrollToField 使用\n const fieldElementsRef = useRef<Record<string, HTMLElement>>({});\n\n // 获取字段值 - 从 ref 读取,确保获取最新值\n const getFieldValue = useCallback((name: string) => {\n return fieldsRef.current[name]?.value;\n }, []);\n\n // 设置字段值\n const setFieldValue = useCallback((name: string, value: any) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value,\n error: undefined,\n touched: false,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n value,\n };\n }\n\n // 同步更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n value,\n };\n } else {\n fieldsRef.current[name] = {\n value,\n error: undefined,\n touched: false,\n validating: false,\n };\n }\n\n // 触发 onValuesChange\n if (onValuesChange) {\n const changedValues: Record<string, any> = {};\n changedValues[name] = value;\n const allValues: Record<string, any> = {};\n Object.keys(newFields).forEach((key) => {\n allValues[key] = newFields[key].value;\n });\n onValuesChange(changedValues, allValues);\n }\n\n return newFields;\n });\n }, [onValuesChange]);\n\n // 获取字段错误 - 从 ref 读取,确保获取最新值\n const getFieldError = useCallback((name: string) => {\n return fieldsRef.current[name]?.error;\n }, []);\n\n // 设置字段错误\n const setFieldError = useCallback((name: string, error: string | undefined) => {\n // 先更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n error,\n };\n }\n \n // 然后更新 state\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: undefined,\n error,\n touched: false,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n error,\n };\n }\n return newFields;\n });\n }, []);\n\n // 是否字段被触摸 - 从 ref 读取,确保获取最新值\n const isFieldTouched = useCallback((name: string) => {\n return fieldsRef.current[name]?.touched || false;\n }, []);\n\n // 设置字段触摸状态\n const setFieldTouched = useCallback((name: string, touched: boolean) => {\n // 先更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n touched,\n };\n }\n \n // 然后更新 state\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: undefined,\n error: undefined,\n touched,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n touched,\n };\n }\n return newFields;\n });\n }, []);\n\n // 是否字段正在校验 - 从 ref 读取,确保获取最新值\n const isFieldValidating = useCallback((name: string) => {\n return fieldsRef.current[name]?.validating || false;\n }, []);\n\n // 设置字段校验状态\n const setFieldValidating = useCallback((name: string, validating: boolean) => {\n // 先更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n validating,\n };\n }\n \n // 然后更新 state\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: undefined,\n error: undefined,\n touched: false,\n validating,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n validating,\n };\n }\n return newFields;\n });\n }, []);\n\n // 使用 ref 存储 registerField 函数,避免依赖变化\n const registerFieldFnRef = useRef<(name: string, options: { rules?: any[]; required?: boolean }) => void>();\n \n registerFieldFnRef.current = (name: string, options: { rules?: any[]; required?: boolean }) => {\n setFieldsState((prev) => {\n // 如果字段已存在且 rules 和 required 没有变化,不更新\n if (prev[name]) {\n const existingRules = prev[name].rules || [];\n const newRules = options.rules || [];\n \n // 深度比较 rules\n let rulesEqual = existingRules.length === newRules.length;\n if (rulesEqual && existingRules.length > 0) {\n for (let i = 0; i < existingRules.length; i++) {\n const existingRule = existingRules[i];\n const newRule = newRules[i];\n if (\n existingRule?.required !== newRule?.required ||\n existingRule?.message !== newRule?.message ||\n existingRule?.type !== newRule?.type ||\n existingRule?.pattern !== newRule?.pattern ||\n existingRule?.min !== newRule?.min ||\n existingRule?.max !== newRule?.max ||\n existingRule?.len !== newRule?.len ||\n existingRule?.whitespace !== newRule?.whitespace\n ) {\n rulesEqual = false;\n break;\n }\n }\n }\n \n if (rulesEqual && prev[name].required === options.required) {\n return prev; // 没有变化,返回原对象,避免触发重新渲染\n }\n }\n \n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: initialValues[name],\n error: undefined,\n touched: false,\n validating: false,\n rules: options.rules,\n required: options.required,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n rules: options.rules,\n required: options.required,\n };\n }\n return newFields;\n });\n };\n\n const registerField = useCallback((name: string, options: { rules?: any[]; required?: boolean }) => {\n registerFieldFnRef.current?.(name, options);\n }, []);\n\n // 注销字段\n const unregisterField = useCallback((name: string) => {\n delete fieldElementsRef.current[name];\n setFieldsState((prev) => {\n const newFields = { ...prev };\n delete newFields[name];\n return newFields;\n });\n delete fieldsRef.current[name];\n }, []);\n\n // 校验单个字段\n const validateField = useCallback(async (name: string): Promise<string | undefined> => {\n // 使用 ref 获取最新的 fields 状态,避免闭包问题\n const field = fieldsRef.current[name];\n if (!field) {\n return undefined;\n }\n\n setFieldValidating(name, true);\n\n const rules = field.rules || [];\n let error: string | undefined;\n\n for (const rule of rules) {\n const value = field.value;\n\n // required 校验\n if (rule.required) {\n if (value === undefined || value === null || value === '') {\n error = rule.message || `${name} is required`;\n break;\n }\n }\n\n // type 校验\n if (rule.type && value !== undefined && value !== null && value !== '') {\n const typeMap: Record<string, (v: any) => boolean> = {\n string: (v) => typeof v === 'string',\n number: (v) => typeof v === 'number' && !isNaN(v),\n boolean: (v) => typeof v === 'boolean',\n email: (v) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(String(v)),\n url: (v) => {\n try {\n new URL(String(v));\n return true;\n } catch {\n return false;\n }\n },\n };\n\n const validator = typeMap[rule.type];\n if (validator && !validator(value)) {\n error = rule.message || `${name} must be a valid ${rule.type}`;\n break;\n }\n }\n\n // pattern 校验\n if (rule.pattern && value !== undefined && value !== null && value !== '') {\n if (!rule.pattern.test(String(value))) {\n error = rule.message || `${name} format is invalid`;\n break;\n }\n }\n\n // min 校验\n if (rule.min !== undefined && value !== undefined && value !== null && value !== '') {\n const numValue = typeof value === 'string' ? value.length : Number(value);\n if (numValue < rule.min) {\n error = rule.message || `${name} must be at least ${rule.min}`;\n break;\n }\n }\n\n // max 校验\n if (rule.max !== undefined && value !== undefined && value !== null && value !== '') {\n const numValue = typeof value === 'string' ? value.length : Number(value);\n if (numValue > rule.max) {\n error = rule.message || `${name} must be at most ${rule.max}`;\n break;\n }\n }\n\n // len 校验\n if (rule.len !== undefined && value !== undefined && value !== null && value !== '') {\n const lenValue = typeof value === 'string' ? value.length : Number(value);\n if (lenValue !== rule.len) {\n error = rule.message || `${name} must be exactly ${rule.len}`;\n break;\n }\n }\n\n // whitespace 校验\n if (rule.whitespace && typeof value === 'string' && value.trim() !== value) {\n error = rule.message || `${name} cannot be whitespace`;\n break;\n }\n\n // 自定义 validator\n if (rule.validator) {\n try {\n await rule.validator(rule, value);\n } catch (err: any) {\n error = err?.message || rule.message || `${name} validation failed`;\n break;\n }\n }\n }\n\n // 先同步更新 ref,确保立即可用\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n error,\n validating: false,\n touched: true,\n };\n } else {\n fieldsRef.current[name] = {\n value: field.value,\n error,\n touched: true,\n validating: false,\n rules: field.rules,\n required: field.required,\n };\n }\n\n // 然后更新 state - 使用函数式更新确保状态正确更新\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (newFields[name]) {\n newFields[name] = {\n ...newFields[name],\n error,\n validating: false,\n touched: true,\n };\n } else {\n // 如果字段不存在,创建一个新字段\n newFields[name] = {\n value: field.value,\n error,\n touched: true,\n validating: false,\n rules: field.rules,\n required: field.required,\n };\n }\n return newFields;\n });\n\n // 返回错误信息\n return error;\n }, []);\n\n // 获取所有字段值\n const getFieldsValue = useCallback((nameList?: string[]) => {\n const currentFields = fieldsRef.current;\n const values: Record<string, any> = {};\n const fieldsToGet = nameList || Object.keys(currentFields);\n\n fieldsToGet.forEach((name) => {\n values[name] = currentFields[name]?.value;\n });\n\n return values;\n }, []);\n\n // 校验所有字段\n const validateFields = useCallback(async (nameList?: string[]): Promise<any> => {\n // 使用 ref 获取最新的 fields 状态\n const currentFields = fieldsRef.current;\n const fieldsToValidate = nameList || Object.keys(currentFields);\n const errors: Array<{ name: string; errors: string[] }> = [];\n\n // 并行校验所有字段,并收集错误\n const validationResults = await Promise.all(\n fieldsToValidate.map(async (name) => {\n const field = currentFields[name];\n // 如果字段存在且有 rules,才进行校验\n if (field && field.rules && field.rules.length > 0) {\n const error = await validateField(name);\n return { name, error };\n }\n return { name, error: undefined };\n })\n );\n\n // 收集所有错误\n validationResults.forEach(({ name, error }) => {\n if (error) {\n errors.push({\n name,\n errors: [error],\n });\n }\n });\n\n // 等待状态更新完成 - 使用 requestAnimationFrame 确保 DOM 更新\n await new Promise((resolve) => requestAnimationFrame(() => {\n setTimeout(resolve, 0);\n }));\n\n if (errors.length > 0) {\n const errorInfo = {\n values: getFieldsValue(),\n errorFields: errors,\n };\n onFinishFailed?.(errorInfo);\n throw errorInfo;\n }\n\n return getFieldsValue();\n }, [validateField, getFieldsValue, onFinishFailed]);\n\n // 重置字段\n const resetFields = useCallback((nameList?: string[]) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n const fieldsToReset = nameList || Object.keys(newFields);\n\n fieldsToReset.forEach((name) => {\n if (newFields[name]) {\n newFields[name] = {\n ...newFields[name],\n value: initialValues[name],\n error: undefined,\n touched: false,\n validating: false,\n };\n fieldsRef.current[name] = { ...newFields[name] };\n }\n });\n\n return newFields;\n });\n }, [initialValues]);\n\n // 设置所有字段值\n const setFieldsValue = useCallback((values: Record<string, any>) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n Object.keys(values).forEach((name) => {\n if (!newFields[name]) {\n newFields[name] = {\n value: values[name],\n error: undefined,\n touched: false,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n value: values[name],\n };\n }\n fieldsRef.current[name] = { ...newFields[name] };\n });\n\n if (onValuesChange) {\n const allValues: Record<string, any> = {};\n Object.keys(newFields).forEach((key) => {\n allValues[key] = newFields[key].value;\n });\n onValuesChange(values, allValues);\n }\n\n return newFields;\n });\n }, [onValuesChange]);\n\n // 提交表单\n const submit = useCallback(async () => {\n try {\n const values = await validateFields();\n onFinish?.(values);\n return values;\n } catch (error) {\n throw error;\n }\n }, [validateFields, onFinish]);\n\n // 批量设置字段(值 + 错误),类似 antd setFields\n const setFields = useCallback((fieldsToSet: Array<{ name: string; value?: any; errors?: string[] }>) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n fieldsToSet.forEach(({ name, value, errors }) => {\n const error = errors && errors.length > 0 ? errors[0] : undefined;\n if (!newFields[name]) {\n newFields[name] = {\n value: value !== undefined ? value : undefined,\n error,\n touched: true,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n ...(value !== undefined && { value }),\n error,\n touched: true,\n };\n }\n fieldsRef.current[name] = { ...newFields[name] };\n });\n return newFields;\n });\n if (onValuesChange && fieldsToSet.some((f) => f.value !== undefined)) {\n const changedValues: Record<string, any> = {};\n fieldsToSet.forEach((f) => {\n if (f.value !== undefined) changedValues[f.name] = f.value;\n });\n setTimeout(() => onValuesChange(changedValues, getFieldsValue()), 0);\n }\n }, [onValuesChange, getFieldsValue]);\n\n // 注册字段 DOM 节点\n const registerFieldRef = useCallback((name: string, element: HTMLElement | null) => {\n if (element) {\n fieldElementsRef.current[name] = element;\n } else {\n delete fieldElementsRef.current[name];\n }\n }, []);\n\n // 滚动到指定字段\n const scrollToField = useCallback((name: string, options?: ScrollIntoViewOptions) => {\n const el = fieldElementsRef.current[name];\n el?.scrollIntoView({ behavior: 'smooth', block: 'center', ...options });\n }, []);\n\n // 暴露方法给 ref\n useImperativeHandle(ref, () => ({\n getFieldValue,\n getFieldsValue,\n setFieldValue,\n setFieldsValue,\n setFields,\n getFieldError,\n validateField,\n validateFields,\n resetFields,\n submit,\n scrollToField,\n }));\n\n // 使用 useMemo 缓存 contextValue,但 fields 必须包含在依赖中,以便 FormItem 能重新渲染\n const contextValue: FormContextValue = useMemo(() => ({\n fields,\n getFieldValue,\n setFieldValue,\n getFieldError,\n setFieldError,\n isFieldTouched,\n setFieldTouched,\n isFieldValidating,\n setFieldValidating,\n registerField,\n unregisterField,\n validateField,\n validateFields,\n resetFields,\n getFieldsValue,\n setFieldsValue,\n setFields,\n submit,\n scrollToField,\n registerFieldRef,\n labelWidth,\n labelAlign,\n }), [\n fields,\n getFieldValue,\n setFieldValue,\n getFieldError,\n setFieldError,\n isFieldTouched,\n setFieldTouched,\n isFieldValidating,\n setFieldValidating,\n registerField,\n unregisterField,\n validateField,\n validateFields,\n resetFields,\n getFieldsValue,\n setFieldsValue,\n setFields,\n submit,\n scrollToField,\n registerFieldRef,\n labelWidth,\n labelAlign,\n ]);\n\n const formStyle: React.CSSProperties = {\n ...style,\n };\n\n if (layout === 'vertical') {\n formStyle.display = 'flex';\n formStyle.flexDirection = 'column';\n } else if (layout === 'inline') {\n formStyle.display = 'inline-flex';\n formStyle.flexWrap = 'wrap';\n formStyle.gap = '16px';\n }\n\n return (\n <FormContext.Provider value={contextValue}>\n <form\n className={`aha-form ${className}`}\n style={formStyle}\n onSubmit={async (e) => {\n e.preventDefault();\n try {\n const values = await validateFields();\n // 只有校验通过才调用 onFinish\n onFinish?.(values);\n } catch (error) {\n // 校验失败,不调用 onFinish,错误信息已经通过 setFieldError 设置\n // 错误信息会显示在 FormItem 中\n // onFinishFailed 已经在 validateFields 中调用\n }\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n }\n);\n\nForm.displayName = 'Form';\n\n/** 获取表单实例的 hook,用法与 antd Form.useForm() 一致,返回的 ref 传给 <Form ref={formRef} /> 后即可使用 formRef.current?.setFieldValue 等方法 */\nfunction useForm(): [React.RefObject<FormInstance | null>] {\n const formRef = useRef<FormInstance | null>(null);\n return [formRef];\n}\n\n// 导出 FormItem 作为 Form.Item,并挂载 useForm\nconst FormWithItem = Form as typeof Form & {\n Item: typeof FormItem;\n useForm: typeof useForm;\n};\nFormWithItem.Item = FormItem;\nFormWithItem.useForm = useForm;\n\nexport default FormWithItem;\nexport { useForm };\n\n","import React, { useContext, useEffect, useRef, useMemo, useCallback } from 'react';\nimport { FormContext } from './FormContext';\nimport { TooltipIcon } from '../../icons';\n\nexport interface FormItemProps {\n /** 字段名 */\n name?: string;\n /** 标签 */\n label?: React.ReactNode;\n /** 标签的 HTML for 属性 */\n htmlFor?: string;\n /** 标签布局 */\n labelCol?: { span?: number; offset?: number };\n /** 输入控件布局 */\n wrapperCol?: { span?: number; offset?: number };\n /** 是否必填(显示红色星号) */\n required?: boolean;\n /** 校验规则 */\n rules?: Array<{\n required?: boolean;\n message?: string;\n validator?: (rule: any, value: any) => Promise<void> | void;\n pattern?: RegExp;\n min?: number;\n max?: number;\n len?: number;\n type?: 'string' | 'number' | 'boolean' | 'method' | 'regexp' | 'integer' | 'float' | 'array' | 'object' | 'enum' | 'date' | 'url' | 'hex' | 'email';\n whitespace?: boolean;\n [key: string]: any;\n }>;\n /** 是否显示校验信息 */\n hasFeedback?: boolean;\n /** 校验状态 */\n validateStatus?: 'success' | 'warning' | 'error' | 'validating';\n /** 帮助信息 */\n help?: React.ReactNode;\n /** 额外的提示信息 */\n extra?: React.ReactNode;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 子元素 */\n children?: React.ReactNode;\n /** 标签对齐方式 */\n labelAlign?: 'left' | 'right';\n /** 标签宽度 */\n labelWidth?: number | string;\n /** 是否隐藏 */\n hidden?: boolean;\n /** 标签提示信息(tooltip) */\n tooltip?: React.ReactNode;\n}\n\nconst FormItem: React.FC<FormItemProps> = ({\n name,\n label,\n htmlFor,\n labelCol,\n wrapperCol,\n required = false,\n rules = [],\n hasFeedback = false,\n validateStatus,\n help,\n extra,\n className = '',\n style,\n children,\n labelAlign = 'right',\n labelWidth,\n hidden = false,\n tooltip,\n}) => {\n const formContext = useContext(FormContext);\n const itemRef = useRef<HTMLDivElement>(null);\n\n // 注册字段 DOM 节点,供 Form 的 scrollToField 使用\n const setItemRef = useCallback(\n (el: HTMLDivElement | null) => {\n (itemRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n if (name && formContext?.registerFieldRef) {\n formContext.registerFieldRef(name, el);\n }\n },\n [name, formContext]\n );\n\n // 从 Form 上下文获取字段值、错误信息等\n // 使用 formContext.fields 来触发重新渲染,当 fields 变化时组件会重新渲染\n const fields = formContext?.fields || {};\n const fieldValue = name && formContext ? formContext.getFieldValue(name) : undefined;\n const fieldError = name && formContext ? formContext.getFieldError(name) : undefined;\n const fieldTouched = name && formContext ? formContext.isFieldTouched(name) : false;\n const fieldValidating = name && formContext ? formContext.isFieldValidating(name) : false;\n \n // 使用 fields 来触发重新渲染,确保错误信息能显示\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = name ? fields[name] : undefined; // 读取 fields[name] 来建立依赖关系\n\n // 计算校验状态\n // 如果有错误就显示错误状态,不管是否 touched(提交时会强制校验)\n const computedValidateStatus =\n validateStatus ||\n (fieldError\n ? 'error'\n : fieldValidating\n ? 'validating'\n : fieldTouched && !fieldError\n ? 'success'\n : undefined);\n\n // 计算帮助信息 - 如果有错误就显示,不管是否 touched\n const computedHelp = help !== undefined ? help : (fieldError || undefined);\n\n // 使用 useRef 存储上一次的 rules 和 required,避免不必要的更新\n const prevRulesRef = useRef(rules);\n const prevRequiredRef = useRef(required);\n const isMountedRef = useRef(false);\n\n // 计算是否必填\n const isRequired = required || rules.some((rule) => rule.required);\n\n // 检查 rules 是否真的变化了(深度比较)\n const rulesChanged = useMemo(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true;\n return true; // 首次挂载时注册\n }\n \n if (prevRulesRef.current.length !== rules.length) {\n return true;\n }\n // 简单比较:如果引用相同,肯定没变化\n if (prevRulesRef.current === rules) {\n return false;\n }\n // 深度比较关键属性\n for (let i = 0; i < rules.length; i++) {\n const prevRule = prevRulesRef.current[i];\n const currRule = rules[i];\n if (\n prevRule?.required !== currRule?.required ||\n prevRule?.message !== currRule?.message ||\n prevRule?.type !== currRule?.type ||\n prevRule?.pattern !== currRule?.pattern ||\n prevRule?.min !== currRule?.min ||\n prevRule?.max !== currRule?.max ||\n prevRule?.len !== currRule?.len ||\n prevRule?.whitespace !== currRule?.whitespace\n ) {\n return true;\n }\n }\n return false;\n }, [rules]);\n\n // 注册字段到 Form - 只在 name 变化时注册,rules 和 required 通过内部比较\n useEffect(() => {\n if (!name || !formContext) return;\n\n // 检查是否需要更新\n const shouldUpdate = \n !prevRulesRef.current || // 首次注册\n rulesChanged || \n prevRequiredRef.current !== required;\n\n if (shouldUpdate) {\n prevRulesRef.current = rules;\n prevRequiredRef.current = required;\n\n formContext.registerField(name, {\n rules,\n required: isRequired,\n });\n }\n\n return () => {\n if (name && formContext) {\n formContext.unregisterField(name);\n }\n };\n // 只依赖 name,formContext 是稳定的,rules 和 required 通过 ref 比较\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [name]);\n\n // 克隆子元素,注入 value、onChange、error 等 props\n const cloneChild = (child: React.ReactElement) => {\n if (!React.isValidElement(child)) return child;\n\n const childProps: any = {\n ...(child.props as Record<string, any>),\n };\n\n // 注入 value 和 onChange\n if (name && formContext) {\n const fieldValue = formContext.getFieldValue(name);\n const setFieldValue = formContext.setFieldValue;\n\n if (!setFieldValue) {\n // 如果没有 formContext,直接返回原组件\n return child;\n }\n\n // 处理不同类型的组件(函数组件 typeof 为 'function',React.memo 等为 'object')\n const childType = child.type as any;\n if (childType && (typeof childType === 'object' || typeof childType === 'function') && 'displayName' in childType) {\n const displayName = childType.displayName;\n\n // Input, Textarea\n if (displayName === 'Input' || displayName === 'Textarea') {\n childProps.value = fieldValue || '';\n const originalOnChange = (child.props as any)?.onChange;\n const originalOnBlur = (child.props as any)?.onBlur;\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue(name, e.target.value);\n originalOnChange?.(e);\n // 值变化时立即触发校验\n if (name && formContext) {\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n childProps.onBlur = (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n formContext.validateField(name);\n }\n originalOnBlur?.(e);\n };\n childProps.error = computedValidateStatus === 'error';\n }\n // Select\n else if (displayName === 'Select') {\n childProps.value = fieldValue;\n const originalOnChange = (child.props as any)?.onChange;\n const originalOnBlur = (child.props as any)?.onBlur;\n childProps.onChange = (value: any, option: any) => {\n setFieldValue(name, value);\n originalOnChange?.(value, option);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n childProps.onBlur = (e: React.FocusEvent) => {\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n formContext.validateField(name);\n }\n originalOnBlur?.(e);\n };\n childProps.error = computedValidateStatus === 'error';\n }\n // Switch\n else if (displayName === 'Switch') {\n childProps.checked = fieldValue || false;\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (checked: boolean, event: any) => {\n setFieldValue(name, checked);\n originalOnChange?.(checked, event);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n }\n // Checkbox\n else if (displayName === 'Checkbox') {\n childProps.checked = fieldValue || false;\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setFieldValue(name, e.target.checked);\n originalOnChange?.(e);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n }\n // Radio\n else if (displayName === 'Radio') {\n // Radio 通常需要 Radio.Group,这里只处理单个 Radio\n const radioValue = (child.props as any)?.value;\n if (radioValue !== undefined) {\n childProps.checked = fieldValue === radioValue;\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setFieldValue(name, radioValue);\n originalOnChange?.(e);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n }\n }\n } else {\n // 通用处理:尝试注入 value 和 onChange\n if (fieldValue !== undefined) {\n childProps.value = fieldValue;\n }\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (e: any) => {\n const value = e?.target?.value ?? e;\n setFieldValue(name, value);\n originalOnChange?.(e);\n };\n }\n }\n\n // 注入 error 状态(如果组件支持)\n if (computedValidateStatus === 'error' && 'error' in childProps) {\n childProps.error = true;\n }\n\n return React.cloneElement(child, childProps);\n };\n\n if (hidden) return null;\n\n // Tooltip 组件(简单实现)\n const TooltipWrapper = ({ content }: { content: React.ReactNode }) => {\n const [showTooltip, setShowTooltip] = React.useState(false);\n const tooltipRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (tooltipRef.current && !tooltipRef.current.contains(event.target as Node)) {\n setShowTooltip(false);\n }\n };\n\n if (showTooltip) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [showTooltip]);\n\n return (\n <div style={{ position: 'relative', display: 'inline-block', marginLeft: '4px' }}>\n <div\n onClick={(e) => {\n e.stopPropagation();\n setShowTooltip(!showTooltip);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n color: '#A9A29D',\n }}\n >\n <TooltipIcon />\n </div>\n {showTooltip && (\n <div\n ref={tooltipRef}\n style={{\n position: 'absolute',\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginTop: '4px',\n padding: '8px 12px',\n backgroundColor: '#1C1917',\n color: '#FFFFFF',\n fontSize: '12px',\n lineHeight: '18px',\n fontFamily: \"DM Sans, sans-serif\",\n borderRadius: '6px',\n whiteSpace: 'nowrap',\n zIndex: 1000,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n }}\n >\n {content}\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderBottom: '4px solid #1C1917',\n }}\n />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={setItemRef}\n className={`aha-form-item ${className}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginBottom: '16px',\n ...style,\n }}\n >\n {label && (\n <label\n htmlFor={htmlFor}\n style={{\n display: 'flex',\n alignItems: 'center',\n marginBottom: '6px',\n fontSize: '14px', // text-sm\n lineHeight: '20px',\n color: '#44403C',\n fontFamily: \"DM Sans, sans-serif\",\n fontWeight: 500, // font-medium\n }}\n >\n {label}\n {isRequired && (\n <span\n style={{\n color: '#EC470A',\n marginLeft: '4px',\n }}\n >\n *\n </span>\n )}\n {tooltip && <TooltipWrapper content={tooltip} />}\n </label>\n )}\n <div style={{ width: '100%' }}>\n <div>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return cloneChild(child);\n }\n return child;\n })}\n </div>\n {computedHelp && (\n <div\n style={{\n marginTop: '6px',\n fontSize: '14px', // text-sm\n lineHeight: '20px',\n fontWeight: 400, // font-normal\n color:\n computedValidateStatus === 'error'\n ? '#D92D20'\n : computedValidateStatus === 'warning'\n ? '#F59E0B'\n : '#78716C',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n {computedHelp}\n </div>\n )}\n {extra && !computedHelp && (\n <div\n style={{\n marginTop: '4px',\n fontSize: '12px',\n lineHeight: '18px',\n color: '#78716C',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n {extra}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default FormItem;\n\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","SuppressedError","FormContext","createContext","TooltipIcon","_a","className","style","_jsxs","width","height","viewBox","fill","xmlns","children","_jsx","clipPath","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","id","Form","React","forwardRef","ref","_b","initialValues","onValuesChange","onFinish","onFinishFailed","_c","labelWidth","_d","labelAlign","_e","layout","size","_g","_h","useState","initialFields","keys","forEach","key","error","undefined","touched","validating","fields","setFieldsState","fieldsRef","useRef","useEffect","current","fieldElementsRef","getFieldValue","useCallback","name","setFieldValue","prev","newFields","changedValues","allValues_1","getFieldError","setFieldError","isFieldTouched","setFieldTouched","isFieldValidating","setFieldValidating","registerFieldFnRef","options","existingRules","rules","newRules","rulesEqual","existingRule","newRule","required","message","type","pattern","min","max","len","whitespace","registerField","unregisterField","validateField","field","_i","rules_1","rule","concat","validator","string","number","isNaN","boolean","email","test","String","url","URL","Number","trim","err_1","getFieldsValue","nameList","currentFields","values","validateFields","fieldsToValidate","errors","all","map","requestAnimationFrame","setTimeout","errorInfo","errorFields","resetFields","setFieldsValue","allValues_2","submit","setFields","fieldsToSet","some","changedValues_1","registerFieldRef","element","scrollToField","el","scrollIntoView","behavior","block","useImperativeHandle","contextValue","useMemo","formStyle","display","flexDirection","flexWrap","gap","Provider","onSubmit","preventDefault","useForm","displayName","FormWithItem","Item","htmlFor","wrapperCol","hasFeedback","validateStatus","help","extra","hidden","tooltip","formContext","useContext","itemRef","setItemRef","fieldError","fieldTouched","fieldValidating","computedValidateStatus","computedHelp","prevRulesRef","prevRequiredRef","isMountedRef","isRequired","rulesChanged","prevRule","currRule","marginBottom","alignItems","fontSize","lineHeight","color","fontFamily","fontWeight","marginLeft","content","showTooltip","setShowTooltip","tooltipRef","handleClickOutside","event","contains","target","document","addEventListener","removeEventListener","position","onClick","stopPropagation","justifyContent","cursor","top","left","transform","marginTop","padding","backgroundColor","borderRadius","whiteSpace","zIndex","boxShadow","borderLeft","borderRight","borderBottom","Children","child","isValidElement","childProps","props","fieldValue_1","setFieldValue_1","childType","originalOnChange_1","onChange","originalOnBlur_1","onBlur","originalOnChange_2","originalOnBlur_2","option","checked","originalOnChange_3","originalOnChange_4","_f","radioValue_1","originalOnChange_5","originalOnChange_6","_j","cloneElement","cloneChild"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Form.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/components/Form/FormContext.tsx","../src/icons/index.tsx","../src/components/Form/index.tsx","../src/components/Form/FormItem.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { createContext } from 'react';\n\nexport interface FieldData {\n value?: any;\n error?: string;\n touched?: boolean;\n validating?: boolean;\n rules?: any[];\n required?: boolean;\n}\n\nexport interface FormContextValue {\n // 字段管理\n fields: Record<string, FieldData>;\n // 获取字段值\n getFieldValue: (name: string) => any;\n // 设置字段值\n setFieldValue: (name: string, value: any) => void;\n // 获取字段错误\n getFieldError: (name: string) => string | undefined;\n // 设置字段错误\n setFieldError: (name: string, error: string | undefined) => void;\n // 是否字段被触摸\n isFieldTouched: (name: string) => boolean;\n // 设置字段触摸状态\n setFieldTouched: (name: string, touched: boolean) => void;\n // 是否字段正在校验\n isFieldValidating: (name: string) => boolean;\n // 设置字段校验状态\n setFieldValidating: (name: string, validating: boolean) => void;\n // 注册字段\n registerField: (name: string, options: { rules?: any[]; required?: boolean }) => void;\n // 注销字段\n unregisterField: (name: string) => void;\n // 校验字段\n validateField: (name: string) => Promise<string | undefined>;\n // 校验所有字段\n validateFields: (nameList?: string[]) => Promise<any>;\n // 重置字段\n resetFields: (nameList?: string[]) => void;\n // 获取所有字段值\n getFieldsValue: (nameList?: string[]) => any;\n // 设置所有字段值\n setFieldsValue: (values: Record<string, any>) => void;\n // 提交表单\n submit: () => Promise<any>;\n // 批量设置字段(值 + 错误),类似 antd setFields\n setFields: (fields: Array<{ name: string; value?: any; errors?: string[] }>) => void;\n // 滚动到指定字段,类似 antd scrollToField\n scrollToField: (name: string, options?: ScrollIntoViewOptions) => void;\n // 注册字段 DOM 节点(供 scrollToField 使用,FormItem 内部调用)\n registerFieldRef: (name: string, element: HTMLElement | null) => void;\n // 标签宽度\n labelWidth?: number | string;\n // 标签对齐\n labelAlign?: 'left' | 'right';\n}\n\nexport const FormContext = createContext<FormContextValue | null>(null);\n\n","import React from \"react\";\n\n// Checkbox 选中图标\nexport const CheckIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Checkbox 半选中图标(减号)\nexport const MinusIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 7H10.5\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标\nexport const SortIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 降序\nexport const SortDescIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 升序\nexport const SortAscIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M8.5 7.5L6 10L3.5 7.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.5 4.5L6 2L3.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向左的箭头\nexport const LeftArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M15.8334 10H4.16675M4.16675 10L10.0001 15.8334M4.16675 10L10.0001 4.16669\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向右的箭头\nexport const RightArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M4.16675 10H15.8334M15.8334 10L10.0001 4.16669M15.8334 10L10.0001 15.8334\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 提示信息图标\nexport const TooltipIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <g clipPath=\"url(#clip0_54_1653)\">\n <path\n d=\"M6.06 6C6.21674 5.55444 6.5261 5.17873 6.9333 4.93942C7.34051 4.7001 7.81926 4.61262 8.28479 4.69247C8.75031 4.77232 9.17255 5.01434 9.47672 5.37568C9.78089 5.73702 9.94737 6.19434 9.94667 6.66666C9.94667 8 7.94667 8.66666 7.94667 8.66666M8 11.3333H8.00667M14.6667 8C14.6667 11.6819 11.6819 14.6667 8 14.6667C4.3181 14.6667 1.33333 11.6819 1.33333 8C1.33333 4.3181 4.3181 1.33333 8 1.33333C11.6819 1.33333 14.6667 4.3181 14.6667 8Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_54_1653\">\n <rect width=\"16\" height=\"16\" fill=\"currentColor\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React, { useRef, useCallback, useState, useImperativeHandle, useEffect, useMemo } from 'react';\nimport { FormContext, FormContextValue, FieldData } from './FormContext';\nimport FormItem from './FormItem';\n\nexport interface FormProps {\n /** 表单初始值 */\n initialValues?: Record<string, any>;\n /** 表单值变化回调 */\n onValuesChange?: (changedValues: Record<string, any>, allValues: Record<string, any>) => void;\n /** 表单提交回调 */\n onFinish?: (values: Record<string, any>) => void;\n /** 表单提交失败回调 */\n onFinishFailed?: (errorInfo: { values: Record<string, any>; errorFields: Array<{ name: string; errors: string[] }> }) => void;\n /** 标签宽度 */\n labelWidth?: number | string;\n /** 标签对齐方式 */\n labelAlign?: 'left' | 'right';\n /** 布局方式 */\n layout?: 'horizontal' | 'vertical' | 'inline';\n /** 尺寸 */\n size?: 'small' | 'medium' | 'large';\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 子元素 */\n children?: React.ReactNode;\n}\n\n/** scrollToField 的选项,与 Element.scrollIntoView 一致 */\nexport type ScrollToFieldOptions = ScrollIntoViewOptions;\n\n/** 校验失败时抛出的错误,携带 values 和 errorFields,便于 catch 后使用 */\nexport class FormValidationError extends Error {\n /** 当前表单值 */\n values: Record<string, any>;\n /** 校验失败的字段列表 */\n errorFields: Array<{ name: string; errors: string[] }>;\n\n constructor(message: string, values: Record<string, any>, errorFields: Array<{ name: string; errors: string[] }>) {\n super(message);\n this.name = 'FormValidationError';\n this.values = values;\n this.errorFields = errorFields;\n Object.setPrototypeOf(this, FormValidationError.prototype);\n }\n}\n\nexport interface FormInstance {\n /** 获取字段值 */\n getFieldValue: (name: string) => any;\n /** 获取所有字段值 */\n getFieldsValue: (nameList?: string[]) => any;\n /** 设置字段值 */\n setFieldValue: (name: string, value: any) => void;\n /** 设置所有字段值 */\n setFieldsValue: (values: Record<string, any>) => void;\n /** 批量设置字段(值 + 错误),类似 antd 的 setFields */\n setFields: (fields: Array<{ name: string; value?: any; errors?: string[] }>) => void;\n /** 获取字段错误 */\n getFieldError: (name: string) => string | undefined;\n /** 校验字段 */\n validateField: (name: string) => Promise<string | undefined>;\n /** 校验所有字段 */\n validateFields: (nameList?: string[]) => Promise<any>;\n /** 重置字段 */\n resetFields: (nameList?: string[]) => void;\n /** 提交表单:校验通过时 resolve 表单值,校验失败时 reject 为 FormValidationError(需 await 或 .catch() 才能捕获) */\n submit: () => Promise<any>;\n /** 滚动到指定字段(如第一个报错项) */\n scrollToField: (name: string, options?: ScrollToFieldOptions) => void;\n}\n\nconst Form = React.forwardRef<FormInstance, FormProps>(\n (\n {\n initialValues = {},\n onValuesChange,\n onFinish,\n onFinishFailed,\n labelWidth = '120px',\n labelAlign = 'right',\n layout = 'horizontal',\n size = 'medium',\n className = '',\n style,\n children,\n },\n ref\n ) => {\n const [fields, setFieldsState] = useState<Record<string, FieldData>>(() => {\n const initialFields: Record<string, FieldData> = {};\n Object.keys(initialValues).forEach((key) => {\n initialFields[key] = {\n value: initialValues[key],\n error: undefined,\n touched: false,\n validating: false,\n };\n });\n return initialFields;\n });\n\n // 使用 ref 保存最新的 fields,避免闭包问题\n const fieldsRef = useRef(fields);\n useEffect(() => {\n fieldsRef.current = fields;\n }, [fields]);\n\n // 存储每个字段的 DOM 元素,供 scrollToField 使用\n const fieldElementsRef = useRef<Record<string, HTMLElement>>({});\n\n // 获取字段值 - 从 ref 读取,确保获取最新值\n const getFieldValue = useCallback((name: string) => {\n return fieldsRef.current[name]?.value;\n }, []);\n\n // 设置字段值\n const setFieldValue = useCallback((name: string, value: any) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value,\n error: undefined,\n touched: false,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n value,\n };\n }\n\n // 同步更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n value,\n };\n } else {\n fieldsRef.current[name] = {\n value,\n error: undefined,\n touched: false,\n validating: false,\n };\n }\n\n // 触发 onValuesChange\n if (onValuesChange) {\n const changedValues: Record<string, any> = {};\n changedValues[name] = value;\n const allValues: Record<string, any> = {};\n Object.keys(newFields).forEach((key) => {\n allValues[key] = newFields[key].value;\n });\n onValuesChange(changedValues, allValues);\n }\n\n return newFields;\n });\n }, [onValuesChange]);\n\n // 获取字段错误 - 从 ref 读取,确保获取最新值\n const getFieldError = useCallback((name: string) => {\n return fieldsRef.current[name]?.error;\n }, []);\n\n // 设置字段错误\n const setFieldError = useCallback((name: string, error: string | undefined) => {\n // 先更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n error,\n };\n }\n \n // 然后更新 state\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: undefined,\n error,\n touched: false,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n error,\n };\n }\n return newFields;\n });\n }, []);\n\n // 是否字段被触摸 - 从 ref 读取,确保获取最新值\n const isFieldTouched = useCallback((name: string) => {\n return fieldsRef.current[name]?.touched || false;\n }, []);\n\n // 设置字段触摸状态\n const setFieldTouched = useCallback((name: string, touched: boolean) => {\n // 先更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n touched,\n };\n }\n \n // 然后更新 state\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: undefined,\n error: undefined,\n touched,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n touched,\n };\n }\n return newFields;\n });\n }, []);\n\n // 是否字段正在校验 - 从 ref 读取,确保获取最新值\n const isFieldValidating = useCallback((name: string) => {\n return fieldsRef.current[name]?.validating || false;\n }, []);\n\n // 设置字段校验状态\n const setFieldValidating = useCallback((name: string, validating: boolean) => {\n // 先更新 ref\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n validating,\n };\n }\n \n // 然后更新 state\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: undefined,\n error: undefined,\n touched: false,\n validating,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n validating,\n };\n }\n return newFields;\n });\n }, []);\n\n // 使用 ref 存储 registerField 函数,避免依赖变化\n const registerFieldFnRef = useRef<(name: string, options: { rules?: any[]; required?: boolean }) => void>();\n \n registerFieldFnRef.current = (name: string, options: { rules?: any[]; required?: boolean }) => {\n setFieldsState((prev) => {\n // 如果字段已存在且 rules 和 required 没有变化,不更新\n if (prev[name]) {\n const existingRules = prev[name].rules || [];\n const newRules = options.rules || [];\n \n // 深度比较 rules\n let rulesEqual = existingRules.length === newRules.length;\n if (rulesEqual && existingRules.length > 0) {\n for (let i = 0; i < existingRules.length; i++) {\n const existingRule = existingRules[i];\n const newRule = newRules[i];\n if (\n existingRule?.required !== newRule?.required ||\n existingRule?.message !== newRule?.message ||\n existingRule?.type !== newRule?.type ||\n existingRule?.pattern !== newRule?.pattern ||\n existingRule?.min !== newRule?.min ||\n existingRule?.max !== newRule?.max ||\n existingRule?.len !== newRule?.len ||\n existingRule?.whitespace !== newRule?.whitespace\n ) {\n rulesEqual = false;\n break;\n }\n }\n }\n \n if (rulesEqual && prev[name].required === options.required) {\n return prev; // 没有变化,返回原对象,避免触发重新渲染\n }\n }\n \n const newFields = { ...prev };\n if (!newFields[name]) {\n newFields[name] = {\n value: initialValues[name],\n error: undefined,\n touched: false,\n validating: false,\n rules: options.rules,\n required: options.required,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n rules: options.rules,\n required: options.required,\n };\n }\n return newFields;\n });\n };\n\n const registerField = useCallback((name: string, options: { rules?: any[]; required?: boolean }) => {\n registerFieldFnRef.current?.(name, options);\n }, []);\n\n // 注销字段\n const unregisterField = useCallback((name: string) => {\n delete fieldElementsRef.current[name];\n setFieldsState((prev) => {\n const newFields = { ...prev };\n delete newFields[name];\n return newFields;\n });\n delete fieldsRef.current[name];\n }, []);\n\n // 校验单个字段\n const validateField = useCallback(async (name: string): Promise<string | undefined> => {\n // 使用 ref 获取最新的 fields 状态,避免闭包问题\n const field = fieldsRef.current[name];\n if (!field) {\n return undefined;\n }\n\n setFieldValidating(name, true);\n\n const rules = field.rules || [];\n let error: string | undefined;\n\n for (const rule of rules) {\n const value = field.value;\n\n // required 校验\n if (rule.required) {\n if (value === undefined || value === null || value === '') {\n error = rule.message || `${name} is required`;\n break;\n }\n }\n\n // type 校验\n if (rule.type && value !== undefined && value !== null && value !== '') {\n const typeMap: Record<string, (v: any) => boolean> = {\n string: (v) => typeof v === 'string',\n number: (v) => typeof v === 'number' && !isNaN(v),\n boolean: (v) => typeof v === 'boolean',\n email: (v) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(String(v)),\n url: (v) => {\n try {\n new URL(String(v));\n return true;\n } catch {\n return false;\n }\n },\n };\n\n const validator = typeMap[rule.type];\n if (validator && !validator(value)) {\n error = rule.message || `${name} must be a valid ${rule.type}`;\n break;\n }\n }\n\n // pattern 校验\n if (rule.pattern && value !== undefined && value !== null && value !== '') {\n if (!rule.pattern.test(String(value))) {\n error = rule.message || `${name} format is invalid`;\n break;\n }\n }\n\n // min 校验\n if (rule.min !== undefined && value !== undefined && value !== null && value !== '') {\n const numValue = typeof value === 'string' ? value.length : Number(value);\n if (numValue < rule.min) {\n error = rule.message || `${name} must be at least ${rule.min}`;\n break;\n }\n }\n\n // max 校验\n if (rule.max !== undefined && value !== undefined && value !== null && value !== '') {\n const numValue = typeof value === 'string' ? value.length : Number(value);\n if (numValue > rule.max) {\n error = rule.message || `${name} must be at most ${rule.max}`;\n break;\n }\n }\n\n // len 校验\n if (rule.len !== undefined && value !== undefined && value !== null && value !== '') {\n const lenValue = typeof value === 'string' ? value.length : Number(value);\n if (lenValue !== rule.len) {\n error = rule.message || `${name} must be exactly ${rule.len}`;\n break;\n }\n }\n\n // whitespace 校验\n if (rule.whitespace && typeof value === 'string' && value.trim() !== value) {\n error = rule.message || `${name} cannot be whitespace`;\n break;\n }\n\n // 自定义 validator\n if (rule.validator) {\n try {\n await rule.validator(rule, value);\n } catch (err: any) {\n error = err?.message || rule.message || `${name} validation failed`;\n break;\n }\n }\n }\n\n // 先同步更新 ref,确保立即可用\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ...fieldsRef.current[name],\n error,\n validating: false,\n touched: true,\n };\n } else {\n fieldsRef.current[name] = {\n value: field.value,\n error,\n touched: true,\n validating: false,\n rules: field.rules,\n required: field.required,\n };\n }\n\n // 然后更新 state - 使用函数式更新确保状态正确更新\n setFieldsState((prev) => {\n const newFields = { ...prev };\n if (newFields[name]) {\n newFields[name] = {\n ...newFields[name],\n error,\n validating: false,\n touched: true,\n };\n } else {\n // 如果字段不存在,创建一个新字段\n newFields[name] = {\n value: field.value,\n error,\n touched: true,\n validating: false,\n rules: field.rules,\n required: field.required,\n };\n }\n return newFields;\n });\n\n // 返回错误信息\n return error;\n }, []);\n\n // 获取所有字段值\n const getFieldsValue = useCallback((nameList?: string[]) => {\n const currentFields = fieldsRef.current;\n const values: Record<string, any> = {};\n const fieldsToGet = nameList || Object.keys(currentFields);\n\n fieldsToGet.forEach((name) => {\n values[name] = currentFields[name]?.value;\n });\n\n return values;\n }, []);\n\n // 校验所有字段\n const validateFields = useCallback(async (nameList?: string[]): Promise<any> => {\n // 使用 ref 获取最新的 fields 状态\n const currentFields = fieldsRef.current;\n const fieldsToValidate = nameList || Object.keys(currentFields);\n const errors: Array<{ name: string; errors: string[] }> = [];\n\n // 并行校验所有字段,并收集错误\n const validationResults = await Promise.all(\n fieldsToValidate.map(async (name) => {\n const field = currentFields[name];\n // 如果字段存在且有 rules,才进行校验\n if (field && field.rules && field.rules.length > 0) {\n const error = await validateField(name);\n return { name, error };\n }\n return { name, error: undefined };\n })\n );\n\n // 收集所有错误\n validationResults.forEach(({ name, error }) => {\n if (error) {\n errors.push({\n name,\n errors: [error],\n });\n }\n });\n\n // 等待状态更新完成 - 使用 requestAnimationFrame 确保 DOM 更新\n await new Promise((resolve) => requestAnimationFrame(() => {\n setTimeout(resolve, 0);\n }));\n\n if (errors.length > 0) {\n const values = getFieldsValue();\n const errorInfo = { values, errorFields: errors };\n onFinishFailed?.(errorInfo);\n // 抛出 Error 子类,保证可被 try/catch 和 Promise.catch 正常捕获,避免页面“挂掉”\n throw new FormValidationError('Form validation failed', values, errors);\n }\n\n return getFieldsValue();\n }, [validateField, getFieldsValue, onFinishFailed]);\n\n // 重置字段\n const resetFields = useCallback((nameList?: string[]) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n const fieldsToReset = nameList || Object.keys(newFields);\n\n fieldsToReset.forEach((name) => {\n if (newFields[name]) {\n newFields[name] = {\n ...newFields[name],\n value: initialValues[name],\n error: undefined,\n touched: false,\n validating: false,\n };\n fieldsRef.current[name] = { ...newFields[name] };\n }\n });\n\n return newFields;\n });\n }, [initialValues]);\n\n // 设置所有字段值\n const setFieldsValue = useCallback((values: Record<string, any>) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n Object.keys(values).forEach((name) => {\n if (!newFields[name]) {\n newFields[name] = {\n value: values[name],\n error: undefined,\n touched: false,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n value: values[name],\n };\n }\n fieldsRef.current[name] = { ...newFields[name] };\n });\n\n if (onValuesChange) {\n const allValues: Record<string, any> = {};\n Object.keys(newFields).forEach((key) => {\n allValues[key] = newFields[key].value;\n });\n onValuesChange(values, allValues);\n }\n\n return newFields;\n });\n }, [onValuesChange]);\n\n // 提交表单\n const submit = useCallback(async () => {\n try {\n const values = await validateFields();\n onFinish?.(values);\n return values;\n } catch (error) {\n throw error;\n }\n }, [validateFields, onFinish]);\n\n // 批量设置字段(值 + 错误),类似 antd setFields\n const setFields = useCallback((fieldsToSet: Array<{ name: string; value?: any; errors?: string[] }>) => {\n setFieldsState((prev) => {\n const newFields = { ...prev };\n fieldsToSet.forEach(({ name, value, errors }) => {\n const error = errors && errors.length > 0 ? errors[0] : undefined;\n if (!newFields[name]) {\n newFields[name] = {\n value: value !== undefined ? value : undefined,\n error,\n touched: true,\n validating: false,\n };\n } else {\n newFields[name] = {\n ...newFields[name],\n ...(value !== undefined && { value }),\n error,\n touched: true,\n };\n }\n fieldsRef.current[name] = { ...newFields[name] };\n });\n return newFields;\n });\n if (onValuesChange && fieldsToSet.some((f) => f.value !== undefined)) {\n const changedValues: Record<string, any> = {};\n fieldsToSet.forEach((f) => {\n if (f.value !== undefined) changedValues[f.name] = f.value;\n });\n setTimeout(() => onValuesChange(changedValues, getFieldsValue()), 0);\n }\n }, [onValuesChange, getFieldsValue]);\n\n // 注册字段 DOM 节点\n const registerFieldRef = useCallback((name: string, element: HTMLElement | null) => {\n if (element) {\n fieldElementsRef.current[name] = element;\n } else {\n delete fieldElementsRef.current[name];\n }\n }, []);\n\n // 滚动到指定字段\n const scrollToField = useCallback((name: string, options?: ScrollIntoViewOptions) => {\n const el = fieldElementsRef.current[name];\n el?.scrollIntoView({ behavior: 'smooth', block: 'center', ...options });\n }, []);\n\n // 暴露方法给 ref\n useImperativeHandle(ref, () => ({\n getFieldValue,\n getFieldsValue,\n setFieldValue,\n setFieldsValue,\n setFields,\n getFieldError,\n validateField,\n validateFields,\n resetFields,\n submit,\n scrollToField,\n }));\n\n // 使用 useMemo 缓存 contextValue,但 fields 必须包含在依赖中,以便 FormItem 能重新渲染\n const contextValue: FormContextValue = useMemo(() => ({\n fields,\n getFieldValue,\n setFieldValue,\n getFieldError,\n setFieldError,\n isFieldTouched,\n setFieldTouched,\n isFieldValidating,\n setFieldValidating,\n registerField,\n unregisterField,\n validateField,\n validateFields,\n resetFields,\n getFieldsValue,\n setFieldsValue,\n setFields,\n submit,\n scrollToField,\n registerFieldRef,\n labelWidth,\n labelAlign,\n }), [\n fields,\n getFieldValue,\n setFieldValue,\n getFieldError,\n setFieldError,\n isFieldTouched,\n setFieldTouched,\n isFieldValidating,\n setFieldValidating,\n registerField,\n unregisterField,\n validateField,\n validateFields,\n resetFields,\n getFieldsValue,\n setFieldsValue,\n setFields,\n submit,\n scrollToField,\n registerFieldRef,\n labelWidth,\n labelAlign,\n ]);\n\n const formStyle: React.CSSProperties = {\n ...style,\n };\n\n if (layout === 'vertical') {\n formStyle.display = 'flex';\n formStyle.flexDirection = 'column';\n } else if (layout === 'inline') {\n formStyle.display = 'inline-flex';\n formStyle.flexWrap = 'wrap';\n formStyle.gap = '16px';\n }\n\n return (\n <FormContext.Provider value={contextValue}>\n <form\n className={`aha-form ${className}`}\n style={formStyle}\n onSubmit={async (e) => {\n e.preventDefault();\n try {\n const values = await validateFields();\n // 只有校验通过才调用 onFinish\n onFinish?.(values);\n } catch (error) {\n // 校验失败,不调用 onFinish,错误信息已经通过 setFieldError 设置\n // 错误信息会显示在 FormItem 中\n // onFinishFailed 已经在 validateFields 中调用\n }\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n }\n);\n\nForm.displayName = 'Form';\n\n/** 获取表单实例的 hook,用法与 antd Form.useForm() 一致,返回的 ref 传给 <Form ref={formRef} /> 后即可使用 formRef.current?.setFieldValue 等方法 */\nfunction useForm(): [React.RefObject<FormInstance | null>] {\n const formRef = useRef<FormInstance | null>(null);\n return [formRef];\n}\n\n// 导出 FormItem 作为 Form.Item,并挂载 useForm\nconst FormWithItem = Form as typeof Form & {\n Item: typeof FormItem;\n useForm: typeof useForm;\n};\nFormWithItem.Item = FormItem;\nFormWithItem.useForm = useForm;\n\nexport default FormWithItem;\nexport { useForm };\n\n","import React, { useContext, useEffect, useRef, useMemo, useCallback } from 'react';\nimport { FormContext } from './FormContext';\nimport { TooltipIcon } from '../../icons';\n\nexport interface FormItemProps {\n /** 字段名 */\n name?: string;\n /** 标签 */\n label?: React.ReactNode;\n /** 标签的 HTML for 属性 */\n htmlFor?: string;\n /** 标签布局 */\n labelCol?: { span?: number; offset?: number };\n /** 输入控件布局 */\n wrapperCol?: { span?: number; offset?: number };\n /** 是否必填(显示红色星号) */\n required?: boolean;\n /** 校验规则 */\n rules?: Array<{\n required?: boolean;\n message?: string;\n validator?: (rule: any, value: any) => Promise<void> | void;\n pattern?: RegExp;\n min?: number;\n max?: number;\n len?: number;\n type?: 'string' | 'number' | 'boolean' | 'method' | 'regexp' | 'integer' | 'float' | 'array' | 'object' | 'enum' | 'date' | 'url' | 'hex' | 'email';\n whitespace?: boolean;\n [key: string]: any;\n }>;\n /** 是否显示校验信息 */\n hasFeedback?: boolean;\n /** 校验状态 */\n validateStatus?: 'success' | 'warning' | 'error' | 'validating';\n /** 帮助信息 */\n help?: React.ReactNode;\n /** 额外的提示信息 */\n extra?: React.ReactNode;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 子元素 */\n children?: React.ReactNode;\n /** 标签对齐方式 */\n labelAlign?: 'left' | 'right';\n /** 标签宽度 */\n labelWidth?: number | string;\n /** 是否隐藏 */\n hidden?: boolean;\n /** 标签提示信息(tooltip) */\n tooltip?: React.ReactNode;\n}\n\nconst FormItem: React.FC<FormItemProps> = ({\n name,\n label,\n htmlFor,\n labelCol,\n wrapperCol,\n required = false,\n rules = [],\n hasFeedback = false,\n validateStatus,\n help,\n extra,\n className = '',\n style,\n children,\n labelAlign = 'right',\n labelWidth,\n hidden = false,\n tooltip,\n}) => {\n const formContext = useContext(FormContext);\n const itemRef = useRef<HTMLDivElement>(null);\n\n // 注册字段 DOM 节点,供 Form 的 scrollToField 使用\n const setItemRef = useCallback(\n (el: HTMLDivElement | null) => {\n (itemRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n if (name && formContext?.registerFieldRef) {\n formContext.registerFieldRef(name, el);\n }\n },\n [name, formContext]\n );\n\n // 从 Form 上下文获取字段值、错误信息等\n // 使用 formContext.fields 来触发重新渲染,当 fields 变化时组件会重新渲染\n const fields = formContext?.fields || {};\n const fieldValue = name && formContext ? formContext.getFieldValue(name) : undefined;\n const fieldError = name && formContext ? formContext.getFieldError(name) : undefined;\n const fieldTouched = name && formContext ? formContext.isFieldTouched(name) : false;\n const fieldValidating = name && formContext ? formContext.isFieldValidating(name) : false;\n \n // 使用 fields 来触发重新渲染,确保错误信息能显示\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = name ? fields[name] : undefined; // 读取 fields[name] 来建立依赖关系\n\n // 计算校验状态\n // 如果有错误就显示错误状态,不管是否 touched(提交时会强制校验)\n const computedValidateStatus =\n validateStatus ||\n (fieldError\n ? 'error'\n : fieldValidating\n ? 'validating'\n : fieldTouched && !fieldError\n ? 'success'\n : undefined);\n\n // 计算帮助信息 - 如果有错误就显示,不管是否 touched\n const computedHelp = help !== undefined ? help : (fieldError || undefined);\n\n // 使用 useRef 存储上一次的 rules 和 required,避免不必要的更新\n const prevRulesRef = useRef(rules);\n const prevRequiredRef = useRef(required);\n const isMountedRef = useRef(false);\n\n // 计算是否必填\n const isRequired = required || rules.some((rule) => rule.required);\n\n // 检查 rules 是否真的变化了(深度比较)\n const rulesChanged = useMemo(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true;\n return true; // 首次挂载时注册\n }\n \n if (prevRulesRef.current.length !== rules.length) {\n return true;\n }\n // 简单比较:如果引用相同,肯定没变化\n if (prevRulesRef.current === rules) {\n return false;\n }\n // 深度比较关键属性\n for (let i = 0; i < rules.length; i++) {\n const prevRule = prevRulesRef.current[i];\n const currRule = rules[i];\n if (\n prevRule?.required !== currRule?.required ||\n prevRule?.message !== currRule?.message ||\n prevRule?.type !== currRule?.type ||\n prevRule?.pattern !== currRule?.pattern ||\n prevRule?.min !== currRule?.min ||\n prevRule?.max !== currRule?.max ||\n prevRule?.len !== currRule?.len ||\n prevRule?.whitespace !== currRule?.whitespace\n ) {\n return true;\n }\n }\n return false;\n }, [rules]);\n\n // 注册字段到 Form - 只在 name 变化时注册,rules 和 required 通过内部比较\n useEffect(() => {\n if (!name || !formContext) return;\n\n // 检查是否需要更新\n const shouldUpdate = \n !prevRulesRef.current || // 首次注册\n rulesChanged || \n prevRequiredRef.current !== required;\n\n if (shouldUpdate) {\n prevRulesRef.current = rules;\n prevRequiredRef.current = required;\n\n formContext.registerField(name, {\n rules,\n required: isRequired,\n });\n }\n\n return () => {\n if (name && formContext) {\n formContext.unregisterField(name);\n }\n };\n // 只依赖 name,formContext 是稳定的,rules 和 required 通过 ref 比较\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [name]);\n\n // 克隆子元素,注入 value、onChange、error 等 props\n const cloneChild = (child: React.ReactElement) => {\n if (!React.isValidElement(child)) return child;\n\n const childProps: any = {\n ...(child.props as Record<string, any>),\n };\n\n // 注入 value 和 onChange\n if (name && formContext) {\n const fieldValue = formContext.getFieldValue(name);\n const setFieldValue = formContext.setFieldValue;\n\n if (!setFieldValue) {\n // 如果没有 formContext,直接返回原组件\n return child;\n }\n\n // 处理不同类型的组件(函数组件 typeof 为 'function',React.memo 等为 'object')\n const childType = child.type as any;\n if (childType && (typeof childType === 'object' || typeof childType === 'function') && 'displayName' in childType) {\n const displayName = childType.displayName;\n\n // Input, Textarea\n if (displayName === 'Input' || displayName === 'Textarea') {\n childProps.value = fieldValue || '';\n const originalOnChange = (child.props as any)?.onChange;\n const originalOnBlur = (child.props as any)?.onBlur;\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue(name, e.target.value);\n originalOnChange?.(e);\n // 值变化时立即触发校验\n if (name && formContext) {\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n childProps.onBlur = (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n formContext.validateField(name);\n }\n originalOnBlur?.(e);\n };\n childProps.error = computedValidateStatus === 'error';\n }\n // Select\n else if (displayName === 'Select') {\n childProps.value = fieldValue;\n const originalOnChange = (child.props as any)?.onChange;\n const originalOnBlur = (child.props as any)?.onBlur;\n childProps.onChange = (value: any, option: any) => {\n setFieldValue(name, value);\n originalOnChange?.(value, option);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n childProps.onBlur = (e: React.FocusEvent) => {\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n formContext.validateField(name);\n }\n originalOnBlur?.(e);\n };\n childProps.error = computedValidateStatus === 'error';\n }\n // Switch\n else if (displayName === 'Switch') {\n childProps.checked = fieldValue || false;\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (checked: boolean, event: any) => {\n setFieldValue(name, checked);\n originalOnChange?.(checked, event);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n }\n // Checkbox\n else if (displayName === 'Checkbox') {\n childProps.checked = fieldValue || false;\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setFieldValue(name, e.target.checked);\n originalOnChange?.(e);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n }\n // Radio\n else if (displayName === 'Radio') {\n // Radio 通常需要 Radio.Group,这里只处理单个 Radio\n const radioValue = (child.props as any)?.value;\n if (radioValue !== undefined) {\n childProps.checked = fieldValue === radioValue;\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setFieldValue(name, radioValue);\n originalOnChange?.(e);\n // 值变化时立即触发校验\n if (name && formContext) {\n formContext.setFieldTouched(name, true);\n // 使用 setTimeout 确保值已经更新\n setTimeout(() => {\n formContext.validateField(name);\n }, 0);\n }\n };\n }\n }\n } else {\n // 通用处理:尝试注入 value 和 onChange\n if (fieldValue !== undefined) {\n childProps.value = fieldValue;\n }\n const originalOnChange = (child.props as any)?.onChange;\n childProps.onChange = (e: any) => {\n const value = e?.target?.value ?? e;\n setFieldValue(name, value);\n originalOnChange?.(e);\n };\n }\n }\n\n // 注入 error 状态(如果组件支持)\n if (computedValidateStatus === 'error' && 'error' in childProps) {\n childProps.error = true;\n }\n\n return React.cloneElement(child, childProps);\n };\n\n if (hidden) return null;\n\n // Tooltip 组件(简单实现)\n const TooltipWrapper = ({ content }: { content: React.ReactNode }) => {\n const [showTooltip, setShowTooltip] = React.useState(false);\n const tooltipRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (tooltipRef.current && !tooltipRef.current.contains(event.target as Node)) {\n setShowTooltip(false);\n }\n };\n\n if (showTooltip) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [showTooltip]);\n\n return (\n <div style={{ position: 'relative', display: 'inline-block', marginLeft: '4px' }}>\n <div\n onClick={(e) => {\n e.stopPropagation();\n setShowTooltip(!showTooltip);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n color: '#A9A29D',\n }}\n >\n <TooltipIcon />\n </div>\n {showTooltip && (\n <div\n ref={tooltipRef}\n style={{\n position: 'absolute',\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginTop: '4px',\n padding: '8px 12px',\n backgroundColor: '#1C1917',\n color: '#FFFFFF',\n fontSize: '12px',\n lineHeight: '18px',\n fontFamily: \"DM Sans, sans-serif\",\n borderRadius: '6px',\n whiteSpace: 'nowrap',\n zIndex: 1000,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n }}\n >\n {content}\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderBottom: '4px solid #1C1917',\n }}\n />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={setItemRef}\n className={`aha-form-item ${className}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginBottom: '16px',\n ...style,\n }}\n >\n {label && (\n <label\n htmlFor={htmlFor}\n style={{\n display: 'flex',\n alignItems: 'center',\n marginBottom: '6px',\n fontSize: '14px', // text-sm\n lineHeight: '20px',\n color: '#44403C',\n fontFamily: \"DM Sans, sans-serif\",\n fontWeight: 500, // font-medium\n }}\n >\n {label}\n {isRequired && (\n <span\n style={{\n color: '#EC470A',\n marginLeft: '4px',\n }}\n >\n *\n </span>\n )}\n {tooltip && <TooltipWrapper content={tooltip} />}\n </label>\n )}\n <div style={{ width: '100%' }}>\n <div>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return cloneChild(child);\n }\n return child;\n })}\n </div>\n {computedHelp && (\n <div\n style={{\n marginTop: '6px',\n fontSize: '14px', // text-sm\n lineHeight: '20px',\n fontWeight: 400, // font-normal\n color:\n computedValidateStatus === 'error'\n ? '#D92D20'\n : computedValidateStatus === 'warning'\n ? '#F59E0B'\n : '#78716C',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n {computedHelp}\n </div>\n )}\n {extra && !computedHelp && (\n <div\n style={{\n marginTop: '4px',\n fontSize: '12px',\n lineHeight: '18px',\n color: '#78716C',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n {extra}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default FormItem;\n\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","SuppressedError","FormContext","createContext","TooltipIcon","_a","className","style","_jsxs","width","height","viewBox","fill","xmlns","children","_jsx","clipPath","stroke","strokeWidth","strokeLinecap","strokeLinejoin","id","FormValidationError","_super","message","values","errorFields","_this","name","String","__","constructor","__extends","Error","Form","React","forwardRef","ref","_b","initialValues","onValuesChange","onFinish","onFinishFailed","_c","labelWidth","_d","labelAlign","_e","layout","size","_g","_h","useState","initialFields","keys","forEach","key","error","undefined","touched","validating","fields","setFieldsState","fieldsRef","useRef","useEffect","current","fieldElementsRef","getFieldValue","useCallback","setFieldValue","prev","newFields","changedValues","allValues_1","getFieldError","setFieldError","isFieldTouched","setFieldTouched","isFieldValidating","setFieldValidating","registerFieldFnRef","options","existingRules","rules","newRules","rulesEqual","existingRule","newRule","required","type","pattern","min","max","len","whitespace","registerField","unregisterField","validateField","field","_i","rules_1","rule","concat","validator","string","number","isNaN","boolean","email","test","url","URL","Number","trim","err_1","getFieldsValue","nameList","currentFields","validateFields","fieldsToValidate","errors","all","map","requestAnimationFrame","setTimeout","errorInfo","resetFields","setFieldsValue","allValues_2","submit","setFields","fieldsToSet","some","changedValues_1","registerFieldRef","element","scrollToField","el","scrollIntoView","behavior","block","useImperativeHandle","contextValue","useMemo","formStyle","display","flexDirection","flexWrap","gap","Provider","onSubmit","preventDefault","useForm","displayName","FormWithItem","Item","htmlFor","wrapperCol","hasFeedback","validateStatus","help","extra","hidden","tooltip","formContext","useContext","itemRef","setItemRef","fieldError","fieldTouched","fieldValidating","computedValidateStatus","computedHelp","prevRulesRef","prevRequiredRef","isMountedRef","isRequired","rulesChanged","prevRule","currRule","marginBottom","alignItems","fontSize","lineHeight","color","fontFamily","fontWeight","marginLeft","content","showTooltip","setShowTooltip","tooltipRef","handleClickOutside","event","contains","target","document","addEventListener","removeEventListener","position","onClick","stopPropagation","justifyContent","cursor","top","left","transform","marginTop","padding","backgroundColor","borderRadius","whiteSpace","zIndex","boxShadow","borderLeft","borderRight","borderBottom","Children","child","isValidElement","childProps","props","fieldValue_1","setFieldValue_1","childType","originalOnChange_1","onChange","originalOnBlur_1","onBlur","originalOnChange_2","originalOnBlur_2","option","checked","originalOnChange_3","originalOnChange_4","_f","radioValue_1","originalOnChange_5","originalOnChange_6","_j","cloneElement","cloneChild"],"mappings":"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","x_google_ignoreList":[0]}