@airporting/integrations-app 0.4.123 → 0.4.125

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/mf/1018.js CHANGED
@@ -7,4 +7,4 @@
7
7
  *
8
8
  * This source code is licensed under the MIT license found in the
9
9
  * LICENSE file in the root directory of this source tree.
10
- */var React=__webpack_require__(7060);function formatProdErrorMessage(code){var url="https://react.dev/errors/"+code;if(1<arguments.length){url+="?args[]="+encodeURIComponent(arguments[1]);for(var i=2;i<arguments.length;i++)url+="&args[]="+encodeURIComponent(arguments[i])}return"Minified React error #"+code+"; visit "+url+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function noop(){}var Internals={d:{f:noop,r:function(){throw Error(formatProdErrorMessage(522))},D:noop,C:noop,L:noop,m:noop,X:noop,S:noop,M:noop},p:0,findDOMNode:null},REACT_PORTAL_TYPE=Symbol.for("react.portal");function createPortal$1(children,containerInfo,implementation){var key=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:REACT_PORTAL_TYPE,key:null==key?null:""+key,children:children,containerInfo:containerInfo,implementation:implementation}}var ReactSharedInternals=React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function getCrossOriginStringAs(as,input){if("font"===as)return"";if("string"==typeof input)return"use-credentials"===input?input:""}exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=Internals;exports.createPortal=function(children,container){var key=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!container||1!==container.nodeType&&9!==container.nodeType&&11!==container.nodeType)throw Error(formatProdErrorMessage(299));return createPortal$1(children,container,null,key)};exports.flushSync=function(fn){var previousTransition=ReactSharedInternals.T,previousUpdatePriority=Internals.p;try{if(ReactSharedInternals.T=null,Internals.p=2,fn)return fn()}finally{ReactSharedInternals.T=previousTransition,Internals.p=previousUpdatePriority,Internals.d.f()}};exports.preconnect=function(href,options){"string"==typeof href&&(options?(options=options.crossOrigin,options="string"==typeof options?"use-credentials"===options?options:"":void 0):options=null,Internals.d.C(href,options))};exports.prefetchDNS=function(href){"string"==typeof href&&Internals.d.D(href)};exports.preinit=function(href,options){if("string"==typeof href&&options&&"string"==typeof options.as){var as=options.as,crossOrigin=getCrossOriginStringAs(as,options.crossOrigin),integrity="string"==typeof options.integrity?options.integrity:void 0,fetchPriority="string"==typeof options.fetchPriority?options.fetchPriority:void 0;"style"===as?Internals.d.S(href,"string"==typeof options.precedence?options.precedence:void 0,{crossOrigin:crossOrigin,integrity:integrity,fetchPriority:fetchPriority}):"script"===as&&Internals.d.X(href,{crossOrigin:crossOrigin,integrity:integrity,fetchPriority:fetchPriority,nonce:"string"==typeof options.nonce?options.nonce:void 0})}};exports.preinitModule=function(href,options){if("string"==typeof href)if("object"==typeof options&&null!==options){if(null==options.as||"script"===options.as){var crossOrigin=getCrossOriginStringAs(options.as,options.crossOrigin);Internals.d.M(href,{crossOrigin:crossOrigin,integrity:"string"==typeof options.integrity?options.integrity:void 0,nonce:"string"==typeof options.nonce?options.nonce:void 0})}}else null==options&&Internals.d.M(href)};exports.preload=function(href,options){if("string"==typeof href&&"object"==typeof options&&null!==options&&"string"==typeof options.as){var as=options.as,crossOrigin=getCrossOriginStringAs(as,options.crossOrigin);Internals.d.L(href,as,{crossOrigin:crossOrigin,integrity:"string"==typeof options.integrity?options.integrity:void 0,nonce:"string"==typeof options.nonce?options.nonce:void 0,type:"string"==typeof options.type?options.type:void 0,fetchPriority:"string"==typeof options.fetchPriority?options.fetchPriority:void 0,referrerPolicy:"string"==typeof options.referrerPolicy?options.referrerPolicy:void 0,imageSrcSet:"string"==typeof options.imageSrcSet?options.imageSrcSet:void 0,imageSizes:"string"==typeof options.imageSizes?options.imageSizes:void 0,media:"string"==typeof options.media?options.media:void 0})}};exports.preloadModule=function(href,options){if("string"==typeof href)if(options){var crossOrigin=getCrossOriginStringAs(options.as,options.crossOrigin);Internals.d.m(href,{as:"string"==typeof options.as&&"script"!==options.as?options.as:void 0,crossOrigin:crossOrigin,integrity:"string"==typeof options.integrity?options.integrity:void 0})}else Internals.d.m(href)};exports.requestFormReset=function(form){Internals.d.r(form)};exports.unstable_batchedUpdates=function(fn,a){return fn(a)};exports.useFormState=function(action,initialState,permalink){return ReactSharedInternals.H.useFormState(action,initialState,permalink)};exports.useFormStatus=function(){return ReactSharedInternals.H.useHostTransitionStatus()};exports.version="19.2.4"}}]);
10
+ */var React=__webpack_require__(8556);function formatProdErrorMessage(code){var url="https://react.dev/errors/"+code;if(1<arguments.length){url+="?args[]="+encodeURIComponent(arguments[1]);for(var i=2;i<arguments.length;i++)url+="&args[]="+encodeURIComponent(arguments[i])}return"Minified React error #"+code+"; visit "+url+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function noop(){}var Internals={d:{f:noop,r:function(){throw Error(formatProdErrorMessage(522))},D:noop,C:noop,L:noop,m:noop,X:noop,S:noop,M:noop},p:0,findDOMNode:null},REACT_PORTAL_TYPE=Symbol.for("react.portal");function createPortal$1(children,containerInfo,implementation){var key=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:REACT_PORTAL_TYPE,key:null==key?null:""+key,children:children,containerInfo:containerInfo,implementation:implementation}}var ReactSharedInternals=React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function getCrossOriginStringAs(as,input){if("font"===as)return"";if("string"==typeof input)return"use-credentials"===input?input:""}exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=Internals;exports.createPortal=function(children,container){var key=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!container||1!==container.nodeType&&9!==container.nodeType&&11!==container.nodeType)throw Error(formatProdErrorMessage(299));return createPortal$1(children,container,null,key)};exports.flushSync=function(fn){var previousTransition=ReactSharedInternals.T,previousUpdatePriority=Internals.p;try{if(ReactSharedInternals.T=null,Internals.p=2,fn)return fn()}finally{ReactSharedInternals.T=previousTransition,Internals.p=previousUpdatePriority,Internals.d.f()}};exports.preconnect=function(href,options){"string"==typeof href&&(options?(options=options.crossOrigin,options="string"==typeof options?"use-credentials"===options?options:"":void 0):options=null,Internals.d.C(href,options))};exports.prefetchDNS=function(href){"string"==typeof href&&Internals.d.D(href)};exports.preinit=function(href,options){if("string"==typeof href&&options&&"string"==typeof options.as){var as=options.as,crossOrigin=getCrossOriginStringAs(as,options.crossOrigin),integrity="string"==typeof options.integrity?options.integrity:void 0,fetchPriority="string"==typeof options.fetchPriority?options.fetchPriority:void 0;"style"===as?Internals.d.S(href,"string"==typeof options.precedence?options.precedence:void 0,{crossOrigin:crossOrigin,integrity:integrity,fetchPriority:fetchPriority}):"script"===as&&Internals.d.X(href,{crossOrigin:crossOrigin,integrity:integrity,fetchPriority:fetchPriority,nonce:"string"==typeof options.nonce?options.nonce:void 0})}};exports.preinitModule=function(href,options){if("string"==typeof href)if("object"==typeof options&&null!==options){if(null==options.as||"script"===options.as){var crossOrigin=getCrossOriginStringAs(options.as,options.crossOrigin);Internals.d.M(href,{crossOrigin:crossOrigin,integrity:"string"==typeof options.integrity?options.integrity:void 0,nonce:"string"==typeof options.nonce?options.nonce:void 0})}}else null==options&&Internals.d.M(href)};exports.preload=function(href,options){if("string"==typeof href&&"object"==typeof options&&null!==options&&"string"==typeof options.as){var as=options.as,crossOrigin=getCrossOriginStringAs(as,options.crossOrigin);Internals.d.L(href,as,{crossOrigin:crossOrigin,integrity:"string"==typeof options.integrity?options.integrity:void 0,nonce:"string"==typeof options.nonce?options.nonce:void 0,type:"string"==typeof options.type?options.type:void 0,fetchPriority:"string"==typeof options.fetchPriority?options.fetchPriority:void 0,referrerPolicy:"string"==typeof options.referrerPolicy?options.referrerPolicy:void 0,imageSrcSet:"string"==typeof options.imageSrcSet?options.imageSrcSet:void 0,imageSizes:"string"==typeof options.imageSizes?options.imageSizes:void 0,media:"string"==typeof options.media?options.media:void 0})}};exports.preloadModule=function(href,options){if("string"==typeof href)if(options){var crossOrigin=getCrossOriginStringAs(options.as,options.crossOrigin);Internals.d.m(href,{as:"string"==typeof options.as&&"script"!==options.as?options.as:void 0,crossOrigin:crossOrigin,integrity:"string"==typeof options.integrity?options.integrity:void 0})}else Internals.d.m(href)};exports.requestFormReset=function(form){Internals.d.r(form)};exports.unstable_batchedUpdates=function(fn,a){return fn(a)};exports.useFormState=function(action,initialState,permalink){return ReactSharedInternals.H.useFormState(action,initialState,permalink)};exports.useFormStatus=function(){return ReactSharedInternals.H.useHostTransitionStatus()};exports.version="19.2.4"}}]);
package/dist/mf/1067.js CHANGED
@@ -1 +1 @@
1
- "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["1067"],{800:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{F:()=>InlineLoader});var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4848);var _mantine_core__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(4763);function InlineLoader({label}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Center,{flex:1,h:"100%",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Stack,{align:"center",gap:"md",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Loader,{size:"md",color:"teal"}),label&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Text,{fz:"sm",c:"dimmed",children:label})]})})}},1094:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{d:()=>SingleConnectorApp});var jsx_runtime=__webpack_require__(4848);var index_mjs_=__webpack_require__(4763);var index_js_=__webpack_require__(7060);var dist_index_js_=__webpack_require__(7115);var InlineLoader=__webpack_require__(800);var modern_index_js_=__webpack_require__(7370);var useAppConfigConnectorSingle=__webpack_require__(4613);var IntegrationsApi=__webpack_require__(6699);function useApiConnectorSingle(){const config=(0,useAppConfigConnectorSingle.C)();const client=new IntegrationsApi.Qq({baseUrl:config.api.replace(/\/$/,""),baseApiParams:{headers:{Authorization:config.token?`Bearer ${config.token}`:"",From:config.owner}}});return new IntegrationsApi.qx(client)}function useConnectorConfigQuery({enabled=true}={}){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const query=(0,modern_index_js_.useQuery)({queryKey:["connector","config","form",config.company,config.connector],queryFn:async()=>await api.connectors.getConnectorConfigV1({cid:config.company,connector:+config.connector}).then(x=>x.data),enabled,refetchIntervalInBackground:false,refetchOnWindowFocus:true,refetchOnReconnect:true});return query}var esm_index_mjs_=__webpack_require__(7467);function useConnectorSaveQuery(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();const query=(0,modern_index_js_.useMutation)({mutationFn:async values=>await api.connectors.putConnectorDataV1({cid:config.company,connector:+config.connector},{data:values}).then(x=>x.data),onSuccess:()=>{queryClient.invalidateQueries({queryKey:["connector","config","single",config.company,config.connector]});queryClient.invalidateQueries({queryKey:["connector","config","form",config.company,config.connector]});queryClient.invalidateQueries({queryKey:["connectors","list",config.company]});queryClient.invalidateQueries({queryKey:["connectors","list","ill",config.company]});esm_index_mjs_.notifications.show({title:"Connecteur sauvegard\xe9",message:"Vos donn\xe9es sont enregistr\xe9es !"})},onError:(error,variables,context)=>{console.error(error,variables,context);esm_index_mjs_.notifications.show({color:"red",title:"Erreur !",message:"Nous rencontrons un soucis technique. Veuillez r\xe9essayer plus tard."})}});return query}function useConnectorSingleQuery(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const query=(0,modern_index_js_.useQuery)({queryKey:["connector","config","single",config.company,config.connector],queryFn:async()=>await api.connectors.getConnectorSingleV1({cid:config.company,connector:+config.connector}).then(x=>x.data),refetchIntervalInBackground:false,refetchOnWindowFocus:true,refetchOnReconnect:true});return query}var connector_bubble=__webpack_require__(4184);function useConnectorRenameMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();return(0,modern_index_js_.useMutation)({mutationFn:async name=>{const res=await api.http.request({path:`/v1/connectors/${config.company}/${config.connector}`,method:"PATCH",body:{name},type:"application/json",format:"json"});return res.data},onSuccess:()=>{queryClient.invalidateQueries({queryKey:["connector","config","single",config.company,config.connector]});queryClient.invalidateQueries({queryKey:["connectors","list",config.company]});queryClient.invalidateQueries({queryKey:["connectors","list","ill",config.company]});queryClient.invalidateQueries({queryKey:["connectors","ok",config.company]});queryClient.invalidateQueries({queryKey:["connectors","ill",config.company]});esm_index_mjs_.notifications.show({color:"green",title:"Connecteur renomm\xe9",message:"Le nom a \xe9t\xe9 mis \xe0 jour avec succ\xe8s."})},onError:error=>{console.error(error);esm_index_mjs_.notifications.show({color:"red",title:"Renommage \xe9chou\xe9",message:"R\xe9essayez dans un instant."})}})}var tabler_icons_react_mjs_=__webpack_require__(4462);function useMicrosoftTenantQuery(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useQuery)({queryKey:["microsoft","tenant",config.company],queryFn:async()=>{try{const response=await api.microsoft.getTenantV1({cid:config.company});return response.data}catch(err){const status=err&&"object"==typeof err&&"status"in err?err.status:void 0;if(404===status)return null;throw err}},refetchOnWindowFocus:true,refetchOnReconnect:true,retry:false})}function useStartAdminConsentMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useMutation)({mutationFn:async({returnTo})=>{const response=await api.microsoft.startAdminConsentV1({cid:config.company,returnTo});return response.data}})}function useAddExcelFileMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();return(0,modern_index_js_.useMutation)({mutationFn:async({url})=>{const response=await api.microsoft.addExcelFileV1({cid:config.company},{url});return response.data},onSuccess:()=>{queryClient.invalidateQueries({queryKey:["microsoft","excel-files",config.company]})}})}function useDeleteExcelFileMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();return(0,modern_index_js_.useMutation)({mutationFn:async({fileId})=>{await api.microsoft.deleteExcelFileV1({cid:config.company,fileId})},onSuccess:()=>{queryClient.invalidateQueries({queryKey:["microsoft","excel-files",config.company]})}})}function useExcelFilesQuery({enabled}){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useQuery)({queryKey:["microsoft","excel-files",config.company],queryFn:async()=>{const response=await api.microsoft.listExcelFilesV1({cid:config.company});return response.data.list},enabled,refetchOnWindowFocus:true})}function useResolveFileMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useMutation)({mutationFn:async({url})=>{const response=await api.microsoft.resolveFileV1({cid:config.company},{url});return response.data}})}function ExcelFilesSection({enabled}){const filesQuery=useExcelFilesQuery({enabled});const resolveMutation=useResolveFileMutation();const addMutation=useAddExcelFileMutation();const deleteMutation=useDeleteExcelFileMutation();const[urlInput,setUrlInput]=(0,index_js_.useState)("");const[preview,setPreview]=(0,index_js_.useState)(null);const[error,setError]=(0,index_js_.useState)(null);const handleResolve=(0,index_js_.useCallback)(async()=>{setError(null);setPreview(null);if(!urlInput.trim())return void setError("Renseigne une URL SharePoint d’un fichier Excel");try{const result=await resolveMutation.mutateAsync({url:urlInput.trim()});setPreview(result)}catch(err){setError(err instanceof Error?err.message:"Impossible de r\xe9soudre cette URL c\xf4t\xe9 Microsoft")}},[urlInput,resolveMutation]);const handleConfirm=(0,index_js_.useCallback)(async()=>{if(!preview)return;setError(null);try{await addMutation.mutateAsync({url:urlInput.trim()});setUrlInput("");setPreview(null)}catch(err){setError(err instanceof Error?err.message:String(err))}},[preview,urlInput,addMutation]);const handleCancel=(0,index_js_.useCallback)(()=>{setPreview(null);setError(null)},[]);const handleDelete=(0,index_js_.useCallback)(fileId=>{deleteMutation.mutate({fileId})},[deleteMutation]);if(!enabled)return null;return/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"lg",radius:"md",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"md",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{fw:600,fz:"lg",children:"Fichiers Excel \xe0 synchroniser"}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:["Ajoute les fichiers Excel qu’Airporting doit alimenter. Colle l’URL de partage d’un fichier ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:".xlsx"})," — on r\xe9cup\xe8re automatiquement son nom et son identifiant."]})]}),filesQuery.isPending?/*#__PURE__*/(0,jsx_runtime.jsx)(InlineLoader.F,{label:"Chargement des fichiers..."}):filesQuery.isError?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur",children:"Impossible de charger la liste des fichiers Excel."}):filesQuery.data&&filesQuery.data.length>0?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Stack,{gap:"xs",children:filesQuery.data.map(file=>/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"sm",radius:"sm",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{justify:"space-between",wrap:"nowrap",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:2,style:{minWidth:0,flex:1},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{fw:500,truncate:true,children:file.spreadsheet_name??file.spreadsheet_id}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{gap:6,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"xs",children:["ajout\xe9 le"," ",new Date(file.created).toLocaleString("fr-FR",{timeZone:"Europe/Paris"})]}),file.webUrl?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Anchor,{href:file.webUrl,target:"_blank",rel:"noreferrer",fz:"xs",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconExternalLink,{size:12}),"ouvrir sur SharePoint"]})}):null]})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.ActionIcon,{color:"red",variant:"subtle","aria-label":"Supprimer ce fichier",onClick:()=>handleDelete(file.id),loading:deleteMutation.isPending&&deleteMutation.variables?.fileId===file.id,children:/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconTrash,{size:16})})]})},file.id))}):/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:"Aucun fichier Excel ajout\xe9 pour le moment."}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"xs",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.TextInput,{label:"URL SharePoint du fichier Excel",placeholder:"https://votreorg.sharepoint.com/:x:/r/sites/.../fichier.xlsx",value:urlInput,onChange:e=>setUrlInput(e.currentTarget.value),disabled:resolveMutation.isPending||addMutation.isPending}),preview?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"green",title:"Fichier trouv\xe9",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Nom\xa0:"})," ",preview.name]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Identifiant\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:preview.itemId})]}),"site"===preview.kind?/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Site SharePoint\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:preview.siteId})]}):/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Drive\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:preview.driveId})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{mt:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{onClick:handleConfirm,loading:addMutation.isPending,children:"Confirmer l’ajout"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{variant:"subtle",onClick:handleCancel,disabled:addMutation.isPending,children:"Annuler"})]})]})}):/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{onClick:handleResolve,loading:resolveMutation.isPending,disabled:!urlInput.trim(),children:"Valider l’URL"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{c:"dimmed",fz:"xs",children:"On interroge Microsoft Graph pour r\xe9cup\xe9rer le nom du fichier avant de l’enregistrer."})]}),error?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur",children:error}):null]})]})})}function isConsentMessage(value){if("object"!=typeof value||null===value)return false;const v=value;return"airporting-microsoft-consent"===v.type}const POPUP_NAME="airporting-microsoft-consent";const POPUP_FEATURES="width=600,height=720,resizable,scrollbars";function useMicrosoftConsentPopup({onResult}){const[isOpen,setIsOpen]=(0,index_js_.useState)(false);const popupRef=(0,index_js_.useRef)(null);const pollRef=(0,index_js_.useRef)(null);const stopPolling=(0,index_js_.useCallback)(()=>{if(null!==pollRef.current){window.clearInterval(pollRef.current);pollRef.current=null}},[]);const closePopup=(0,index_js_.useCallback)(()=>{if(popupRef.current&&!popupRef.current.closed)popupRef.current.close();popupRef.current=null;setIsOpen(false);stopPolling()},[stopPolling]);(0,index_js_.useEffect)(()=>{const handler=event=>{if(!isConsentMessage(event.data))return;onResult(event.data);closePopup()};window.addEventListener("message",handler);return()=>{window.removeEventListener("message",handler)}},[onResult,closePopup]);(0,index_js_.useEffect)(()=>()=>{closePopup()},[closePopup]);const openPopup=(0,index_js_.useCallback)(url=>{const popup=window.open(url,POPUP_NAME,POPUP_FEATURES);if(!popup)throw new Error("Impossible d’ouvrir la fen\xeatre Microsoft (popup bloqu\xe9 par le navigateur ?)");popupRef.current=popup;setIsOpen(true);stopPolling();pollRef.current=window.setInterval(()=>{if(popupRef.current?.closed)closePopup()},500)},[closePopup,stopPolling]);return{openPopup,closePopup,isOpen}}function MicrosoftConsentPanel(){const tenantQuery=useMicrosoftTenantQuery();if(tenantQuery.isPending)return/*#__PURE__*/(0,jsx_runtime.jsx)(InlineLoader.F,{label:"Chargement du tenant Microsoft..."});if(tenantQuery.isError)return/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur de chargement",children:"Impossible de r\xe9cup\xe9rer le statut Microsoft pour cette entreprise."});const tenant=tenantQuery.data;if(tenant)return/*#__PURE__*/(0,jsx_runtime.jsx)(ClientHostedView,{tenant:tenant});return/*#__PURE__*/(0,jsx_runtime.jsx)(AirportingHostedView,{})}function AirportingHostedView(){const[advancedOpen,setAdvancedOpen]=(0,index_js_.useState)(false);return/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"md",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"teal",variant:"light",radius:"md",icon:/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconRocket,{size:20}),title:"Vos fichiers sont h\xe9berg\xe9s chez Airporting",children:"On cr\xe9e et alimente les fichiers Excel directement sur le SharePoint Airporting. Rien \xe0 configurer c\xf4t\xe9 Microsoft, et tu peux y acc\xe9der via le lien de partage qu’on te fournit."}),/*#__PURE__*/(0,jsx_runtime.jsx)(ExcelFilesSection,{enabled:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"md",radius:"md",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"xs",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Anchor,{component:"button",type:"button",onClick:()=>setAdvancedOpen(s=>!s),underline:"never",c:"dimmed",fz:"sm",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{gap:4,children:[advancedOpen?/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconChevronUp,{size:14}):/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconChevronDown,{size:14}),"Pr\xe9f\xe9rer h\xe9berger sur votre propre SharePoint d’entreprise\xa0?"]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Collapse,{in:advancedOpen,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"sm",pt:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:["Si ton organisation veut conserver la ma\xeetrise compl\xe8te du fichier (sur votre tenant Microsoft 365), tu peux connecter ton SharePoint d’entreprise. Cette op\xe9ration n\xe9cessite un"," ",/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"administrateur Microsoft 365"})," (r\xf4le"," ",/*#__PURE__*/(0,jsx_runtime.jsx)("i",{children:"Global Administrator"})," ou \xe9quivalent)."]}),/*#__PURE__*/(0,jsx_runtime.jsx)(AdminConsentBlock,{})]})})]})})]})}function ClientHostedView({tenant}){return/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"md",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"lg",radius:"md",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{justify:"space-between",align:"flex-start",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{fw:600,fz:"lg",children:"SharePoint d’entreprise connect\xe9"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:"Airporting \xe9crit dans les fichiers Excel h\xe9berg\xe9s sur votre propre tenant Microsoft 365."})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Badge,{color:"green",size:"lg",children:"Connect\xe9"})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Tenant\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:tenant.tenant_id})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Mode\xa0:"})," ","app_only"===tenant.auth_mode?"app-only (recommand\xe9)":"delegated"]}),tenant.admin_consented_at?/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Consentement donn\xe9 le\xa0:"})," ",new Date(tenant.admin_consented_at).toLocaleString("fr-FR",{timeZone:"Europe/Paris"})]}):null,/*#__PURE__*/(0,jsx_runtime.jsx)(AdminConsentBlock,{variant:"reconnect"})]})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(ExcelFilesSection,{enabled:true})]})}function AdminConsentBlock({variant="connect"}){const config=(0,useAppConfigConnectorSingle.C)();const startMutation=useStartAdminConsentMutation();const queryClient=(0,modern_index_js_.useQueryClient)();const[lastError,setLastError]=(0,index_js_.useState)(null);const handleResult=(0,index_js_.useCallback)(message=>{if(message.success){setLastError(null);queryClient.invalidateQueries({queryKey:["microsoft","tenant",config.company]})}else setLastError(message.errorDescription??message.error??"\xc9chec du consentement Microsoft")},[queryClient,config.company]);const{openPopup,isOpen}=useMicrosoftConsentPopup({onResult:handleResult});const handleConnect=(0,index_js_.useCallback)(async()=>{setLastError(null);try{const returnTo=window.location.href;const{url}=await startMutation.mutateAsync({returnTo});openPopup(url)}catch(err){setLastError(err instanceof Error?err.message:String(err))}},[startMutation,openPopup]);const isConnecting=startMutation.isPending||isOpen;const label="reconnect"===variant?"Reconnecter Microsoft":"Connecter Microsoft";return/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"xs",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{mt:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{variant:"reconnect"===variant?"light":"filled",onClick:handleConnect,loading:isConnecting,children:label}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"xs",children:["Une fen\xeatre Microsoft va s’ouvrir : connecte-toi avec un compte"," ",/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"administrateur"}),' Microsoft 365, puis clique sur "Accepter".']})]}),lastError?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur",children:lastError}):null]})}function SingleConnectorApp(){const config=(0,useAppConfigConnectorSingle.C)();const itemRes=useConnectorSingleQuery();const item=itemRes.data;const configRes=useConnectorConfigQuery({enabled:!!item?.hasForm});const saveFn=useConnectorSaveQuery();const[editing,setEditing]=(0,index_js_.useState)(false);const[draft,setDraft]=(0,index_js_.useState)("");const renameMutation=useConnectorRenameMutation();(0,index_js_.useEffect)(()=>{if(item?.name)setDraft(item.name)},[item?.name]);const handleSave=()=>{renameMutation.mutate(draft,{onSuccess:()=>setEditing(false)})};const handleCancel=()=>{if(item?.name)setDraft(item.name);setEditing(false)};const backLink={text:"Liste des connecteurs",tab:""};switch(item?.status){case"active":backLink.tab="?tab=active";backLink.text="Connecteurs actifs";break;case"ill":backLink.tab="?tab=ill";backLink.text="Connecteurs \xe0 configurer";break}const isFormLoading=!item||item.hasForm&&!configRes.data;return/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Group,{py:10,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:0,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Title,{w:"fit-content",mb:0,order:1,children:"Nos connecteurs"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{w:"fit-content",mb:0,c:"dimmed",fz:"h5",children:"Synchronisez vos comptes bancaires et outils comptables facilement."}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Group,{py:10,children:/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Anchor,{underline:"never",href:`/company/${config.company}/integrations/connectors${backLink.tab}`,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(dist_index_js_.Circle,{bg:"dark.4",size:24,ml:"auto",c:"white",children:/*#__PURE__*/(0,jsx_runtime.jsx)(dist_index_js_.IconArrowUp,{rotate:270})}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Title,{w:"fit-content",c:"white",mb:0,order:3,children:backLink.text})]})})})]})}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Grid,{w:"100%",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Grid.Col,{span:{base:12,lg:3},children:item?/*#__PURE__*/(0,jsx_runtime.jsx)(connector_bubble.q,{connector:item,rename:{editing,draft,isPending:renameMutation.isPending,onDraftChange:setDraft,onSave:handleSave,onCancel:handleCancel,onStartEditing:()=>setEditing(true)}}):/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:64,width:64,radius:"md"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:28,width:"60%"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:16,width:"80%"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:16,width:"70%"})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Grid.Col,{span:{base:12,lg:9},children:isFormLoading?/*#__PURE__*/(0,jsx_runtime.jsx)(InlineLoader.F,{label:"Chargement du connecteur..."}):item.requiresMicrosoftConsent?/*#__PURE__*/(0,jsx_runtime.jsx)(MicrosoftConsentPanel,{}):item.hasForm?/*#__PURE__*/(0,jsx_runtime.jsx)(dist_index_js_.DynamicForm,{config:()=>configRes,save:saveFn,revealContext:{cid:config.company,connectorId:config.connector}}):/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"blue",title:"Aucune configuration n\xe9cessaire",children:item.isBridge?"Ce connecteur est g\xe9r\xe9 via Bridge. Il n’y a rien \xe0 configurer ici.":"Ce connecteur ne n\xe9cessite aucune configuration."})})]})]})}}}]);
1
+ "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["1067"],{800:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{F:()=>InlineLoader});var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4848);var _mantine_core__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(2773);function InlineLoader({label}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Center,{flex:1,h:"100%",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Stack,{align:"center",gap:"md",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Loader,{size:"md",color:"teal"}),label&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_mantine_core__WEBPACK_IMPORTED_MODULE_1__.Text,{fz:"sm",c:"dimmed",children:label})]})})}},1094:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{d:()=>SingleConnectorApp});var jsx_runtime=__webpack_require__(4848);var index_mjs_=__webpack_require__(2773);var index_js_=__webpack_require__(8556);var dist_index_js_=__webpack_require__(4259);var InlineLoader=__webpack_require__(800);var modern_index_js_=__webpack_require__(7714);var useAppConfigConnectorSingle=__webpack_require__(4613);var IntegrationsApi=__webpack_require__(6699);function useApiConnectorSingle(){const config=(0,useAppConfigConnectorSingle.C)();const client=new IntegrationsApi.Qq({baseUrl:config.api.replace(/\/$/,""),baseApiParams:{headers:{Authorization:config.token?`Bearer ${config.token}`:"",From:config.owner}}});return new IntegrationsApi.qx(client)}function useConnectorConfigQuery({enabled=true}={}){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const query=(0,modern_index_js_.useQuery)({queryKey:["connector","config","form",config.company,config.connector],queryFn:async()=>await api.connectors.getConnectorConfigV1({cid:config.company,connector:+config.connector}).then(x=>x.data),enabled,refetchIntervalInBackground:false,refetchOnWindowFocus:true,refetchOnReconnect:true});return query}var esm_index_mjs_=__webpack_require__(4931);function useConnectorSaveQuery(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();const query=(0,modern_index_js_.useMutation)({mutationFn:async values=>await api.connectors.putConnectorDataV1({cid:config.company,connector:+config.connector},{data:values}).then(x=>x.data),onSuccess:()=>{queryClient.invalidateQueries({queryKey:["connector","config","single",config.company,config.connector]});queryClient.invalidateQueries({queryKey:["connector","config","form",config.company,config.connector]});queryClient.invalidateQueries({queryKey:["connectors","list",config.company]});queryClient.invalidateQueries({queryKey:["connectors","list","ill",config.company]});esm_index_mjs_.notifications.show({title:"Connecteur sauvegard\xe9",message:"Vos donn\xe9es sont enregistr\xe9es !"})},onError:(error,variables,context)=>{console.error(error,variables,context);esm_index_mjs_.notifications.show({color:"red",title:"Erreur !",message:"Nous rencontrons un soucis technique. Veuillez r\xe9essayer plus tard."})}});return query}function useConnectorSingleQuery(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const query=(0,modern_index_js_.useQuery)({queryKey:["connector","config","single",config.company,config.connector],queryFn:async()=>await api.connectors.getConnectorSingleV1({cid:config.company,connector:+config.connector}).then(x=>x.data),refetchIntervalInBackground:false,refetchOnWindowFocus:true,refetchOnReconnect:true});return query}var connector_bubble=__webpack_require__(4184);function useConnectorRenameMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();return(0,modern_index_js_.useMutation)({mutationFn:async name=>{const res=await api.http.request({path:`/v1/connectors/${config.company}/${config.connector}`,method:"PATCH",body:{name},type:"application/json",format:"json"});return res.data},onSuccess:()=>{queryClient.invalidateQueries({queryKey:["connector","config","single",config.company,config.connector]});queryClient.invalidateQueries({queryKey:["connectors","list",config.company]});queryClient.invalidateQueries({queryKey:["connectors","list","ill",config.company]});queryClient.invalidateQueries({queryKey:["connectors","ok",config.company]});queryClient.invalidateQueries({queryKey:["connectors","ill",config.company]});esm_index_mjs_.notifications.show({color:"green",title:"Connecteur renomm\xe9",message:"Le nom a \xe9t\xe9 mis \xe0 jour avec succ\xe8s."})},onError:error=>{console.error(error);esm_index_mjs_.notifications.show({color:"red",title:"Renommage \xe9chou\xe9",message:"R\xe9essayez dans un instant."})}})}var tabler_icons_react_mjs_=__webpack_require__(5200);function useMicrosoftTenantQuery(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useQuery)({queryKey:["microsoft","tenant",config.company],queryFn:async()=>{try{const response=await api.microsoft.getTenantV1({cid:config.company});return response.data}catch(err){const status=err&&"object"==typeof err&&"status"in err?err.status:void 0;if(404===status)return null;throw err}},refetchOnWindowFocus:true,refetchOnReconnect:true,retry:false})}function useStartAdminConsentMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useMutation)({mutationFn:async({returnTo})=>{const response=await api.microsoft.startAdminConsentV1({cid:config.company,returnTo});return response.data}})}function useAddExcelFileMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();return(0,modern_index_js_.useMutation)({mutationFn:async({url})=>{const response=await api.microsoft.addExcelFileV1({cid:config.company},{url});return response.data},onSuccess:()=>{queryClient.invalidateQueries({queryKey:["microsoft","excel-files",config.company]})}})}function useDeleteExcelFileMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();const queryClient=(0,modern_index_js_.useQueryClient)();return(0,modern_index_js_.useMutation)({mutationFn:async({fileId})=>{await api.microsoft.deleteExcelFileV1({cid:config.company,fileId})},onSuccess:()=>{queryClient.invalidateQueries({queryKey:["microsoft","excel-files",config.company]})}})}function useExcelFilesQuery({enabled}){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useQuery)({queryKey:["microsoft","excel-files",config.company],queryFn:async()=>{const response=await api.microsoft.listExcelFilesV1({cid:config.company});return response.data.list},enabled,refetchOnWindowFocus:true})}function useResolveFileMutation(){const api=useApiConnectorSingle();const config=(0,useAppConfigConnectorSingle.C)();return(0,modern_index_js_.useMutation)({mutationFn:async({url})=>{const response=await api.microsoft.resolveFileV1({cid:config.company},{url});return response.data}})}function ExcelFilesSection({enabled}){const filesQuery=useExcelFilesQuery({enabled});const resolveMutation=useResolveFileMutation();const addMutation=useAddExcelFileMutation();const deleteMutation=useDeleteExcelFileMutation();const[urlInput,setUrlInput]=(0,index_js_.useState)("");const[preview,setPreview]=(0,index_js_.useState)(null);const[error,setError]=(0,index_js_.useState)(null);const handleResolve=(0,index_js_.useCallback)(async()=>{setError(null);setPreview(null);if(!urlInput.trim())return void setError("Renseigne une URL SharePoint d’un fichier Excel");try{const result=await resolveMutation.mutateAsync({url:urlInput.trim()});setPreview(result)}catch(err){setError(err instanceof Error?err.message:"Impossible de r\xe9soudre cette URL c\xf4t\xe9 Microsoft")}},[urlInput,resolveMutation]);const handleConfirm=(0,index_js_.useCallback)(async()=>{if(!preview)return;setError(null);try{await addMutation.mutateAsync({url:urlInput.trim()});setUrlInput("");setPreview(null)}catch(err){setError(err instanceof Error?err.message:String(err))}},[preview,urlInput,addMutation]);const handleCancel=(0,index_js_.useCallback)(()=>{setPreview(null);setError(null)},[]);const handleDelete=(0,index_js_.useCallback)(fileId=>{deleteMutation.mutate({fileId})},[deleteMutation]);if(!enabled)return null;return/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"lg",radius:"md",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"md",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{fw:600,fz:"lg",children:"Fichiers Excel \xe0 synchroniser"}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:["Ajoute les fichiers Excel qu’Airporting doit alimenter. Colle l’URL de partage d’un fichier ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:".xlsx"})," — on r\xe9cup\xe8re automatiquement son nom et son identifiant."]})]}),filesQuery.isPending?/*#__PURE__*/(0,jsx_runtime.jsx)(InlineLoader.F,{label:"Chargement des fichiers..."}):filesQuery.isError?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur",children:"Impossible de charger la liste des fichiers Excel."}):filesQuery.data&&filesQuery.data.length>0?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Stack,{gap:"xs",children:filesQuery.data.map(file=>/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"sm",radius:"sm",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{justify:"space-between",wrap:"nowrap",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:2,style:{minWidth:0,flex:1},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{fw:500,truncate:true,children:file.spreadsheet_name??file.spreadsheet_id}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{gap:6,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"xs",children:["ajout\xe9 le"," ",new Date(file.created).toLocaleString("fr-FR",{timeZone:"Europe/Paris"})]}),file.webUrl?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Anchor,{href:file.webUrl,target:"_blank",rel:"noreferrer",fz:"xs",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconExternalLink,{size:12}),"ouvrir sur SharePoint"]})}):null]})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.ActionIcon,{color:"red",variant:"subtle","aria-label":"Supprimer ce fichier",onClick:()=>handleDelete(file.id),loading:deleteMutation.isPending&&deleteMutation.variables?.fileId===file.id,children:/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconTrash,{size:16})})]})},file.id))}):/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:"Aucun fichier Excel ajout\xe9 pour le moment."}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"xs",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.TextInput,{label:"URL SharePoint du fichier Excel",placeholder:"https://votreorg.sharepoint.com/:x:/r/sites/.../fichier.xlsx",value:urlInput,onChange:e=>setUrlInput(e.currentTarget.value),disabled:resolveMutation.isPending||addMutation.isPending}),preview?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"green",title:"Fichier trouv\xe9",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Nom\xa0:"})," ",preview.name]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Identifiant\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:preview.itemId})]}),"site"===preview.kind?/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Site SharePoint\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:preview.siteId})]}):/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Drive\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:preview.driveId})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{mt:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{onClick:handleConfirm,loading:addMutation.isPending,children:"Confirmer l’ajout"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{variant:"subtle",onClick:handleCancel,disabled:addMutation.isPending,children:"Annuler"})]})]})}):/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{onClick:handleResolve,loading:resolveMutation.isPending,disabled:!urlInput.trim(),children:"Valider l’URL"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{c:"dimmed",fz:"xs",children:"On interroge Microsoft Graph pour r\xe9cup\xe9rer le nom du fichier avant de l’enregistrer."})]}),error?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur",children:error}):null]})]})})}function isConsentMessage(value){if("object"!=typeof value||null===value)return false;const v=value;return"airporting-microsoft-consent"===v.type}const POPUP_NAME="airporting-microsoft-consent";const POPUP_FEATURES="width=600,height=720,resizable,scrollbars";function useMicrosoftConsentPopup({onResult}){const[isOpen,setIsOpen]=(0,index_js_.useState)(false);const popupRef=(0,index_js_.useRef)(null);const pollRef=(0,index_js_.useRef)(null);const stopPolling=(0,index_js_.useCallback)(()=>{if(null!==pollRef.current){window.clearInterval(pollRef.current);pollRef.current=null}},[]);const closePopup=(0,index_js_.useCallback)(()=>{if(popupRef.current&&!popupRef.current.closed)popupRef.current.close();popupRef.current=null;setIsOpen(false);stopPolling()},[stopPolling]);(0,index_js_.useEffect)(()=>{const handler=event=>{if(!isConsentMessage(event.data))return;onResult(event.data);closePopup()};window.addEventListener("message",handler);return()=>{window.removeEventListener("message",handler)}},[onResult,closePopup]);(0,index_js_.useEffect)(()=>()=>{closePopup()},[closePopup]);const openPopup=(0,index_js_.useCallback)(url=>{const popup=window.open(url,POPUP_NAME,POPUP_FEATURES);if(!popup)throw new Error("Impossible d’ouvrir la fen\xeatre Microsoft (popup bloqu\xe9 par le navigateur ?)");popupRef.current=popup;setIsOpen(true);stopPolling();pollRef.current=window.setInterval(()=>{if(popupRef.current?.closed)closePopup()},500)},[closePopup,stopPolling]);return{openPopup,closePopup,isOpen}}function MicrosoftConsentPanel(){const tenantQuery=useMicrosoftTenantQuery();if(tenantQuery.isPending)return/*#__PURE__*/(0,jsx_runtime.jsx)(InlineLoader.F,{label:"Chargement du tenant Microsoft..."});if(tenantQuery.isError)return/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur de chargement",children:"Impossible de r\xe9cup\xe9rer le statut Microsoft pour cette entreprise."});const tenant=tenantQuery.data;if(tenant)return/*#__PURE__*/(0,jsx_runtime.jsx)(ClientHostedView,{tenant:tenant});return/*#__PURE__*/(0,jsx_runtime.jsx)(AirportingHostedView,{})}function AirportingHostedView(){const[advancedOpen,setAdvancedOpen]=(0,index_js_.useState)(false);return/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"md",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"teal",variant:"light",radius:"md",icon:/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconRocket,{size:20}),title:"Vos fichiers sont h\xe9berg\xe9s chez Airporting",children:"On cr\xe9e et alimente les fichiers Excel directement sur le SharePoint Airporting. Rien \xe0 configurer c\xf4t\xe9 Microsoft, et tu peux y acc\xe9der via le lien de partage qu’on te fournit."}),/*#__PURE__*/(0,jsx_runtime.jsx)(ExcelFilesSection,{enabled:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"md",radius:"md",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"xs",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Anchor,{component:"button",type:"button",onClick:()=>setAdvancedOpen(s=>!s),underline:"never",c:"dimmed",fz:"sm",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{gap:4,children:[advancedOpen?/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconChevronUp,{size:14}):/*#__PURE__*/(0,jsx_runtime.jsx)(tabler_icons_react_mjs_.IconChevronDown,{size:14}),"Pr\xe9f\xe9rer h\xe9berger sur votre propre SharePoint d’entreprise\xa0?"]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Collapse,{in:advancedOpen,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"sm",pt:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:["Si ton organisation veut conserver la ma\xeetrise compl\xe8te du fichier (sur votre tenant Microsoft 365), tu peux connecter ton SharePoint d’entreprise. Cette op\xe9ration n\xe9cessite un"," ",/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"administrateur Microsoft 365"})," (r\xf4le"," ",/*#__PURE__*/(0,jsx_runtime.jsx)("i",{children:"Global Administrator"})," ou \xe9quivalent)."]}),/*#__PURE__*/(0,jsx_runtime.jsx)(AdminConsentBlock,{})]})})]})})]})}function ClientHostedView({tenant}){return/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"md",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Card,{withBorder:true,padding:"lg",radius:"md",children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{justify:"space-between",align:"flex-start",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{fw:600,fz:"lg",children:"SharePoint d’entreprise connect\xe9"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{c:"dimmed",fz:"sm",children:"Airporting \xe9crit dans les fichiers Excel h\xe9berg\xe9s sur votre propre tenant Microsoft 365."})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Badge,{color:"green",size:"lg",children:"Connect\xe9"})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:4,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Tenant\xa0:"})," ",/*#__PURE__*/(0,jsx_runtime.jsx)("code",{children:tenant.tenant_id})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Mode\xa0:"})," ","app_only"===tenant.auth_mode?"app-only (recommand\xe9)":"delegated"]}),tenant.admin_consented_at?/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{fz:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"Consentement donn\xe9 le\xa0:"})," ",new Date(tenant.admin_consented_at).toLocaleString("fr-FR",{timeZone:"Europe/Paris"})]}):null,/*#__PURE__*/(0,jsx_runtime.jsx)(AdminConsentBlock,{variant:"reconnect"})]})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(ExcelFilesSection,{enabled:true})]})}function AdminConsentBlock({variant="connect"}){const config=(0,useAppConfigConnectorSingle.C)();const startMutation=useStartAdminConsentMutation();const queryClient=(0,modern_index_js_.useQueryClient)();const[lastError,setLastError]=(0,index_js_.useState)(null);const handleResult=(0,index_js_.useCallback)(message=>{if(message.success){setLastError(null);queryClient.invalidateQueries({queryKey:["microsoft","tenant",config.company]})}else setLastError(message.errorDescription??message.error??"\xc9chec du consentement Microsoft")},[queryClient,config.company]);const{openPopup,isOpen}=useMicrosoftConsentPopup({onResult:handleResult});const handleConnect=(0,index_js_.useCallback)(async()=>{setLastError(null);try{const returnTo=window.location.href;const{url}=await startMutation.mutateAsync({returnTo});openPopup(url)}catch(err){setLastError(err instanceof Error?err.message:String(err))}},[startMutation,openPopup]);const isConnecting=startMutation.isPending||isOpen;const label="reconnect"===variant?"Reconnecter Microsoft":"Connecter Microsoft";return/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:"xs",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{mt:"sm",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Button,{variant:"reconnect"===variant?"light":"filled",onClick:handleConnect,loading:isConnecting,children:label}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Text,{c:"dimmed",fz:"xs",children:["Une fen\xeatre Microsoft va s’ouvrir : connecte-toi avec un compte"," ",/*#__PURE__*/(0,jsx_runtime.jsx)("b",{children:"administrateur"}),' Microsoft 365, puis clique sur "Accepter".']})]}),lastError?/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"red",title:"Erreur",children:lastError}):null]})}function SingleConnectorApp(){const config=(0,useAppConfigConnectorSingle.C)();const itemRes=useConnectorSingleQuery();const item=itemRes.data;const configRes=useConnectorConfigQuery({enabled:!!item?.hasForm});const saveFn=useConnectorSaveQuery();const[editing,setEditing]=(0,index_js_.useState)(false);const[draft,setDraft]=(0,index_js_.useState)("");const renameMutation=useConnectorRenameMutation();(0,index_js_.useEffect)(()=>{if(item?.name)setDraft(item.name)},[item?.name]);const handleSave=()=>{renameMutation.mutate(draft,{onSuccess:()=>setEditing(false)})};const handleCancel=()=>{if(item?.name)setDraft(item.name);setEditing(false)};const backLink={text:"Liste des connecteurs",tab:""};switch(item?.status){case"active":backLink.tab="?tab=active";backLink.text="Connecteurs actifs";break;case"ill":backLink.tab="?tab=ill";backLink.text="Connecteurs \xe0 configurer";break}const isFormLoading=!item||item.hasForm&&!configRes.data;return/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Group,{py:10,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{gap:0,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Title,{w:"fit-content",mb:0,order:1,children:"Nos connecteurs"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Text,{w:"fit-content",mb:0,c:"dimmed",fz:"h5",children:"Synchronisez vos comptes bancaires et outils comptables facilement."}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Group,{py:10,children:/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Anchor,{underline:"never",href:`/company/${config.company}/integrations/connectors${backLink.tab}`,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Group,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(dist_index_js_.Circle,{bg:"dark.4",size:24,ml:"auto",c:"white",children:/*#__PURE__*/(0,jsx_runtime.jsx)(dist_index_js_.IconArrowUp,{rotate:270})}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Title,{w:"fit-content",c:"white",mb:0,order:3,children:backLink.text})]})})})]})}),/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Grid,{w:"100%",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Grid.Col,{span:{base:12,lg:3},children:item?/*#__PURE__*/(0,jsx_runtime.jsx)(connector_bubble.q,{connector:item,rename:{editing,draft,isPending:renameMutation.isPending,onDraftChange:setDraft,onSave:handleSave,onCancel:handleCancel,onStartEditing:()=>setEditing(true)}}):/*#__PURE__*/(0,jsx_runtime.jsxs)(index_mjs_.Stack,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:64,width:64,radius:"md"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:28,width:"60%"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:16,width:"80%"}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Skeleton,{height:16,width:"70%"})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Grid.Col,{span:{base:12,lg:9},children:isFormLoading?/*#__PURE__*/(0,jsx_runtime.jsx)(InlineLoader.F,{label:"Chargement du connecteur..."}):item.requiresMicrosoftConsent?/*#__PURE__*/(0,jsx_runtime.jsx)(MicrosoftConsentPanel,{}):item.hasForm?/*#__PURE__*/(0,jsx_runtime.jsx)(dist_index_js_.DynamicForm,{config:()=>configRes,save:saveFn,revealContext:{cid:config.company,connectorId:config.connector}}):/*#__PURE__*/(0,jsx_runtime.jsx)(index_mjs_.Alert,{color:"blue",title:"Aucune configuration n\xe9cessaire",children:item.isBridge?"Ce connecteur est g\xe9r\xe9 via Bridge. Il n’y a rien \xe0 configurer ici.":"Ce connecteur ne n\xe9cessite aucune configuration."})})]})]})}}}]);
package/dist/mf/1857.js CHANGED
@@ -1 +1 @@
1
- "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["1857"],{2017:function(module){module.exports=function equal(a,b){if(a===b)return true;if(a&&b&&"object"==typeof a&&"object"==typeof b){if(a.constructor!==b.constructor)return false;var length,i,keys;if(Array.isArray(a)){length=a.length;if(length!=b.length)return false;for(i=length;0!==i--;)if(!equal(a[i],b[i]))return false;return true}if(a.constructor===RegExp)return a.source===b.source&&a.flags===b.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===b.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===b.toString();keys=Object.keys(a);length=keys.length;if(length!==Object.keys(b).length)return false;for(i=length;0!==i--;)if(!Object.prototype.hasOwnProperty.call(b,keys[i]))return false;for(i=length;0!==i--;){var key=keys[i];if(!equal(a[key],b[key]))return false}return true}return a!==a&&b!==b}},1112:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){__webpack_require__.r(__webpack_exports__);__webpack_require__.d(__webpack_exports__,{hasLength:()=>hasLength,isNotEmptyHTML:()=>isNotEmptyHTML,createFormContext:()=>createFormContext,FORM_INDEX:()=>FORM_INDEX,formRootRule:()=>formRootRule,createFormActions:()=>createFormActions,superstructResolver:()=>superstructResolver,isEmail:()=>isEmail,useForm:()=>useForm,isJSONString:()=>isJSONString,Form:()=>Form,isInRange:()=>isInRange,useField:()=>useField,zodResolver:()=>zodResolver,matchesField:()=>matchesField,joiResolver:()=>joiResolver,matches:()=>matches,isNotEmpty:()=>isNotEmpty,yupResolver:()=>yupResolver});var index_js_=__webpack_require__(7060);"use client";function dispatchEvent(type,detail){window.dispatchEvent(new CustomEvent(type,{detail}))}function validateFormName(name){if(!/^[0-9a-zA-Z-]+$/.test(name))throw new Error(`[@mantine/use-form] Form name "${name}" is invalid, it should contain only letters, numbers and dashes`)}const useIsomorphicEffect="undefined"!=typeof window?index_js_.useLayoutEffect:index_js_.useEffect;function createFormActions(name){validateFormName(name);const setFieldValue=(path,value)=>dispatchEvent(`mantine-form:${name}:set-field-value`,{path,value});const setValues=values=>dispatchEvent(`mantine-form:${name}:set-values`,values);const setInitialValues=values=>dispatchEvent(`mantine-form:${name}:set-initial-values`,values);const setErrors=errors=>dispatchEvent(`mantine-form:${name}:set-errors`,errors);const setFieldError=(path,error)=>dispatchEvent(`mantine-form:${name}:set-field-error`,{path,error});const clearFieldError=path=>dispatchEvent(`mantine-form:${name}:clear-field-error`,path);const clearErrors=()=>dispatchEvent(`mantine-form:${name}:clear-errors`);const reset=()=>dispatchEvent(`mantine-form:${name}:reset`);const validate=()=>dispatchEvent(`mantine-form:${name}:validate`);const validateField=path=>dispatchEvent(`mantine-form:${name}:validate-field`,path);const reorderListItem=(path,payload)=>dispatchEvent(`mantine-form:${name}:reorder-list-item`,{path,payload});const removeListItem=(path,index)=>dispatchEvent(`mantine-form:${name}:remove-list-item`,{path,index});const insertListItem=(path,item,index)=>dispatchEvent(`mantine-form:${name}:insert-list-item`,{path,index,item});const setDirty=value=>dispatchEvent(`mantine-form:${name}:set-dirty`,value);const setTouched=value=>dispatchEvent(`mantine-form:${name}:set-touched`,value);const resetDirty=values=>dispatchEvent(`mantine-form:${name}:reset-dirty`,values);const resetTouched=()=>dispatchEvent(`mantine-form:${name}:reset-touched`);return{setFieldValue,setValues,setInitialValues,setErrors,setFieldError,clearFieldError,clearErrors,reset,validate,validateField,reorderListItem,removeListItem,insertListItem,setDirty,setTouched,resetDirty,resetTouched}}function useFormEvent(eventKey,handler){useIsomorphicEffect(()=>{if(eventKey){window.addEventListener(eventKey,handler);return()=>window.removeEventListener(eventKey,handler)}},[eventKey])}function useFormActions(name,form){if(name)validateFormName(name);useFormEvent(`mantine-form:${name}:set-field-value`,event=>form.setFieldValue(event.detail.path,event.detail.value));useFormEvent(`mantine-form:${name}:set-values`,event=>form.setValues(event.detail));useFormEvent(`mantine-form:${name}:set-initial-values`,event=>form.setInitialValues(event.detail));useFormEvent(`mantine-form:${name}:set-errors`,event=>form.setErrors(event.detail));useFormEvent(`mantine-form:${name}:set-field-error`,event=>form.setFieldError(event.detail.path,event.detail.error));useFormEvent(`mantine-form:${name}:clear-field-error`,event=>form.clearFieldError(event.detail));useFormEvent(`mantine-form:${name}:clear-errors`,form.clearErrors);useFormEvent(`mantine-form:${name}:reset`,form.reset);useFormEvent(`mantine-form:${name}:validate`,form.validate);useFormEvent(`mantine-form:${name}:validate-field`,event=>form.validateField(event.detail));useFormEvent(`mantine-form:${name}:reorder-list-item`,event=>form.reorderListItem(event.detail.path,event.detail.payload));useFormEvent(`mantine-form:${name}:remove-list-item`,event=>form.removeListItem(event.detail.path,event.detail.index));useFormEvent(`mantine-form:${name}:insert-list-item`,event=>form.insertListItem(event.detail.path,event.detail.item,event.detail.index));useFormEvent(`mantine-form:${name}:set-dirty`,event=>form.setDirty(event.detail));useFormEvent(`mantine-form:${name}:set-touched`,event=>form.setTouched(event.detail));useFormEvent(`mantine-form:${name}:reset-dirty`,event=>form.resetDirty(event.detail));useFormEvent(`mantine-form:${name}:reset-touched`,form.resetTouched)}"use client";function getInputOnChange(setValue){return val=>{if(val)if("function"==typeof val)setValue(val);else if("object"==typeof val&&"nativeEvent"in val){const{currentTarget}=val;if(currentTarget instanceof HTMLInputElement)"checkbox"===currentTarget.type?setValue(currentTarget.checked):setValue(currentTarget.value);else if(currentTarget instanceof HTMLTextAreaElement||currentTarget instanceof HTMLSelectElement)setValue(currentTarget.value)}else setValue(val);else setValue(val)}}"use client";function filterErrors(errors){if(null===errors||"object"!=typeof errors)return{};return Object.keys(errors).reduce((acc,key)=>{const errorValue=errors[key];if(null!=errorValue&&false!==errorValue)acc[key]=errorValue;return acc},{})}"use client";function useFormErrors(initialErrors){const[errorsState,setErrorsState]=(0,index_js_.useState)(filterErrors(initialErrors));const errorsRef=(0,index_js_.useRef)(errorsState);const setErrors=(0,index_js_.useCallback)(errors=>{setErrorsState(current=>{const newErrors=filterErrors("function"==typeof errors?errors(current):errors);errorsRef.current=newErrors;return newErrors})},[]);const clearErrors=(0,index_js_.useCallback)(()=>setErrors({}),[]);const clearFieldError=(0,index_js_.useCallback)(path=>{if(void 0===errorsRef.current[path])return;setErrors(current=>{const errors={...current};delete errors[path];return errors})},[errorsState]);const setFieldError=(0,index_js_.useCallback)((path,error)=>{if(null==error||false===error)clearFieldError(path);else if(errorsRef.current[path]!==error)setErrors(current=>({...current,[path]:error}))},[errorsState]);return{errorsState,setErrors,clearErrors,setFieldError,clearFieldError}}"use client";function clearListState(field,state){if(null===state||"object"!=typeof state)return{};const clone={...state};Object.keys(state).forEach(errorKey=>{if(errorKey.includes(`${String(field)}.`))delete clone[errorKey]});return clone}"use client";function getIndexFromKeyAfterPath(key,path){const split=key.substring(path.length+1).split(".")[0];return parseInt(split,10)}function changeErrorIndices(path,index,errors,change){if(void 0===index)return errors;const pathString=`${String(path)}`;let clearedErrors=errors;if(-1===change)clearedErrors=clearListState(`${pathString}.${index}`,clearedErrors);const cloned={...clearedErrors};const changedKeys=/* @__PURE__ */new Set;Object.entries(clearedErrors).filter(([key])=>{if(!key.startsWith(`${pathString}.`))return false;const currIndex=getIndexFromKeyAfterPath(key,pathString);if(Number.isNaN(currIndex))return false;return currIndex>=index}).forEach(([key,value])=>{const currIndex=getIndexFromKeyAfterPath(key,pathString);const newKey=key.replace(`${pathString}.${currIndex}`,`${pathString}.${currIndex+change}`);cloned[newKey]=value;changedKeys.add(newKey);if(!changedKeys.has(key))delete cloned[key]});return cloned}"use client";function reorderErrors(path,{from,to},errors){const oldKeyStart=`${path}.${from}`;const newKeyStart=`${path}.${to}`;const clone={...errors};const processedKeys=/* @__PURE__ */new Set;Object.keys(errors).forEach(key=>{if(processedKeys.has(key))return;let oldKey;let newKey;if(key.startsWith(oldKeyStart)){oldKey=key;newKey=key.replace(oldKeyStart,newKeyStart)}else if(key.startsWith(newKeyStart)){oldKey=key.replace(newKeyStart,oldKeyStart);newKey=key}if(oldKey&&newKey){const value1=clone[oldKey];const value2=clone[newKey];void 0===value2?delete clone[oldKey]:clone[oldKey]=value2;void 0===value1?delete clone[newKey]:clone[newKey]=value1;processedKeys.add(oldKey);processedKeys.add(newKey)}});return clone}"use client";function getSplittedPath(path){if("string"!=typeof path)return[];return path.split(".")}"use client";function getPath(path,values){const splittedPath=getSplittedPath(path);if(0===splittedPath.length||"object"!=typeof values||null===values)return;let value=values[splittedPath[0]];for(let i=1;i<splittedPath.length;i+=1){if(null==value)break;value=value[splittedPath[i]]}return value}function set(obj,key,val){if("object"==typeof val.value)val.value=klona(val.value);if(val.enumerable&&!val.get&&!val.set&&val.configurable&&val.writable&&"__proto__"!==key)obj[key]=val.value;else Object.defineProperty(obj,key,val)}function klona(x){if("object"!=typeof x)return x;var i=0,k,list,tmp,str=Object.prototype.toString.call(x);if("[object Object]"===str)tmp=Object.create(x.__proto__||null);else if("[object Array]"===str)tmp=Array(x.length);else if("[object Set]"===str){tmp=new Set;x.forEach(function(val){tmp.add(klona(val))})}else if("[object Map]"===str){tmp=new Map;x.forEach(function(val,key){tmp.set(klona(key),klona(val))})}else if("[object Date]"===str)tmp=new Date(+x);else if("[object RegExp]"===str)tmp=new RegExp(x.source,x.flags);else if("[object DataView]"===str)tmp=new x.constructor(klona(x.buffer));else if("[object ArrayBuffer]"===str)tmp=x.slice(0);else if("Array]"===str.slice(-6))tmp=new x.constructor(x);if(tmp){for(list=Object.getOwnPropertySymbols(x);i<list.length;i++)set(tmp,list[i],Object.getOwnPropertyDescriptor(x,list[i]));for(i=0,list=Object.getOwnPropertyNames(x);i<list.length;i++)if(!Object.hasOwnProperty.call(tmp,k=list[i])||tmp[k]!==x[k])set(tmp,k,Object.getOwnPropertyDescriptor(x,k))}return tmp||x}"use client";function setPath(path,value,values){const splittedPath=getSplittedPath(path);if(0===splittedPath.length)return values;const cloned=klona(values);if(1===splittedPath.length){cloned[splittedPath[0]]=value;return cloned}let val=cloned[splittedPath[0]];for(let i=1;i<splittedPath.length-1;i+=1){if(void 0===val)return cloned;val=val[splittedPath[i]]}val[splittedPath[splittedPath.length-1]]=value;return cloned}"use client";function reorderPath(path,{from,to},values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;const cloned=[...currentValue];const item=currentValue[from];cloned.splice(from,1);cloned.splice(to,0,item);return setPath(path,cloned,values)}"use client";function insertPath(path,value,index,values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;const cloned=[...currentValue];cloned.splice("number"==typeof index?index:cloned.length,0,value);return setPath(path,cloned,values)}"use client";function removePath(path,index,values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;return setPath(path,currentValue.filter((_,itemIndex)=>itemIndex!==index),values)}"use client";function replacePath(path,item,index,values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;if(currentValue.length<=index)return values;const cloned=[...currentValue];cloned[index]=item;return setPath(path,cloned,values)}"use client";function useFormList({$values,$errors,$status}){const reorderListItem=(0,index_js_.useCallback)((path,payload)=>{$status.clearFieldDirty(path);$errors.setErrors(errs=>reorderErrors(path,payload,errs));$values.setValues({values:reorderPath(path,payload,$values.refValues.current),updateState:true})},[]);const removeListItem=(0,index_js_.useCallback)((path,index)=>{$status.clearFieldDirty(path);$errors.setErrors(errs=>changeErrorIndices(path,index,errs,-1));$values.setValues({values:removePath(path,index,$values.refValues.current),updateState:true})},[]);const insertListItem=(0,index_js_.useCallback)((path,item,index)=>{$status.clearFieldDirty(path);$errors.setErrors(errs=>changeErrorIndices(path,index,errs,1));$values.setValues({values:insertPath(path,item,index,$values.refValues.current),updateState:true})},[]);const replaceListItem=(0,index_js_.useCallback)((path,index,item)=>{$status.clearFieldDirty(path);$values.setValues({values:replacePath(path,item,index,$values.refValues.current),updateState:true})},[]);return{reorderListItem,removeListItem,insertListItem,replaceListItem}}var fast_deep_equal=__webpack_require__(2017);"use client";function getStatus(status,path){const paths=Object.keys(status);if("string"==typeof path){const nestedPaths=paths.filter(statusPath=>statusPath.startsWith(`${path}.`));return status[path]||nestedPaths.some(statusPath=>status[statusPath])||false}return paths.some(statusPath=>status[statusPath])}"use client";function useFormStatus({initialDirty,initialTouched,mode,$values}){const[touchedState,setTouchedState]=(0,index_js_.useState)(initialTouched);const[dirtyState,setDirtyState]=(0,index_js_.useState)(initialDirty);const touchedRef=(0,index_js_.useRef)(initialTouched);const dirtyRef=(0,index_js_.useRef)(initialDirty);const setTouched=(0,index_js_.useCallback)(values=>{const resolvedValues="function"==typeof values?values(touchedRef.current):values;touchedRef.current=resolvedValues;if("controlled"===mode)setTouchedState(resolvedValues)},[]);const setDirty=(0,index_js_.useCallback)((values,forceUpdate=false)=>{const resolvedValues="function"==typeof values?values(dirtyRef.current):values;dirtyRef.current=resolvedValues;if("controlled"===mode||forceUpdate)setDirtyState(resolvedValues)},[]);const resetTouched=(0,index_js_.useCallback)(()=>setTouched({}),[]);const resetDirty=(0,index_js_.useCallback)(values=>{const newSnapshot=values?{...$values.refValues.current,...values}:$values.refValues.current;$values.setValuesSnapshot(newSnapshot);setDirty({})},[]);const setFieldTouched=(0,index_js_.useCallback)((path,touched)=>{setTouched(currentTouched=>{if(getStatus(currentTouched,path)===touched)return currentTouched;return{...currentTouched,[path]:touched}})},[]);const setFieldDirty=(0,index_js_.useCallback)((path,dirty,forceUpdate)=>{setDirty(currentDirty=>{if(getStatus(currentDirty,path)===dirty)return currentDirty;return{...currentDirty,[path]:dirty}},forceUpdate)},[]);const setCalculatedFieldDirty=(0,index_js_.useCallback)((path,value)=>{const currentDirty=getStatus(dirtyRef.current,path);const dirty=!fast_deep_equal(getPath(path,$values.getValuesSnapshot()),value);const clearedState=clearListState(path,dirtyRef.current);clearedState[path]=dirty;setDirty(clearedState,currentDirty!==dirty)},[]);const isTouched=(0,index_js_.useCallback)(path=>getStatus(touchedRef.current,path),[]);const clearFieldDirty=(0,index_js_.useCallback)(path=>setDirty(current=>{if("string"!=typeof path)return current;const result=clearListState(path,current);delete result[path];if(fast_deep_equal(result,current))return current;return result}),[]);const isDirty=(0,index_js_.useCallback)(path=>{if(path){const overriddenValue=getPath(path,dirtyRef.current);if("boolean"==typeof overriddenValue)return overriddenValue;const sliceOfValues=getPath(path,$values.refValues.current);const sliceOfInitialValues=getPath(path,$values.valuesSnapshot.current);return!fast_deep_equal(sliceOfValues,sliceOfInitialValues)}const isOverridden=Object.keys(dirtyRef.current).length>0;if(isOverridden)return getStatus(dirtyRef.current);return!fast_deep_equal($values.refValues.current,$values.valuesSnapshot.current)},[]);const getDirty=(0,index_js_.useCallback)(()=>dirtyRef.current,[]);const getTouched=(0,index_js_.useCallback)(()=>touchedRef.current,[]);return{touchedState,dirtyState,touchedRef,dirtyRef,setTouched,setDirty,resetDirty,resetTouched,isTouched,setFieldTouched,setFieldDirty,setTouchedState,setDirtyState,clearFieldDirty,isDirty,getDirty,getTouched,setCalculatedFieldDirty}}"use client";function useFormValues({initialValues,onValuesChange,mode}){const initialized=(0,index_js_.useRef)(false);const[stateValues,setStateValues]=(0,index_js_.useState)(initialValues||{});const refValues=(0,index_js_.useRef)(stateValues);const valuesSnapshot=(0,index_js_.useRef)(stateValues);const setValues=(0,index_js_.useCallback)(({values,subscribers,updateState=true,mergeWithPreviousValues=true})=>{const previousValues=refValues.current;const resolvedValues=values instanceof Function?values(refValues.current):values;const updatedValues=mergeWithPreviousValues?{...previousValues,...resolvedValues}:resolvedValues;refValues.current=updatedValues;if(updateState){setStateValues(updatedValues);if("uncontrolled"===mode)refValues.current=updatedValues}onValuesChange?.(updatedValues,previousValues);subscribers?.filter(Boolean).forEach(subscriber=>subscriber({updatedValues,previousValues}))},[onValuesChange]);const setFieldValue=(0,index_js_.useCallback)(payload=>{const currentValue=getPath(payload.path,refValues.current);const updatedValue=payload.value instanceof Function?payload.value(currentValue):payload.value;if(currentValue!==updatedValue){const previousValues=refValues.current;const updatedValues=setPath(payload.path,updatedValue,refValues.current);setValues({values:updatedValues,updateState:payload.updateState});payload.subscribers?.filter(Boolean).forEach(subscriber=>subscriber({path:payload.path,updatedValues,previousValues}))}},[setValues]);const setValuesSnapshot=(0,index_js_.useCallback)(payload=>{valuesSnapshot.current=payload},[]);const initialize=(0,index_js_.useCallback)((values,onInitialize)=>{if(!initialized.current){initialized.current=true;setValues({values,updateState:"controlled"===mode});setValuesSnapshot(values);onInitialize()}},[setValues]);const resetValues=(0,index_js_.useCallback)(()=>{setValues({values:valuesSnapshot.current,updateState:true,mergeWithPreviousValues:false})},[setValues]);const getValues=(0,index_js_.useCallback)(()=>refValues.current,[]);const getValuesSnapshot=(0,index_js_.useCallback)(()=>valuesSnapshot.current,[]);const resetField=(0,index_js_.useCallback)((path,subscribers)=>{const snapshotValue=getPath(path,valuesSnapshot.current);if(void 0===snapshotValue)return;setFieldValue({path,value:snapshotValue,updateState:"controlled"===mode,subscribers})},[setFieldValue,mode]);return{initialized,stateValues,refValues,valuesSnapshot,setValues,setFieldValue,resetValues,setValuesSnapshot,initialize,getValues,getValuesSnapshot,resetField}}"use client";function useFormWatch({$status,cascadeUpdates}){const subscribers=(0,index_js_.useRef)({});const watch=(0,index_js_.useCallback)((path,callback)=>{(0,index_js_.useEffect)(()=>{subscribers.current[path]=subscribers.current[path]||[];subscribers.current[path].push(callback);return()=>{subscribers.current[path]=subscribers.current[path].filter(cb=>cb!==callback)}},[callback])},[]);const getFieldSubscribers=(0,index_js_.useCallback)(path=>{const result=subscribers.current[path]?.map(callback=>input=>callback({previousValue:getPath(path,input.previousValues),value:getPath(path,input.updatedValues),touched:$status.isTouched(path),dirty:$status.isDirty(path)}))??[];if(cascadeUpdates){for(const subscriptionKey in subscribers.current)if(subscriptionKey.startsWith(`${path}.`)||path.startsWith(`${subscriptionKey}.`))result.push(...subscribers.current[subscriptionKey].map(cb=>input=>cb({previousValue:getPath(subscriptionKey,input.previousValues),value:getPath(subscriptionKey,input.updatedValues),touched:$status.isTouched(subscriptionKey),dirty:$status.isDirty(subscriptionKey)})))}return result},[]);return{subscribers,watch,getFieldSubscribers}}"use client";function getDataPath(formName,fieldPath){return formName?`${formName}-${fieldPath.toString()}`:fieldPath.toString()}"use client";const formRootRule=Symbol("root-rule");function getValidationResults(errors){const filteredErrors=filterErrors(errors);return{hasErrors:Object.keys(filteredErrors).length>0,errors:filteredErrors}}function validateRulesRecord(rules,values,path="",errors={}){if("object"!=typeof rules||null===rules)return errors;return Object.keys(rules).reduce((acc,ruleKey)=>{const rule=rules[ruleKey];const rulePath=`${""===path?"":`${path}.`}${ruleKey}`;const value=getPath(rulePath,values);let arrayValidation=false;if("function"==typeof rule)acc[rulePath]=rule(value,values,rulePath);if("object"==typeof rule&&Array.isArray(value)){arrayValidation=true;value.forEach((_item,index)=>validateRulesRecord(rule,values,`${rulePath}.${index}`,acc));if(formRootRule in rule)acc[rulePath]=rule[formRootRule](value,values,rulePath)}if("object"==typeof rule&&"object"==typeof value&&null!==value){if(!arrayValidation)validateRulesRecord(rule,values,rulePath,acc);if(formRootRule in rule)acc[rulePath]=rule[formRootRule](value,values,rulePath)}return acc},errors)}function validateValues(validate,values){if("function"==typeof validate)return getValidationResults(validate(values));return getValidationResults(validateRulesRecord(validate,values))}"use client";function validateFieldValue(path,rules,values){if("string"!=typeof path)return{hasError:false,error:null};const results=validateValues(rules,values);const pathInError=Object.keys(results.errors).find(errorKey=>path.split(".").every((pathPart,i)=>pathPart===errorKey.split(".")[i]));return{hasError:!!pathInError,error:pathInError?results.errors[pathInError]:null}}"use client";const FORM_INDEX="__MANTINE_FORM_INDEX__";"use client";function shouldValidateOnChange(path,validateInputOnChange){if(!validateInputOnChange)return false;if("boolean"==typeof validateInputOnChange)return validateInputOnChange;if(Array.isArray(validateInputOnChange))return validateInputOnChange.includes(path.replace(/[.][0-9]+/g,`.${FORM_INDEX}`));return false}"use client";function useForm({name,mode="controlled",initialValues,initialErrors={},initialDirty={},initialTouched={},clearInputErrorOnChange=true,validateInputOnChange=false,validateInputOnBlur=false,onValuesChange,transformValues=values=>values,enhanceGetInputProps,validate:rules,onSubmitPreventDefault="always",touchTrigger="change",cascadeUpdates=false}={}){const $errors=useFormErrors(initialErrors);const $values=useFormValues({initialValues,onValuesChange,mode});const $status=useFormStatus({initialDirty,initialTouched,$values,mode});const $list=useFormList({$values,$errors,$status});const $watch=useFormWatch({$status,cascadeUpdates});const[formKey,setFormKey]=(0,index_js_.useState)(0);const[fieldKeys,setFieldKeys]=(0,index_js_.useState)({});const[submitting,setSubmitting]=(0,index_js_.useState)(false);const reset=(0,index_js_.useCallback)(()=>{$values.resetValues();$errors.clearErrors();$status.resetDirty();$status.resetTouched();"uncontrolled"===mode&&setFormKey(key2=>key2+1)},[]);const handleValuesChanges=(0,index_js_.useCallback)(previousValues=>{clearInputErrorOnChange&&$errors.clearErrors();"uncontrolled"===mode&&setFormKey(key2=>key2+1);Object.keys($watch.subscribers.current).forEach(path=>{const value=getPath(path,$values.refValues.current);const previousValue=getPath(path,previousValues);if(value!==previousValue)$watch.getFieldSubscribers(path).forEach(cb=>cb({previousValues,updatedValues:$values.refValues.current}))})},[clearInputErrorOnChange]);const initialize=(0,index_js_.useCallback)(values=>{const previousValues=$values.refValues.current;$values.initialize(values,()=>"uncontrolled"===mode&&setFormKey(key2=>key2+1));handleValuesChanges(previousValues)},[handleValuesChanges]);const setFieldValue=(0,index_js_.useCallback)((path,value,options)=>{const shouldValidate=shouldValidateOnChange(path,validateInputOnChange);const resolvedValue=value instanceof Function?value(getPath(path,$values.refValues.current)):value;$status.setCalculatedFieldDirty(path,resolvedValue);"change"===touchTrigger&&$status.setFieldTouched(path,true);!shouldValidate&&clearInputErrorOnChange&&$errors.clearFieldError(path);$values.setFieldValue({path,value,updateState:"controlled"===mode,subscribers:[...$watch.getFieldSubscribers(path),shouldValidate?payload=>{const validationResults=validateFieldValue(path,rules,payload.updatedValues);validationResults.hasError?$errors.setFieldError(path,validationResults.error):$errors.clearFieldError(path)}:null,options?.forceUpdate!==false&&"controlled"!==mode?()=>setFieldKeys(keys=>({...keys,[path]:(keys[path]||0)+1})):null]})},[onValuesChange,rules]);const setValues=(0,index_js_.useCallback)(values=>{const previousValues=$values.refValues.current;$values.setValues({values,updateState:"controlled"===mode});handleValuesChanges(previousValues)},[onValuesChange,handleValuesChanges]);const validate=(0,index_js_.useCallback)(()=>{const results=validateValues(rules,$values.refValues.current);$errors.setErrors(results.errors);return results},[rules]);const validateField=(0,index_js_.useCallback)(path=>{const results=validateFieldValue(path,rules,$values.refValues.current);results.hasError?$errors.setFieldError(path,results.error):$errors.clearFieldError(path);return results},[rules]);const getInputProps=(path,{type="input",withError=true,withFocus=true,...otherOptions}={})=>{const onChange=getInputOnChange(value=>setFieldValue(path,value,{forceUpdate:false}));const payload={onChange,"data-path":getDataPath(name,path)};if(withError)payload.error=$errors.errorsState[path];if("checkbox"===type)payload["controlled"===mode?"checked":"defaultChecked"]=getPath(path,$values.refValues.current);else payload["controlled"===mode?"value":"defaultValue"]=getPath(path,$values.refValues.current);if(withFocus){payload.onFocus=()=>$status.setFieldTouched(path,true);payload.onBlur=()=>{if(shouldValidateOnChange(path,validateInputOnBlur)){const validationResults=validateFieldValue(path,rules,$values.refValues.current);validationResults.hasError?$errors.setFieldError(path,validationResults.error):$errors.clearFieldError(path)}}}return Object.assign(payload,enhanceGetInputProps?.({inputProps:payload,field:path,options:{type,withError,withFocus,...otherOptions},form}))};const onSubmit=(handleSubmit,handleValidationFailure)=>event=>{if("always"===onSubmitPreventDefault)event?.preventDefault();const results=validate();if(results.hasErrors){if("validation-failed"===onSubmitPreventDefault)event?.preventDefault();handleValidationFailure?.(results.errors,$values.refValues.current,event)}else{const submitResult=handleSubmit?.(transformValues($values.refValues.current),event);if(submitResult instanceof Promise){setSubmitting(true);submitResult.finally(()=>setSubmitting(false))}}};const getTransformedValues=input=>transformValues(input||$values.refValues.current);const onReset=(0,index_js_.useCallback)(event=>{event.preventDefault();reset()},[]);const isValid=(0,index_js_.useCallback)(path=>path?!validateFieldValue(path,rules,$values.refValues.current).hasError:!validateValues(rules,$values.refValues.current).hasErrors,[rules]);const key=path=>`${formKey}-${String(path)}-${fieldKeys[String(path)]||0}`;const getInputNode=(0,index_js_.useCallback)(path=>document.querySelector(`[data-path="${getDataPath(name,path)}"]`),[]);const resetField=(0,index_js_.useCallback)(path=>{$values.resetField(path,["controlled"!==mode?()=>setFieldKeys(keys=>({...keys,[path]:(keys[path]||0)+1})):null])},[$values.resetField,mode,setFieldKeys]);const form={watch:$watch.watch,initialized:$values.initialized.current,values:"uncontrolled"===mode?$values.refValues.current:$values.stateValues,getValues:$values.getValues,getInitialValues:$values.getValuesSnapshot,setInitialValues:$values.setValuesSnapshot,resetField,initialize,setValues,setFieldValue,submitting,setSubmitting,errors:$errors.errorsState,setErrors:$errors.setErrors,setFieldError:$errors.setFieldError,clearFieldError:$errors.clearFieldError,clearErrors:$errors.clearErrors,resetDirty:$status.resetDirty,setTouched:$status.setTouched,setDirty:$status.setDirty,isTouched:$status.isTouched,resetTouched:$status.resetTouched,isDirty:$status.isDirty,getTouched:$status.getTouched,getDirty:$status.getDirty,reorderListItem:$list.reorderListItem,insertListItem:$list.insertListItem,removeListItem:$list.removeListItem,replaceListItem:$list.replaceListItem,reset,validate,validateField,getInputProps,onSubmit,onReset,isValid,getTransformedValues,key,getInputNode};useFormActions(name,form);return form}var jsx_runtime=__webpack_require__(4848);"use client";function createFormContext(){const FormContext=(0,index_js_.createContext)(null);function FormProvider({form,children}){return/* @__PURE__ */(0,jsx_runtime.jsx)(FormContext.Provider,{value:form,children})}function useFormContext(){const ctx=(0,index_js_.useContext)(FormContext);if(!ctx)throw new Error("useFormContext was called outside of FormProvider context");return ctx}return[FormProvider,useFormContext,useForm]}"use client";const Form=(0,index_js_.forwardRef)(({form,onSubmit,onReset,...others},ref)=>/* @__PURE__ */(0,jsx_runtime.jsx)("form",{...others,onSubmit:form.onSubmit("function"==typeof onSubmit?onSubmit:()=>{}),onReset:event=>{onReset?.(event);form.onReset(event)},ref}));Form.displayName="@mantine/use-form/Form";"use client";function isNotEmpty(error){const _error=error||true;return value=>{if("string"==typeof value)return value.trim().length>0?null:_error;if(Array.isArray(value))return value.length>0?null:_error;if(null==value)return _error;if(false===value)return _error;return null}}"use client";function matches(regexp,error){const _error=error||true;return value=>{if("string"!=typeof value)return _error;return regexp.test(value)?null:_error}}"use client";function isEmail(error){return matches(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,error)}"use client";function isLengthValid(payload,value){if("number"==typeof payload)return value.length===payload;const{max,min}=payload;let valid=true;if("number"==typeof max&&value.length>max)valid=false;if("number"==typeof min&&value.length<min)valid=false;return valid}function hasLength(payload,error){const _error=error||true;return value=>{if("string"==typeof value)return isLengthValid(payload,value.trim())?null:_error;if("object"==typeof value&&null!==value&&"length"in value)return isLengthValid(payload,value)?null:_error;return _error}}"use client";function isInRange({min,max},error){const _error=error||true;return value=>{if("number"!=typeof value)return _error;let valid=true;if("number"==typeof min&&value<min)valid=false;if("number"==typeof max&&value>max)valid=false;return valid?null:_error}}"use client";function matchesField(field,error){const _error=error||true;return(value,values)=>{if(!values||!(field in values))return _error;return value===values[field]?null:_error}}"use client";function removeHtmlTags(input){return input.replace(/<\/?[^>]+(>|$)/g,"")}function isNotEmptyHTML(error){const _error=error||true;return value=>{if("string"==typeof value)return removeHtmlTags(value).trim().length>0?null:_error;return _error}}"use client";function isJSONString(error){const _error=error||true;return value=>{if("string"==typeof value)try{JSON.parse(value);return null}catch(e){}return _error}}"use client";function useField({mode="controlled",clearErrorOnChange=true,initialValue,initialError=null,initialTouched=false,onValueChange,validateOnChange=false,validateOnBlur=false,validate,resolveValidationError,type="input"}){const[valueState,setValueState]=(0,index_js_.useState)(initialValue);const valueRef=(0,index_js_.useRef)(valueState);const[key,setKey]=(0,index_js_.useState)(0);const[error,setError]=(0,index_js_.useState)(initialError||null);const touchedRef=(0,index_js_.useRef)(initialTouched||false);const[,setTouchedState]=(0,index_js_.useState)(touchedRef.current);const[isValidating,setIsValidating]=(0,index_js_.useState)(false);const errorResolver=(0,index_js_.useMemo)(()=>resolveValidationError||(err=>err),[resolveValidationError]);const setTouched=(0,index_js_.useCallback)((val,{updateState="controlled"===mode}={})=>{touchedRef.current=val;updateState&&setTouchedState(val)},[]);const setValue=(0,index_js_.useCallback)((value,{updateKey="uncontrolled"===mode,updateState="controlled"===mode}={})=>{if(valueRef.current===value)return;valueRef.current=value;onValueChange?.(value);if(clearErrorOnChange&&null!==error)setError(null);if(updateState)setValueState(value);if(updateKey)setKey(currentKey=>currentKey+1);if(validateOnChange)_validate()},[error,clearErrorOnChange,onValueChange]);const reset=(0,index_js_.useCallback)(()=>{setValue(initialValue);setError(null);setTouched(false)},[initialValue]);const getValue=(0,index_js_.useCallback)(()=>valueRef.current,[]);const isTouched=(0,index_js_.useCallback)(()=>touchedRef.current,[]);const isDirty=(0,index_js_.useCallback)(()=>valueRef.current!==initialValue,[initialValue]);const _validate=(0,index_js_.useCallback)(async()=>{const validationResult=validate?.(valueRef.current);if(validationResult instanceof Promise){setIsValidating(true);try{const result=await validationResult;setIsValidating(false);setError(result)}catch(err){setIsValidating(false);const resolvedError=errorResolver(err);setError(resolvedError);return resolvedError}}else{setError(validationResult);return validationResult}},[]);const getInputProps=({withError=true,withFocus=true}={})=>{const onChange=getInputOnChange(val=>setValue(val,{updateKey:false}));const payload={onChange};if(withError)payload.error=error;if("checkbox"===type)payload["controlled"===mode?"checked":"defaultChecked"]=valueRef.current;else payload["controlled"===mode?"value":"defaultValue"]=valueRef.current;if(withFocus){payload.onFocus=()=>{setTouched(true)};payload.onBlur=()=>{if(shouldValidateOnChange("",!!validateOnBlur))_validate()}}return payload};const resetTouched=(0,index_js_.useCallback)(()=>setTouched(false),[]);return{key,getValue,setValue,reset,getInputProps,isValidating,validate:_validate,error,setError,isTouched,isDirty,resetTouched}}"use client";function zodResolver(schema){return values=>{const parsed=schema.safeParse(values);if(parsed.success)return{};const results={};parsed.error.errors.forEach(error=>{results[error.path.join(".")]=error.message});return results}}"use client";function superstructResolver(schema){function structValidation(values){const formErrors={};const[err]=schema.validate(values);if(!err)return formErrors;err.failures().forEach(fieldFailure=>{const fieldName=fieldFailure.path.join(" ");formErrors[fieldFailure.path.join(".")]=`${fieldName}: ${fieldFailure.message}`});return formErrors}return structValidation}"use client";function yupResolver(schema){const _schema=schema;return values=>{try{_schema.validateSync(values,{abortEarly:false});return{}}catch(_yupError){const yupError=_yupError;const results={};yupError.inner.forEach(error=>{results[error.path.replaceAll("[",".").replaceAll("]","")]=error.message});return results}}}"use client";function joiResolver(schema,options){const _schema=schema;return values=>{const parsed=_schema.validate(values,{abortEarly:false,...options});if(!parsed.error)return{};const results={};parsed.error.details.forEach(error=>{results[error.path.join(".")]=error.message});return results}}}}]);
1
+ "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["1857"],{2017:function(module){module.exports=function equal(a,b){if(a===b)return true;if(a&&b&&"object"==typeof a&&"object"==typeof b){if(a.constructor!==b.constructor)return false;var length,i,keys;if(Array.isArray(a)){length=a.length;if(length!=b.length)return false;for(i=length;0!==i--;)if(!equal(a[i],b[i]))return false;return true}if(a.constructor===RegExp)return a.source===b.source&&a.flags===b.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===b.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===b.toString();keys=Object.keys(a);length=keys.length;if(length!==Object.keys(b).length)return false;for(i=length;0!==i--;)if(!Object.prototype.hasOwnProperty.call(b,keys[i]))return false;for(i=length;0!==i--;){var key=keys[i];if(!equal(a[key],b[key]))return false}return true}return a!==a&&b!==b}},1112:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){__webpack_require__.r(__webpack_exports__);__webpack_require__.d(__webpack_exports__,{hasLength:()=>hasLength,isNotEmptyHTML:()=>isNotEmptyHTML,createFormContext:()=>createFormContext,FORM_INDEX:()=>FORM_INDEX,formRootRule:()=>formRootRule,createFormActions:()=>createFormActions,superstructResolver:()=>superstructResolver,isEmail:()=>isEmail,useForm:()=>useForm,isJSONString:()=>isJSONString,Form:()=>Form,isInRange:()=>isInRange,useField:()=>useField,zodResolver:()=>zodResolver,matchesField:()=>matchesField,joiResolver:()=>joiResolver,matches:()=>matches,isNotEmpty:()=>isNotEmpty,yupResolver:()=>yupResolver});var index_js_=__webpack_require__(8556);"use client";function dispatchEvent(type,detail){window.dispatchEvent(new CustomEvent(type,{detail}))}function validateFormName(name){if(!/^[0-9a-zA-Z-]+$/.test(name))throw new Error(`[@mantine/use-form] Form name "${name}" is invalid, it should contain only letters, numbers and dashes`)}const useIsomorphicEffect="undefined"!=typeof window?index_js_.useLayoutEffect:index_js_.useEffect;function createFormActions(name){validateFormName(name);const setFieldValue=(path,value)=>dispatchEvent(`mantine-form:${name}:set-field-value`,{path,value});const setValues=values=>dispatchEvent(`mantine-form:${name}:set-values`,values);const setInitialValues=values=>dispatchEvent(`mantine-form:${name}:set-initial-values`,values);const setErrors=errors=>dispatchEvent(`mantine-form:${name}:set-errors`,errors);const setFieldError=(path,error)=>dispatchEvent(`mantine-form:${name}:set-field-error`,{path,error});const clearFieldError=path=>dispatchEvent(`mantine-form:${name}:clear-field-error`,path);const clearErrors=()=>dispatchEvent(`mantine-form:${name}:clear-errors`);const reset=()=>dispatchEvent(`mantine-form:${name}:reset`);const validate=()=>dispatchEvent(`mantine-form:${name}:validate`);const validateField=path=>dispatchEvent(`mantine-form:${name}:validate-field`,path);const reorderListItem=(path,payload)=>dispatchEvent(`mantine-form:${name}:reorder-list-item`,{path,payload});const removeListItem=(path,index)=>dispatchEvent(`mantine-form:${name}:remove-list-item`,{path,index});const insertListItem=(path,item,index)=>dispatchEvent(`mantine-form:${name}:insert-list-item`,{path,index,item});const setDirty=value=>dispatchEvent(`mantine-form:${name}:set-dirty`,value);const setTouched=value=>dispatchEvent(`mantine-form:${name}:set-touched`,value);const resetDirty=values=>dispatchEvent(`mantine-form:${name}:reset-dirty`,values);const resetTouched=()=>dispatchEvent(`mantine-form:${name}:reset-touched`);return{setFieldValue,setValues,setInitialValues,setErrors,setFieldError,clearFieldError,clearErrors,reset,validate,validateField,reorderListItem,removeListItem,insertListItem,setDirty,setTouched,resetDirty,resetTouched}}function useFormEvent(eventKey,handler){useIsomorphicEffect(()=>{if(eventKey){window.addEventListener(eventKey,handler);return()=>window.removeEventListener(eventKey,handler)}},[eventKey])}function useFormActions(name,form){if(name)validateFormName(name);useFormEvent(`mantine-form:${name}:set-field-value`,event=>form.setFieldValue(event.detail.path,event.detail.value));useFormEvent(`mantine-form:${name}:set-values`,event=>form.setValues(event.detail));useFormEvent(`mantine-form:${name}:set-initial-values`,event=>form.setInitialValues(event.detail));useFormEvent(`mantine-form:${name}:set-errors`,event=>form.setErrors(event.detail));useFormEvent(`mantine-form:${name}:set-field-error`,event=>form.setFieldError(event.detail.path,event.detail.error));useFormEvent(`mantine-form:${name}:clear-field-error`,event=>form.clearFieldError(event.detail));useFormEvent(`mantine-form:${name}:clear-errors`,form.clearErrors);useFormEvent(`mantine-form:${name}:reset`,form.reset);useFormEvent(`mantine-form:${name}:validate`,form.validate);useFormEvent(`mantine-form:${name}:validate-field`,event=>form.validateField(event.detail));useFormEvent(`mantine-form:${name}:reorder-list-item`,event=>form.reorderListItem(event.detail.path,event.detail.payload));useFormEvent(`mantine-form:${name}:remove-list-item`,event=>form.removeListItem(event.detail.path,event.detail.index));useFormEvent(`mantine-form:${name}:insert-list-item`,event=>form.insertListItem(event.detail.path,event.detail.item,event.detail.index));useFormEvent(`mantine-form:${name}:set-dirty`,event=>form.setDirty(event.detail));useFormEvent(`mantine-form:${name}:set-touched`,event=>form.setTouched(event.detail));useFormEvent(`mantine-form:${name}:reset-dirty`,event=>form.resetDirty(event.detail));useFormEvent(`mantine-form:${name}:reset-touched`,form.resetTouched)}"use client";function getInputOnChange(setValue){return val=>{if(val)if("function"==typeof val)setValue(val);else if("object"==typeof val&&"nativeEvent"in val){const{currentTarget}=val;if(currentTarget instanceof HTMLInputElement)"checkbox"===currentTarget.type?setValue(currentTarget.checked):setValue(currentTarget.value);else if(currentTarget instanceof HTMLTextAreaElement||currentTarget instanceof HTMLSelectElement)setValue(currentTarget.value)}else setValue(val);else setValue(val)}}"use client";function filterErrors(errors){if(null===errors||"object"!=typeof errors)return{};return Object.keys(errors).reduce((acc,key)=>{const errorValue=errors[key];if(null!=errorValue&&false!==errorValue)acc[key]=errorValue;return acc},{})}"use client";function useFormErrors(initialErrors){const[errorsState,setErrorsState]=(0,index_js_.useState)(filterErrors(initialErrors));const errorsRef=(0,index_js_.useRef)(errorsState);const setErrors=(0,index_js_.useCallback)(errors=>{setErrorsState(current=>{const newErrors=filterErrors("function"==typeof errors?errors(current):errors);errorsRef.current=newErrors;return newErrors})},[]);const clearErrors=(0,index_js_.useCallback)(()=>setErrors({}),[]);const clearFieldError=(0,index_js_.useCallback)(path=>{if(void 0===errorsRef.current[path])return;setErrors(current=>{const errors={...current};delete errors[path];return errors})},[errorsState]);const setFieldError=(0,index_js_.useCallback)((path,error)=>{if(null==error||false===error)clearFieldError(path);else if(errorsRef.current[path]!==error)setErrors(current=>({...current,[path]:error}))},[errorsState]);return{errorsState,setErrors,clearErrors,setFieldError,clearFieldError}}"use client";function clearListState(field,state){if(null===state||"object"!=typeof state)return{};const clone={...state};Object.keys(state).forEach(errorKey=>{if(errorKey.includes(`${String(field)}.`))delete clone[errorKey]});return clone}"use client";function getIndexFromKeyAfterPath(key,path){const split=key.substring(path.length+1).split(".")[0];return parseInt(split,10)}function changeErrorIndices(path,index,errors,change){if(void 0===index)return errors;const pathString=`${String(path)}`;let clearedErrors=errors;if(-1===change)clearedErrors=clearListState(`${pathString}.${index}`,clearedErrors);const cloned={...clearedErrors};const changedKeys=/* @__PURE__ */new Set;Object.entries(clearedErrors).filter(([key])=>{if(!key.startsWith(`${pathString}.`))return false;const currIndex=getIndexFromKeyAfterPath(key,pathString);if(Number.isNaN(currIndex))return false;return currIndex>=index}).forEach(([key,value])=>{const currIndex=getIndexFromKeyAfterPath(key,pathString);const newKey=key.replace(`${pathString}.${currIndex}`,`${pathString}.${currIndex+change}`);cloned[newKey]=value;changedKeys.add(newKey);if(!changedKeys.has(key))delete cloned[key]});return cloned}"use client";function reorderErrors(path,{from,to},errors){const oldKeyStart=`${path}.${from}`;const newKeyStart=`${path}.${to}`;const clone={...errors};const processedKeys=/* @__PURE__ */new Set;Object.keys(errors).forEach(key=>{if(processedKeys.has(key))return;let oldKey;let newKey;if(key.startsWith(oldKeyStart)){oldKey=key;newKey=key.replace(oldKeyStart,newKeyStart)}else if(key.startsWith(newKeyStart)){oldKey=key.replace(newKeyStart,oldKeyStart);newKey=key}if(oldKey&&newKey){const value1=clone[oldKey];const value2=clone[newKey];void 0===value2?delete clone[oldKey]:clone[oldKey]=value2;void 0===value1?delete clone[newKey]:clone[newKey]=value1;processedKeys.add(oldKey);processedKeys.add(newKey)}});return clone}"use client";function getSplittedPath(path){if("string"!=typeof path)return[];return path.split(".")}"use client";function getPath(path,values){const splittedPath=getSplittedPath(path);if(0===splittedPath.length||"object"!=typeof values||null===values)return;let value=values[splittedPath[0]];for(let i=1;i<splittedPath.length;i+=1){if(null==value)break;value=value[splittedPath[i]]}return value}function set(obj,key,val){if("object"==typeof val.value)val.value=klona(val.value);if(val.enumerable&&!val.get&&!val.set&&val.configurable&&val.writable&&"__proto__"!==key)obj[key]=val.value;else Object.defineProperty(obj,key,val)}function klona(x){if("object"!=typeof x)return x;var i=0,k,list,tmp,str=Object.prototype.toString.call(x);if("[object Object]"===str)tmp=Object.create(x.__proto__||null);else if("[object Array]"===str)tmp=Array(x.length);else if("[object Set]"===str){tmp=new Set;x.forEach(function(val){tmp.add(klona(val))})}else if("[object Map]"===str){tmp=new Map;x.forEach(function(val,key){tmp.set(klona(key),klona(val))})}else if("[object Date]"===str)tmp=new Date(+x);else if("[object RegExp]"===str)tmp=new RegExp(x.source,x.flags);else if("[object DataView]"===str)tmp=new x.constructor(klona(x.buffer));else if("[object ArrayBuffer]"===str)tmp=x.slice(0);else if("Array]"===str.slice(-6))tmp=new x.constructor(x);if(tmp){for(list=Object.getOwnPropertySymbols(x);i<list.length;i++)set(tmp,list[i],Object.getOwnPropertyDescriptor(x,list[i]));for(i=0,list=Object.getOwnPropertyNames(x);i<list.length;i++)if(!Object.hasOwnProperty.call(tmp,k=list[i])||tmp[k]!==x[k])set(tmp,k,Object.getOwnPropertyDescriptor(x,k))}return tmp||x}"use client";function setPath(path,value,values){const splittedPath=getSplittedPath(path);if(0===splittedPath.length)return values;const cloned=klona(values);if(1===splittedPath.length){cloned[splittedPath[0]]=value;return cloned}let val=cloned[splittedPath[0]];for(let i=1;i<splittedPath.length-1;i+=1){if(void 0===val)return cloned;val=val[splittedPath[i]]}val[splittedPath[splittedPath.length-1]]=value;return cloned}"use client";function reorderPath(path,{from,to},values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;const cloned=[...currentValue];const item=currentValue[from];cloned.splice(from,1);cloned.splice(to,0,item);return setPath(path,cloned,values)}"use client";function insertPath(path,value,index,values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;const cloned=[...currentValue];cloned.splice("number"==typeof index?index:cloned.length,0,value);return setPath(path,cloned,values)}"use client";function removePath(path,index,values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;return setPath(path,currentValue.filter((_,itemIndex)=>itemIndex!==index),values)}"use client";function replacePath(path,item,index,values){const currentValue=getPath(path,values);if(!Array.isArray(currentValue))return values;if(currentValue.length<=index)return values;const cloned=[...currentValue];cloned[index]=item;return setPath(path,cloned,values)}"use client";function useFormList({$values,$errors,$status}){const reorderListItem=(0,index_js_.useCallback)((path,payload)=>{$status.clearFieldDirty(path);$errors.setErrors(errs=>reorderErrors(path,payload,errs));$values.setValues({values:reorderPath(path,payload,$values.refValues.current),updateState:true})},[]);const removeListItem=(0,index_js_.useCallback)((path,index)=>{$status.clearFieldDirty(path);$errors.setErrors(errs=>changeErrorIndices(path,index,errs,-1));$values.setValues({values:removePath(path,index,$values.refValues.current),updateState:true})},[]);const insertListItem=(0,index_js_.useCallback)((path,item,index)=>{$status.clearFieldDirty(path);$errors.setErrors(errs=>changeErrorIndices(path,index,errs,1));$values.setValues({values:insertPath(path,item,index,$values.refValues.current),updateState:true})},[]);const replaceListItem=(0,index_js_.useCallback)((path,index,item)=>{$status.clearFieldDirty(path);$values.setValues({values:replacePath(path,item,index,$values.refValues.current),updateState:true})},[]);return{reorderListItem,removeListItem,insertListItem,replaceListItem}}var fast_deep_equal=__webpack_require__(2017);"use client";function getStatus(status,path){const paths=Object.keys(status);if("string"==typeof path){const nestedPaths=paths.filter(statusPath=>statusPath.startsWith(`${path}.`));return status[path]||nestedPaths.some(statusPath=>status[statusPath])||false}return paths.some(statusPath=>status[statusPath])}"use client";function useFormStatus({initialDirty,initialTouched,mode,$values}){const[touchedState,setTouchedState]=(0,index_js_.useState)(initialTouched);const[dirtyState,setDirtyState]=(0,index_js_.useState)(initialDirty);const touchedRef=(0,index_js_.useRef)(initialTouched);const dirtyRef=(0,index_js_.useRef)(initialDirty);const setTouched=(0,index_js_.useCallback)(values=>{const resolvedValues="function"==typeof values?values(touchedRef.current):values;touchedRef.current=resolvedValues;if("controlled"===mode)setTouchedState(resolvedValues)},[]);const setDirty=(0,index_js_.useCallback)((values,forceUpdate=false)=>{const resolvedValues="function"==typeof values?values(dirtyRef.current):values;dirtyRef.current=resolvedValues;if("controlled"===mode||forceUpdate)setDirtyState(resolvedValues)},[]);const resetTouched=(0,index_js_.useCallback)(()=>setTouched({}),[]);const resetDirty=(0,index_js_.useCallback)(values=>{const newSnapshot=values?{...$values.refValues.current,...values}:$values.refValues.current;$values.setValuesSnapshot(newSnapshot);setDirty({})},[]);const setFieldTouched=(0,index_js_.useCallback)((path,touched)=>{setTouched(currentTouched=>{if(getStatus(currentTouched,path)===touched)return currentTouched;return{...currentTouched,[path]:touched}})},[]);const setFieldDirty=(0,index_js_.useCallback)((path,dirty,forceUpdate)=>{setDirty(currentDirty=>{if(getStatus(currentDirty,path)===dirty)return currentDirty;return{...currentDirty,[path]:dirty}},forceUpdate)},[]);const setCalculatedFieldDirty=(0,index_js_.useCallback)((path,value)=>{const currentDirty=getStatus(dirtyRef.current,path);const dirty=!fast_deep_equal(getPath(path,$values.getValuesSnapshot()),value);const clearedState=clearListState(path,dirtyRef.current);clearedState[path]=dirty;setDirty(clearedState,currentDirty!==dirty)},[]);const isTouched=(0,index_js_.useCallback)(path=>getStatus(touchedRef.current,path),[]);const clearFieldDirty=(0,index_js_.useCallback)(path=>setDirty(current=>{if("string"!=typeof path)return current;const result=clearListState(path,current);delete result[path];if(fast_deep_equal(result,current))return current;return result}),[]);const isDirty=(0,index_js_.useCallback)(path=>{if(path){const overriddenValue=getPath(path,dirtyRef.current);if("boolean"==typeof overriddenValue)return overriddenValue;const sliceOfValues=getPath(path,$values.refValues.current);const sliceOfInitialValues=getPath(path,$values.valuesSnapshot.current);return!fast_deep_equal(sliceOfValues,sliceOfInitialValues)}const isOverridden=Object.keys(dirtyRef.current).length>0;if(isOverridden)return getStatus(dirtyRef.current);return!fast_deep_equal($values.refValues.current,$values.valuesSnapshot.current)},[]);const getDirty=(0,index_js_.useCallback)(()=>dirtyRef.current,[]);const getTouched=(0,index_js_.useCallback)(()=>touchedRef.current,[]);return{touchedState,dirtyState,touchedRef,dirtyRef,setTouched,setDirty,resetDirty,resetTouched,isTouched,setFieldTouched,setFieldDirty,setTouchedState,setDirtyState,clearFieldDirty,isDirty,getDirty,getTouched,setCalculatedFieldDirty}}"use client";function useFormValues({initialValues,onValuesChange,mode}){const initialized=(0,index_js_.useRef)(false);const[stateValues,setStateValues]=(0,index_js_.useState)(initialValues||{});const refValues=(0,index_js_.useRef)(stateValues);const valuesSnapshot=(0,index_js_.useRef)(stateValues);const setValues=(0,index_js_.useCallback)(({values,subscribers,updateState=true,mergeWithPreviousValues=true})=>{const previousValues=refValues.current;const resolvedValues=values instanceof Function?values(refValues.current):values;const updatedValues=mergeWithPreviousValues?{...previousValues,...resolvedValues}:resolvedValues;refValues.current=updatedValues;if(updateState){setStateValues(updatedValues);if("uncontrolled"===mode)refValues.current=updatedValues}onValuesChange?.(updatedValues,previousValues);subscribers?.filter(Boolean).forEach(subscriber=>subscriber({updatedValues,previousValues}))},[onValuesChange]);const setFieldValue=(0,index_js_.useCallback)(payload=>{const currentValue=getPath(payload.path,refValues.current);const updatedValue=payload.value instanceof Function?payload.value(currentValue):payload.value;if(currentValue!==updatedValue){const previousValues=refValues.current;const updatedValues=setPath(payload.path,updatedValue,refValues.current);setValues({values:updatedValues,updateState:payload.updateState});payload.subscribers?.filter(Boolean).forEach(subscriber=>subscriber({path:payload.path,updatedValues,previousValues}))}},[setValues]);const setValuesSnapshot=(0,index_js_.useCallback)(payload=>{valuesSnapshot.current=payload},[]);const initialize=(0,index_js_.useCallback)((values,onInitialize)=>{if(!initialized.current){initialized.current=true;setValues({values,updateState:"controlled"===mode});setValuesSnapshot(values);onInitialize()}},[setValues]);const resetValues=(0,index_js_.useCallback)(()=>{setValues({values:valuesSnapshot.current,updateState:true,mergeWithPreviousValues:false})},[setValues]);const getValues=(0,index_js_.useCallback)(()=>refValues.current,[]);const getValuesSnapshot=(0,index_js_.useCallback)(()=>valuesSnapshot.current,[]);const resetField=(0,index_js_.useCallback)((path,subscribers)=>{const snapshotValue=getPath(path,valuesSnapshot.current);if(void 0===snapshotValue)return;setFieldValue({path,value:snapshotValue,updateState:"controlled"===mode,subscribers})},[setFieldValue,mode]);return{initialized,stateValues,refValues,valuesSnapshot,setValues,setFieldValue,resetValues,setValuesSnapshot,initialize,getValues,getValuesSnapshot,resetField}}"use client";function useFormWatch({$status,cascadeUpdates}){const subscribers=(0,index_js_.useRef)({});const watch=(0,index_js_.useCallback)((path,callback)=>{(0,index_js_.useEffect)(()=>{subscribers.current[path]=subscribers.current[path]||[];subscribers.current[path].push(callback);return()=>{subscribers.current[path]=subscribers.current[path].filter(cb=>cb!==callback)}},[callback])},[]);const getFieldSubscribers=(0,index_js_.useCallback)(path=>{const result=subscribers.current[path]?.map(callback=>input=>callback({previousValue:getPath(path,input.previousValues),value:getPath(path,input.updatedValues),touched:$status.isTouched(path),dirty:$status.isDirty(path)}))??[];if(cascadeUpdates){for(const subscriptionKey in subscribers.current)if(subscriptionKey.startsWith(`${path}.`)||path.startsWith(`${subscriptionKey}.`))result.push(...subscribers.current[subscriptionKey].map(cb=>input=>cb({previousValue:getPath(subscriptionKey,input.previousValues),value:getPath(subscriptionKey,input.updatedValues),touched:$status.isTouched(subscriptionKey),dirty:$status.isDirty(subscriptionKey)})))}return result},[]);return{subscribers,watch,getFieldSubscribers}}"use client";function getDataPath(formName,fieldPath){return formName?`${formName}-${fieldPath.toString()}`:fieldPath.toString()}"use client";const formRootRule=Symbol("root-rule");function getValidationResults(errors){const filteredErrors=filterErrors(errors);return{hasErrors:Object.keys(filteredErrors).length>0,errors:filteredErrors}}function validateRulesRecord(rules,values,path="",errors={}){if("object"!=typeof rules||null===rules)return errors;return Object.keys(rules).reduce((acc,ruleKey)=>{const rule=rules[ruleKey];const rulePath=`${""===path?"":`${path}.`}${ruleKey}`;const value=getPath(rulePath,values);let arrayValidation=false;if("function"==typeof rule)acc[rulePath]=rule(value,values,rulePath);if("object"==typeof rule&&Array.isArray(value)){arrayValidation=true;value.forEach((_item,index)=>validateRulesRecord(rule,values,`${rulePath}.${index}`,acc));if(formRootRule in rule)acc[rulePath]=rule[formRootRule](value,values,rulePath)}if("object"==typeof rule&&"object"==typeof value&&null!==value){if(!arrayValidation)validateRulesRecord(rule,values,rulePath,acc);if(formRootRule in rule)acc[rulePath]=rule[formRootRule](value,values,rulePath)}return acc},errors)}function validateValues(validate,values){if("function"==typeof validate)return getValidationResults(validate(values));return getValidationResults(validateRulesRecord(validate,values))}"use client";function validateFieldValue(path,rules,values){if("string"!=typeof path)return{hasError:false,error:null};const results=validateValues(rules,values);const pathInError=Object.keys(results.errors).find(errorKey=>path.split(".").every((pathPart,i)=>pathPart===errorKey.split(".")[i]));return{hasError:!!pathInError,error:pathInError?results.errors[pathInError]:null}}"use client";const FORM_INDEX="__MANTINE_FORM_INDEX__";"use client";function shouldValidateOnChange(path,validateInputOnChange){if(!validateInputOnChange)return false;if("boolean"==typeof validateInputOnChange)return validateInputOnChange;if(Array.isArray(validateInputOnChange))return validateInputOnChange.includes(path.replace(/[.][0-9]+/g,`.${FORM_INDEX}`));return false}"use client";function useForm({name,mode="controlled",initialValues,initialErrors={},initialDirty={},initialTouched={},clearInputErrorOnChange=true,validateInputOnChange=false,validateInputOnBlur=false,onValuesChange,transformValues=values=>values,enhanceGetInputProps,validate:rules,onSubmitPreventDefault="always",touchTrigger="change",cascadeUpdates=false}={}){const $errors=useFormErrors(initialErrors);const $values=useFormValues({initialValues,onValuesChange,mode});const $status=useFormStatus({initialDirty,initialTouched,$values,mode});const $list=useFormList({$values,$errors,$status});const $watch=useFormWatch({$status,cascadeUpdates});const[formKey,setFormKey]=(0,index_js_.useState)(0);const[fieldKeys,setFieldKeys]=(0,index_js_.useState)({});const[submitting,setSubmitting]=(0,index_js_.useState)(false);const reset=(0,index_js_.useCallback)(()=>{$values.resetValues();$errors.clearErrors();$status.resetDirty();$status.resetTouched();"uncontrolled"===mode&&setFormKey(key2=>key2+1)},[]);const handleValuesChanges=(0,index_js_.useCallback)(previousValues=>{clearInputErrorOnChange&&$errors.clearErrors();"uncontrolled"===mode&&setFormKey(key2=>key2+1);Object.keys($watch.subscribers.current).forEach(path=>{const value=getPath(path,$values.refValues.current);const previousValue=getPath(path,previousValues);if(value!==previousValue)$watch.getFieldSubscribers(path).forEach(cb=>cb({previousValues,updatedValues:$values.refValues.current}))})},[clearInputErrorOnChange]);const initialize=(0,index_js_.useCallback)(values=>{const previousValues=$values.refValues.current;$values.initialize(values,()=>"uncontrolled"===mode&&setFormKey(key2=>key2+1));handleValuesChanges(previousValues)},[handleValuesChanges]);const setFieldValue=(0,index_js_.useCallback)((path,value,options)=>{const shouldValidate=shouldValidateOnChange(path,validateInputOnChange);const resolvedValue=value instanceof Function?value(getPath(path,$values.refValues.current)):value;$status.setCalculatedFieldDirty(path,resolvedValue);"change"===touchTrigger&&$status.setFieldTouched(path,true);!shouldValidate&&clearInputErrorOnChange&&$errors.clearFieldError(path);$values.setFieldValue({path,value,updateState:"controlled"===mode,subscribers:[...$watch.getFieldSubscribers(path),shouldValidate?payload=>{const validationResults=validateFieldValue(path,rules,payload.updatedValues);validationResults.hasError?$errors.setFieldError(path,validationResults.error):$errors.clearFieldError(path)}:null,options?.forceUpdate!==false&&"controlled"!==mode?()=>setFieldKeys(keys=>({...keys,[path]:(keys[path]||0)+1})):null]})},[onValuesChange,rules]);const setValues=(0,index_js_.useCallback)(values=>{const previousValues=$values.refValues.current;$values.setValues({values,updateState:"controlled"===mode});handleValuesChanges(previousValues)},[onValuesChange,handleValuesChanges]);const validate=(0,index_js_.useCallback)(()=>{const results=validateValues(rules,$values.refValues.current);$errors.setErrors(results.errors);return results},[rules]);const validateField=(0,index_js_.useCallback)(path=>{const results=validateFieldValue(path,rules,$values.refValues.current);results.hasError?$errors.setFieldError(path,results.error):$errors.clearFieldError(path);return results},[rules]);const getInputProps=(path,{type="input",withError=true,withFocus=true,...otherOptions}={})=>{const onChange=getInputOnChange(value=>setFieldValue(path,value,{forceUpdate:false}));const payload={onChange,"data-path":getDataPath(name,path)};if(withError)payload.error=$errors.errorsState[path];if("checkbox"===type)payload["controlled"===mode?"checked":"defaultChecked"]=getPath(path,$values.refValues.current);else payload["controlled"===mode?"value":"defaultValue"]=getPath(path,$values.refValues.current);if(withFocus){payload.onFocus=()=>$status.setFieldTouched(path,true);payload.onBlur=()=>{if(shouldValidateOnChange(path,validateInputOnBlur)){const validationResults=validateFieldValue(path,rules,$values.refValues.current);validationResults.hasError?$errors.setFieldError(path,validationResults.error):$errors.clearFieldError(path)}}}return Object.assign(payload,enhanceGetInputProps?.({inputProps:payload,field:path,options:{type,withError,withFocus,...otherOptions},form}))};const onSubmit=(handleSubmit,handleValidationFailure)=>event=>{if("always"===onSubmitPreventDefault)event?.preventDefault();const results=validate();if(results.hasErrors){if("validation-failed"===onSubmitPreventDefault)event?.preventDefault();handleValidationFailure?.(results.errors,$values.refValues.current,event)}else{const submitResult=handleSubmit?.(transformValues($values.refValues.current),event);if(submitResult instanceof Promise){setSubmitting(true);submitResult.finally(()=>setSubmitting(false))}}};const getTransformedValues=input=>transformValues(input||$values.refValues.current);const onReset=(0,index_js_.useCallback)(event=>{event.preventDefault();reset()},[]);const isValid=(0,index_js_.useCallback)(path=>path?!validateFieldValue(path,rules,$values.refValues.current).hasError:!validateValues(rules,$values.refValues.current).hasErrors,[rules]);const key=path=>`${formKey}-${String(path)}-${fieldKeys[String(path)]||0}`;const getInputNode=(0,index_js_.useCallback)(path=>document.querySelector(`[data-path="${getDataPath(name,path)}"]`),[]);const resetField=(0,index_js_.useCallback)(path=>{$values.resetField(path,["controlled"!==mode?()=>setFieldKeys(keys=>({...keys,[path]:(keys[path]||0)+1})):null])},[$values.resetField,mode,setFieldKeys]);const form={watch:$watch.watch,initialized:$values.initialized.current,values:"uncontrolled"===mode?$values.refValues.current:$values.stateValues,getValues:$values.getValues,getInitialValues:$values.getValuesSnapshot,setInitialValues:$values.setValuesSnapshot,resetField,initialize,setValues,setFieldValue,submitting,setSubmitting,errors:$errors.errorsState,setErrors:$errors.setErrors,setFieldError:$errors.setFieldError,clearFieldError:$errors.clearFieldError,clearErrors:$errors.clearErrors,resetDirty:$status.resetDirty,setTouched:$status.setTouched,setDirty:$status.setDirty,isTouched:$status.isTouched,resetTouched:$status.resetTouched,isDirty:$status.isDirty,getTouched:$status.getTouched,getDirty:$status.getDirty,reorderListItem:$list.reorderListItem,insertListItem:$list.insertListItem,removeListItem:$list.removeListItem,replaceListItem:$list.replaceListItem,reset,validate,validateField,getInputProps,onSubmit,onReset,isValid,getTransformedValues,key,getInputNode};useFormActions(name,form);return form}var jsx_runtime=__webpack_require__(4848);"use client";function createFormContext(){const FormContext=(0,index_js_.createContext)(null);function FormProvider({form,children}){return/* @__PURE__ */(0,jsx_runtime.jsx)(FormContext.Provider,{value:form,children})}function useFormContext(){const ctx=(0,index_js_.useContext)(FormContext);if(!ctx)throw new Error("useFormContext was called outside of FormProvider context");return ctx}return[FormProvider,useFormContext,useForm]}"use client";const Form=(0,index_js_.forwardRef)(({form,onSubmit,onReset,...others},ref)=>/* @__PURE__ */(0,jsx_runtime.jsx)("form",{...others,onSubmit:form.onSubmit("function"==typeof onSubmit?onSubmit:()=>{}),onReset:event=>{onReset?.(event);form.onReset(event)},ref}));Form.displayName="@mantine/use-form/Form";"use client";function isNotEmpty(error){const _error=error||true;return value=>{if("string"==typeof value)return value.trim().length>0?null:_error;if(Array.isArray(value))return value.length>0?null:_error;if(null==value)return _error;if(false===value)return _error;return null}}"use client";function matches(regexp,error){const _error=error||true;return value=>{if("string"!=typeof value)return _error;return regexp.test(value)?null:_error}}"use client";function isEmail(error){return matches(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,error)}"use client";function isLengthValid(payload,value){if("number"==typeof payload)return value.length===payload;const{max,min}=payload;let valid=true;if("number"==typeof max&&value.length>max)valid=false;if("number"==typeof min&&value.length<min)valid=false;return valid}function hasLength(payload,error){const _error=error||true;return value=>{if("string"==typeof value)return isLengthValid(payload,value.trim())?null:_error;if("object"==typeof value&&null!==value&&"length"in value)return isLengthValid(payload,value)?null:_error;return _error}}"use client";function isInRange({min,max},error){const _error=error||true;return value=>{if("number"!=typeof value)return _error;let valid=true;if("number"==typeof min&&value<min)valid=false;if("number"==typeof max&&value>max)valid=false;return valid?null:_error}}"use client";function matchesField(field,error){const _error=error||true;return(value,values)=>{if(!values||!(field in values))return _error;return value===values[field]?null:_error}}"use client";function removeHtmlTags(input){return input.replace(/<\/?[^>]+(>|$)/g,"")}function isNotEmptyHTML(error){const _error=error||true;return value=>{if("string"==typeof value)return removeHtmlTags(value).trim().length>0?null:_error;return _error}}"use client";function isJSONString(error){const _error=error||true;return value=>{if("string"==typeof value)try{JSON.parse(value);return null}catch(e){}return _error}}"use client";function useField({mode="controlled",clearErrorOnChange=true,initialValue,initialError=null,initialTouched=false,onValueChange,validateOnChange=false,validateOnBlur=false,validate,resolveValidationError,type="input"}){const[valueState,setValueState]=(0,index_js_.useState)(initialValue);const valueRef=(0,index_js_.useRef)(valueState);const[key,setKey]=(0,index_js_.useState)(0);const[error,setError]=(0,index_js_.useState)(initialError||null);const touchedRef=(0,index_js_.useRef)(initialTouched||false);const[,setTouchedState]=(0,index_js_.useState)(touchedRef.current);const[isValidating,setIsValidating]=(0,index_js_.useState)(false);const errorResolver=(0,index_js_.useMemo)(()=>resolveValidationError||(err=>err),[resolveValidationError]);const setTouched=(0,index_js_.useCallback)((val,{updateState="controlled"===mode}={})=>{touchedRef.current=val;updateState&&setTouchedState(val)},[]);const setValue=(0,index_js_.useCallback)((value,{updateKey="uncontrolled"===mode,updateState="controlled"===mode}={})=>{if(valueRef.current===value)return;valueRef.current=value;onValueChange?.(value);if(clearErrorOnChange&&null!==error)setError(null);if(updateState)setValueState(value);if(updateKey)setKey(currentKey=>currentKey+1);if(validateOnChange)_validate()},[error,clearErrorOnChange,onValueChange]);const reset=(0,index_js_.useCallback)(()=>{setValue(initialValue);setError(null);setTouched(false)},[initialValue]);const getValue=(0,index_js_.useCallback)(()=>valueRef.current,[]);const isTouched=(0,index_js_.useCallback)(()=>touchedRef.current,[]);const isDirty=(0,index_js_.useCallback)(()=>valueRef.current!==initialValue,[initialValue]);const _validate=(0,index_js_.useCallback)(async()=>{const validationResult=validate?.(valueRef.current);if(validationResult instanceof Promise){setIsValidating(true);try{const result=await validationResult;setIsValidating(false);setError(result)}catch(err){setIsValidating(false);const resolvedError=errorResolver(err);setError(resolvedError);return resolvedError}}else{setError(validationResult);return validationResult}},[]);const getInputProps=({withError=true,withFocus=true}={})=>{const onChange=getInputOnChange(val=>setValue(val,{updateKey:false}));const payload={onChange};if(withError)payload.error=error;if("checkbox"===type)payload["controlled"===mode?"checked":"defaultChecked"]=valueRef.current;else payload["controlled"===mode?"value":"defaultValue"]=valueRef.current;if(withFocus){payload.onFocus=()=>{setTouched(true)};payload.onBlur=()=>{if(shouldValidateOnChange("",!!validateOnBlur))_validate()}}return payload};const resetTouched=(0,index_js_.useCallback)(()=>setTouched(false),[]);return{key,getValue,setValue,reset,getInputProps,isValidating,validate:_validate,error,setError,isTouched,isDirty,resetTouched}}"use client";function zodResolver(schema){return values=>{const parsed=schema.safeParse(values);if(parsed.success)return{};const results={};parsed.error.errors.forEach(error=>{results[error.path.join(".")]=error.message});return results}}"use client";function superstructResolver(schema){function structValidation(values){const formErrors={};const[err]=schema.validate(values);if(!err)return formErrors;err.failures().forEach(fieldFailure=>{const fieldName=fieldFailure.path.join(" ");formErrors[fieldFailure.path.join(".")]=`${fieldName}: ${fieldFailure.message}`});return formErrors}return structValidation}"use client";function yupResolver(schema){const _schema=schema;return values=>{try{_schema.validateSync(values,{abortEarly:false});return{}}catch(_yupError){const yupError=_yupError;const results={};yupError.inner.forEach(error=>{results[error.path.replaceAll("[",".").replaceAll("]","")]=error.message});return results}}}"use client";function joiResolver(schema,options){const _schema=schema;return values=>{const parsed=_schema.validate(values,{abortEarly:false,...options});if(!parsed.error)return{};const results={};parsed.error.details.forEach(error=>{results[error.path.join(".")]=error.message});return results}}}}]);