@haiiro/docuflow 0.0.23 → 0.0.24
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/manifest.json +8 -8
- package/package.json +1 -1
- package/public/app/docflow-app.js +5 -5
- package/src/front-components/docflow-processes.front-component.mjs +19 -19
- package/src/front-components/docflow-processes.front-component.tsx +8 -4
- package/src/front-components/process-steps.front-component.mjs +19 -19
- package/src/logic-functions/bitrix-app.logic-function.mjs +1 -1
- package/src/logic-functions/bitrix-install.logic-function.mjs +9 -1
- package/src/logic-functions/bitrix-install.logic-function.ts +10 -1
- package/src/logic-functions/docflow-app.logic-function.mjs +1 -1
- package/src/logic-functions/process-catalog.logic-function.mjs +7 -1
- package/src/logic-functions/process-catalog.logic-function.ts +3 -1
|
@@ -87,9 +87,9 @@ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}
|
|
|
87
87
|
createFileUpload(filename: $filename, size: $size, fileFolder: FilesField, fieldMetadataUniversalIdentifier: $fieldMetadataUniversalIdentifier) { fileId uploadUrl contentType }
|
|
88
88
|
}`,variables:{filename:t,size:e.byteLength,fieldMetadataUniversalIdentifier:n}});await this.putFileToUploadTargetOrThrow({fileBuffer:e,uploadTarget:r});let{completeFileUpload:i}=await this.executeMutationOrThrow({query:`mutation CompleteFilesFieldFileUpload($fileId: String!) {
|
|
89
89
|
completeFileUpload(fileId: $fileId) { id path size createdAt url }
|
|
90
|
-
}`,variables:{fileId:r.fileId}});return i}async putFileToUploadTargetOrThrow({fileBuffer:e,uploadTarget:t}){let n=await this.getFetchImplementationOrThrow().call(globalThis,t.uploadUrl,{method:`PUT`,headers:{"Content-Type":t.contentType},body:e,credentials:`omit`});if(!n.ok)throw Error(`File upload failed (${n.status} ${n.statusText}): ${await n.text()}`)}async executeMutationOrThrow({query:e,variables:t}){let n=await this.executeGraphqlRequestWithOptionalRefresh({operation:{query:e,variables:t}});if(n.errors)throw new FJ(n.errors,n.data);if(!n.data)throw Error(`Empty GraphQL response`);return n.data}async executeGraphqlRequestWithOptionalRefresh({operation:e,headers:t,requestInit:n}){let r=await this.executeGraphqlRequest({operation:e,headers:t,requestInit:n,token:this.authorizationToken});if(this.shouldRefreshToken(r)){let r=await this.requestRefreshedAccessToken();if(r){let i=await this.executeGraphqlRequest({operation:e,headers:t,requestInit:n,token:r});return this.assertResponseIsSuccessful(i)}}return this.assertResponseIsSuccessful(r)}async executeGraphqlRequest({operation:e,headers:t,requestInit:n,token:r}){let i=this.getFetchImplementationOrThrow(),a=await this.resolveHeaders(),o=new Headers(a);t&&new Headers(t).forEach((e,t)=>o.set(t,e)),e instanceof FormData?o.delete(`Content-Type`):o.set(`Content-Type`,`application/json`),r?o.set(`Authorization`,`Bearer ${r}`):o.delete(`Authorization`);let s=await i.call(globalThis,this.url,{...this.requestOptions,...n,method:n?.method??`POST`,headers:o,body:e instanceof FormData?e:JSON.stringify(e)}),c=await s.text(),l=null;if(c.trim().length>0)try{l=JSON.parse(c)}catch{l=null}return{status:s.status,statusText:s.statusText,payload:l,rawBody:c}}getFetchImplementationOrThrow(){if(!this.fetchImplementation)throw Error("Global `fetch` function is not available, pass a fetch implementation to the Twenty client");return this.fetchImplementation}async resolveHeaders(){return typeof this.headers==`function`?await this.headers()??{}:this.headers??{}}shouldRefreshToken(e){return e.status===401||tY(e.payload)}assertResponseIsSuccessful(e){if(e.status<200||e.status>=300)throw Error(`${e.statusText}: ${e.rawBody}`);if(e.payload===null)throw Error(`Invalid JSON response`);return e.payload}async requestRefreshedAccessToken(){let e=globalThis.frontComponentHostCommunicationApi?.requestAccessTokenRefresh;return typeof e==`function`?(this.refreshAccessTokenPromise||=e().then(e=>typeof e!=`string`||e.length===0?null:(this.setAuthorizationToken(e),e)).catch(e=>(console.error(`Twenty client: token refresh failed`,e),null)).finally(()=>{this.refreshAccessTokenPromise=null}),this.refreshAccessTokenPromise):null}setAuthorizationToken(e){this.authorizationToken=e;let t=QJ();t[YJ]=e}},iY=100,aY=async()=>{let e=new rY,t=new Map,n;do{let{objects:r}=await e.query({objects:{__args:{paging:{first:iY,...n===void 0?{}:{after:n}},filter:{}},pageInfo:{hasNextPage:!0,endCursor:!0},edges:{node:{nameSingular:!0,namePlural:!0,labelSingular:!0,labelIdentifierFieldMetadataId:!0,fieldsList:{id:!0,name:!0}}}}});for(let{node:e}of r.edges)t.set(e.nameSingular,{nameSingular:e.nameSingular,namePlural:e.namePlural,labelSingular:e.labelSingular,labelFieldName:e.fieldsList?.find(t=>t.id===e.labelIdentifierFieldMetadataId)?.name});n=r.pageInfo.hasNextPage===!0?r.pageInfo.endCursor??void 0:void 0}while(n!==void 0);return t},oY=async e=>{let{fields:t}=await new rY().query({fields:{__args:{filter:{id:{eq:e}},paging:{first:1}},edges:{node:{options:!0}}}}),n=t.edges[0]?.node.options;return Array.isArray(n)?n.flatMap(e=>{let{value:t,label:n}=e??{};return typeof t==`string`&&typeof n==`string`?[{value:t,label:n}]:[]}):[]},sY=async()=>{let e=new rY,t=[],n;do{let{objects:r}=await e.query({objects:{__args:{paging:{first:iY,...n===void 0?{}:{after:n}},filter:{isActive:{is:!0},isSystem:{is:!1}}},pageInfo:{hasNextPage:!0,endCursor:!0},edges:{node:{id:!0,nameSingular:!0,namePlural:!0,labelSingular:!0,icon:!0,fieldsList:{id:!0,name:!0,label:!0,type:!0,icon:!0,isActive:!0,isSystem:!0,relation:{type:!0}}}}}});for(let{node:e}of r.edges)t.push({id:e.id,nameSingular:e.nameSingular,namePlural:e.namePlural,labelSingular:e.labelSingular,icon:e.icon,fields:(e.fieldsList??[]).map(e=>({id:e.id,name:e.name,label:e.label,type:String(e.type),icon:e.icon,isActive:e.isActive,isSystem:e.isSystem,relationType:e.relation?.type??null}))});n=r.pageInfo.hasNextPage===!0?r.pageInfo.endCursor??void 0:void 0}while(n!==void 0);return t},cY=[{value:`TEXT`,label:`Текст`,type:`TEXT`},{value:`NUMBER`,label:`Число`,type:`NUMBER`},{value:`DATE`,label:`Дата`,type:`DATE`},{value:`MEMBER`,label:`Сотрудник`,type:`RECORD`,objectName:`workspaceMember`},{value:`COMPANY`,label:`Компания`,type:`RECORD`,objectName:`company`},{value:`PERSON`,label:`Контакт`,type:`RECORD`,objectName:`person`},{value:`OPPORTUNITY`,label:`Сделка`,type:`RECORD`,objectName:`opportunity`}],lY=(e,t)=>Object.fromEntries(Object.entries(e??{}).filter(([e])=>e!==t)),uY=e=>cY.find(t=>t.type===e.type&&(!(`objectName`in t)||t.objectName===e.settings?.objectName))?.value,dY=(e,t)=>{let n=cY.find(e=>e.value===t);if(n===void 0)return e;let r=lY(e.settings,`objectName`);return{...e,type:n.type,value:void 0,settings:`objectName`in n?{...r,objectName:n.objectName}:r}},fY={а:`a`,б:`b`,в:`v`,г:`g`,д:`d`,е:`e`,ё:`e`,ж:`zh`,з:`z`,и:`i`,й:`y`,к:`k`,л:`l`,м:`m`,н:`n`,о:`o`,п:`p`,р:`r`,с:`s`,т:`t`,у:`u`,ф:`f`,х:`h`,ц:`ts`,ч:`ch`,ш:`sh`,щ:`sch`,ъ:``,ы:`y`,ь:``,э:`e`,ю:`yu`,я:`ya`},pY=e=>{let t=[...e.toLowerCase()].map(e=>fY[e]??e).join(``).split(/[^a-z0-9]+/).filter(e=>e.length>0).map((e,t)=>t===0?e:e[0].toUpperCase()+e.slice(1)).join(``);return/^[a-z]/.test(t)?t:`field${t}`},mY=(e,t)=>{let n=pY(e),r=n,i=2;for(;t.includes(r);)r=`${n}${i}`,i++;return r},hY=(e,t)=>({id:t(),name:mY(`field ${e.length+1}`,e.map(({name:e})=>e)),label:``,type:`TEXT`,settings:{}}),gY=(e,t)=>{let n=lY(e.settings,UG);return{...e,settings:t?{...n,[UG]:!0}:n}},_Y={NUMBER:`number`,DATE:`string`,TEXT:`string`},vY=e=>Object.fromEntries(XG(e).map(e=>[e.name,e.type===`RECORD`?{isLeaf:!1,type:`object`,label:e.label,value:{id:{isLeaf:!0,type:`string`,label:`Id`,value:null}}}:{isLeaf:!0,type:_Y[e.type]??`unknown`,label:e.label,value:null}])),yY=e=>Object.fromEntries(XG(e).map(e=>[e.name,e.type===`RECORD`?{id:``}:e.type===`NUMBER`?0:``])),bY={name:`smbAssignee`,label:`Исполнитель`,type:`RECORD`},xY={name:`smbDueAt`,label:`Срок`,type:`DATE`},SY=e=>{let t=e.find(e=>JG(e)===`ASSIGNEE`)?.value,n=e.find(e=>JG(e)===`DUE_AT`)?.settings?.[GG];return{assignee:typeof t==`string`&&t.length>0?t:null,dueInDays:typeof n==`number`&&n>0?n:null,requiredFieldIds:e.filter(e=>JG(e)===void 0&&e.settings?.smbIsRequired===!0).map(({id:e})=>e)}},CY=(e,t,n,r,i)=>({...n,...t,id:t?.id??i(),value:r.value,settings:{...t?.settings,...r.settings,[WG]:e}}),wY=({fields:e,settings:t,createId:n})=>{let r=e.filter(e=>JG(e)===void 0).map(e=>{let n={...e.settings};delete n[UG];let r=t.requiredFieldIds.includes(e.id);return{...e,settings:r?{...n,[UG]:!0}:n}}),i=[];return t.assignee!==null&&i.push(CY(`ASSIGNEE`,e.find(e=>JG(e)===`ASSIGNEE`),bY,{value:t.assignee,settings:{}},n)),t.dueInDays!==null&&i.push(CY(`DUE_AT`,e.find(e=>JG(e)===`DUE_AT`),xY,{value:void 0,settings:{[GG]:t.dueInDays}},n)),[...i,...r]},TY={ACTOR:[[`source`,`SELECT`],[`workspaceMemberId`,`UUID`],[`name`,`TEXT`],[`context`,`RAW_JSON`]],ADDRESS:[[`addressStreet1`,`TEXT`],[`addressStreet2`,`TEXT`],[`addressCity`,`TEXT`],[`addressPostcode`,`TEXT`],[`addressState`,`TEXT`],[`addressCountry`,`TEXT`],[`addressLat`,`NUMERIC`],[`addressLng`,`NUMERIC`]],CURRENCY:[[`amountMicros`,`NUMERIC`],[`currencyCode`,`TEXT`]],EMAILS:[[`primaryEmail`,`TEXT`],[`additionalEmails`,`RAW_JSON`]],FULL_NAME:[[`firstName`,`TEXT`],[`lastName`,`TEXT`]],LINKS:[[`primaryLinkLabel`,`TEXT`],[`primaryLinkUrl`,`TEXT`],[`secondaryLinks`,`RAW_JSON`]],PHONES:[[`primaryPhoneNumber`,`TEXT`],[`primaryPhoneCountryCode`,`TEXT`],[`primaryPhoneCallingCode`,`TEXT`],[`additionalPhones`,`RAW_JSON`]],RICH_TEXT:[[`blocknote`,`TEXT`],[`markdown`,`TEXT`]]},EY=[`searchVector`,`position`],DY=e=>e.replace(/([A-Z])/g,` $1`).replace(/^./,e=>e.toUpperCase()),OY=e=>{let t=e.icon??void 0;if(e.type===`RELATION`)return[[`${e.name}Id`,{isLeaf:!0,icon:t,type:`UUID`,label:DY(`${e.name}Id`),value:null,fieldMetadataId:e.id,isCompositeSubField:!1}]];let n=TY[e.type];return n===void 0?[[e.name,{isLeaf:!0,icon:t,type:e.type,label:e.label,value:null,fieldMetadataId:e.id,isCompositeSubField:!1}]]:[[e.name,{isLeaf:!1,icon:t,type:e.type,label:e.label,fieldMetadataId:e.id,value:Object.fromEntries(n.map(([t,n])=>[t,{isLeaf:!0,type:n,label:DY(t),value:null,fieldMetadataId:e.id,isCompositeSubField:!0}]))}]]},kY=e=>e.isActive!==!1&&!(e.isSystem===!0&&EY.includes(e.name))&&e.type!==`MORPH_RELATION`&&(e.type!==`RELATION`||e.relationType===`MANY_TO_ONE`),AY=e=>({isLeaf:!1,icon:e.icon??void 0,label:e.labelSingular,value:{object:{icon:e.icon??void 0,label:e.labelSingular,objectMetadataId:e.id,fieldIdName:`id`},fields:Object.fromEntries(e.fields.filter(kY).flatMap(OY)),_outputSchemaType:`RECORD`}}),jY={name:`Запуск вручную`,type:`MANUAL`,position:{x:0,y:0},settings:{outputSchema:{},availability:{type:`GLOBAL`},icon:`IconPlayerPlay`,isPinned:!1},nextStepIds:[]},MY=(e,t,n)=>({name:RG,type:`WEBHOOK`,position:e.position??{x:0,y:0},nextStepIds:e.nextStepIds??[],settings:{httpMethod:`POST`,authentication:`API_KEY`,expectedBody:{...yY(t),...n===void 0?{}:{[zG]:{id:``}}},outputSchema:{...vY(t),...n===void 0?{}:{[zG]:AY(n)}}}}),NY=e=>({...jY,...e.type===`MANUAL`?{name:e.name??jY.name,settings:e.settings}:{},position:e.position??jY.position,nextStepIds:e.nextStepIds??[]}),PY=async(e,t)=>{let n=await e.listVersions(t),r=n.find(({status:e})=>e===`DRAFT`)?.id;if(r!==void 0)return e.getVersion(r);if(n.length===0)return;await e.createDraft(t,n[0].id);let i=(await e.listVersions(t)).find(({status:e})=>e===`DRAFT`)?.id;return i===void 0?void 0:e.getVersion(i)},FY=150,IY=(e,t)=>{let n=JSON.stringify(e.settings??{}),r=n.split(`{{${t}.`).join(`{{${KG}.`);return r===n?void 0:{...e,settings:JSON.parse(r)}},LY=async(e,t)=>{let n=sK(t.steps);if(n===void 0)return;await e.deleteStep(t.id,n.id);let r=n.position?.y;for(let i of t.steps??[]){if(i.id===n.id)continue;let a=IY(i,n.id),o=typeof r==`number`&&typeof i.position?.y==`number`&&i.position.y>r;if(a===void 0&&!o)continue;let s=a??i;await e.updateStep(t.id,o&&i.position?{...s,position:{...i.position,y:i.position.y-FY}}:s)}},RY=async(e,{workflowId:t,fields:n,launchObject:r})=>{let i=await PY(e,t);if(i===void 0)return{status:`NO_VERSION`};let a=i.trigger??jY;if(a.type!==`MANUAL`&&!aK(a))return{status:`NOT_MANUAL`};await LY(e,i);let o=(await e.getVersion(i.id))?.trigger??a;return await e.updateTrigger(i.id,n.length>0||r!==void 0?MY(o,n,r):NY(o)),{status:`SAVED`,workflowVersionId:i.id}},zY=async(e,{versionId:t,stepId:n,settings:r,createId:i})=>{let a=await e.getVersion(t),o=a?.steps?.find(({id:e})=>e===n);if(a===void 0||o===void 0||!pK(o))return`NOT_FOUND`;if(a.status!==`DRAFT`)return`NOT_DRAFT`;let s=wY({fields:tK(o.settings.input),settings:r,createId:i});return await e.updateStep(a.id,{...o,settings:{...o.settings,input:s}}),`SAVED`},BY=e=>e?`app`:AJ()===void 0?`standalone`:`session`,VY=()=>wG(S,{section:`processes`}),HY=class extends Error{constructor(){super(`В этой версии Twenty процессы меняются на полной странице документооборота: ${VY()}`),this.name=`StandalonePageNeededError`}},UY=10,WY=400,GY=async e=>{for(let t=0;t<UY;t++){let{records:t}=await TG(`workflowVersions`,{filter:oG(`workflowId`,e),limit:1});if(t.length>0)return;await new Promise(e=>setTimeout(e,WY))}},KY=async(e,t)=>{if(e===`standalone`)throw new HY;if(e===`app`){let e=await DG(`workflows`,{name:t,smbSection:LG});if(e===void 0)throw Error(`процесс создан, но сервер его не вернул`);await GY(e.id),await FG(`/docflow/processes/launch-fields`,{workflowId:e.id,fields:[]}),await Dl(xl.RecordShowPage,{objectNameSingular:`workflow`,objectRecordId:e.id});return}let n=await PJ.create(t);await FG(`/docflow/processes/catalog`,{action:`add`,workflowIds:[n]}),await RY(NJ,{workflowId:n,fields:[]}),await Dl(xl.WorkflowCoreShowPage,{coreWorkflowId:n})},qY=async(e,t,n)=>{if(e===`app`&&t.workspaceWorkflowId!==null)await OG(`workflows`,t.workspaceWorkflowId,{name:n});else if(e===`session`)await PJ.rename(t.workflowId,n);else throw new HY},JY=async(e,t)=>{let n=t.map(({workspaceWorkflowId:e})=>e);if(e===`app`&&n.every(e=>e!==null))await NG(`workflows`,n);else if(e===`session`)await PJ.remove(t.map(({workflowId:e})=>e));else throw new HY},YY=async(e,t,n)=>{if(e===`app`){await FG(`/docflow/processes/publish`,{workflowId:t.workflowId,publish:n});return}if(e!==`session`)throw new HY;if(!n){if(t.activeVersionId===void 0)throw Error(`Процесс не опубликован`);await PJ.deactivate(t.activeVersionId);return}let r=t.draftVersionId??(t.activeVersionId===void 0?t.deactivatedVersionId:void 0);if(r===void 0)throw Error(`Нечего публиковать: изменений после публикации нет`);await PJ.activate(r)},XY=async(e,{workflowId:t,fields:n,launchObject:r})=>{if(e===`app`)return FG(`/docflow/processes/launch-fields`,{workflowId:t,fields:n,launchObject:r});if(e!==`session`)throw new HY;let i=r===null?void 0:(await sY()).find(({nameSingular:e})=>e===r);if(r!==null&&i===void 0)throw Error(`Объект «${r}» не найден`);if((await RY(NJ,{workflowId:t,fields:n,launchObject:i})).status===`NOT_MANUAL`)throw Error(`Запуск процесса не изменён: он запускается не вручную`);return FG(`/docflow/processes/launch-fields`,{workflowId:t,fields:n,launchObject:r,syncTrigger:!1})},ZY=async(e,{versionId:t,stepId:n,settings:r})=>{if(e===`app`){await FG(`/docflow/processes/step-settings`,{workflowVersionId:t,stepId:n,settings:r});return}if(e!==`session`)throw new HY;let i=await zY(NJ,{versionId:t,stepId:n,settings:r,createId:()=>crypto.randomUUID()});if(i===`NOT_FOUND`)throw Error(`Шаг «Человеческий ввод» не найден`);if(i===`NOT_DRAFT`)throw Error(`Менять можно только черновик процесса`)},QY=async(e,t)=>{if(e===`session`)return t.draftVersionId===void 0?void 0:NJ.getVersion(t.draftVersionId);if(t.workspaceWorkflowId===null)return;let{records:n}=await TG(`workflowVersions`,{filter:mG(oG(`workflowId`,t.workspaceWorkflowId),oG(`status`,`DRAFT`)),limit:1});return n[0]},$Y=e=>{if(typeof e==`string`&&e.trim().length>0)return e.trim();if(typeof e==`object`&&e){let{firstName:t,lastName:n}=e,r=[t,n].filter(e=>typeof e==`string`&&e.length>0).join(` `);return r.length>0?r:void 0}};fe();var eX=100,tX=``,nX=e=>typeof e==`object`&&e&&typeof e.id==`string`?e.id:tX,rX=({field:e,value:t,onChange:n,disabled:r})=>{let i=e.settings?.objectName,{data:a,error:o}=zK(async()=>{if(typeof i!=`string`)return[];let e=(await aY()).get(i);if(e===void 0)return[];let{records:t}=await TG(e.namePlural,{limit:eX});return t.map(t=>({value:String(t.id),label:$Y(e.labelFieldName===void 0?void 0:t[e.labelFieldName])??String(t.id)}))},[i]);return(0,Q.jsx)(Eq,{label:e.label,value:nX(t),disabled:r||o!==void 0,options:[{value:tX,label:`Не выбрано`},...a??[]],onChange:e=>n(e===tX?null:{id:e})})},iX=({field:e,value:t,onChange:n,disabled:r})=>{let i=e.settings?.selectedFieldId,{data:a}=zK(async()=>typeof i==`string`?oY(i):[],[i]),o=e.type===`MULTI_SELECT`,s=M();if(o){let i=Array.isArray(t)?t.filter(e=>typeof e==`string`):[];return(0,Q.jsx)(Cq,{label:e.label,children:(0,Q.jsx)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:s.spacing[2]},children:(a??[]).map(e=>(0,Q.jsxs)(`label`,{style:{alignItems:`center`,display:`flex`,gap:s.spacing[1],color:s.font.color.primary,fontWeight:`normal`},children:[(0,Q.jsx)(`input`,{type:`checkbox`,disabled:r,checked:i.includes(e.value),onChange:t=>n(t.target.checked?[...i,e.value]:i.filter(t=>t!==e.value))}),e.label]},e.value))})})}return(0,Q.jsx)(Eq,{label:e.label,value:typeof t==`string`?t:tX,disabled:r,options:[{value:tX,label:`Не выбрано`},...a??[]],onChange:e=>n(e===tX?null:e)})},aX=e=>{let{field:t,value:n,onChange:r,disabled:i}=e;switch(t.type){case`RECORD`:return(0,Q.jsx)(rX,{...e});case`SELECT`:case`MULTI_SELECT`:return(0,Q.jsx)(iX,{...e});case`NUMBER`:return(0,Q.jsx)(wq,{label:t.label,type:`number`,disabled:i,value:typeof n==`number`?String(n):typeof n==`string`?n:``,placeholder:t.placeholder,onChange:e=>r(e.trim()===``?null:Number(e))});case`DATE`:return(0,Q.jsx)(wq,{label:t.label,type:`date`,disabled:i,value:typeof n==`string`?n.slice(0,10):``,onChange:e=>r(e===``?null:e)});default:return(0,Q.jsx)(wq,{label:t.label,disabled:i,value:typeof n==`string`?n:``,placeholder:t.placeholder,onChange:e=>r(e)})}},oX=({fields:e,values:t,onChange:n,disabled:r=!1})=>{let i=M();return(0,Q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:i.spacing[3]},children:XG(e).map(e=>(0,Q.jsx)(aX,{field:{...e,label:YG(e)?`${e.label} *`:e.label},value:e.name in t?t[e.name]:e.value,disabled:r,onChange:r=>n({...t,[e.name]:r})},e.id))})},sX=e=>{e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},cX=()=>{try{return crypto.getRandomValues(new Uint8Array(16))}catch{return Uint8Array.from({length:16},()=>Math.floor(Math.random()*256))}},lX=()=>{try{let e=crypto.randomUUID();if(typeof e==`string`&&e.length>0)return e}catch{}return sX(cX())};fe();var uX=({fields:e,onChange:t,variablePrefix:n,disabled:r=!1})=>{let i=M(),[a]=(0,L.useState)(()=>new Set(e.map(({id:e})=>e))),[o,s]=(0,L.useState)(!1),c=(n,r)=>t(e.map(e=>e.id===n?r(e):e)),l=(t,n)=>a.has(t.id)||n.trim().length===0?{...t,label:n}:{...t,label:n,name:mY(n,e.filter(({id:e})=>e!==t.id).map(({name:e})=>e))},u=(n,r)=>{let i=n+r;if(i<0||i>=e.length)return;let a=[...e];[a[n],a[i]]=[a[i],a[n]],t(a)};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:i.spacing[2]},children:[e.length===0&&(0,Q.jsx)(Oq,{tone:`hint`,children:`Полей нет.`}),e.map((a,o)=>{let s=uY(a);return(0,Q.jsxs)(`div`,{style:{background:i.background.transparent.lighter,borderRadius:i.border.radius.md,display:`flex`,flexDirection:`column`,gap:i.spacing[2],padding:i.spacing[2]},children:[(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[(0,Q.jsx)(`div`,{style:{flex:`2 1 180px`},children:(0,Q.jsx)(wq,{label:`Название`,placeholder:`Например, Сумма договора`,value:a.label,disabled:r,onChange:e=>c(a.id,t=>l(t,e))})}),(0,Q.jsx)(`div`,{style:{flex:`1 1 120px`},children:s===void 0?(0,Q.jsx)(wq,{label:`Тип`,value:a.type,disabled:!0,onChange:()=>void 0}):(0,Q.jsx)(Eq,{label:`Тип`,value:s,disabled:r,options:cY.map(({value:e,label:t})=>({value:e,label:t})),onChange:e=>c(a.id,t=>dY(t,e))})})]}),(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[(0,Q.jsx)(Dq,{label:`Обязательное`,checked:YG(a),disabled:r,onChange:e=>c(a.id,t=>gY(t,e))}),n!==void 0&&(0,Q.jsx)(Aq,{children:`{{${n}.${a.name}}}`}),(0,Q.jsxs)(`div`,{style:{display:`flex`,gap:i.spacing[1],marginLeft:`auto`},children:[(0,Q.jsx)($,{variant:`ghost`,size:`sm`,title:`Выше`,"aria-label":`Поднять поле ${a.label}`,disabled:r||o===0,onClick:()=>u(o,-1),children:`↑`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,title:`Ниже`,"aria-label":`Опустить поле ${a.label}`,disabled:r||o===e.length-1,onClick:()=>u(o,1),children:`↓`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,disabled:r,onClick:()=>t(e.filter(({id:e})=>e!==a.id)),children:`Удалить`})]})]})]},a.id)}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[(0,Q.jsx)($,{variant:`outline`,size:`sm`,disabled:r,onClick:()=>t([...e,hY(e,lX)]),children:`Добавить поле`}),e.length>0&&(0,Q.jsx)($,{variant:`ghost`,size:`sm`,onClick:()=>s(e=>!e),children:o?`Скрыть предпросмотр`:`Как увидит исполнитель`})]}),o&&e.length>0&&(0,Q.jsx)(`div`,{style:{borderRadius:i.border.radius.md,boxShadow:`inset 0 0 0 1px ${i.border.color.light}`,padding:i.spacing[3]},children:(0,Q.jsx)(oX,{fields:e,values:{},disabled:!0,onChange:()=>void 0})})]})};fe();var dX=``,fX=``,pX=[`workflow`,`workflowVersion`,`workflowRun`,`workflowAutomatedTrigger`],mX=async()=>(await sY()).filter(({nameSingular:e})=>!pX.includes(e)).map(({nameSingular:e,labelSingular:t})=>({value:e,label:t})).sort((e,t)=>e.label.localeCompare(t.label,`ru`)),hX={display:`flex`,flexDirection:`column`},gX=({editing:e,workflowId:t,initialFields:n,initialLaunchObject:r,onSaved:i})=>{let a=M(),[o,s]=(0,L.useState)(n),[c,l]=(0,L.useState)(r??fX),{data:u,error:d}=zK(mX,[]),[f,p]=(0,L.useState)(!1),[m,h]=(0,L.useState)(),g=async()=>{let n=eK(o);if(n!==void 0)h(n);else{p(!0),h(void 0),xG(`process: save launch fields`,{workflowId:t,fields:o,launchObject:c});try{xG(`process: launch fields saved`,await XY(e,{workflowId:t,fields:o,launchObject:c===fX?null:c})),await El({message:o.length>0||c!==fX?`Параметры сохранены: процесс начинается с «${RG}», опубликуйте его`:`Параметры убраны`,variant:`success`}),i()}catch(e){SG(`process: save launch fields failed`,e,{workflowId:t}),h(IG(e,`Не удалось сохранить параметры`))}finally{p(!1)}}};return(0,Q.jsxs)(`section`,{style:{...hX,gap:a.spacing[2]},"aria-label":`Параметры запуска`,children:[(0,Q.jsx)(kq,{children:`Параметры запуска`}),(0,Q.jsxs)(Oq,{tone:`hint`,children:[`Что человек заполняет перед запуском и на какой записи запускает процесс. Первым блоком процесса становится «`,RG,`»: в следующих шагах значения и запись выбираются как его переменные, например сотрудник — в поле «Исполнитель». Запускают процесс командой «Запустить процесс» в меню (Cmd+K) или на выбранных записях. Без параметров и записи процесс начинается с обычного «Запуск вручную».`]}),(0,Q.jsx)(Eq,{label:`Где запускать`,value:c,disabled:f,options:[{value:fX,label:`Откуда угодно, без записи`},...u??(c===fX?[]:[{value:c,label:c}])].map(e=>e.value===fX?e:{...e,label:`На записи: ${e.label}`}),onChange:l}),d!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:IG(d,`Не удалось прочитать объекты`)}),c!==fX&&(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:a.spacing[2]},children:[(0,Q.jsx)(Oq,{tone:`hint`,children:`Запись, на которой запустили процесс:`}),(0,Q.jsx)(Aq,{children:`{{trigger.record}}`})]}),(0,Q.jsx)(uX,{fields:o,onChange:s,variablePrefix:KG,disabled:f}),m!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:m}),(0,Q.jsx)(`div`,{children:(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`sm`,loading:f,onClick:()=>void g(),children:`Сохранить параметры`})})]})},_X=({editing:e,workflowVersionId:t,step:n})=>{let r=M(),{members:i}=OJ(),a=tK(mK(n)),[o,s]=(0,L.useState)(SY(a)),[c,l]=(0,L.useState)(!1),u=async()=>{l(!0);try{await ZY(e,{versionId:t,stepId:n.id,settings:o}),await El({message:`Настройки шага сохранены`,variant:`success`})}catch(e){await El({message:IG(e,`Не удалось сохранить настройки шага`),variant:`error`})}finally{l(!1)}},d=(e,t)=>s(n=>({...n,requiredFieldIds:t?[...n.requiredFieldIds,e]:n.requiredFieldIds.filter(t=>t!==e)}));return(0,Q.jsxs)(`div`,{style:{background:r.background.transparent.lighter,borderRadius:r.border.radius.md,display:`flex`,flexDirection:`column`,gap:r.spacing[2],padding:r.spacing[3]},children:[(0,Q.jsx)(`strong`,{children:n.name}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:r.spacing[2]},children:[(0,Q.jsx)(`div`,{style:{flex:`2 1 200px`},children:(0,Q.jsx)(Eq,{label:`Кто выполняет задание`,value:o.assignee??dX,options:[{value:dX,label:`Запустивший процесс`},...i.map(e=>({value:e.id,label:xK(e)||e.id}))],onChange:e=>s(t=>({...t,assignee:e===dX?null:e}))})}),(0,Q.jsx)(`div`,{style:{flex:`1 1 120px`},children:(0,Q.jsx)(wq,{label:`Срок в днях`,type:`number`,value:o.dueInDays===null?``:String(o.dueInDays),onChange:e=>s(t=>({...t,dueInDays:e===``?null:Number(e)}))})})]}),XG(a).map(e=>(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:r.spacing[2]},children:[(0,Q.jsx)(Dq,{label:`${e.label} обязательное`,checked:o.requiredFieldIds.includes(e.id),onChange:t=>d(e.id,t)}),(0,Q.jsx)(Aq,{children:`{{${n.id}.${e.name}}}`})]},e.id)),(0,Q.jsx)(`div`,{children:(0,Q.jsx)($,{variant:`outline`,size:`sm`,loading:c,onClick:()=>void u(),children:`Сохранить шаг`})})]})},vX=()=>{let e=M(),t=VY();return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:e.spacing[2]},children:[(0,Q.jsx)(Oq,{tone:`hint`,children:`В этой версии Twenty процессы создаются и меняются на полной странице документооборота (она открыта со входом в CRM) или в редакторе Twenty. Здесь их можно запускать.`}),(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:e.spacing[2]},children:[(0,Q.jsx)(Aq,{children:t}),(0,Q.jsx)($,{size:`sm`,onClick:()=>void Tl(t).then(()=>El({message:`Ссылка скопирована`,variant:`success`})),children:`Скопировать ссылку`})]})]})},yX=({workflowId:e,onLaunchSaved:t})=>{let n=M(),[r,i]=(0,L.useState)(0),{data:a,error:o,loading:s,reload:c}=zK(async()=>{let{processes:t,canAppEdit:n}=await FG(`/docflow/processes/catalog`,{action:`list`}),r=t.find(t=>t.workflowId===e||t.workspaceWorkflowId===e),i=BY(n);return r===void 0||i===`standalone`?{process:r,editing:i,draft:void 0}:{process:r,editing:i,draft:await QY(i,{workflowId:r.workflowId,workspaceWorkflowId:r.workspaceWorkflowId,draftVersionId:r.draft?.id})}},[e]),l=a?.draft,u=l?.steps?.filter(pK)??[];if((0,L.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&c()};return window.addEventListener(`focus`,e),document.addEventListener(`visibilitychange`,e),()=>{window.removeEventListener(`focus`,e),document.removeEventListener(`visibilitychange`,e)}},[c]),s&&a===void 0)return(0,Q.jsx)(iJ,{rows:4});if(o!==void 0)return(0,Q.jsx)(Oq,{tone:`danger`,children:IG(o,`Не удалось прочитать процесс`)});if(a?.process===void 0)return(0,Q.jsx)(Oq,{tone:`hint`,children:`Процесс не относится к документообороту: добавьте его на странице «Процессы».`});if(a.editing===`standalone`)return(0,Q.jsx)(vX,{});let{process:d,editing:f}=a;return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:n.spacing[6]},children:[(0,Q.jsx)(gX,{editing:f,workflowId:d.workflowId,initialFields:d.launchFields,initialLaunchObject:d.savedLaunchObject,onSaved:()=>{t?.(d,f),c().then(()=>i(e=>e+1))}},`${d.workflowId}:${r}`),l!==void 0&&u.length>0&&(0,Q.jsxs)(`section`,{style:{...hX,gap:n.spacing[2]},"aria-label":`Задания шагов`,children:[(0,Q.jsx)(kq,{children:`Задания шагов «Человеческий ввод»`}),(0,Q.jsx)(Oq,{tone:`hint`,children:`Каждый такой шаг становится заданием. Поля шага задаются в редакторе процесса; заполненные значения следующие шаги читают переменными, показанными рядом с полем.`}),u.map(e=>(0,Q.jsx)(_X,{editing:f,workflowVersionId:l.id,step:e},`${l.id}:${e.id}`))]}),l===void 0&&(0,Q.jsx)(Oq,{tone:`hint`,children:`Задания шагов настраиваются в черновике: он появится, когда процесс изменят в редакторе.`})]})};fe();var bX={done:`пройден`,current:`сейчас`,upcoming:`впереди`,failed:`ошибка`,skipped:`пропущен`},xX=10,SX=e=>{let t=e.findIndex(({state:e})=>e===`current`);return t>=0?t:e.reduce((e,{state:t},n)=>t===`done`?n:e,-1)},CX=()=>{let e=M();return{dot:t=>t===`current`?e.color.blue:t===`failed`?e.color.red:t===`done`?e.font.color.tertiary:e.border.color.strong,isFilled:e=>e===`done`||e===`current`||e===`failed`,reachedLine:e.font.color.light,aheadLine:e.border.color.medium}},wX=({state:e,isFocus:t=!1})=>{let n=M(),r=CX(),i=r.dot(e);return(0,Q.jsx)(`span`,{"aria-hidden":!0,style:{background:r.isFilled(e)?i:n.background.primary,border:`2px solid ${i}`,borderRadius:`50%`,...HK,boxShadow:t||e===`current`?`0 0 0 3px ${n.background.transparent.blue}`:void 0,boxSizing:`border-box`,display:`block`,flexShrink:0,height:`${xX}px`,width:`${xX}px`}})},TX=({items:e})=>{let t=M(),n=CX(),r=SX(e);return(0,Q.jsx)(`ol`,{"aria-label":`Ход процесса`,style:{display:`flex`,flexDirection:`column`,listStyle:`none`,margin:0,padding:0},children:e.map((i,a)=>{let o=a===e.length-1,s=a<r,c=i.state===`upcoming`||i.state===`skipped`;return(0,Q.jsxs)(`li`,{"aria-current":i.state===`current`?`step`:void 0,style:{display:`grid`,gap:t.spacing[3],gridTemplateColumns:`${xX}px minmax(0, 1fr)`},children:[(0,Q.jsxs)(`div`,{"aria-hidden":!0,style:{alignItems:`center`,display:`flex`,flexDirection:`column`,paddingTop:`5px`},children:[(0,Q.jsx)(wX,{state:i.state}),!o&&(0,Q.jsx)(`span`,{style:{background:s?n.reachedLine:`transparent`,borderLeft:s?`none`:`2px dashed ${n.aheadLine}`,flex:1,marginTop:`4px`,minHeight:t.spacing[4],width:`2px`}})]}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:t.spacing[1],minWidth:0,paddingBottom:o?0:t.spacing[4]},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`baseline`,display:`flex`,gap:t.spacing[2],justifyContent:`space-between`},children:[(0,Q.jsx)(`span`,{style:{color:c?t.font.color.tertiary:t.font.color.primary,fontWeight:i.state===`current`?t.font.weight.semiBold:t.font.weight.medium,textDecoration:i.state===`skipped`?`line-through`:void 0},children:i.title}),(0,Q.jsx)(`span`,{style:{color:i.state===`current`?t.color.blue:i.state===`failed`?t.font.color.danger:t.font.color.light,flexShrink:0,fontSize:t.font.size.xs},children:bX[i.state]})]}),i.meta!==void 0&&(0,Q.jsx)(`div`,{style:{color:t.font.color.tertiary,fontSize:t.font.size.sm},children:i.meta}),i.content!==void 0&&(0,Q.jsx)(`div`,{style:{marginTop:t.spacing[1]},children:i.content})]})]},i.key)})})},EX=({item:e,index:t,total:n,isLineReached:r})=>{let i=M(),a=CX(),[o,s]=(0,L.useState)(!1),c=t===n-1,l=t===0?{top:0}:c?{bottom:0}:{top:`50%`,transform:`translateY(-50%)`};return(0,Q.jsxs)(`li`,{"aria-current":e.state===`current`?`step`:void 0,style:{alignItems:`center`,display:`flex`,flex:c?`0 0 auto`:1,flexDirection:`column`,minHeight:0,position:`relative`},children:[(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Шаг ${t+1} из ${n}: ${typeof e.title==`string`?e.title:``} (${bX[e.state]})`,onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),onFocus:()=>s(!0),onBlur:()=>s(!1),style:{alignItems:`center`,background:`transparent`,border:`none`,color:`inherit`,cursor:`default`,display:`flex`,flexShrink:0,justifyContent:`center`,outline:`none`,padding:i.spacing[1],WebkitTapHighlightColor:`transparent`},children:(0,Q.jsx)(wX,{state:e.state,isFocus:e.isFocus})}),!c&&(0,Q.jsx)(`span`,{"aria-hidden":!0,style:{background:r?a.reachedLine:`transparent`,borderLeft:r?`none`:`2px dashed ${a.aheadLine}`,boxSizing:`border-box`,flex:1,minHeight:i.spacing[2],width:`2px`}}),o&&(0,Q.jsxs)(`div`,{role:`tooltip`,style:{...l,background:i.background.primary,border:`1px solid ${i.border.color.medium}`,borderRadius:i.border.radius.md,boxShadow:i.boxShadow.strong,boxSizing:`border-box`,display:`flex`,flexDirection:`column`,gap:i.spacing[1],padding:i.spacing[3],pointerEvents:`none`,left:`calc(100% + ${i.spacing[2]})`,position:`absolute`,width:`240px`,zIndex:20},children:[(0,Q.jsxs)(`span`,{style:{color:i.font.color.light,fontSize:i.font.size.xs},children:[`Шаг `,t+1,` из `,n,` · `,bX[e.state]]}),(0,Q.jsx)(`strong`,{style:{fontSize:i.font.size.md,fontWeight:i.font.weight.medium},children:e.title}),e.meta!==void 0&&e.meta!==``&&(0,Q.jsx)(`span`,{style:{color:i.font.color.tertiary,fontSize:i.font.size.sm},children:e.meta}),e.details!==void 0&&(0,Q.jsx)(`div`,{style:{marginTop:i.spacing[1]},children:e.details})]})]})},DX=({items:e})=>{let t=SX(e);return(0,Q.jsx)(`ol`,{"aria-label":`Ход процесса`,style:{alignItems:`center`,alignSelf:`stretch`,display:`flex`,flexDirection:`column`,flexShrink:0,height:`100%`,listStyle:`none`,margin:0,minHeight:0,padding:0,width:`26px`},children:e.map((n,r)=>(0,Q.jsx)(EX,{item:n,index:r,total:e.length,isLineReached:r<t},n.key))})},OX={SUCCESS:`done`,FAILED:`failed`,STOPPED:`failed`,PENDING:`current`,RUNNING:`current`,SKIPPED:`skipped`},kX=e=>{let t=e?.flow?.steps??[],n=new Map(t.map(e=>[e.id,e])),r=[],i=new Set,a=[...e?.flow?.trigger?.nextStepIds??[]];for(;a.length>0;){let e=a.shift(),t=n.get(e);t===void 0||i.has(e)||(i.add(e),r.push(t),a.push(...t.nextStepIds??[]))}return[...r,...t.filter(e=>!i.has(e.id))]},AX=(e,t)=>{if(typeof t!=`object`||!t)return[];let n=t;return XG(e).filter(e=>e.name in n).map(e=>({label:e.label,value:n[e.name]}))},jX=(e,t)=>kX(e).filter(e=>!iK(e)).map(n=>{let r=e?.stepInfos?.[n.id],i=OX[r?.status??``]??`upcoming`;if(!pK(n))return{stepId:n.id,name:n.name,type:n.type,state:i,answers:[]};let a=vK(mK(n),e?.stepInfos);return{stepId:n.id,name:n.name,type:n.type,state:i,assigneeWorkspaceMemberId:yK({fields:a,now:t}).assigneeWorkspaceMemberId,answers:i===`done`?AX(a,r?.result):[]}});Yt(),cn(),dn(),mn(),bn(),kn(),Wn(),$n(),fe();var MX=300,NX=5,PX=[`процесс`,`процесса`,`процессов`],FX=[{key:`name`,label:`Процесс`,width:`26%`,sortKey:`name`},{key:`status`,label:`Статус`,width:`13%`,sortKey:`status`},{key:`parameters`,label:`Параметры`,width:`10%`,sortKey:`parameters`},{key:`stageCount`,label:`Этапов`,width:`8%`,sortKey:`stageCount`},{key:`runs`,label:`Запуски`,width:`12%`,sortKey:`runs`},{key:`stages`,label:`Этапы`},{key:`updatedAt`,label:`Изменён`,width:`11%`,sortKey:`updatedAt`}],IX=[{value:`all`,label:`Все`},{value:`active`,label:`Опубликованные`},{value:`draft`,label:`Черновики`}],LX=e=>kX({flow:{trigger:e?.trigger,steps:e?.steps}}).filter(e=>!iK(e)),RX=e=>{let{active:t,draft:n,deactivated:r}=e,i=t!==void 0&&oK(t.trigger);return{workflowId:e.workflowId,workspaceWorkflowId:e.workspaceWorkflowId,draftVersionId:n?.id,activeVersionId:t?.id,deactivatedVersionId:r?.id,workflowVersionId:i?t.id:void 0,name:e.name,isPublished:i,isActive:t!==void 0,hasUnpublishedChanges:t!==void 0&&n!==void 0,launchFields:e.launchFields,launchObject:e.launchObject,stages:LX(t??n??r),updatedAt:e.updatedAt}},zX=async e=>{let{processes:t,canAppEdit:n}=await FG(`/docflow/processes/catalog`,{action:`list`}),r=e.trim().toLowerCase();return{processes:t.map(RX).filter(e=>r.length===0||e.name.toLowerCase().includes(r)),editing:BY(n)}},BX=async e=>Object.fromEntries(await Promise.all(e.map(async e=>{let[t,n]=await Promise.all([AG(`workflowRuns`,oG(`coreWorkflowId`,e)),AG(`workflowRuns`,mG(oG(`coreWorkflowId`,e),oG(`status`,`RUNNING`)))]);return[e,{total:t,running:n}]}))),VX=e=>Dl(xl.WorkflowCoreShowPage,{coreWorkflowId:e}),HX=e=>Dl(xl.RecordShowPage,{objectNameSingular:`workflowRun`,objectRecordId:e}),UX=({process:e,members:t})=>{let[n]=(0,L.useState)(()=>new Date);return e.stages.length===0?(0,Q.jsx)(Oq,{tone:`hint`,children:`Этапов пока нет: добавьте шаги в редакторе.`}):(0,Q.jsx)(TX,{items:[{key:`start`,title:`Запуск`,meta:e.launchFields.length>0?`с параметрами: ${e.launchFields.length}`:`без параметров`,state:`upcoming`},...e.stages.map(e=>{let r=pK(e)?yK({fields:mK(e),now:n}).assigneeWorkspaceMemberId:void 0;return{key:e.id,title:e.name,meta:[FK[e.type]??e.type,xK(t.find(({id:e})=>e===r))].filter(Boolean).join(` · `),state:`upcoming`}})]})},WX=({workflowId:e,members:t})=>{let n=M(),{data:r,loading:i}=zK(async()=>(await TG(`workflowRuns`,{filter:oG(`coreWorkflowId`,e),order_by:`createdAt[DescNullsLast]`,limit:NX})).records,[e]);return i&&r===void 0?(0,Q.jsx)(iJ,{rows:3}):(r??[]).length===0?(0,Q.jsx)(Oq,{tone:`hint`,children:`Запусков ещё не было.`}):(0,Q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`},children:(r??[]).map(e=>(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>void HX(e.id),style:{alignItems:`center`,background:`transparent`,border:`none`,borderTop:`1px solid ${n.border.color.light}`,color:n.font.color.secondary,cursor:`pointer`,display:`flex`,fontFamily:`inherit`,fontSize:n.font.size.sm,gap:n.spacing[2],justifyContent:`space-between`,padding:`${n.spacing[2]} 0`,textAlign:`left`},children:[(0,Q.jsxs)(`span`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:[DK(e.startedAt??e.createdAt),RK(e,t)?` · ${RK(e,t)}`:``]}),(0,Q.jsx)(GK,{color:LK[e.status??``]??`gray`,children:IK[e.status??``]??e.status})]},e.id))})},GX=({process:e})=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(GK,{color:e.isActive?`green`:`gray`,children:e.isActive?`Опубликован`:`Черновик`}),e.hasUnpublishedChanges&&(0,Q.jsx)(GK,{color:`orange`,children:`Есть неопубликованные изменения`})]}),KX=({name:e,onSave:t})=>{let n=M(),[r,i]=(0,L.useState)(e),[a,o]=(0,L.useState)(!1),s=async()=>{let n=r.trim();n.length===0?i(e):n!==e&&await t(n)};return(0,Q.jsx)(`input`,{type:`text`,value:r,"aria-label":`Название процесса`,title:`Нажмите, чтобы переименовать`,onChange:e=>i(e.target.value),onFocus:()=>o(!0),onBlur:()=>{o(!1),s()},onKeyDown:t=>{t.key===`Enter`&&s(),t.key===`Escape`&&i(e)},style:{background:a?n.background.transparent.lighter:`transparent`,border:`1px solid ${a?n.border.color.medium:`transparent`}`,borderRadius:n.border.radius.sm,boxSizing:`border-box`,color:n.font.color.primary,fontFamily:`inherit`,fontSize:n.font.size.lg,fontWeight:n.font.weight.semiBold,margin:`0 -${n.spacing[2]}`,outline:`none`,padding:`${n.spacing[1]} ${n.spacing[2]}`,width:`calc(100% + ${n.spacing[4]})`}})},qX=({process:e,members:t,isBusy:n,onLaunched:r,onRename:i,onPublish:a,onSettingsSaved:o})=>{let s=M(),[c,l]=(0,L.useState)({}),[u,d]=(0,L.useState)(!1),[f,p]=(0,L.useState)(),[m,h]=(0,L.useState)(!1),g=async()=>{let t=cK({fields:e.launchFields,values:c}),n=QG({fields:e.launchFields,values:t});if(n.length>0)p(`Заполните: ${n.map(({label:e})=>e).join(`, `)}`);else{d(!0),p(void 0);try{await FG(`/docflow/processes/launch`,{workflowId:e.workflowId,values:t}),await El({message:`Процесс запущен`,variant:`success`}),l({}),r()}catch(e){p(IG(e,`Не удалось запустить процесс`))}finally{d(!1)}}};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[4]},children:[(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[2]},children:[(0,Q.jsx)(KX,{name:e.name,onSave:i},e.name),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:s.spacing[1]},children:[(0,Q.jsx)(GX,{process:e}),e.updatedAt&&(0,Q.jsxs)(GK,{color:`gray`,children:[`Изменён `,SK(e.updatedAt)]})]}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:s.spacing[1]},children:[(!e.isActive||e.hasUnpublishedChanges)&&(0,Q.jsx)($,{variant:`solid`,tone:`accent`,icon:yn,loading:n,onClick:()=>a(!0),children:e.isActive?`Опубликовать изменения`:`Опубликовать`}),e.isActive&&(0,Q.jsx)($,{icon:un,disabled:n,onClick:()=>a(!1),children:`Снять с публикации`}),(0,Q.jsx)($,{icon:On,onClick:()=>void VX(e.workflowId),children:`Открыть редактор`})]})]}),e.isPublished&&e.launchObject!==void 0?(0,Q.jsx)(Oq,{tone:`hint`,children:`Процесс запускается на записи: откройте или выберите запись и нажмите «Запустить процесс» в её меню.`}):e.isPublished?(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[3]},children:[(0,Q.jsx)(kq,{children:`Запуск`}),e.launchFields.length>0?(0,Q.jsx)(oX,{fields:e.launchFields,values:c,onChange:l,disabled:u}):(0,Q.jsx)(Oq,{tone:`hint`,children:`Процесс запускается без параметров.`}),f!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:f}),(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`md`,fullWidth:!0,icon:sn,loading:u,onClick:()=>void g(),children:`Запустить`})]}):(0,Q.jsx)(Oq,{tone:`hint`,children:e.isActive?`Процесс опубликован, но запускается не вручную: его запускает событие или расписание.`:`Процесс ещё не опубликован: проверьте этапы и нажмите «Опубликовать».`}),(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[3]},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,justifyContent:`space-between`},children:[(0,Q.jsx)(kq,{children:`Параметры запуска и задания`}),(0,Q.jsx)($,{size:`sm`,icon:On,onClick:()=>h(e=>!e),children:m?`Свернуть`:`Настроить`})]}),m&&(0,Q.jsx)(yX,{workflowId:e.workflowId,onLaunchSaved:o})]}),(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[3]},children:[(0,Q.jsx)(kq,{children:`Этапы`}),(0,Q.jsx)(UX,{process:e,members:t})]}),(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[1]},children:[(0,Q.jsx)(kq,{children:`Последние запуски`}),(0,Q.jsx)(WX,{workflowId:e.workflowId,members:t})]})]})},JX=({onClose:e,onAdded:t})=>{let n=M(),[r,i]=(0,L.useState)([]),[a,o]=(0,L.useState)(),{data:s,loading:c,error:l}=zK(async()=>(await FG(`/docflow/processes/catalog`,{action:`others`})).processes,[]),u=e=>i(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]);return(0,Q.jsxs)(yq,{title:`Добавить процессы Twenty`,hint:`Процессы из «Рабочих процессов» Twenty станут процессами документооборота: их можно будет запускать отсюда, а их задания попадут в «Задания».`,confirmLabel:`Добавить`,canSubmit:r.length>0,onClose:e,onSubmit:async()=>{try{await FG(`/docflow/processes/catalog`,{action:`add`,workflowIds:r}),await El({message:`Добавлено: ${r.length}`,variant:`success`}),t()}catch(e){o(IG(e,`Не удалось добавить`))}},children:[c&&s===void 0&&(0,Q.jsx)(iJ,{rows:3}),l!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:IG(l,`Не удалось загрузить процессы`)}),s!==void 0&&s.length===0&&(0,Q.jsx)(Oq,{tone:`hint`,children:`Других процессов нет.`}),(0,Q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,maxHeight:`320px`,overflowY:`auto`},children:(s??[]).map(e=>(0,Q.jsxs)(`label`,{style:{alignItems:`center`,cursor:`pointer`,display:`flex`,fontSize:n.font.size.md,gap:n.spacing[2],padding:`${n.spacing[1]} 0`},children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:r.includes(e.workflowId),onChange:()=>u(e.workflowId)}),e.name]},e.workflowId))}),a!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:a})]})},YX=er({universalIdentifier:oJ,name:`docflow-processes`,description:`Процессы документооборота: запуск с параметрами`,component:()=>{let e=M(),{members:t}=OJ(),[n,r]=(0,L.useState)(``),i=BK(n,MX),[a,o]=(0,L.useState)(`all`),[s,c]=(0,L.useState)(`any`),[l,u]=(0,L.useState)({key:`name`,direction:`asc`}),[d,f]=(0,L.useState)({kind:`closed`}),[p,m]=(0,L.useState)(),[h,g]=(0,L.useState)(!1),[_,v]=(0,L.useState)(!1),[y,b]=zq([`updatedAt`]),{data:x,loading:S,error:C,reload:w}=zK(()=>zX(i),[i]),T=x?.processes,ee=x?.editing??`app`,E=(T??[]).map(({workflowId:e})=>e).join(),{data:D,reload:O}=zK(()=>BX(E.length>0?E.split(`,`):[]),[E]),k=d.kind===`process`?d.workflowId:void 0,te=T?.find(e=>e.workflowId===k),ne=(T??[]).filter(e=>s===`any`||e.launchFields.length>0==(s===`with`)),re=(e,t)=>t===`all`?!0:t===`active`?e.isActive:!e.isActive,A=ne.filter(e=>re(e,a)).sort((e,t)=>{let n=l.direction===`asc`?1:-1,r={parameters:e=>e.launchFields.length,status:e=>Number(e.isActive),stageCount:e=>e.stages.length,runs:e=>D?.[e.workflowId]?.total??0,updatedAt:e=>new Date(e.updatedAt??0).getTime()}[l.key];return r===void 0?e.name.localeCompare(t.name,`ru`)*n:(r(e)-r(t))*n}),j=Nq(A.map(({workflowId:e})=>e)),ie=j.selectedIds,ae=async()=>{await Promise.all([w(),O()])},oe=VK({onDone:async()=>{j.clear(),await ae()}}),se=e=>e.flatMap(e=>A.filter(({workflowId:t})=>t===e)),ce=e=>oe.run(async()=>{await JY(ee,se(e)),f(t=>t.kind===`process`&&e.includes(t.workflowId)?{kind:`closed`}:t)},e.length===1?`Процесс удалён`:`Удалено процессов: ${e.length}`,`Не удалось удалить`),le=e=>oe.run(async()=>{await FG(`/docflow/processes/catalog`,{action:`remove`,workflowIds:e}),f(t=>t.kind===`process`&&e.includes(t.workflowId)?{kind:`closed`}:t)},e.length===1?`Процесс убран из документооборота`:`Убрано из документооборота: ${e.length}`,`Не удалось убрать`),ue=(e,t)=>oe.runEach(e,e=>YY(ee,se([e])[0]??{workflowId:e,workspaceWorkflowId:null},t),{done:e=>t?`Опубликовано: ${e}`:`Снято с публикации: ${e}`,failed:t?`Не опубликованы`:`Не сняты с публикации`}),de=async(e,t)=>{try{await qY(ee,e,t),await El({message:`Процесс переименован`,variant:`success`}),m(void 0),await w()}catch(e){await El({message:IG(e,`Не удалось переименовать процесс`),variant:`error`})}},fe=async()=>{g(!0),xG(`process: create`,{editing:ee});try{await KY(ee,`Новый процесс`),await w()}catch(e){SG(`process: create failed`,e),await El({message:IG(e,`Не удалось создать процесс`),variant:`error`})}finally{g(!1)}};return(0,Q.jsxs)(xq,{children:[(0,Q.jsxs)(Kq,{panelTitle:`Процесс`,onClosePanel:()=>f({kind:`closed`}),panel:te===void 0?void 0:(0,Q.jsx)(qX,{process:te,members:t,isBusy:oe.isBusy,onLaunched:()=>void O(),onRename:e=>de(te,e),onPublish:e=>void ue([te.workflowId],e),onSettingsSaved:()=>void w()},te.workflowId),children:[(0,Q.jsx)(Vq,{search:{value:n,onChange:r,placeholder:`Поиск процессов`,activeFilterCount:s===`any`?0:1,onResetFilters:()=>c(`any`),filters:[{key:`parameters`,title:`Параметры запуска`,value:s,options:[{value:`any`,label:`Любые`},{value:`with`,label:`С параметрами`},{value:`without`,label:`Без параметров`}],onChange:e=>c(e)}]},views:(0,Q.jsx)(mq,{value:a,onChange:e=>{o(e),j.clear()},options:IX.map(e=>({...e,count:T===void 0?void 0:ne.filter(t=>re(t,e.value)).length}))}),actions:(0,Q.jsx)($,{size:`md`,icon:pn,onClick:()=>v(!0),children:`Добавить из Twenty`}),onCreate:()=>void fe(),isCreating:h}),ee===`standalone`&&(0,Q.jsx)(`div`,{style:{padding:`0 ${e.spacing[5]} ${e.spacing[3]}`},children:(0,Q.jsx)(vX,{})}),C!==void 0&&(0,Q.jsx)(`div`,{style:{padding:e.spacing[4]},children:(0,Q.jsx)(Oq,{tone:`danger`,children:IG(C,`Не удалось загрузить процессы`)})}),S&&T===void 0&&(0,Q.jsx)(rJ,{}),!S&&C===void 0&&A.length===0&&(0,Q.jsx)(Oq,{children:`Процессов нет. «Создать» добавит новый процесс, «Добавить из Twenty» — уже настроенный в «Рабочих процессах».`}),A.length>0&&(0,Q.jsx)(Bq,{columns:FX,hiddenColumnKeys:y,onHiddenColumnsChange:b,sort:l,onSortChange:u,selectedRowId:k,selectedIds:ie,onSelectionChange:j.setSelectedIds,onRowClick:e=>f({kind:`process`,workflowId:e}),rowActions:e=>{let t=A.find(t=>t.workflowId===e);return t===void 0?[]:[...t.isPublished?[{key:`launch`,label:`Запустить`,icon:sn,onSelect:()=>f({kind:`process`,workflowId:e})}]:[],...!t.isActive||t.hasUnpublishedChanges?[{key:`publish`,label:t.isActive?`Опубликовать изменения`:`Опубликовать`,icon:yn,onSelect:()=>void ue([e],!0)}]:[],...t.isActive?[{key:`unpublish`,label:`Снять с публикации`,icon:un,onSelect:()=>void ue([e],!1)}]:[],{key:`edit`,label:`Открыть редактор`,icon:On,onSelect:()=>void VX(e)},{key:`rename`,label:`Переименовать`,icon:Jt,onSelect:()=>m(t)},{key:`take-out`,label:`Убрать из документооборота`,icon:Qn,onSelect:()=>void le([e])},{key:`delete`,label:`Удалить`,confirmLabel:`Точно удалить?`,icon:Un,tone:`danger`,onSelect:()=>void ce([e])}]},rows:A.map(t=>{let n=t.launchFields.length,r=D?.[t.workflowId];return{id:t.workflowId,cells:{name:t.name,status:(0,Q.jsxs)(`span`,{style:{display:`inline-flex`,gap:e.spacing[1]},children:[(0,Q.jsx)(GK,{color:t.isActive?`green`:`gray`,children:t.isActive?`Опубликован`:`Черновик`}),t.hasUnpublishedChanges&&(0,Q.jsx)(GK,{color:`orange`,children:`Изменён`})]}),parameters:n>0?String(n):`нет`,stageCount:String(t.stages.length),runs:r===void 0?`…`:(0,Q.jsxs)(`span`,{children:[r.total,r.running>0&&(0,Q.jsxs)(`span`,{style:{color:e.color.blue},children:[` · идёт `,r.running]})]}),stages:t.stages.map(({name:e})=>e).join(` → `)||`—`,updatedAt:SK(t.updatedAt)}}})}),(0,Q.jsxs)(Hq,{count:ie.length,noun:PX,onClear:j.clear,children:[ie.length===1&&(0,Q.jsx)($,{icon:On,onClick:()=>void VX(ie[0]),children:`Открыть редактор`}),(0,Q.jsx)($,{icon:yn,loading:oe.isBusy,onClick:()=>void ue(ie,!0),children:`Опубликовать`}),(0,Q.jsx)($,{icon:un,disabled:oe.isBusy,onClick:()=>void ue(ie,!1),children:`Снять с публикации`}),(0,Q.jsx)(nq,{label:`Удалить`,icon:Un,disabled:oe.isBusy,actions:[{key:`delete`,label:`Удалить выбранные (${ie.length})`,confirmLabel:`Точно удалить? Запуски и задания останутся`,icon:Un,tone:`danger`,onSelect:()=>void ce(ie)}]})]})]}),_&&(0,Q.jsx)(JX,{onClose:()=>v(!1),onAdded:()=>{v(!1),ae()}}),p!==void 0&&(0,Q.jsx)(vq,{title:`Переименовать процесс`,label:`Название`,initialValue:p.name,onClose:()=>m(void 0),onSubmit:e=>de(p,e)})]})}}),XX=e=>typeof e.smbWorkflowThreadId==`string`&&e.smbWorkflowThreadId.length>0,ZX=e=>{let t=XG(tK(e.smbFormSchema)),n=nK(e.smbFormValues);return{filled:t.filter(e=>!ZG(n[e.name])).length,total:t.length}};fe();var QX=248,$X=8,eZ=({task:e,members:t,now:n,isSelected:r,onOpen:i})=>{let a=M(),o=jK(e.dueAt,n),s=ZX(e),c={overdue:a.color.red,today:a.color.orange,soon:a.color.amber,later:a.color.blue,none:a.border.color.strong};return(0,Q.jsxs)(`button`,{type:`button`,onClick:i,"aria-pressed":r,style:{...UK(a),boxShadow:`none`,border:`1px solid ${r?a.border.color.blue:a.border.color.light}`,boxSizing:`border-box`,color:a.font.color.primary,cursor:`pointer`,display:`flex`,flex:`0 0 ${QX}px`,flexDirection:`column`,fontFamily:`inherit`,gap:a.spacing[2],minHeight:`128px`,outline:`none`,padding:a.spacing[3],textAlign:`left`,WebkitTapHighlightColor:`transparent`,width:QX},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:a.spacing[2],justifyContent:`space-between`},children:[(0,Q.jsx)(`span`,{style:{color:c[o.tone],fontSize:a.font.size.sm,fontWeight:a.font.weight.semiBold},children:o.label}),(0,Q.jsx)(`span`,{style:{color:a.font.color.light,fontSize:a.font.size.xs},children:SK(e.dueAt)})]}),(0,Q.jsx)(`span`,{style:{WebkitBoxOrient:`vertical`,WebkitLineClamp:2,display:`-webkit-box`,fontSize:a.font.size.md,fontWeight:a.font.weight.medium,lineHeight:1.35,overflow:`hidden`},children:e.title?.trim()||`Без названия`}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:a.spacing[1],marginTop:`auto`},children:[s.total>0&&(0,Q.jsx)(Gq,{value:s.filled,total:s.total}),(0,Q.jsxs)(`div`,{style:{color:a.font.color.tertiary,display:`flex`,fontSize:a.font.size.xs,gap:a.spacing[2],justifyContent:`space-between`},children:[(0,Q.jsx)(`span`,{children:XX(e)?`Шаг процесса`:`Своё задание`}),(0,Q.jsx)(`span`,{children:s.total>0?`Поля ${s.filled}/${s.total}`:xK(t.find(t=>t.id===e.assigneeId))})]})]})]})},tZ=({tasks:e,members:t,now:n,selectedTaskId:r,onOpen:i})=>{let a=M();return e.length===0?null:(0,Q.jsxs)(`section`,{"aria-label":`Срочные задания`,style:{display:`flex`,flexDirection:`column`,gap:a.spacing[1],minWidth:0,padding:`${a.spacing[1]} ${a.spacing[5]} ${a.spacing[4]}`},children:[(0,Q.jsx)(kq,{children:`Срочные`}),(0,Q.jsx)(`div`,{style:{minWidth:0,overflowX:`auto`,paddingBottom:a.spacing[1]},children:(0,Q.jsx)(`div`,{style:{display:`flex`,gap:$X,width:`max-content`},children:e.map(e=>(0,Q.jsx)(eZ,{task:e,members:t,now:n,isSelected:e.id===r,onOpen:()=>i(e.id)},e.id))})})]})},nZ=`__ndMessengerMessageMenuContributions`,rZ=()=>{let e=globalThis,t=e[nZ];if(t!==void 0)return t;let n=new Map;return e[nZ]=n,n},iZ=()=>[...rZ().values()],aZ=e=>iZ().filter(t=>{try{return t.isVisible?.(e)!==!1}catch(e){return console.error(`Пункт меню «${t.id}»: isVisible упал`,e),!1}}),oZ=(e,t)=>{try{e.run(t)}catch(t){console.error(`Пункт меню «${e.id}»: run упал`,t)}};ye(),Be(),Ue(),Ye(),Qe(),it(),st(),pt(),St(),Bt(),Yt(),Qt(),tn(),Mn(),Fn(),Wn(),fe();var sZ=[`👍`,`❤️`,`🔥`,`👌`,`😂`,`😐`],cZ=[...sZ,`👏`,`🎉`,`🤔`,`😢`,`😮`,`🙏`,`💪`,`👀`,`🚀`,`✅`,`❌`,`💯`,`🤝`,`😴`,`🤯`].filter(e=>!sZ.includes(e)),lZ=e=>new Date(e).toLocaleTimeString(`ru-RU`,{hour:`2-digit`,minute:`2-digit`}),uZ=({icon:e,label:t,onClick:n,tone:r=`default`})=>{let i=M(),[a,o]=(0,L.useState)(!1);return(0,Q.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:n,onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),style:{alignItems:`center`,background:a?i.background.transparent.light:`transparent`,border:`none`,borderRadius:i.border.radius.sm,color:r===`danger`?i.font.color.danger:i.font.color.primary,cursor:`pointer`,display:`flex`,flexShrink:0,fontFamily:`inherit`,fontSize:i.font.size.md,gap:i.spacing[3],height:i.spacing[8],padding:`0 ${i.spacing[2]}`,textAlign:`left`,width:`100%`},children:[(0,Q.jsx)(`span`,{style:{flex:1,whiteSpace:`nowrap`},children:t}),(0,Q.jsx)(e,{size:i.icon.size.md,stroke:i.icon.stroke.sm,color:r===`danger`?i.font.color.danger:i.font.color.tertiary})]})},dZ=()=>{let e=M();return(0,Q.jsx)(`div`,{style:{borderTop:`1px solid ${e.border.color.light}`,flexShrink:0,margin:`${e.spacing[1]} 0`}})},fZ=(e,t,n=!1)=>({alignItems:`center`,background:t?e.background.transparent.blue:n?e.background.transparent.light:`transparent`,border:`none`,borderRadius:10,cursor:`pointer`,display:`inline-flex`,flexShrink:0,fontSize:20,height:34,justifyContent:`center`,lineHeight:1,padding:0,width:34}),pZ=({message:e,conversationId:t,isOwn:n,readerIds:r,viewerReactions:i,memberName:a,placement:o,onAction:s,onReact:c,onClose:l})=>{let u=M(),[d,f]=(0,L.useState)(`main`),[p,m]=(0,L.useState)(!1),h=e=>{l(),s(e)},g=e=>{l(),c(e)},_={messageId:e.id,conversationId:t,text:e.text,authorId:e.authorId,isOwn:n,isTaskChat:!0},v=aZ(_),y=v.filter(e=>(e.placement??`more`)===`main`),b=v.filter(e=>(e.placement??`more`)===`more`);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-hidden":!0,onClick:l,onContextMenu:l,style:{inset:0,position:`fixed`,zIndex:20}}),(0,Q.jsx)(`div`,{role:`menu`,"aria-label":`Действия с сообщением`,onKeyDown:e=>{e.key===`Escape`&&l()},style:{[n?`right`:`left`]:0,[o===`above`?`bottom`:`top`]:`calc(100% + ${u.spacing[1]})`,background:u.background.primary,border:`1px solid ${u.border.color.medium}`,borderRadius:u.border.radius.md,boxShadow:u.boxShadow.strong,display:`flex`,flexDirection:`column`,maxHeight:420,overflowY:`auto`,padding:u.spacing[1],position:`absolute`,width:248,zIndex:21},children:d===`more`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(uZ,{icon:Je,label:`Назад`,onClick:()=>f(`main`)}),(0,Q.jsx)(dZ,{}),(0,Q.jsx)(`div`,{style:{display:`grid`,flexShrink:0,gap:2,gridTemplateColumns:`repeat(5, 1fr)`,padding:`${u.spacing[1]} ${u.spacing[1]} ${u.spacing[2]}`},children:cZ.map(e=>(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Реакция ${e}`,"aria-pressed":i.includes(e),onClick:()=>g(e),style:fZ(u,i.includes(e),!0),children:e},e))}),(0,Q.jsx)(dZ,{}),(0,Q.jsx)(uZ,{icon:e.isPinned?en:Zt,label:e.isPinned?`Открепить сообщение`:`Закрепить сообщение`,onClick:()=>h(`togglePin`)}),(0,Q.jsx)(uZ,{icon:He,label:`Создать задачу`,onClick:()=>h(`createTask`)}),(0,Q.jsx)(uZ,{icon:zt,label:`Ещё не прочитано`,onClick:()=>h(`markUnread`)}),b.map(e=>(0,Q.jsx)(uZ,{icon:Ze,label:e.label,onClick:()=>{l(),oZ(e,_)}},e.id))]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{style:{alignItems:`center`,background:u.background.transparent.lighter,border:`1px solid ${u.border.color.light}`,borderRadius:12,display:`flex`,flexShrink:0,gap:2,justifyContent:`space-between`,margin:`2px 2px 4px`,padding:4},children:sZ.map(e=>(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Реакция ${e}`,"aria-pressed":i.includes(e),onClick:()=>g(e),style:fZ(u,i.includes(e)),children:e},e))}),(0,Q.jsx)(dZ,{}),(0,Q.jsx)(uZ,{icon:ve,label:`Ответить`,onClick:()=>h(`reply`)}),(0,Q.jsx)(uZ,{icon:rt,label:`Копировать`,onClick:()=>h(`copy`)}),n&&e.kind===`TEXT`&&(0,Q.jsx)(uZ,{icon:Jt,label:`Редактировать`,onClick:()=>h(`edit`)}),(0,Q.jsx)(uZ,{icon:jn,label:`Переслать`,onClick:()=>h(`forward`)}),(0,Q.jsx)(uZ,{icon:xt,label:e.isResult?`Убрать из результатов`:`Добавить в результаты`,onClick:()=>h(`toggleResult`)}),y.map(e=>(0,Q.jsx)(uZ,{icon:Ze,label:e.label,onClick:()=>{l(),oZ(e,_)}},e.id)),(0,Q.jsx)(uZ,{icon:Ze,label:`Ещё`,onClick:()=>f(`more`)}),(0,Q.jsx)(dZ,{}),n&&(0,Q.jsx)(uZ,{icon:Un,label:`Удалить`,tone:`danger`,onClick:()=>h(`remove`)}),(0,Q.jsx)(uZ,{icon:Pn,label:`Выбрать`,onClick:()=>h(`select`)}),(0,Q.jsx)(dZ,{}),(0,Q.jsx)(uZ,{icon:ft,label:r.length===0?`Нет просмотров`:`${r.length} ${Uq(r.length,[`просмотр`,`просмотра`,`просмотров`])}`,onClick:()=>m(e=>!e)}),p&&r.map(e=>(0,Q.jsx)(`span`,{style:{color:u.font.color.secondary,flexShrink:0,fontSize:u.font.size.sm,padding:`0 ${u.spacing[2]}`},children:a(e)},e))]})})]})},mZ=({message:e,conversationId:t,viewerId:n,isGroupStart:r,readerIds:i,memberName:a,isMenuOpen:o,menuPlacement:s,isSelecting:c,isSelected:l,onOpenMenu:u,onCloseMenu:d,onToggleSelected:f,onAction:p,onReact:m})=>{let h=M(),[g,_]=(0,L.useState)(!1),v=e.authorId===n,y=!e.isRemoved,b=e.reactions.filter(e=>n!==void 0&&e.memberIds.includes(n)).map(e=>e.emoji);return(0,Q.jsxs)(`div`,{onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1),onClick:c&&y?f:void 0,style:{alignItems:`center`,background:l?h.background.transparent.blue:void 0,cursor:c&&y?`pointer`:void 0,display:`flex`,flexDirection:v?`row-reverse`:`row`,gap:h.spacing[1],marginTop:r?h.spacing[1]:0,padding:`1px 2px`,position:`relative`},children:[c&&(0,Q.jsx)(`span`,{"aria-hidden":!0,style:{alignItems:`center`,background:l?h.color.blue:`transparent`,border:`1px solid ${l?h.color.blue:h.border.color.strong}`,borderRadius:`50%`,...HK,color:h.font.color.inverted,display:`inline-flex`,flexShrink:0,height:16,justifyContent:`center`,visibility:y?`visible`:`hidden`,width:16},children:l&&(0,Q.jsx)(ze,{size:12,stroke:3})}),y&&!c&&(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Действия с сообщением`,"aria-haspopup":`menu`,onClick:u,style:{alignItems:`center`,background:`transparent`,border:`none`,borderRadius:h.border.radius.sm,color:h.font.color.tertiary,cursor:`pointer`,display:`inline-flex`,flexShrink:0,height:24,justifyContent:`center`,opacity:g||o?1:0,padding:0,width:20},children:(0,Q.jsx)(ot,{size:h.icon.size.sm})}),(0,Q.jsxs)(`div`,{style:{alignItems:v?`flex-end`:`flex-start`,display:`flex`,flexDirection:`column`,gap:2,maxWidth:`85%`,minWidth:0},children:[(0,Q.jsxs)(`div`,{style:{background:v?h.background.transparent.blue:h.background.transparent.light,borderRadius:h.border.radius.md,color:e.isRemoved?h.font.color.tertiary:void 0,fontStyle:e.isRemoved?`italic`:void 0,maxWidth:`100%`,overflowWrap:`anywhere`,padding:`${h.spacing[1]} ${h.spacing[2]}`,whiteSpace:`pre-wrap`},children:[!v&&r&&e.authorId!==null&&(0,Q.jsx)(`div`,{style:{color:h.color.blue,fontSize:h.font.size.sm,fontWeight:h.font.weight.medium},children:a(e.authorId)}),e.forwardedFromAuthorId!==null&&!e.isRemoved&&(0,Q.jsxs)(`div`,{style:{color:h.font.color.tertiary,fontSize:h.font.size.sm},children:[`Переслано от `,a(e.forwardedFromAuthorId)]}),e.replyTo!==null&&!e.isRemoved&&(0,Q.jsxs)(`div`,{style:{borderLeft:`2px solid ${h.color.blue}`,color:h.font.color.secondary,fontSize:h.font.size.sm,margin:`2px 0 4px`,overflow:`hidden`,paddingLeft:h.spacing[2],textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:[(0,Q.jsx)(`strong`,{style:{color:h.color.blue,display:`block`,fontSize:h.font.size.xs},children:e.replyTo.authorId===null?`Сообщение`:a(e.replyTo.authorId)}),e.replyTo.isRemoved?`Сообщение удалено`:e.replyTo.text]}),e.isRemoved?`Сообщение удалено`:e.text,(0,Q.jsxs)(`span`,{style:{alignItems:`center`,color:h.font.color.tertiary,display:`inline-flex`,float:`right`,fontSize:h.font.size.xs,fontStyle:`normal`,gap:2,margin:`${h.spacing[1]} 0 0 ${h.spacing[3]}`},children:[e.isPinned&&(0,Q.jsx)(Zt,{size:11}),e.isResult&&(0,Q.jsx)(xt,{size:11,color:h.color.green}),e.editedAt!==null&&!e.isRemoved?`изменено `:``,lZ(e.createdAt),v&&!e.isRemoved&&(0,Q.jsx)(`span`,{title:i.length>0?`Прочитано`:`Отправлено`,style:{color:i.length>0?h.color.blue:void 0},children:i.length>0?`✓✓`:`✓`})]})]}),e.reactions.length>0&&(0,Q.jsx)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:5,marginTop:4},children:e.reactions.map(e=>{let t=n!==void 0&&e.memberIds.includes(n);return(0,Q.jsxs)(`button`,{type:`button`,title:e.memberIds.map(a).join(`, `),"aria-pressed":t,onClick:t=>{t.stopPropagation(),m(e.emoji)},style:{alignItems:`center`,background:t?h.background.transparent.blue:h.background.primary,border:`1px solid ${t?h.color.blue:h.border.color.medium}`,borderRadius:999,boxShadow:h.boxShadow.light,color:h.font.color.primary,cursor:`pointer`,display:`inline-flex`,fontFamily:`inherit`,gap:5,height:26,padding:`0 9px 0 7px`},children:[(0,Q.jsx)(`span`,{style:{fontSize:15,lineHeight:1},children:e.emoji}),(0,Q.jsx)(`span`,{style:{color:h.font.color.secondary,fontSize:12,fontVariantNumeric:`tabular-nums`,fontWeight:600,lineHeight:1},children:e.memberIds.length})]},e.emoji)})})]}),o&&(0,Q.jsx)(pZ,{message:e,conversationId:t,isOwn:v,readerIds:i,viewerReactions:b,memberName:a,placement:s,onAction:p,onReact:m,onClose:d})]})};ye(),Yt(),Qt(),En(),$n(),fe();var hZ=`/messenger/api`,gZ=3e3,_Z=5e3,vZ=6,yZ=e=>FG(hZ,e),bZ=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.seq-t.seq)},xZ=(e,t)=>new Date(e).toDateString()===new Date(t).toDateString(),SZ=(e,t)=>{if(xZ(e,t.toISOString()))return`Сегодня`;let n=new Date(t);if(n.setDate(n.getDate()-1),xZ(e,n.toISOString()))return`Вчера`;let r=new Date(e).toLocaleDateString(`ru-RU`,{weekday:`long`,day:`numeric`,month:`long`});return r.charAt(0).toUpperCase()+r.slice(1)},CZ=()=>`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,wZ=({messageIds:e,viewerId:t,memberName:n,onClose:r,onForwarded:i})=>{let a=M(),[o,s]=(0,L.useState)(``),[c,l]=(0,L.useState)(),[u,d]=(0,L.useState)(),{data:f,loading:p}=zK(()=>yZ({action:`listConversations`}),[]),m=e=>e.kind===`DIRECT`?n(e.memberIds.find(e=>e!==t)??null):e.name?.trim()||`Беседа`,h=o.trim().toLocaleLowerCase(`ru`),g=(f?.conversations??[]).filter(e=>m(e).toLocaleLowerCase(`ru`).includes(h)),_=async t=>{l(t.id),d(void 0);try{await yZ({action:`forwardMessages`,messageIds:e,conversationId:t.id}),i(m(t))}catch(e){d(IG(e,`Не удалось переслать`))}finally{l(void 0)}};return(0,Q.jsx)(`div`,{onClick:r,style:{alignItems:`center`,background:`rgba(0, 0, 0, 0.4)`,display:`flex`,inset:0,justifyContent:`center`,padding:a.spacing[3],position:`absolute`,zIndex:30},children:(0,Q.jsxs)(`div`,{role:`dialog`,"aria-label":`Переслать`,onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.key===`Escape`&&r()},style:{background:a.background.primary,border:`1px solid ${a.border.color.medium}`,borderRadius:a.border.radius.md,boxShadow:a.boxShadow.strong,display:`flex`,flexDirection:`column`,gap:a.spacing[2],maxHeight:`90%`,padding:a.spacing[3],width:`100%`},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:a.spacing[2]},children:[(0,Q.jsxs)(`strong`,{style:{flex:1},children:[`Переслать `,e.length,` `,Uq(e.length,[`сообщение`,`сообщения`,`сообщений`])]}),(0,Q.jsx)(WK,{icon:Qn,label:`Закрыть`,onClick:r})]}),(0,Q.jsx)(`input`,{type:`search`,"aria-label":`Найти беседу`,placeholder:`Найти беседу`,value:o,onChange:e=>s(e.target.value),style:{background:a.background.transparent.lighter,border:`1px solid ${a.border.color.medium}`,borderRadius:a.border.radius.sm,boxSizing:`border-box`,color:a.font.color.primary,font:`inherit`,height:32,padding:`0 ${a.spacing[2]}`,width:`100%`}}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,minHeight:0,overflowY:`auto`},children:[p&&f===void 0&&(0,Q.jsx)(iJ,{rows:5}),!p&&g.length===0&&(0,Q.jsx)(Oq,{children:`Бесед не найдено.`}),g.map(e=>(0,Q.jsxs)(`button`,{type:`button`,disabled:c!==void 0,onClick:()=>void _(e),style:{background:`transparent`,border:`none`,color:`inherit`,cursor:`pointer`,font:`inherit`,overflow:`hidden`,padding:`${a.spacing[1]} 0`,textAlign:`left`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:[m(e),c===e.id&&` …`]},e.id))]}),u!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:u})]})})},TZ=({taskId:e,members:t,viewerId:n})=>{let r=M(),[i]=(0,L.useState)(()=>new Date),[a,o]=(0,L.useState)(),[s,c]=(0,L.useState)([]),[l,u]=(0,L.useState)(!1),[d,f]=(0,L.useState)(),[p,m]=(0,L.useState)(``),[h,g]=(0,L.useState)(!1),[_,v]=(0,L.useState)(),[y,b]=(0,L.useState)(),[x,S]=(0,L.useState)(),[C,w]=(0,L.useState)(),[T,ee]=(0,L.useState)(),[E,D]=(0,L.useState)(),O=a?.id,k=e=>xK(t.find(t=>t.id===e))||`Сотрудник`;(0,L.useEffect)(()=>{o(void 0),c([]),f(void 0),yZ({action:`openRecordChat`,objectName:`task`,recordId:e}).then(e=>o(e.conversation),e=>f(IG(e,`Чат задания не открылся`)))},[e]);let te=(0,L.useCallback)(async()=>{if(O!==void 0)try{let e=await yZ({action:`listMessages`,conversationId:O});c(t=>bZ(t,e.messages)),u(t=>t||e.hasMore),f(void 0)}catch(e){f(IG(e,`Не удалось загрузить сообщения`))}},[O]);(0,L.useEffect)(()=>{te();let e=setInterval(()=>void te(),gZ);return()=>clearInterval(e)},[te]),(0,L.useEffect)(()=>{if(O===void 0)return;let e=setInterval(()=>{yZ({action:`getConversation`,conversationId:O}).then(e=>o(e.conversation),()=>void 0)},_Z);return()=>clearInterval(e)},[O]);let{data:ne}=zK(async()=>O===void 0?void 0:yZ({action:`listHighlights`,conversationId:O}),[O,s.filter(e=>e.isPinned).map(e=>e.id).join(`,`)]),re=s[s.length-1]?.seq??0;(0,L.useEffect)(()=>{E!==void 0&&re<=E||O!==void 0&&re>(a?.lastReadSeq??0)&&yZ({action:`markRead`,conversationId:O,seq:re}).catch(()=>void 0)},[O,a?.lastReadSeq,re,E]);let A=e=>c(t=>bZ(t,[e])),j=async(e,t)=>{try{return await e(),f(void 0),!0}catch(e){return f(IG(e,t)),!1}},ie=e=>(a?.memberIds??[]).filter(t=>t!==e.authorId&&(a?.readSeqs?.[t]??0)>=e.seq),ae=async()=>{let e=s[0]?.seq;O!==void 0&&e!==void 0&&await j(async()=>{let t=await yZ({action:`listMessages`,conversationId:O,beforeSeq:e});c(e=>bZ(e,t.messages)),u(t.hasMore)},`Не удалось загрузить сообщения`)},oe=(0,L.useRef)(void 0),se=async()=>{if(O===void 0||p.trim().length===0||h)return;let e=p;g(!0),await j(async()=>{let{message:t}=y===void 0?await yZ({action:`sendMessage`,conversationId:O,clientMessageId:CZ(),text:e,replyToMessageId:_?.id}):await yZ({action:`editMessage`,messageId:y.id,text:e});A(t),m(t=>t===e?``:t),v(void 0),b(void 0)},`Сообщение не отправлено`)||m(t=>t.length===0?e:t),g(!1)},ce=async e=>{await Tl(e.length===1?e[0].text:e.map(e=>`${k(e.authorId)}, ${lZ(e.createdAt)}:\n${e.text}`).join(`
|
|
90
|
+
}`,variables:{fileId:r.fileId}});return i}async putFileToUploadTargetOrThrow({fileBuffer:e,uploadTarget:t}){let n=await this.getFetchImplementationOrThrow().call(globalThis,t.uploadUrl,{method:`PUT`,headers:{"Content-Type":t.contentType},body:e,credentials:`omit`});if(!n.ok)throw Error(`File upload failed (${n.status} ${n.statusText}): ${await n.text()}`)}async executeMutationOrThrow({query:e,variables:t}){let n=await this.executeGraphqlRequestWithOptionalRefresh({operation:{query:e,variables:t}});if(n.errors)throw new FJ(n.errors,n.data);if(!n.data)throw Error(`Empty GraphQL response`);return n.data}async executeGraphqlRequestWithOptionalRefresh({operation:e,headers:t,requestInit:n}){let r=await this.executeGraphqlRequest({operation:e,headers:t,requestInit:n,token:this.authorizationToken});if(this.shouldRefreshToken(r)){let r=await this.requestRefreshedAccessToken();if(r){let i=await this.executeGraphqlRequest({operation:e,headers:t,requestInit:n,token:r});return this.assertResponseIsSuccessful(i)}}return this.assertResponseIsSuccessful(r)}async executeGraphqlRequest({operation:e,headers:t,requestInit:n,token:r}){let i=this.getFetchImplementationOrThrow(),a=await this.resolveHeaders(),o=new Headers(a);t&&new Headers(t).forEach((e,t)=>o.set(t,e)),e instanceof FormData?o.delete(`Content-Type`):o.set(`Content-Type`,`application/json`),r?o.set(`Authorization`,`Bearer ${r}`):o.delete(`Authorization`);let s=await i.call(globalThis,this.url,{...this.requestOptions,...n,method:n?.method??`POST`,headers:o,body:e instanceof FormData?e:JSON.stringify(e)}),c=await s.text(),l=null;if(c.trim().length>0)try{l=JSON.parse(c)}catch{l=null}return{status:s.status,statusText:s.statusText,payload:l,rawBody:c}}getFetchImplementationOrThrow(){if(!this.fetchImplementation)throw Error("Global `fetch` function is not available, pass a fetch implementation to the Twenty client");return this.fetchImplementation}async resolveHeaders(){return typeof this.headers==`function`?await this.headers()??{}:this.headers??{}}shouldRefreshToken(e){return e.status===401||tY(e.payload)}assertResponseIsSuccessful(e){if(e.status<200||e.status>=300)throw Error(`${e.statusText}: ${e.rawBody}`);if(e.payload===null)throw Error(`Invalid JSON response`);return e.payload}async requestRefreshedAccessToken(){let e=globalThis.frontComponentHostCommunicationApi?.requestAccessTokenRefresh;return typeof e==`function`?(this.refreshAccessTokenPromise||=e().then(e=>typeof e!=`string`||e.length===0?null:(this.setAuthorizationToken(e),e)).catch(e=>(console.error(`Twenty client: token refresh failed`,e),null)).finally(()=>{this.refreshAccessTokenPromise=null}),this.refreshAccessTokenPromise):null}setAuthorizationToken(e){this.authorizationToken=e;let t=QJ();t[YJ]=e}},iY=100,aY=async()=>{let e=new rY,t=new Map,n;do{let{objects:r}=await e.query({objects:{__args:{paging:{first:iY,...n===void 0?{}:{after:n}},filter:{}},pageInfo:{hasNextPage:!0,endCursor:!0},edges:{node:{nameSingular:!0,namePlural:!0,labelSingular:!0,labelIdentifierFieldMetadataId:!0,fieldsList:{id:!0,name:!0}}}}});for(let{node:e}of r.edges)t.set(e.nameSingular,{nameSingular:e.nameSingular,namePlural:e.namePlural,labelSingular:e.labelSingular,labelFieldName:e.fieldsList?.find(t=>t.id===e.labelIdentifierFieldMetadataId)?.name});n=r.pageInfo.hasNextPage===!0?r.pageInfo.endCursor??void 0:void 0}while(n!==void 0);return t},oY=async e=>{let{fields:t}=await new rY().query({fields:{__args:{filter:{id:{eq:e}},paging:{first:1}},edges:{node:{options:!0}}}}),n=t.edges[0]?.node.options;return Array.isArray(n)?n.flatMap(e=>{let{value:t,label:n}=e??{};return typeof t==`string`&&typeof n==`string`?[{value:t,label:n}]:[]}):[]},sY=async()=>{let e=new rY,t=[],n;do{let{objects:r}=await e.query({objects:{__args:{paging:{first:iY,...n===void 0?{}:{after:n}},filter:{isActive:{is:!0},isSystem:{is:!1}}},pageInfo:{hasNextPage:!0,endCursor:!0},edges:{node:{id:!0,nameSingular:!0,namePlural:!0,labelSingular:!0,icon:!0,fieldsList:{id:!0,name:!0,label:!0,type:!0,icon:!0,isActive:!0,isSystem:!0,relation:{type:!0}}}}}});for(let{node:e}of r.edges)t.push({id:e.id,nameSingular:e.nameSingular,namePlural:e.namePlural,labelSingular:e.labelSingular,icon:e.icon,fields:(e.fieldsList??[]).map(e=>({id:e.id,name:e.name,label:e.label,type:String(e.type),icon:e.icon,isActive:e.isActive,isSystem:e.isSystem,relationType:e.relation?.type??null}))});n=r.pageInfo.hasNextPage===!0?r.pageInfo.endCursor??void 0:void 0}while(n!==void 0);return t},cY=[{value:`TEXT`,label:`Текст`,type:`TEXT`},{value:`NUMBER`,label:`Число`,type:`NUMBER`},{value:`DATE`,label:`Дата`,type:`DATE`},{value:`MEMBER`,label:`Сотрудник`,type:`RECORD`,objectName:`workspaceMember`},{value:`COMPANY`,label:`Компания`,type:`RECORD`,objectName:`company`},{value:`PERSON`,label:`Контакт`,type:`RECORD`,objectName:`person`},{value:`OPPORTUNITY`,label:`Сделка`,type:`RECORD`,objectName:`opportunity`}],lY=(e,t)=>Object.fromEntries(Object.entries(e??{}).filter(([e])=>e!==t)),uY=e=>cY.find(t=>t.type===e.type&&(!(`objectName`in t)||t.objectName===e.settings?.objectName))?.value,dY=(e,t)=>{let n=cY.find(e=>e.value===t);if(n===void 0)return e;let r=lY(e.settings,`objectName`);return{...e,type:n.type,value:void 0,settings:`objectName`in n?{...r,objectName:n.objectName}:r}},fY={а:`a`,б:`b`,в:`v`,г:`g`,д:`d`,е:`e`,ё:`e`,ж:`zh`,з:`z`,и:`i`,й:`y`,к:`k`,л:`l`,м:`m`,н:`n`,о:`o`,п:`p`,р:`r`,с:`s`,т:`t`,у:`u`,ф:`f`,х:`h`,ц:`ts`,ч:`ch`,ш:`sh`,щ:`sch`,ъ:``,ы:`y`,ь:``,э:`e`,ю:`yu`,я:`ya`},pY=e=>{let t=[...e.toLowerCase()].map(e=>fY[e]??e).join(``).split(/[^a-z0-9]+/).filter(e=>e.length>0).map((e,t)=>t===0?e:e[0].toUpperCase()+e.slice(1)).join(``);return/^[a-z]/.test(t)?t:`field${t}`},mY=(e,t)=>{let n=pY(e),r=n,i=2;for(;t.includes(r);)r=`${n}${i}`,i++;return r},hY=(e,t)=>({id:t(),name:mY(`field ${e.length+1}`,e.map(({name:e})=>e)),label:``,type:`TEXT`,settings:{}}),gY=(e,t)=>{let n=lY(e.settings,UG);return{...e,settings:t?{...n,[UG]:!0}:n}},_Y={NUMBER:`number`,DATE:`string`,TEXT:`string`},vY=e=>Object.fromEntries(XG(e).map(e=>[e.name,e.type===`RECORD`?{isLeaf:!1,type:`object`,label:e.label,value:{id:{isLeaf:!0,type:`string`,label:`Id`,value:null}}}:{isLeaf:!0,type:_Y[e.type]??`unknown`,label:e.label,value:null}])),yY=e=>Object.fromEntries(XG(e).map(e=>[e.name,e.type===`RECORD`?{id:``}:e.type===`NUMBER`?0:``])),bY={name:`smbAssignee`,label:`Исполнитель`,type:`RECORD`},xY={name:`smbDueAt`,label:`Срок`,type:`DATE`},SY=e=>{let t=e.find(e=>JG(e)===`ASSIGNEE`)?.value,n=e.find(e=>JG(e)===`DUE_AT`)?.settings?.[GG];return{assignee:typeof t==`string`&&t.length>0?t:null,dueInDays:typeof n==`number`&&n>0?n:null,requiredFieldIds:e.filter(e=>JG(e)===void 0&&e.settings?.smbIsRequired===!0).map(({id:e})=>e)}},CY=(e,t,n,r,i)=>({...n,...t,id:t?.id??i(),value:r.value,settings:{...t?.settings,...r.settings,[WG]:e}}),wY=({fields:e,settings:t,createId:n})=>{let r=e.filter(e=>JG(e)===void 0).map(e=>{let n={...e.settings};delete n[UG];let r=t.requiredFieldIds.includes(e.id);return{...e,settings:r?{...n,[UG]:!0}:n}}),i=[];return t.assignee!==null&&i.push(CY(`ASSIGNEE`,e.find(e=>JG(e)===`ASSIGNEE`),bY,{value:t.assignee,settings:{}},n)),t.dueInDays!==null&&i.push(CY(`DUE_AT`,e.find(e=>JG(e)===`DUE_AT`),xY,{value:void 0,settings:{[GG]:t.dueInDays}},n)),[...i,...r]},TY={ACTOR:[[`source`,`SELECT`],[`workspaceMemberId`,`UUID`],[`name`,`TEXT`],[`context`,`RAW_JSON`]],ADDRESS:[[`addressStreet1`,`TEXT`],[`addressStreet2`,`TEXT`],[`addressCity`,`TEXT`],[`addressPostcode`,`TEXT`],[`addressState`,`TEXT`],[`addressCountry`,`TEXT`],[`addressLat`,`NUMERIC`],[`addressLng`,`NUMERIC`]],CURRENCY:[[`amountMicros`,`NUMERIC`],[`currencyCode`,`TEXT`]],EMAILS:[[`primaryEmail`,`TEXT`],[`additionalEmails`,`RAW_JSON`]],FULL_NAME:[[`firstName`,`TEXT`],[`lastName`,`TEXT`]],LINKS:[[`primaryLinkLabel`,`TEXT`],[`primaryLinkUrl`,`TEXT`],[`secondaryLinks`,`RAW_JSON`]],PHONES:[[`primaryPhoneNumber`,`TEXT`],[`primaryPhoneCountryCode`,`TEXT`],[`primaryPhoneCallingCode`,`TEXT`],[`additionalPhones`,`RAW_JSON`]],RICH_TEXT:[[`blocknote`,`TEXT`],[`markdown`,`TEXT`]]},EY=[`searchVector`,`position`],DY=e=>e.replace(/([A-Z])/g,` $1`).replace(/^./,e=>e.toUpperCase()),OY=e=>{let t=e.icon??void 0;if(e.type===`RELATION`)return[[`${e.name}Id`,{isLeaf:!0,icon:t,type:`UUID`,label:DY(`${e.name}Id`),value:null,fieldMetadataId:e.id,isCompositeSubField:!1}]];let n=TY[e.type];return n===void 0?[[e.name,{isLeaf:!0,icon:t,type:e.type,label:e.label,value:null,fieldMetadataId:e.id,isCompositeSubField:!1}]]:[[e.name,{isLeaf:!1,icon:t,type:e.type,label:e.label,fieldMetadataId:e.id,value:Object.fromEntries(n.map(([t,n])=>[t,{isLeaf:!0,type:n,label:DY(t),value:null,fieldMetadataId:e.id,isCompositeSubField:!0}]))}]]},kY=e=>e.isActive!==!1&&!(e.isSystem===!0&&EY.includes(e.name))&&e.type!==`MORPH_RELATION`&&(e.type!==`RELATION`||e.relationType===`MANY_TO_ONE`),AY=e=>({isLeaf:!1,icon:e.icon??void 0,label:e.labelSingular,value:{object:{icon:e.icon??void 0,label:e.labelSingular,objectMetadataId:e.id,fieldIdName:`id`},fields:Object.fromEntries(e.fields.filter(kY).flatMap(OY)),_outputSchemaType:`RECORD`}}),jY={name:`Запуск вручную`,type:`MANUAL`,position:{x:0,y:0},settings:{outputSchema:{},availability:{type:`GLOBAL`},icon:`IconPlayerPlay`,isPinned:!1},nextStepIds:[]},MY=(e,t,n)=>({name:RG,type:`WEBHOOK`,position:e.position??{x:0,y:0},nextStepIds:e.nextStepIds??[],settings:{httpMethod:`POST`,authentication:`API_KEY`,expectedBody:{...yY(t),...n===void 0?{}:{[zG]:{id:``}}},outputSchema:{...vY(t),...n===void 0?{}:{[zG]:AY(n)}}}}),NY=e=>({...jY,...e.type===`MANUAL`?{name:e.name??jY.name,settings:e.settings}:{},position:e.position??jY.position,nextStepIds:e.nextStepIds??[]}),PY=async(e,t)=>{let n=await e.listVersions(t),r=n.find(({status:e})=>e===`DRAFT`)?.id;if(r!==void 0)return e.getVersion(r);if(n.length===0)return;await e.createDraft(t,n[0].id);let i=(await e.listVersions(t)).find(({status:e})=>e===`DRAFT`)?.id;return i===void 0?void 0:e.getVersion(i)},FY=150,IY=(e,t)=>{let n=JSON.stringify(e.settings??{}),r=n.split(`{{${t}.`).join(`{{${KG}.`);return r===n?void 0:{...e,settings:JSON.parse(r)}},LY=async(e,t)=>{let n=sK(t.steps);if(n===void 0)return;await e.deleteStep(t.id,n.id);let r=n.position?.y;for(let i of t.steps??[]){if(i.id===n.id)continue;let a=IY(i,n.id),o=typeof r==`number`&&typeof i.position?.y==`number`&&i.position.y>r;if(a===void 0&&!o)continue;let s=a??i;await e.updateStep(t.id,o&&i.position?{...s,position:{...i.position,y:i.position.y-FY}}:s)}},RY=async(e,{workflowId:t,fields:n,launchObject:r})=>{let i=await PY(e,t);if(i===void 0)return{status:`NO_VERSION`};let a=i.trigger??jY;if(a.type!==`MANUAL`&&!aK(a))return{status:`NOT_MANUAL`};await LY(e,i);let o=(await e.getVersion(i.id))?.trigger??a;return await e.updateTrigger(i.id,n.length>0||r!==void 0?MY(o,n,r):NY(o)),{status:`SAVED`,workflowVersionId:i.id}},zY=async(e,{versionId:t,stepId:n,settings:r,createId:i})=>{let a=await e.getVersion(t),o=a?.steps?.find(({id:e})=>e===n);if(a===void 0||o===void 0||!pK(o))return`NOT_FOUND`;if(a.status!==`DRAFT`)return`NOT_DRAFT`;let s=wY({fields:tK(o.settings.input),settings:r,createId:i});return await e.updateStep(a.id,{...o,settings:{...o.settings,input:s}}),`SAVED`},BY=e=>e?`app`:AJ()===void 0?`standalone`:`session`,VY=null,HY=e=>{VY=typeof e==`string`&&e.length>0?e.replace(/\/$/,``):null},UY=()=>VY===null?wG(S,{section:`processes`}):`${VY}${S}?section=processes`,WY=class extends Error{constructor(){super(`В этой версии Twenty процессы меняются на полной странице документооборота: ${UY()}`),this.name=`StandalonePageNeededError`}},GY=10,KY=400,qY=async e=>{for(let t=0;t<GY;t++){let{records:t}=await TG(`workflowVersions`,{filter:oG(`workflowId`,e),limit:1});if(t.length>0)return;await new Promise(e=>setTimeout(e,KY))}},JY=async(e,t)=>{if(e===`standalone`)throw new WY;if(e===`app`){let e=await DG(`workflows`,{name:t,smbSection:LG});if(e===void 0)throw Error(`процесс создан, но сервер его не вернул`);await qY(e.id),await FG(`/docflow/processes/launch-fields`,{workflowId:e.id,fields:[]}),await Dl(xl.RecordShowPage,{objectNameSingular:`workflow`,objectRecordId:e.id});return}let n=await PJ.create(t);await FG(`/docflow/processes/catalog`,{action:`add`,workflowIds:[n]}),await RY(NJ,{workflowId:n,fields:[]}),await Dl(xl.WorkflowCoreShowPage,{coreWorkflowId:n})},YY=async(e,t,n)=>{if(e===`app`&&t.workspaceWorkflowId!==null)await OG(`workflows`,t.workspaceWorkflowId,{name:n});else if(e===`session`)await PJ.rename(t.workflowId,n);else throw new WY},XY=async(e,t)=>{let n=t.map(({workspaceWorkflowId:e})=>e);if(e===`app`&&n.every(e=>e!==null))await NG(`workflows`,n);else if(e===`session`)await PJ.remove(t.map(({workflowId:e})=>e));else throw new WY},ZY=async(e,t,n)=>{if(e===`app`){await FG(`/docflow/processes/publish`,{workflowId:t.workflowId,publish:n});return}if(e!==`session`)throw new WY;if(!n){if(t.activeVersionId===void 0)throw Error(`Процесс не опубликован`);await PJ.deactivate(t.activeVersionId);return}let r=t.draftVersionId??(t.activeVersionId===void 0?t.deactivatedVersionId:void 0);if(r===void 0)throw Error(`Нечего публиковать: изменений после публикации нет`);await PJ.activate(r)},QY=async(e,{workflowId:t,fields:n,launchObject:r})=>{if(e===`app`)return FG(`/docflow/processes/launch-fields`,{workflowId:t,fields:n,launchObject:r});if(e!==`session`)throw new WY;let i=r===null?void 0:(await sY()).find(({nameSingular:e})=>e===r);if(r!==null&&i===void 0)throw Error(`Объект «${r}» не найден`);if((await RY(NJ,{workflowId:t,fields:n,launchObject:i})).status===`NOT_MANUAL`)throw Error(`Запуск процесса не изменён: он запускается не вручную`);return FG(`/docflow/processes/launch-fields`,{workflowId:t,fields:n,launchObject:r,syncTrigger:!1})},$Y=async(e,{versionId:t,stepId:n,settings:r})=>{if(e===`app`){await FG(`/docflow/processes/step-settings`,{workflowVersionId:t,stepId:n,settings:r});return}if(e!==`session`)throw new WY;let i=await zY(NJ,{versionId:t,stepId:n,settings:r,createId:()=>crypto.randomUUID()});if(i===`NOT_FOUND`)throw Error(`Шаг «Человеческий ввод» не найден`);if(i===`NOT_DRAFT`)throw Error(`Менять можно только черновик процесса`)},eX=async(e,t)=>{if(e===`session`)return t.draftVersionId===void 0?void 0:NJ.getVersion(t.draftVersionId);if(t.workspaceWorkflowId===null)return;let{records:n}=await TG(`workflowVersions`,{filter:mG(oG(`workflowId`,t.workspaceWorkflowId),oG(`status`,`DRAFT`)),limit:1});return n[0]},tX=e=>{if(typeof e==`string`&&e.trim().length>0)return e.trim();if(typeof e==`object`&&e){let{firstName:t,lastName:n}=e,r=[t,n].filter(e=>typeof e==`string`&&e.length>0).join(` `);return r.length>0?r:void 0}};fe();var nX=100,rX=``,iX=e=>typeof e==`object`&&e&&typeof e.id==`string`?e.id:rX,aX=({field:e,value:t,onChange:n,disabled:r})=>{let i=e.settings?.objectName,{data:a,error:o}=zK(async()=>{if(typeof i!=`string`)return[];let e=(await aY()).get(i);if(e===void 0)return[];let{records:t}=await TG(e.namePlural,{limit:nX});return t.map(t=>({value:String(t.id),label:tX(e.labelFieldName===void 0?void 0:t[e.labelFieldName])??String(t.id)}))},[i]);return(0,Q.jsx)(Eq,{label:e.label,value:iX(t),disabled:r||o!==void 0,options:[{value:rX,label:`Не выбрано`},...a??[]],onChange:e=>n(e===rX?null:{id:e})})},oX=({field:e,value:t,onChange:n,disabled:r})=>{let i=e.settings?.selectedFieldId,{data:a}=zK(async()=>typeof i==`string`?oY(i):[],[i]),o=e.type===`MULTI_SELECT`,s=M();if(o){let i=Array.isArray(t)?t.filter(e=>typeof e==`string`):[];return(0,Q.jsx)(Cq,{label:e.label,children:(0,Q.jsx)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:s.spacing[2]},children:(a??[]).map(e=>(0,Q.jsxs)(`label`,{style:{alignItems:`center`,display:`flex`,gap:s.spacing[1],color:s.font.color.primary,fontWeight:`normal`},children:[(0,Q.jsx)(`input`,{type:`checkbox`,disabled:r,checked:i.includes(e.value),onChange:t=>n(t.target.checked?[...i,e.value]:i.filter(t=>t!==e.value))}),e.label]},e.value))})})}return(0,Q.jsx)(Eq,{label:e.label,value:typeof t==`string`?t:rX,disabled:r,options:[{value:rX,label:`Не выбрано`},...a??[]],onChange:e=>n(e===rX?null:e)})},sX=e=>{let{field:t,value:n,onChange:r,disabled:i}=e;switch(t.type){case`RECORD`:return(0,Q.jsx)(aX,{...e});case`SELECT`:case`MULTI_SELECT`:return(0,Q.jsx)(oX,{...e});case`NUMBER`:return(0,Q.jsx)(wq,{label:t.label,type:`number`,disabled:i,value:typeof n==`number`?String(n):typeof n==`string`?n:``,placeholder:t.placeholder,onChange:e=>r(e.trim()===``?null:Number(e))});case`DATE`:return(0,Q.jsx)(wq,{label:t.label,type:`date`,disabled:i,value:typeof n==`string`?n.slice(0,10):``,onChange:e=>r(e===``?null:e)});default:return(0,Q.jsx)(wq,{label:t.label,disabled:i,value:typeof n==`string`?n:``,placeholder:t.placeholder,onChange:e=>r(e)})}},cX=({fields:e,values:t,onChange:n,disabled:r=!1})=>{let i=M();return(0,Q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:i.spacing[3]},children:XG(e).map(e=>(0,Q.jsx)(sX,{field:{...e,label:YG(e)?`${e.label} *`:e.label},value:e.name in t?t[e.name]:e.value,disabled:r,onChange:r=>n({...t,[e.name]:r})},e.id))})},lX=e=>{e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},uX=()=>{try{return crypto.getRandomValues(new Uint8Array(16))}catch{return Uint8Array.from({length:16},()=>Math.floor(Math.random()*256))}},dX=()=>{try{let e=crypto.randomUUID();if(typeof e==`string`&&e.length>0)return e}catch{}return lX(uX())};fe();var fX=({fields:e,onChange:t,variablePrefix:n,disabled:r=!1})=>{let i=M(),[a]=(0,L.useState)(()=>new Set(e.map(({id:e})=>e))),[o,s]=(0,L.useState)(!1),c=(n,r)=>t(e.map(e=>e.id===n?r(e):e)),l=(t,n)=>a.has(t.id)||n.trim().length===0?{...t,label:n}:{...t,label:n,name:mY(n,e.filter(({id:e})=>e!==t.id).map(({name:e})=>e))},u=(n,r)=>{let i=n+r;if(i<0||i>=e.length)return;let a=[...e];[a[n],a[i]]=[a[i],a[n]],t(a)};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:i.spacing[2]},children:[e.length===0&&(0,Q.jsx)(Oq,{tone:`hint`,children:`Полей нет.`}),e.map((a,o)=>{let s=uY(a);return(0,Q.jsxs)(`div`,{style:{background:i.background.transparent.lighter,borderRadius:i.border.radius.md,display:`flex`,flexDirection:`column`,gap:i.spacing[2],padding:i.spacing[2]},children:[(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[(0,Q.jsx)(`div`,{style:{flex:`2 1 180px`},children:(0,Q.jsx)(wq,{label:`Название`,placeholder:`Например, Сумма договора`,value:a.label,disabled:r,onChange:e=>c(a.id,t=>l(t,e))})}),(0,Q.jsx)(`div`,{style:{flex:`1 1 120px`},children:s===void 0?(0,Q.jsx)(wq,{label:`Тип`,value:a.type,disabled:!0,onChange:()=>void 0}):(0,Q.jsx)(Eq,{label:`Тип`,value:s,disabled:r,options:cY.map(({value:e,label:t})=>({value:e,label:t})),onChange:e=>c(a.id,t=>dY(t,e))})})]}),(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[(0,Q.jsx)(Dq,{label:`Обязательное`,checked:YG(a),disabled:r,onChange:e=>c(a.id,t=>gY(t,e))}),n!==void 0&&(0,Q.jsx)(Aq,{children:`{{${n}.${a.name}}}`}),(0,Q.jsxs)(`div`,{style:{display:`flex`,gap:i.spacing[1],marginLeft:`auto`},children:[(0,Q.jsx)($,{variant:`ghost`,size:`sm`,title:`Выше`,"aria-label":`Поднять поле ${a.label}`,disabled:r||o===0,onClick:()=>u(o,-1),children:`↑`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,title:`Ниже`,"aria-label":`Опустить поле ${a.label}`,disabled:r||o===e.length-1,onClick:()=>u(o,1),children:`↓`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,disabled:r,onClick:()=>t(e.filter(({id:e})=>e!==a.id)),children:`Удалить`})]})]})]},a.id)}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[(0,Q.jsx)($,{variant:`outline`,size:`sm`,disabled:r,onClick:()=>t([...e,hY(e,dX)]),children:`Добавить поле`}),e.length>0&&(0,Q.jsx)($,{variant:`ghost`,size:`sm`,onClick:()=>s(e=>!e),children:o?`Скрыть предпросмотр`:`Как увидит исполнитель`})]}),o&&e.length>0&&(0,Q.jsx)(`div`,{style:{borderRadius:i.border.radius.md,boxShadow:`inset 0 0 0 1px ${i.border.color.light}`,padding:i.spacing[3]},children:(0,Q.jsx)(cX,{fields:e,values:{},disabled:!0,onChange:()=>void 0})})]})};fe();var pX=``,mX=``,hX=[`workflow`,`workflowVersion`,`workflowRun`,`workflowAutomatedTrigger`],gX=async()=>(await sY()).filter(({nameSingular:e})=>!hX.includes(e)).map(({nameSingular:e,labelSingular:t})=>({value:e,label:t})).sort((e,t)=>e.label.localeCompare(t.label,`ru`)),_X={display:`flex`,flexDirection:`column`},vX=({editing:e,workflowId:t,initialFields:n,initialLaunchObject:r,onSaved:i})=>{let a=M(),[o,s]=(0,L.useState)(n),[c,l]=(0,L.useState)(r??mX),{data:u,error:d}=zK(gX,[]),[f,p]=(0,L.useState)(!1),[m,h]=(0,L.useState)(),g=async()=>{let n=eK(o);if(n!==void 0)h(n);else{p(!0),h(void 0),xG(`process: save launch fields`,{workflowId:t,fields:o,launchObject:c});try{xG(`process: launch fields saved`,await QY(e,{workflowId:t,fields:o,launchObject:c===mX?null:c})),await El({message:o.length>0||c!==mX?`Параметры сохранены: процесс начинается с «${RG}», опубликуйте его`:`Параметры убраны`,variant:`success`}),i()}catch(e){SG(`process: save launch fields failed`,e,{workflowId:t}),h(IG(e,`Не удалось сохранить параметры`))}finally{p(!1)}}};return(0,Q.jsxs)(`section`,{style:{..._X,gap:a.spacing[2]},"aria-label":`Параметры запуска`,children:[(0,Q.jsx)(kq,{children:`Параметры запуска`}),(0,Q.jsxs)(Oq,{tone:`hint`,children:[`Что человек заполняет перед запуском и на какой записи запускает процесс. Первым блоком процесса становится «`,RG,`»: в следующих шагах значения и запись выбираются как его переменные, например сотрудник — в поле «Исполнитель». Запускают процесс командой «Запустить процесс» в меню (Cmd+K) или на выбранных записях. Без параметров и записи процесс начинается с обычного «Запуск вручную».`]}),(0,Q.jsx)(Eq,{label:`Где запускать`,value:c,disabled:f,options:[{value:mX,label:`Откуда угодно, без записи`},...u??(c===mX?[]:[{value:c,label:c}])].map(e=>e.value===mX?e:{...e,label:`На записи: ${e.label}`}),onChange:l}),d!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:IG(d,`Не удалось прочитать объекты`)}),c!==mX&&(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:a.spacing[2]},children:[(0,Q.jsx)(Oq,{tone:`hint`,children:`Запись, на которой запустили процесс:`}),(0,Q.jsx)(Aq,{children:`{{trigger.record}}`})]}),(0,Q.jsx)(fX,{fields:o,onChange:s,variablePrefix:KG,disabled:f}),m!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:m}),(0,Q.jsx)(`div`,{children:(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`sm`,loading:f,onClick:()=>void g(),children:`Сохранить параметры`})})]})},yX=({editing:e,workflowVersionId:t,step:n})=>{let r=M(),{members:i}=OJ(),a=tK(mK(n)),[o,s]=(0,L.useState)(SY(a)),[c,l]=(0,L.useState)(!1),u=async()=>{l(!0);try{await $Y(e,{versionId:t,stepId:n.id,settings:o}),await El({message:`Настройки шага сохранены`,variant:`success`})}catch(e){await El({message:IG(e,`Не удалось сохранить настройки шага`),variant:`error`})}finally{l(!1)}},d=(e,t)=>s(n=>({...n,requiredFieldIds:t?[...n.requiredFieldIds,e]:n.requiredFieldIds.filter(t=>t!==e)}));return(0,Q.jsxs)(`div`,{style:{background:r.background.transparent.lighter,borderRadius:r.border.radius.md,display:`flex`,flexDirection:`column`,gap:r.spacing[2],padding:r.spacing[3]},children:[(0,Q.jsx)(`strong`,{children:n.name}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:r.spacing[2]},children:[(0,Q.jsx)(`div`,{style:{flex:`2 1 200px`},children:(0,Q.jsx)(Eq,{label:`Кто выполняет задание`,value:o.assignee??pX,options:[{value:pX,label:`Запустивший процесс`},...i.map(e=>({value:e.id,label:xK(e)||e.id}))],onChange:e=>s(t=>({...t,assignee:e===pX?null:e}))})}),(0,Q.jsx)(`div`,{style:{flex:`1 1 120px`},children:(0,Q.jsx)(wq,{label:`Срок в днях`,type:`number`,value:o.dueInDays===null?``:String(o.dueInDays),onChange:e=>s(t=>({...t,dueInDays:e===``?null:Number(e)}))})})]}),XG(a).map(e=>(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:r.spacing[2]},children:[(0,Q.jsx)(Dq,{label:`${e.label} обязательное`,checked:o.requiredFieldIds.includes(e.id),onChange:t=>d(e.id,t)}),(0,Q.jsx)(Aq,{children:`{{${n.id}.${e.name}}}`})]},e.id)),(0,Q.jsx)(`div`,{children:(0,Q.jsx)($,{variant:`outline`,size:`sm`,loading:c,onClick:()=>void u(),children:`Сохранить шаг`})})]})},bX=()=>{let e=M(),t=UY();return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:e.spacing[2]},children:[(0,Q.jsx)(Oq,{tone:`hint`,children:`В этой версии Twenty процессы создаются и меняются на полной странице документооборота (она открыта со входом в CRM) или в редакторе Twenty. Здесь их можно запускать.`}),(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:e.spacing[2]},children:[(0,Q.jsx)(Aq,{children:t}),(0,Q.jsx)($,{size:`sm`,onClick:()=>void Tl(t).then(()=>El({message:`Ссылка скопирована`,variant:`success`})),children:`Скопировать ссылку`})]})]})},xX=({workflowId:e,onLaunchSaved:t})=>{let n=M(),[r,i]=(0,L.useState)(0),{data:a,error:o,loading:s,reload:c}=zK(async()=>{let{processes:t,canAppEdit:n,crmUrl:r}=await FG(`/docflow/processes/catalog`,{action:`list`});HY(r);let i=t.find(t=>t.workflowId===e||t.workspaceWorkflowId===e),a=BY(n);return i===void 0||a===`standalone`?{process:i,editing:a,draft:void 0}:{process:i,editing:a,draft:await eX(a,{workflowId:i.workflowId,workspaceWorkflowId:i.workspaceWorkflowId,draftVersionId:i.draft?.id})}},[e]),l=a?.draft,u=l?.steps?.filter(pK)??[];if((0,L.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&c()};return window.addEventListener(`focus`,e),document.addEventListener(`visibilitychange`,e),()=>{window.removeEventListener(`focus`,e),document.removeEventListener(`visibilitychange`,e)}},[c]),s&&a===void 0)return(0,Q.jsx)(iJ,{rows:4});if(o!==void 0)return(0,Q.jsx)(Oq,{tone:`danger`,children:IG(o,`Не удалось прочитать процесс`)});if(a?.process===void 0)return(0,Q.jsx)(Oq,{tone:`hint`,children:`Процесс не относится к документообороту: добавьте его на странице «Процессы».`});if(a.editing===`standalone`)return(0,Q.jsx)(bX,{});let{process:d,editing:f}=a;return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:n.spacing[6]},children:[(0,Q.jsx)(vX,{editing:f,workflowId:d.workflowId,initialFields:d.launchFields,initialLaunchObject:d.savedLaunchObject,onSaved:()=>{t?.(d,f),c().then(()=>i(e=>e+1))}},`${d.workflowId}:${r}`),l!==void 0&&u.length>0&&(0,Q.jsxs)(`section`,{style:{..._X,gap:n.spacing[2]},"aria-label":`Задания шагов`,children:[(0,Q.jsx)(kq,{children:`Задания шагов «Человеческий ввод»`}),(0,Q.jsx)(Oq,{tone:`hint`,children:`Каждый такой шаг становится заданием. Поля шага задаются в редакторе процесса; заполненные значения следующие шаги читают переменными, показанными рядом с полем.`}),u.map(e=>(0,Q.jsx)(yX,{editing:f,workflowVersionId:l.id,step:e},`${l.id}:${e.id}`))]}),l===void 0&&(0,Q.jsx)(Oq,{tone:`hint`,children:`Задания шагов настраиваются в черновике: он появится, когда процесс изменят в редакторе.`})]})};fe();var SX={done:`пройден`,current:`сейчас`,upcoming:`впереди`,failed:`ошибка`,skipped:`пропущен`},CX=10,wX=e=>{let t=e.findIndex(({state:e})=>e===`current`);return t>=0?t:e.reduce((e,{state:t},n)=>t===`done`?n:e,-1)},TX=()=>{let e=M();return{dot:t=>t===`current`?e.color.blue:t===`failed`?e.color.red:t===`done`?e.font.color.tertiary:e.border.color.strong,isFilled:e=>e===`done`||e===`current`||e===`failed`,reachedLine:e.font.color.light,aheadLine:e.border.color.medium}},EX=({state:e,isFocus:t=!1})=>{let n=M(),r=TX(),i=r.dot(e);return(0,Q.jsx)(`span`,{"aria-hidden":!0,style:{background:r.isFilled(e)?i:n.background.primary,border:`2px solid ${i}`,borderRadius:`50%`,...HK,boxShadow:t||e===`current`?`0 0 0 3px ${n.background.transparent.blue}`:void 0,boxSizing:`border-box`,display:`block`,flexShrink:0,height:`${CX}px`,width:`${CX}px`}})},DX=({items:e})=>{let t=M(),n=TX(),r=wX(e);return(0,Q.jsx)(`ol`,{"aria-label":`Ход процесса`,style:{display:`flex`,flexDirection:`column`,listStyle:`none`,margin:0,padding:0},children:e.map((i,a)=>{let o=a===e.length-1,s=a<r,c=i.state===`upcoming`||i.state===`skipped`;return(0,Q.jsxs)(`li`,{"aria-current":i.state===`current`?`step`:void 0,style:{display:`grid`,gap:t.spacing[3],gridTemplateColumns:`${CX}px minmax(0, 1fr)`},children:[(0,Q.jsxs)(`div`,{"aria-hidden":!0,style:{alignItems:`center`,display:`flex`,flexDirection:`column`,paddingTop:`5px`},children:[(0,Q.jsx)(EX,{state:i.state}),!o&&(0,Q.jsx)(`span`,{style:{background:s?n.reachedLine:`transparent`,borderLeft:s?`none`:`2px dashed ${n.aheadLine}`,flex:1,marginTop:`4px`,minHeight:t.spacing[4],width:`2px`}})]}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:t.spacing[1],minWidth:0,paddingBottom:o?0:t.spacing[4]},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`baseline`,display:`flex`,gap:t.spacing[2],justifyContent:`space-between`},children:[(0,Q.jsx)(`span`,{style:{color:c?t.font.color.tertiary:t.font.color.primary,fontWeight:i.state===`current`?t.font.weight.semiBold:t.font.weight.medium,textDecoration:i.state===`skipped`?`line-through`:void 0},children:i.title}),(0,Q.jsx)(`span`,{style:{color:i.state===`current`?t.color.blue:i.state===`failed`?t.font.color.danger:t.font.color.light,flexShrink:0,fontSize:t.font.size.xs},children:SX[i.state]})]}),i.meta!==void 0&&(0,Q.jsx)(`div`,{style:{color:t.font.color.tertiary,fontSize:t.font.size.sm},children:i.meta}),i.content!==void 0&&(0,Q.jsx)(`div`,{style:{marginTop:t.spacing[1]},children:i.content})]})]},i.key)})})},OX=({item:e,index:t,total:n,isLineReached:r})=>{let i=M(),a=TX(),[o,s]=(0,L.useState)(!1),c=t===n-1,l=t===0?{top:0}:c?{bottom:0}:{top:`50%`,transform:`translateY(-50%)`};return(0,Q.jsxs)(`li`,{"aria-current":e.state===`current`?`step`:void 0,style:{alignItems:`center`,display:`flex`,flex:c?`0 0 auto`:1,flexDirection:`column`,minHeight:0,position:`relative`},children:[(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Шаг ${t+1} из ${n}: ${typeof e.title==`string`?e.title:``} (${SX[e.state]})`,onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),onFocus:()=>s(!0),onBlur:()=>s(!1),style:{alignItems:`center`,background:`transparent`,border:`none`,color:`inherit`,cursor:`default`,display:`flex`,flexShrink:0,justifyContent:`center`,outline:`none`,padding:i.spacing[1],WebkitTapHighlightColor:`transparent`},children:(0,Q.jsx)(EX,{state:e.state,isFocus:e.isFocus})}),!c&&(0,Q.jsx)(`span`,{"aria-hidden":!0,style:{background:r?a.reachedLine:`transparent`,borderLeft:r?`none`:`2px dashed ${a.aheadLine}`,boxSizing:`border-box`,flex:1,minHeight:i.spacing[2],width:`2px`}}),o&&(0,Q.jsxs)(`div`,{role:`tooltip`,style:{...l,background:i.background.primary,border:`1px solid ${i.border.color.medium}`,borderRadius:i.border.radius.md,boxShadow:i.boxShadow.strong,boxSizing:`border-box`,display:`flex`,flexDirection:`column`,gap:i.spacing[1],padding:i.spacing[3],pointerEvents:`none`,left:`calc(100% + ${i.spacing[2]})`,position:`absolute`,width:`240px`,zIndex:20},children:[(0,Q.jsxs)(`span`,{style:{color:i.font.color.light,fontSize:i.font.size.xs},children:[`Шаг `,t+1,` из `,n,` · `,SX[e.state]]}),(0,Q.jsx)(`strong`,{style:{fontSize:i.font.size.md,fontWeight:i.font.weight.medium},children:e.title}),e.meta!==void 0&&e.meta!==``&&(0,Q.jsx)(`span`,{style:{color:i.font.color.tertiary,fontSize:i.font.size.sm},children:e.meta}),e.details!==void 0&&(0,Q.jsx)(`div`,{style:{marginTop:i.spacing[1]},children:e.details})]})]})},kX=({items:e})=>{let t=wX(e);return(0,Q.jsx)(`ol`,{"aria-label":`Ход процесса`,style:{alignItems:`center`,alignSelf:`stretch`,display:`flex`,flexDirection:`column`,flexShrink:0,height:`100%`,listStyle:`none`,margin:0,minHeight:0,padding:0,width:`26px`},children:e.map((n,r)=>(0,Q.jsx)(OX,{item:n,index:r,total:e.length,isLineReached:r<t},n.key))})},AX={SUCCESS:`done`,FAILED:`failed`,STOPPED:`failed`,PENDING:`current`,RUNNING:`current`,SKIPPED:`skipped`},jX=e=>{let t=e?.flow?.steps??[],n=new Map(t.map(e=>[e.id,e])),r=[],i=new Set,a=[...e?.flow?.trigger?.nextStepIds??[]];for(;a.length>0;){let e=a.shift(),t=n.get(e);t===void 0||i.has(e)||(i.add(e),r.push(t),a.push(...t.nextStepIds??[]))}return[...r,...t.filter(e=>!i.has(e.id))]},MX=(e,t)=>{if(typeof t!=`object`||!t)return[];let n=t;return XG(e).filter(e=>e.name in n).map(e=>({label:e.label,value:n[e.name]}))},NX=(e,t)=>jX(e).filter(e=>!iK(e)).map(n=>{let r=e?.stepInfos?.[n.id],i=AX[r?.status??``]??`upcoming`;if(!pK(n))return{stepId:n.id,name:n.name,type:n.type,state:i,answers:[]};let a=vK(mK(n),e?.stepInfos);return{stepId:n.id,name:n.name,type:n.type,state:i,assigneeWorkspaceMemberId:yK({fields:a,now:t}).assigneeWorkspaceMemberId,answers:i===`done`?MX(a,r?.result):[]}});Yt(),cn(),dn(),mn(),bn(),kn(),Wn(),$n(),fe();var PX=300,FX=5,IX=[`процесс`,`процесса`,`процессов`],LX=[{key:`name`,label:`Процесс`,width:`26%`,sortKey:`name`},{key:`status`,label:`Статус`,width:`13%`,sortKey:`status`},{key:`parameters`,label:`Параметры`,width:`10%`,sortKey:`parameters`},{key:`stageCount`,label:`Этапов`,width:`8%`,sortKey:`stageCount`},{key:`runs`,label:`Запуски`,width:`12%`,sortKey:`runs`},{key:`stages`,label:`Этапы`},{key:`updatedAt`,label:`Изменён`,width:`11%`,sortKey:`updatedAt`}],RX=[{value:`all`,label:`Все`},{value:`active`,label:`Опубликованные`},{value:`draft`,label:`Черновики`}],zX=e=>jX({flow:{trigger:e?.trigger,steps:e?.steps}}).filter(e=>!iK(e)),BX=e=>{let{active:t,draft:n,deactivated:r}=e,i=t!==void 0&&oK(t.trigger);return{workflowId:e.workflowId,workspaceWorkflowId:e.workspaceWorkflowId,draftVersionId:n?.id,activeVersionId:t?.id,deactivatedVersionId:r?.id,workflowVersionId:i?t.id:void 0,name:e.name,isPublished:i,isActive:t!==void 0,hasUnpublishedChanges:t!==void 0&&n!==void 0,launchFields:e.launchFields,launchObject:e.launchObject,stages:zX(t??n??r),updatedAt:e.updatedAt}},VX=async e=>{let{processes:t,canAppEdit:n,crmUrl:r}=await FG(`/docflow/processes/catalog`,{action:`list`});HY(r);let i=e.trim().toLowerCase();return{processes:t.map(BX).filter(e=>i.length===0||e.name.toLowerCase().includes(i)),editing:BY(n)}},HX=async e=>Object.fromEntries(await Promise.all(e.map(async e=>{let[t,n]=await Promise.all([AG(`workflowRuns`,oG(`coreWorkflowId`,e)),AG(`workflowRuns`,mG(oG(`coreWorkflowId`,e),oG(`status`,`RUNNING`)))]);return[e,{total:t,running:n}]}))),UX=e=>Dl(xl.WorkflowCoreShowPage,{coreWorkflowId:e}),WX=e=>Dl(xl.RecordShowPage,{objectNameSingular:`workflowRun`,objectRecordId:e}),GX=({process:e,members:t})=>{let[n]=(0,L.useState)(()=>new Date);return e.stages.length===0?(0,Q.jsx)(Oq,{tone:`hint`,children:`Этапов пока нет: добавьте шаги в редакторе.`}):(0,Q.jsx)(DX,{items:[{key:`start`,title:`Запуск`,meta:e.launchFields.length>0?`с параметрами: ${e.launchFields.length}`:`без параметров`,state:`upcoming`},...e.stages.map(e=>{let r=pK(e)?yK({fields:mK(e),now:n}).assigneeWorkspaceMemberId:void 0;return{key:e.id,title:e.name,meta:[FK[e.type]??e.type,xK(t.find(({id:e})=>e===r))].filter(Boolean).join(` · `),state:`upcoming`}})]})},KX=({workflowId:e,members:t})=>{let n=M(),{data:r,loading:i}=zK(async()=>(await TG(`workflowRuns`,{filter:oG(`coreWorkflowId`,e),order_by:`createdAt[DescNullsLast]`,limit:FX})).records,[e]);return i&&r===void 0?(0,Q.jsx)(iJ,{rows:3}):(r??[]).length===0?(0,Q.jsx)(Oq,{tone:`hint`,children:`Запусков ещё не было.`}):(0,Q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`},children:(r??[]).map(e=>(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>void WX(e.id),style:{alignItems:`center`,background:`transparent`,border:`none`,borderTop:`1px solid ${n.border.color.light}`,color:n.font.color.secondary,cursor:`pointer`,display:`flex`,fontFamily:`inherit`,fontSize:n.font.size.sm,gap:n.spacing[2],justifyContent:`space-between`,padding:`${n.spacing[2]} 0`,textAlign:`left`},children:[(0,Q.jsxs)(`span`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:[DK(e.startedAt??e.createdAt),RK(e,t)?` · ${RK(e,t)}`:``]}),(0,Q.jsx)(GK,{color:LK[e.status??``]??`gray`,children:IK[e.status??``]??e.status})]},e.id))})},qX=({process:e})=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(GK,{color:e.isActive?`green`:`gray`,children:e.isActive?`Опубликован`:`Черновик`}),e.hasUnpublishedChanges&&(0,Q.jsx)(GK,{color:`orange`,children:`Есть неопубликованные изменения`})]}),JX=({name:e,onSave:t})=>{let n=M(),[r,i]=(0,L.useState)(e),[a,o]=(0,L.useState)(!1),s=async()=>{let n=r.trim();n.length===0?i(e):n!==e&&await t(n)};return(0,Q.jsx)(`input`,{type:`text`,value:r,"aria-label":`Название процесса`,title:`Нажмите, чтобы переименовать`,onChange:e=>i(e.target.value),onFocus:()=>o(!0),onBlur:()=>{o(!1),s()},onKeyDown:t=>{t.key===`Enter`&&s(),t.key===`Escape`&&i(e)},style:{background:a?n.background.transparent.lighter:`transparent`,border:`1px solid ${a?n.border.color.medium:`transparent`}`,borderRadius:n.border.radius.sm,boxSizing:`border-box`,color:n.font.color.primary,fontFamily:`inherit`,fontSize:n.font.size.lg,fontWeight:n.font.weight.semiBold,margin:`0 -${n.spacing[2]}`,outline:`none`,padding:`${n.spacing[1]} ${n.spacing[2]}`,width:`calc(100% + ${n.spacing[4]})`}})},YX=({process:e,members:t,isBusy:n,onLaunched:r,onRename:i,onPublish:a,onSettingsSaved:o})=>{let s=M(),[c,l]=(0,L.useState)({}),[u,d]=(0,L.useState)(!1),[f,p]=(0,L.useState)(),[m,h]=(0,L.useState)(!1),g=async()=>{let t=cK({fields:e.launchFields,values:c}),n=QG({fields:e.launchFields,values:t});if(n.length>0)p(`Заполните: ${n.map(({label:e})=>e).join(`, `)}`);else{d(!0),p(void 0);try{await FG(`/docflow/processes/launch`,{workflowId:e.workflowId,values:t}),await El({message:`Процесс запущен`,variant:`success`}),l({}),r()}catch(e){p(IG(e,`Не удалось запустить процесс`))}finally{d(!1)}}};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[4]},children:[(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[2]},children:[(0,Q.jsx)(JX,{name:e.name,onSave:i},e.name),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:s.spacing[1]},children:[(0,Q.jsx)(qX,{process:e}),e.updatedAt&&(0,Q.jsxs)(GK,{color:`gray`,children:[`Изменён `,SK(e.updatedAt)]})]}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:s.spacing[1]},children:[(!e.isActive||e.hasUnpublishedChanges)&&(0,Q.jsx)($,{variant:`solid`,tone:`accent`,icon:yn,loading:n,onClick:()=>a(!0),children:e.isActive?`Опубликовать изменения`:`Опубликовать`}),e.isActive&&(0,Q.jsx)($,{icon:un,disabled:n,onClick:()=>a(!1),children:`Снять с публикации`}),(0,Q.jsx)($,{icon:On,onClick:()=>void UX(e.workflowId),children:`Открыть редактор`})]})]}),e.isPublished&&e.launchObject!==void 0?(0,Q.jsx)(Oq,{tone:`hint`,children:`Процесс запускается на записи: откройте или выберите запись и нажмите «Запустить процесс» в её меню.`}):e.isPublished?(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[3]},children:[(0,Q.jsx)(kq,{children:`Запуск`}),e.launchFields.length>0?(0,Q.jsx)(cX,{fields:e.launchFields,values:c,onChange:l,disabled:u}):(0,Q.jsx)(Oq,{tone:`hint`,children:`Процесс запускается без параметров.`}),f!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:f}),(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`md`,fullWidth:!0,icon:sn,loading:u,onClick:()=>void g(),children:`Запустить`})]}):(0,Q.jsx)(Oq,{tone:`hint`,children:e.isActive?`Процесс опубликован, но запускается не вручную: его запускает событие или расписание.`:`Процесс ещё не опубликован: проверьте этапы и нажмите «Опубликовать».`}),(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[3]},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,justifyContent:`space-between`},children:[(0,Q.jsx)(kq,{children:`Параметры запуска и задания`}),(0,Q.jsx)($,{size:`sm`,icon:On,onClick:()=>h(e=>!e),children:m?`Свернуть`:`Настроить`})]}),m&&(0,Q.jsx)(xX,{workflowId:e.workflowId,onLaunchSaved:o})]}),(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[3]},children:[(0,Q.jsx)(kq,{children:`Этапы`}),(0,Q.jsx)(GX,{process:e,members:t})]}),(0,Q.jsxs)(`section`,{style:{display:`flex`,flexDirection:`column`,gap:s.spacing[1]},children:[(0,Q.jsx)(kq,{children:`Последние запуски`}),(0,Q.jsx)(KX,{workflowId:e.workflowId,members:t})]})]})},XX=({onClose:e,onAdded:t})=>{let n=M(),[r,i]=(0,L.useState)([]),[a,o]=(0,L.useState)(),{data:s,loading:c,error:l}=zK(async()=>(await FG(`/docflow/processes/catalog`,{action:`others`})).processes,[]),u=e=>i(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]);return(0,Q.jsxs)(yq,{title:`Добавить процессы Twenty`,hint:`Процессы из «Рабочих процессов» Twenty станут процессами документооборота: их можно будет запускать отсюда, а их задания попадут в «Задания».`,confirmLabel:`Добавить`,canSubmit:r.length>0,onClose:e,onSubmit:async()=>{try{await FG(`/docflow/processes/catalog`,{action:`add`,workflowIds:r}),await El({message:`Добавлено: ${r.length}`,variant:`success`}),t()}catch(e){o(IG(e,`Не удалось добавить`))}},children:[c&&s===void 0&&(0,Q.jsx)(iJ,{rows:3}),l!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:IG(l,`Не удалось загрузить процессы`)}),s!==void 0&&s.length===0&&(0,Q.jsx)(Oq,{tone:`hint`,children:`Других процессов нет.`}),(0,Q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,maxHeight:`320px`,overflowY:`auto`},children:(s??[]).map(e=>(0,Q.jsxs)(`label`,{style:{alignItems:`center`,cursor:`pointer`,display:`flex`,fontSize:n.font.size.md,gap:n.spacing[2],padding:`${n.spacing[1]} 0`},children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:r.includes(e.workflowId),onChange:()=>u(e.workflowId)}),e.name]},e.workflowId))}),a!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:a})]})},ZX=er({universalIdentifier:oJ,name:`docflow-processes`,description:`Процессы документооборота: запуск с параметрами`,component:()=>{let e=M(),{members:t}=OJ(),[n,r]=(0,L.useState)(``),i=BK(n,PX),[a,o]=(0,L.useState)(`all`),[s,c]=(0,L.useState)(`any`),[l,u]=(0,L.useState)({key:`name`,direction:`asc`}),[d,f]=(0,L.useState)({kind:`closed`}),[p,m]=(0,L.useState)(),[h,g]=(0,L.useState)(!1),[_,v]=(0,L.useState)(!1),[y,b]=zq([`updatedAt`]),{data:x,loading:S,error:C,reload:w}=zK(()=>VX(i),[i]),T=x?.processes,ee=x?.editing??`app`,E=(T??[]).map(({workflowId:e})=>e).join(),{data:D,reload:O}=zK(()=>HX(E.length>0?E.split(`,`):[]),[E]),k=d.kind===`process`?d.workflowId:void 0,te=T?.find(e=>e.workflowId===k),ne=(T??[]).filter(e=>s===`any`||e.launchFields.length>0==(s===`with`)),re=(e,t)=>t===`all`?!0:t===`active`?e.isActive:!e.isActive,A=ne.filter(e=>re(e,a)).sort((e,t)=>{let n=l.direction===`asc`?1:-1,r={parameters:e=>e.launchFields.length,status:e=>Number(e.isActive),stageCount:e=>e.stages.length,runs:e=>D?.[e.workflowId]?.total??0,updatedAt:e=>new Date(e.updatedAt??0).getTime()}[l.key];return r===void 0?e.name.localeCompare(t.name,`ru`)*n:(r(e)-r(t))*n}),j=Nq(A.map(({workflowId:e})=>e)),ie=j.selectedIds,ae=async()=>{await Promise.all([w(),O()])},oe=VK({onDone:async()=>{j.clear(),await ae()}}),se=e=>e.flatMap(e=>A.filter(({workflowId:t})=>t===e)),ce=e=>oe.run(async()=>{await XY(ee,se(e)),f(t=>t.kind===`process`&&e.includes(t.workflowId)?{kind:`closed`}:t)},e.length===1?`Процесс удалён`:`Удалено процессов: ${e.length}`,`Не удалось удалить`),le=e=>oe.run(async()=>{await FG(`/docflow/processes/catalog`,{action:`remove`,workflowIds:e}),f(t=>t.kind===`process`&&e.includes(t.workflowId)?{kind:`closed`}:t)},e.length===1?`Процесс убран из документооборота`:`Убрано из документооборота: ${e.length}`,`Не удалось убрать`),ue=(e,t)=>oe.runEach(e,e=>ZY(ee,se([e])[0]??{workflowId:e,workspaceWorkflowId:null},t),{done:e=>t?`Опубликовано: ${e}`:`Снято с публикации: ${e}`,failed:t?`Не опубликованы`:`Не сняты с публикации`}),de=async(e,t)=>{try{await YY(ee,e,t),await El({message:`Процесс переименован`,variant:`success`}),m(void 0),await w()}catch(e){await El({message:IG(e,`Не удалось переименовать процесс`),variant:`error`})}},fe=async()=>{g(!0),xG(`process: create`,{editing:ee});try{await JY(ee,`Новый процесс`),await w()}catch(e){SG(`process: create failed`,e),await El({message:IG(e,`Не удалось создать процесс`),variant:`error`})}finally{g(!1)}};return(0,Q.jsxs)(xq,{children:[(0,Q.jsxs)(Kq,{panelTitle:`Процесс`,onClosePanel:()=>f({kind:`closed`}),panel:te===void 0?void 0:(0,Q.jsx)(YX,{process:te,members:t,isBusy:oe.isBusy,onLaunched:()=>void O(),onRename:e=>de(te,e),onPublish:e=>void ue([te.workflowId],e),onSettingsSaved:()=>void w()},te.workflowId),children:[(0,Q.jsx)(Vq,{search:{value:n,onChange:r,placeholder:`Поиск процессов`,activeFilterCount:s===`any`?0:1,onResetFilters:()=>c(`any`),filters:[{key:`parameters`,title:`Параметры запуска`,value:s,options:[{value:`any`,label:`Любые`},{value:`with`,label:`С параметрами`},{value:`without`,label:`Без параметров`}],onChange:e=>c(e)}]},views:(0,Q.jsx)(mq,{value:a,onChange:e=>{o(e),j.clear()},options:RX.map(e=>({...e,count:T===void 0?void 0:ne.filter(t=>re(t,e.value)).length}))}),actions:(0,Q.jsx)($,{size:`md`,icon:pn,onClick:()=>v(!0),children:`Добавить из Twenty`}),onCreate:()=>void fe(),isCreating:h}),ee===`standalone`&&(0,Q.jsx)(`div`,{style:{padding:`0 ${e.spacing[5]} ${e.spacing[3]}`},children:(0,Q.jsx)(bX,{})}),C!==void 0&&(0,Q.jsx)(`div`,{style:{padding:e.spacing[4]},children:(0,Q.jsx)(Oq,{tone:`danger`,children:IG(C,`Не удалось загрузить процессы`)})}),S&&T===void 0&&(0,Q.jsx)(rJ,{}),!S&&C===void 0&&A.length===0&&(0,Q.jsx)(Oq,{children:`Процессов нет. «Создать» добавит новый процесс, «Добавить из Twenty» — уже настроенный в «Рабочих процессах».`}),A.length>0&&(0,Q.jsx)(Bq,{columns:LX,hiddenColumnKeys:y,onHiddenColumnsChange:b,sort:l,onSortChange:u,selectedRowId:k,selectedIds:ie,onSelectionChange:j.setSelectedIds,onRowClick:e=>f({kind:`process`,workflowId:e}),rowActions:e=>{let t=A.find(t=>t.workflowId===e);return t===void 0?[]:[...t.isPublished?[{key:`launch`,label:`Запустить`,icon:sn,onSelect:()=>f({kind:`process`,workflowId:e})}]:[],...!t.isActive||t.hasUnpublishedChanges?[{key:`publish`,label:t.isActive?`Опубликовать изменения`:`Опубликовать`,icon:yn,onSelect:()=>void ue([e],!0)}]:[],...t.isActive?[{key:`unpublish`,label:`Снять с публикации`,icon:un,onSelect:()=>void ue([e],!1)}]:[],{key:`edit`,label:`Открыть редактор`,icon:On,onSelect:()=>void UX(e)},{key:`rename`,label:`Переименовать`,icon:Jt,onSelect:()=>m(t)},{key:`take-out`,label:`Убрать из документооборота`,icon:Qn,onSelect:()=>void le([e])},{key:`delete`,label:`Удалить`,confirmLabel:`Точно удалить?`,icon:Un,tone:`danger`,onSelect:()=>void ce([e])}]},rows:A.map(t=>{let n=t.launchFields.length,r=D?.[t.workflowId];return{id:t.workflowId,cells:{name:t.name,status:(0,Q.jsxs)(`span`,{style:{display:`inline-flex`,gap:e.spacing[1]},children:[(0,Q.jsx)(GK,{color:t.isActive?`green`:`gray`,children:t.isActive?`Опубликован`:`Черновик`}),t.hasUnpublishedChanges&&(0,Q.jsx)(GK,{color:`orange`,children:`Изменён`})]}),parameters:n>0?String(n):`нет`,stageCount:String(t.stages.length),runs:r===void 0?`…`:(0,Q.jsxs)(`span`,{children:[r.total,r.running>0&&(0,Q.jsxs)(`span`,{style:{color:e.color.blue},children:[` · идёт `,r.running]})]}),stages:t.stages.map(({name:e})=>e).join(` → `)||`—`,updatedAt:SK(t.updatedAt)}}})}),(0,Q.jsxs)(Hq,{count:ie.length,noun:IX,onClear:j.clear,children:[ie.length===1&&(0,Q.jsx)($,{icon:On,onClick:()=>void UX(ie[0]),children:`Открыть редактор`}),(0,Q.jsx)($,{icon:yn,loading:oe.isBusy,onClick:()=>void ue(ie,!0),children:`Опубликовать`}),(0,Q.jsx)($,{icon:un,disabled:oe.isBusy,onClick:()=>void ue(ie,!1),children:`Снять с публикации`}),(0,Q.jsx)(nq,{label:`Удалить`,icon:Un,disabled:oe.isBusy,actions:[{key:`delete`,label:`Удалить выбранные (${ie.length})`,confirmLabel:`Точно удалить? Запуски и задания останутся`,icon:Un,tone:`danger`,onSelect:()=>void ce(ie)}]})]})]}),_&&(0,Q.jsx)(XX,{onClose:()=>v(!1),onAdded:()=>{v(!1),ae()}}),p!==void 0&&(0,Q.jsx)(vq,{title:`Переименовать процесс`,label:`Название`,initialValue:p.name,onClose:()=>m(void 0),onSubmit:e=>de(p,e)})]})}}),QX=e=>typeof e.smbWorkflowThreadId==`string`&&e.smbWorkflowThreadId.length>0,$X=e=>{let t=XG(tK(e.smbFormSchema)),n=nK(e.smbFormValues);return{filled:t.filter(e=>!ZG(n[e.name])).length,total:t.length}};fe();var eZ=248,tZ=8,nZ=({task:e,members:t,now:n,isSelected:r,onOpen:i})=>{let a=M(),o=jK(e.dueAt,n),s=$X(e),c={overdue:a.color.red,today:a.color.orange,soon:a.color.amber,later:a.color.blue,none:a.border.color.strong};return(0,Q.jsxs)(`button`,{type:`button`,onClick:i,"aria-pressed":r,style:{...UK(a),boxShadow:`none`,border:`1px solid ${r?a.border.color.blue:a.border.color.light}`,boxSizing:`border-box`,color:a.font.color.primary,cursor:`pointer`,display:`flex`,flex:`0 0 ${eZ}px`,flexDirection:`column`,fontFamily:`inherit`,gap:a.spacing[2],minHeight:`128px`,outline:`none`,padding:a.spacing[3],textAlign:`left`,WebkitTapHighlightColor:`transparent`,width:eZ},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:a.spacing[2],justifyContent:`space-between`},children:[(0,Q.jsx)(`span`,{style:{color:c[o.tone],fontSize:a.font.size.sm,fontWeight:a.font.weight.semiBold},children:o.label}),(0,Q.jsx)(`span`,{style:{color:a.font.color.light,fontSize:a.font.size.xs},children:SK(e.dueAt)})]}),(0,Q.jsx)(`span`,{style:{WebkitBoxOrient:`vertical`,WebkitLineClamp:2,display:`-webkit-box`,fontSize:a.font.size.md,fontWeight:a.font.weight.medium,lineHeight:1.35,overflow:`hidden`},children:e.title?.trim()||`Без названия`}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:a.spacing[1],marginTop:`auto`},children:[s.total>0&&(0,Q.jsx)(Gq,{value:s.filled,total:s.total}),(0,Q.jsxs)(`div`,{style:{color:a.font.color.tertiary,display:`flex`,fontSize:a.font.size.xs,gap:a.spacing[2],justifyContent:`space-between`},children:[(0,Q.jsx)(`span`,{children:QX(e)?`Шаг процесса`:`Своё задание`}),(0,Q.jsx)(`span`,{children:s.total>0?`Поля ${s.filled}/${s.total}`:xK(t.find(t=>t.id===e.assigneeId))})]})]})]})},rZ=({tasks:e,members:t,now:n,selectedTaskId:r,onOpen:i})=>{let a=M();return e.length===0?null:(0,Q.jsxs)(`section`,{"aria-label":`Срочные задания`,style:{display:`flex`,flexDirection:`column`,gap:a.spacing[1],minWidth:0,padding:`${a.spacing[1]} ${a.spacing[5]} ${a.spacing[4]}`},children:[(0,Q.jsx)(kq,{children:`Срочные`}),(0,Q.jsx)(`div`,{style:{minWidth:0,overflowX:`auto`,paddingBottom:a.spacing[1]},children:(0,Q.jsx)(`div`,{style:{display:`flex`,gap:tZ,width:`max-content`},children:e.map(e=>(0,Q.jsx)(nZ,{task:e,members:t,now:n,isSelected:e.id===r,onOpen:()=>i(e.id)},e.id))})})]})},iZ=`__ndMessengerMessageMenuContributions`,aZ=()=>{let e=globalThis,t=e[iZ];if(t!==void 0)return t;let n=new Map;return e[iZ]=n,n},oZ=()=>[...aZ().values()],sZ=e=>oZ().filter(t=>{try{return t.isVisible?.(e)!==!1}catch(e){return console.error(`Пункт меню «${t.id}»: isVisible упал`,e),!1}}),cZ=(e,t)=>{try{e.run(t)}catch(t){console.error(`Пункт меню «${e.id}»: run упал`,t)}};ye(),Be(),Ue(),Ye(),Qe(),it(),st(),pt(),St(),Bt(),Yt(),Qt(),tn(),Mn(),Fn(),Wn(),fe();var lZ=[`👍`,`❤️`,`🔥`,`👌`,`😂`,`😐`],uZ=[...lZ,`👏`,`🎉`,`🤔`,`😢`,`😮`,`🙏`,`💪`,`👀`,`🚀`,`✅`,`❌`,`💯`,`🤝`,`😴`,`🤯`].filter(e=>!lZ.includes(e)),dZ=e=>new Date(e).toLocaleTimeString(`ru-RU`,{hour:`2-digit`,minute:`2-digit`}),fZ=({icon:e,label:t,onClick:n,tone:r=`default`})=>{let i=M(),[a,o]=(0,L.useState)(!1);return(0,Q.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:n,onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),style:{alignItems:`center`,background:a?i.background.transparent.light:`transparent`,border:`none`,borderRadius:i.border.radius.sm,color:r===`danger`?i.font.color.danger:i.font.color.primary,cursor:`pointer`,display:`flex`,flexShrink:0,fontFamily:`inherit`,fontSize:i.font.size.md,gap:i.spacing[3],height:i.spacing[8],padding:`0 ${i.spacing[2]}`,textAlign:`left`,width:`100%`},children:[(0,Q.jsx)(`span`,{style:{flex:1,whiteSpace:`nowrap`},children:t}),(0,Q.jsx)(e,{size:i.icon.size.md,stroke:i.icon.stroke.sm,color:r===`danger`?i.font.color.danger:i.font.color.tertiary})]})},pZ=()=>{let e=M();return(0,Q.jsx)(`div`,{style:{borderTop:`1px solid ${e.border.color.light}`,flexShrink:0,margin:`${e.spacing[1]} 0`}})},mZ=(e,t,n=!1)=>({alignItems:`center`,background:t?e.background.transparent.blue:n?e.background.transparent.light:`transparent`,border:`none`,borderRadius:10,cursor:`pointer`,display:`inline-flex`,flexShrink:0,fontSize:20,height:34,justifyContent:`center`,lineHeight:1,padding:0,width:34}),hZ=({message:e,conversationId:t,isOwn:n,readerIds:r,viewerReactions:i,memberName:a,placement:o,onAction:s,onReact:c,onClose:l})=>{let u=M(),[d,f]=(0,L.useState)(`main`),[p,m]=(0,L.useState)(!1),h=e=>{l(),s(e)},g=e=>{l(),c(e)},_={messageId:e.id,conversationId:t,text:e.text,authorId:e.authorId,isOwn:n,isTaskChat:!0},v=sZ(_),y=v.filter(e=>(e.placement??`more`)===`main`),b=v.filter(e=>(e.placement??`more`)===`more`);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-hidden":!0,onClick:l,onContextMenu:l,style:{inset:0,position:`fixed`,zIndex:20}}),(0,Q.jsx)(`div`,{role:`menu`,"aria-label":`Действия с сообщением`,onKeyDown:e=>{e.key===`Escape`&&l()},style:{[n?`right`:`left`]:0,[o===`above`?`bottom`:`top`]:`calc(100% + ${u.spacing[1]})`,background:u.background.primary,border:`1px solid ${u.border.color.medium}`,borderRadius:u.border.radius.md,boxShadow:u.boxShadow.strong,display:`flex`,flexDirection:`column`,maxHeight:420,overflowY:`auto`,padding:u.spacing[1],position:`absolute`,width:248,zIndex:21},children:d===`more`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(fZ,{icon:Je,label:`Назад`,onClick:()=>f(`main`)}),(0,Q.jsx)(pZ,{}),(0,Q.jsx)(`div`,{style:{display:`grid`,flexShrink:0,gap:2,gridTemplateColumns:`repeat(5, 1fr)`,padding:`${u.spacing[1]} ${u.spacing[1]} ${u.spacing[2]}`},children:uZ.map(e=>(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Реакция ${e}`,"aria-pressed":i.includes(e),onClick:()=>g(e),style:mZ(u,i.includes(e),!0),children:e},e))}),(0,Q.jsx)(pZ,{}),(0,Q.jsx)(fZ,{icon:e.isPinned?en:Zt,label:e.isPinned?`Открепить сообщение`:`Закрепить сообщение`,onClick:()=>h(`togglePin`)}),(0,Q.jsx)(fZ,{icon:He,label:`Создать задачу`,onClick:()=>h(`createTask`)}),(0,Q.jsx)(fZ,{icon:zt,label:`Ещё не прочитано`,onClick:()=>h(`markUnread`)}),b.map(e=>(0,Q.jsx)(fZ,{icon:Ze,label:e.label,onClick:()=>{l(),cZ(e,_)}},e.id))]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{style:{alignItems:`center`,background:u.background.transparent.lighter,border:`1px solid ${u.border.color.light}`,borderRadius:12,display:`flex`,flexShrink:0,gap:2,justifyContent:`space-between`,margin:`2px 2px 4px`,padding:4},children:lZ.map(e=>(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Реакция ${e}`,"aria-pressed":i.includes(e),onClick:()=>g(e),style:mZ(u,i.includes(e)),children:e},e))}),(0,Q.jsx)(pZ,{}),(0,Q.jsx)(fZ,{icon:ve,label:`Ответить`,onClick:()=>h(`reply`)}),(0,Q.jsx)(fZ,{icon:rt,label:`Копировать`,onClick:()=>h(`copy`)}),n&&e.kind===`TEXT`&&(0,Q.jsx)(fZ,{icon:Jt,label:`Редактировать`,onClick:()=>h(`edit`)}),(0,Q.jsx)(fZ,{icon:jn,label:`Переслать`,onClick:()=>h(`forward`)}),(0,Q.jsx)(fZ,{icon:xt,label:e.isResult?`Убрать из результатов`:`Добавить в результаты`,onClick:()=>h(`toggleResult`)}),y.map(e=>(0,Q.jsx)(fZ,{icon:Ze,label:e.label,onClick:()=>{l(),cZ(e,_)}},e.id)),(0,Q.jsx)(fZ,{icon:Ze,label:`Ещё`,onClick:()=>f(`more`)}),(0,Q.jsx)(pZ,{}),n&&(0,Q.jsx)(fZ,{icon:Un,label:`Удалить`,tone:`danger`,onClick:()=>h(`remove`)}),(0,Q.jsx)(fZ,{icon:Pn,label:`Выбрать`,onClick:()=>h(`select`)}),(0,Q.jsx)(pZ,{}),(0,Q.jsx)(fZ,{icon:ft,label:r.length===0?`Нет просмотров`:`${r.length} ${Uq(r.length,[`просмотр`,`просмотра`,`просмотров`])}`,onClick:()=>m(e=>!e)}),p&&r.map(e=>(0,Q.jsx)(`span`,{style:{color:u.font.color.secondary,flexShrink:0,fontSize:u.font.size.sm,padding:`0 ${u.spacing[2]}`},children:a(e)},e))]})})]})},gZ=({message:e,conversationId:t,viewerId:n,isGroupStart:r,readerIds:i,memberName:a,isMenuOpen:o,menuPlacement:s,isSelecting:c,isSelected:l,onOpenMenu:u,onCloseMenu:d,onToggleSelected:f,onAction:p,onReact:m})=>{let h=M(),[g,_]=(0,L.useState)(!1),v=e.authorId===n,y=!e.isRemoved,b=e.reactions.filter(e=>n!==void 0&&e.memberIds.includes(n)).map(e=>e.emoji);return(0,Q.jsxs)(`div`,{onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1),onClick:c&&y?f:void 0,style:{alignItems:`center`,background:l?h.background.transparent.blue:void 0,cursor:c&&y?`pointer`:void 0,display:`flex`,flexDirection:v?`row-reverse`:`row`,gap:h.spacing[1],marginTop:r?h.spacing[1]:0,padding:`1px 2px`,position:`relative`},children:[c&&(0,Q.jsx)(`span`,{"aria-hidden":!0,style:{alignItems:`center`,background:l?h.color.blue:`transparent`,border:`1px solid ${l?h.color.blue:h.border.color.strong}`,borderRadius:`50%`,...HK,color:h.font.color.inverted,display:`inline-flex`,flexShrink:0,height:16,justifyContent:`center`,visibility:y?`visible`:`hidden`,width:16},children:l&&(0,Q.jsx)(ze,{size:12,stroke:3})}),y&&!c&&(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Действия с сообщением`,"aria-haspopup":`menu`,onClick:u,style:{alignItems:`center`,background:`transparent`,border:`none`,borderRadius:h.border.radius.sm,color:h.font.color.tertiary,cursor:`pointer`,display:`inline-flex`,flexShrink:0,height:24,justifyContent:`center`,opacity:g||o?1:0,padding:0,width:20},children:(0,Q.jsx)(ot,{size:h.icon.size.sm})}),(0,Q.jsxs)(`div`,{style:{alignItems:v?`flex-end`:`flex-start`,display:`flex`,flexDirection:`column`,gap:2,maxWidth:`85%`,minWidth:0},children:[(0,Q.jsxs)(`div`,{style:{background:v?h.background.transparent.blue:h.background.transparent.light,borderRadius:h.border.radius.md,color:e.isRemoved?h.font.color.tertiary:void 0,fontStyle:e.isRemoved?`italic`:void 0,maxWidth:`100%`,overflowWrap:`anywhere`,padding:`${h.spacing[1]} ${h.spacing[2]}`,whiteSpace:`pre-wrap`},children:[!v&&r&&e.authorId!==null&&(0,Q.jsx)(`div`,{style:{color:h.color.blue,fontSize:h.font.size.sm,fontWeight:h.font.weight.medium},children:a(e.authorId)}),e.forwardedFromAuthorId!==null&&!e.isRemoved&&(0,Q.jsxs)(`div`,{style:{color:h.font.color.tertiary,fontSize:h.font.size.sm},children:[`Переслано от `,a(e.forwardedFromAuthorId)]}),e.replyTo!==null&&!e.isRemoved&&(0,Q.jsxs)(`div`,{style:{borderLeft:`2px solid ${h.color.blue}`,color:h.font.color.secondary,fontSize:h.font.size.sm,margin:`2px 0 4px`,overflow:`hidden`,paddingLeft:h.spacing[2],textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:[(0,Q.jsx)(`strong`,{style:{color:h.color.blue,display:`block`,fontSize:h.font.size.xs},children:e.replyTo.authorId===null?`Сообщение`:a(e.replyTo.authorId)}),e.replyTo.isRemoved?`Сообщение удалено`:e.replyTo.text]}),e.isRemoved?`Сообщение удалено`:e.text,(0,Q.jsxs)(`span`,{style:{alignItems:`center`,color:h.font.color.tertiary,display:`inline-flex`,float:`right`,fontSize:h.font.size.xs,fontStyle:`normal`,gap:2,margin:`${h.spacing[1]} 0 0 ${h.spacing[3]}`},children:[e.isPinned&&(0,Q.jsx)(Zt,{size:11}),e.isResult&&(0,Q.jsx)(xt,{size:11,color:h.color.green}),e.editedAt!==null&&!e.isRemoved?`изменено `:``,dZ(e.createdAt),v&&!e.isRemoved&&(0,Q.jsx)(`span`,{title:i.length>0?`Прочитано`:`Отправлено`,style:{color:i.length>0?h.color.blue:void 0},children:i.length>0?`✓✓`:`✓`})]})]}),e.reactions.length>0&&(0,Q.jsx)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:5,marginTop:4},children:e.reactions.map(e=>{let t=n!==void 0&&e.memberIds.includes(n);return(0,Q.jsxs)(`button`,{type:`button`,title:e.memberIds.map(a).join(`, `),"aria-pressed":t,onClick:t=>{t.stopPropagation(),m(e.emoji)},style:{alignItems:`center`,background:t?h.background.transparent.blue:h.background.primary,border:`1px solid ${t?h.color.blue:h.border.color.medium}`,borderRadius:999,boxShadow:h.boxShadow.light,color:h.font.color.primary,cursor:`pointer`,display:`inline-flex`,fontFamily:`inherit`,gap:5,height:26,padding:`0 9px 0 7px`},children:[(0,Q.jsx)(`span`,{style:{fontSize:15,lineHeight:1},children:e.emoji}),(0,Q.jsx)(`span`,{style:{color:h.font.color.secondary,fontSize:12,fontVariantNumeric:`tabular-nums`,fontWeight:600,lineHeight:1},children:e.memberIds.length})]},e.emoji)})})]}),o&&(0,Q.jsx)(hZ,{message:e,conversationId:t,isOwn:v,readerIds:i,viewerReactions:b,memberName:a,placement:s,onAction:p,onReact:m,onClose:d})]})};ye(),Yt(),Qt(),En(),$n(),fe();var _Z=`/messenger/api`,vZ=3e3,yZ=5e3,bZ=6,xZ=e=>FG(_Z,e),SZ=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.seq-t.seq)},CZ=(e,t)=>new Date(e).toDateString()===new Date(t).toDateString(),wZ=(e,t)=>{if(CZ(e,t.toISOString()))return`Сегодня`;let n=new Date(t);if(n.setDate(n.getDate()-1),CZ(e,n.toISOString()))return`Вчера`;let r=new Date(e).toLocaleDateString(`ru-RU`,{weekday:`long`,day:`numeric`,month:`long`});return r.charAt(0).toUpperCase()+r.slice(1)},TZ=()=>`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,EZ=({messageIds:e,viewerId:t,memberName:n,onClose:r,onForwarded:i})=>{let a=M(),[o,s]=(0,L.useState)(``),[c,l]=(0,L.useState)(),[u,d]=(0,L.useState)(),{data:f,loading:p}=zK(()=>xZ({action:`listConversations`}),[]),m=e=>e.kind===`DIRECT`?n(e.memberIds.find(e=>e!==t)??null):e.name?.trim()||`Беседа`,h=o.trim().toLocaleLowerCase(`ru`),g=(f?.conversations??[]).filter(e=>m(e).toLocaleLowerCase(`ru`).includes(h)),_=async t=>{l(t.id),d(void 0);try{await xZ({action:`forwardMessages`,messageIds:e,conversationId:t.id}),i(m(t))}catch(e){d(IG(e,`Не удалось переслать`))}finally{l(void 0)}};return(0,Q.jsx)(`div`,{onClick:r,style:{alignItems:`center`,background:`rgba(0, 0, 0, 0.4)`,display:`flex`,inset:0,justifyContent:`center`,padding:a.spacing[3],position:`absolute`,zIndex:30},children:(0,Q.jsxs)(`div`,{role:`dialog`,"aria-label":`Переслать`,onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.key===`Escape`&&r()},style:{background:a.background.primary,border:`1px solid ${a.border.color.medium}`,borderRadius:a.border.radius.md,boxShadow:a.boxShadow.strong,display:`flex`,flexDirection:`column`,gap:a.spacing[2],maxHeight:`90%`,padding:a.spacing[3],width:`100%`},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:a.spacing[2]},children:[(0,Q.jsxs)(`strong`,{style:{flex:1},children:[`Переслать `,e.length,` `,Uq(e.length,[`сообщение`,`сообщения`,`сообщений`])]}),(0,Q.jsx)(WK,{icon:Qn,label:`Закрыть`,onClick:r})]}),(0,Q.jsx)(`input`,{type:`search`,"aria-label":`Найти беседу`,placeholder:`Найти беседу`,value:o,onChange:e=>s(e.target.value),style:{background:a.background.transparent.lighter,border:`1px solid ${a.border.color.medium}`,borderRadius:a.border.radius.sm,boxSizing:`border-box`,color:a.font.color.primary,font:`inherit`,height:32,padding:`0 ${a.spacing[2]}`,width:`100%`}}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,minHeight:0,overflowY:`auto`},children:[p&&f===void 0&&(0,Q.jsx)(iJ,{rows:5}),!p&&g.length===0&&(0,Q.jsx)(Oq,{children:`Бесед не найдено.`}),g.map(e=>(0,Q.jsxs)(`button`,{type:`button`,disabled:c!==void 0,onClick:()=>void _(e),style:{background:`transparent`,border:`none`,color:`inherit`,cursor:`pointer`,font:`inherit`,overflow:`hidden`,padding:`${a.spacing[1]} 0`,textAlign:`left`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:[m(e),c===e.id&&` …`]},e.id))]}),u!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:u})]})})},DZ=({taskId:e,members:t,viewerId:n})=>{let r=M(),[i]=(0,L.useState)(()=>new Date),[a,o]=(0,L.useState)(),[s,c]=(0,L.useState)([]),[l,u]=(0,L.useState)(!1),[d,f]=(0,L.useState)(),[p,m]=(0,L.useState)(``),[h,g]=(0,L.useState)(!1),[_,v]=(0,L.useState)(),[y,b]=(0,L.useState)(),[x,S]=(0,L.useState)(),[C,w]=(0,L.useState)(),[T,ee]=(0,L.useState)(),[E,D]=(0,L.useState)(),O=a?.id,k=e=>xK(t.find(t=>t.id===e))||`Сотрудник`;(0,L.useEffect)(()=>{o(void 0),c([]),f(void 0),xZ({action:`openRecordChat`,objectName:`task`,recordId:e}).then(e=>o(e.conversation),e=>f(IG(e,`Чат задания не открылся`)))},[e]);let te=(0,L.useCallback)(async()=>{if(O!==void 0)try{let e=await xZ({action:`listMessages`,conversationId:O});c(t=>SZ(t,e.messages)),u(t=>t||e.hasMore),f(void 0)}catch(e){f(IG(e,`Не удалось загрузить сообщения`))}},[O]);(0,L.useEffect)(()=>{te();let e=setInterval(()=>void te(),vZ);return()=>clearInterval(e)},[te]),(0,L.useEffect)(()=>{if(O===void 0)return;let e=setInterval(()=>{xZ({action:`getConversation`,conversationId:O}).then(e=>o(e.conversation),()=>void 0)},yZ);return()=>clearInterval(e)},[O]);let{data:ne}=zK(async()=>O===void 0?void 0:xZ({action:`listHighlights`,conversationId:O}),[O,s.filter(e=>e.isPinned).map(e=>e.id).join(`,`)]),re=s[s.length-1]?.seq??0;(0,L.useEffect)(()=>{E!==void 0&&re<=E||O!==void 0&&re>(a?.lastReadSeq??0)&&xZ({action:`markRead`,conversationId:O,seq:re}).catch(()=>void 0)},[O,a?.lastReadSeq,re,E]);let A=e=>c(t=>SZ(t,[e])),j=async(e,t)=>{try{return await e(),f(void 0),!0}catch(e){return f(IG(e,t)),!1}},ie=e=>(a?.memberIds??[]).filter(t=>t!==e.authorId&&(a?.readSeqs?.[t]??0)>=e.seq),ae=async()=>{let e=s[0]?.seq;O!==void 0&&e!==void 0&&await j(async()=>{let t=await xZ({action:`listMessages`,conversationId:O,beforeSeq:e});c(e=>SZ(e,t.messages)),u(t.hasMore)},`Не удалось загрузить сообщения`)},oe=(0,L.useRef)(void 0),se=async()=>{if(O===void 0||p.trim().length===0||h)return;let e=p;g(!0),await j(async()=>{let{message:t}=y===void 0?await xZ({action:`sendMessage`,conversationId:O,clientMessageId:TZ(),text:e,replyToMessageId:_?.id}):await xZ({action:`editMessage`,messageId:y.id,text:e});A(t),m(t=>t===e?``:t),v(void 0),b(void 0)},`Сообщение не отправлено`)||m(t=>t.length===0?e:t),g(!1)},ce=async e=>{await Tl(e.length===1?e[0].text:e.map(e=>`${k(e.authorId)}, ${dZ(e.createdAt)}:\n${e.text}`).join(`
|
|
91
91
|
|
|
92
|
-
`)),await El({message:e.length===1?`Текст скопирован`:`Сообщения скопированы`,variant:`success`})},le=e=>j(async()=>{for(let t of e)A((await
|
|
93
|
-
`).find(e=>e.trim().length>0)??`Задача из чата`).trim().slice(0,120),bodyV2:{markdown:e.text}});await El({message:`Задача создана`,variant:`success`}),t!==void 0&&await Ol({to:xl.RecordShowPage,params:{objectNameSingular:`task`,objectRecordId:t.id},pageTitle:`Задача`})},`Задача не создана`);return;case`toggleResult`:ue({action:`setResult`,messageId:e.id,isResult:!e.isResult},`Не удалось изменить результат`);return;case`togglePin`:ue({action:`setPinned`,messageId:e.id,isPinned:!e.isPinned},`Не удалось закрепить`);return;case`markUnread`:j(async()=>{O!==void 0&&(await
|
|
94
|
-
`).length,1),
|
|
95
|
-
`,``)===t?m(``):m(e.target.value)},onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),oe.current=he?p:void 0,se()),e.key===`Escape`&&me!==void 0&&(b(void 0),v(void 0))},style:{background:r.background.transparent.lighter,border:`1px solid ${r.border.color.light}`,borderRadius:r.border.radius.md,boxSizing:`border-box`,color:r.font.color.primary,flex:1,font:`inherit`,lineHeight:`20px`,minHeight:36,minWidth:0,padding:`7px 10px`,resize:`none`}}),(0,Q.jsx)(`button`,{type:`button`,"aria-label":y===void 0?`Отправить`:`Сохранить`,title:y===void 0?`Отправить · Enter`:`Сохранить · Enter`,disabled:!he,onClick:()=>void se(),style:{alignItems:`center`,background:he?r.color.blue:r.background.transparent.light,border:`none`,borderRadius:r.border.radius.md,color:he?r.font.color.inverted:r.font.color.light,cursor:he?`pointer`:`default`,display:`inline-flex`,flexShrink:0,height:36,justifyContent:`center`,padding:0,width:36},children:(0,Q.jsx)(Tn,{size:r.icon.size.md,stroke:r.icon.stroke.md})})]})]}):(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:r.spacing[1]},children:[(0,Q.jsxs)(`strong`,{style:{flex:1},children:[`Выбрано: `,fe.length]}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,disabled:fe.length===0,onClick:()=>void ce(fe),children:`Копировать`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,disabled:fe.length===0,onClick:()=>ee(fe.map(e=>e.id)),children:`Переслать`}),fe.length>0&&fe.every(e=>e.authorId===n)&&(0,Q.jsx)($,{variant:`ghost`,size:`sm`,onClick:()=>void le(fe).then(()=>w(void 0)),children:`Удалить`}),(0,Q.jsx)($,{variant:`outline`,size:`sm`,onClick:()=>w(void 0),children:`Отмена`})]}),T!==void 0&&(0,Q.jsx)(wZ,{messageIds:T,viewerId:n,memberName:k,onClose:()=>ee(void 0),onForwarded:e=>{ee(void 0),w(void 0),El({message:`Переслано в «${e}»`,variant:`success`})}})]})},EZ=e=>typeof e==`string`&&e.length>0&&!Number.isNaN(Date.parse(e)),DZ=e=>Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=e;return t.kind===`run`&&EZ(t.start)?[{kind:`run`,start:t.start,end:EZ(t.end)?t.end:null}]:t.kind===`add`&&typeof t.minutes==`number`&&Number.isFinite(t.minutes)&&t.minutes>0?[{kind:`add`,minutes:Math.round(t.minutes),at:EZ(t.at)?t.at:new Date(0).toISOString()}]:[]}):[],OZ=e=>e.some(e=>e.kind===`run`&&e.end===null),kZ=(e,t)=>e.reduce((e,n)=>{if(n.kind===`add`)return e+n.minutes*6e4;let r=Date.parse(n.start),i=n.end===null?t.getTime():Date.parse(n.end);return Number.isNaN(r)||Number.isNaN(i)||i<r?e:e+(i-r)},0),AZ=e=>{let t=Math.max(0,Math.floor(e/1e3)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}ч ${String(r).padStart(2,`0`)}м`:r>0?i>0?`${r}м ${String(i).padStart(2,`0`)}с`:`${r}м`:`${i}с`},jZ=(e,t)=>OZ(e)?e:[...e,{kind:`run`,start:t.toISOString(),end:null}],MZ=(e,t)=>e.map(e=>e.kind===`run`&&e.end===null?{...e,end:t.toISOString()}:e),NZ=(e,t,n)=>{let r=Math.round(t);return!Number.isFinite(r)||r<=0?e:[...e,{kind:`add`,minutes:r,at:n.toISOString()}]};an(),cn(),mn(),fe();var PZ=`IN_PROGRESS`,FZ=({answers:e})=>e.length===0?null:(0,Q.jsx)(qq,{rows:e.map(({label:e,value:t})=>({label:e,value:MK(t)}))}),IZ=({task:e,disabled:t,onChanged:n})=>{let r=M(),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(!1),[c,l]=(0,L.useState)(``),[u,d]=(0,L.useState)(()=>new Date),f=DZ(e.smbTimeLog),p=OZ(f);(0,L.useEffect)(()=>{if(!p)return;let e=window.setInterval(()=>d(new Date),1e3);return()=>window.clearInterval(e)},[p]);let m=async(t,r)=>{s(!0);try{await OG(`tasks`,e.id,{smbTimeLog:t}),await El({message:r,variant:`success`}),await n()}catch(e){await El({message:IG(e,`Не удалось сохранить время`),variant:`error`})}finally{s(!1)}};return(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:r.spacing[1]},children:[(0,Q.jsx)(`span`,{style:{color:p?r.color.blue:r.font.color.secondary,fontSize:r.font.size.sm,fontVariantNumeric:`tabular-nums`,minWidth:`3.5em`},children:AZ(kZ(f,u))}),(0,Q.jsx)(WK,{icon:p?rn:sn,label:p?`Пауза`:`Пуск`,disabled:t||o,isActive:p,onClick:()=>{m(p?MZ(f,new Date):jZ(f,new Date),p?`Таймер остановлен`:`Таймер запущен`)}}),(0,Q.jsx)(ZK,{isOpen:i,onClose:()=>a(!1),align:`left`,width:`200px`,anchor:(0,Q.jsx)(WK,{icon:pn,label:`Добавить время`,disabled:t||o,isActive:i,onClick:()=>a(!i)}),children:(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:r.spacing[2],padding:r.spacing[2]},children:[(0,Q.jsxs)(`label`,{style:{color:r.font.color.tertiary,fontSize:r.font.size.xs},children:[`Минуты`,(0,Q.jsx)(`input`,{type:`number`,min:1,step:1,value:c,onChange:e=>l(e.target.value),style:{background:r.background.transparent.lighter,border:`1px solid ${r.border.color.medium}`,borderRadius:r.border.radius.sm,boxSizing:`border-box`,color:r.font.color.primary,display:`block`,fontFamily:`inherit`,fontSize:r.font.size.md,marginTop:r.spacing[1],outline:`none`,padding:r.spacing[2],width:`100%`}})]}),(0,Q.jsx)($,{variant:`outline`,size:`sm`,disabled:o||Number(c)<=0,onClick:()=>{let e=Number(c);m(NZ(f,e,new Date),`Добавлено ${Math.round(e)} мин`),l(``),a(!1)},children:`Добавить`})]})})]})},LZ=({task:e,onChanged:t,rail:n,meta:r})=>{let i=M(),[a,o]=(0,L.useState)(),[s,c]=(0,L.useState)(!1),[l,u]=(0,L.useState)(),d=tK(e.smbFormSchema),f=a??nK(e.smbFormValues),p=e.status===VG,m=async(e,n,r)=>{c(!0),u(void 0);try{await e(),await El({message:n,variant:`success`}),o(void 0),await t()}catch(e){u(IG(e,r))}finally{c(!1)}};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flex:1,flexDirection:`column`,minHeight:0},children:[(0,Q.jsxs)(`div`,{style:{display:`flex`,flex:1,gap:i.spacing[3],minHeight:0},children:[n,(0,Q.jsxs)(`div`,{style:{display:`flex`,flex:1,flexDirection:`column`,gap:i.spacing[3],minHeight:0,minWidth:0},children:[r,typeof e.smbInstruction==`string`&&e.smbInstruction.trim().length>0&&(0,Q.jsxs)(`section`,{"aria-label":`Инструкция`,style:{background:i.background.transparent.lighter,borderLeft:`2px solid ${i.border.color.medium}`,padding:i.spacing[3],whiteSpace:`pre-wrap`},children:[(0,Q.jsx)(`div`,{style:{color:i.font.color.tertiary,fontSize:i.font.size.sm,marginBottom:i.spacing[1]},children:`Инструкция`}),e.smbInstruction]}),d.length>0?(0,Q.jsx)(oX,{fields:d,values:f,disabled:s||p,onChange:o}):(0,Q.jsx)(Oq,{tone:`hint`,children:`Полей нет: задание выполняется без ответа.`}),l!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:l})]})]}),(0,Q.jsx)(qK,{value:`above`,children:(0,Q.jsxs)(`div`,{style:{alignItems:`center`,borderTop:`1px solid ${i.border.color.light}`,display:`flex`,flexWrap:`wrap`,gap:i.spacing[2],justifyContent:`space-between`,marginTop:i.spacing[3],paddingTop:i.spacing[3]},children:[(0,Q.jsx)(IZ,{task:e,disabled:s,onChanged:t}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[!p&&a!==void 0&&(0,Q.jsx)($,{variant:`outline`,size:`sm`,disabled:s,onClick:()=>m(()=>FG(`/docflow/tasks/form`,{taskId:e.id,values:f}),`Сохранено`,`Не удалось сохранить`),children:`Сохранить`}),!p&&(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`sm`,loading:s,onClick:()=>m(()=>FG(`/docflow/tasks/complete`,{taskId:e.id,values:f}),`Задание выполнено`,`Не удалось выполнить задание`),children:`Выполнить`})]})]})})]})},RZ=(e,t)=>xK(e.find(e=>e.id===t)),zZ=({task:e,run:t,members:n,now:r})=>{let i=jX(t.state,r),a=t.status===`COMPLETED`,o=t.status===`FAILED`||t.status===`STOPPED`;return[{key:`start`,title:`Запуск процесса`,meta:[RK(t,n),DK(t.startedAt??t.createdAt)].filter(Boolean).join(` · `),state:`done`},...i.map(t=>{let r=t.stepId===e.smbWorkflowStepId,i=r?RZ(n,e.assigneeId):RZ(n,t.assigneeWorkspaceMemberId);return{key:t.stepId,title:t.name,meta:[FK[t.type]??t.type,i].filter(Boolean).join(` · `),state:t.state,isFocus:r,details:t.answers.length>0?(0,Q.jsx)(FZ,{answers:t.answers}):void 0}}),{key:`end`,title:o?`Процесс остановлен`:`Процесс завершён`,meta:t.endedAt?DK(t.endedAt):void 0,state:a?`done`:o?`failed`:`upcoming`}]},BZ=({task:e,members:t,now:n})=>{let r=e.status===VG,i=jK(e.dueAt,n);return[{key:`created`,title:`Задание создано`,meta:[e.createdBy?.name,DK(e.createdAt)].filter(Boolean).join(` · `),state:`done`},{key:`work`,title:e.status===PZ?`В работе`:`Исполнение`,meta:[RZ(t,e.assigneeId)||`Исполнитель не назначен`,e.dueAt?`срок ${SK(e.dueAt)}`:void 0].filter(Boolean).join(` · `),state:r?`done`:`current`,isFocus:!0},{key:`done`,title:`Выполнено`,meta:r?DK(e.updatedAt):e.dueAt?i.label:void 0,state:r?`done`:`upcoming`}]},VZ=({taskId:e,withChat:t=!1,showTitle:n=!0,onChanged:r})=>{let i=M(),{members:a,currentMember:o}=OJ(),[s]=(0,L.useState)(()=>new Date),[c,l]=(0,L.useState)(`work`),[u,d]=(0,L.useState)(!1),{data:f,loading:p,error:m,reload:h}=zK(async()=>{let t=await EG(`tasks`,e);return{task:t,run:typeof t?.smbWorkflowRunId==`string`&&t.smbWorkflowRunId.length>0?await EG(`workflowRuns`,t.smbWorkflowRunId).catch(()=>void 0):void 0}},[e]),g=f?.task;if(g===void 0)return p?(0,Q.jsx)(iJ,{rows:4}):(0,Q.jsx)(Oq,{tone:`danger`,children:IG(m,`Задание не найдено или нет доступа.`)});let _=f?.run,v=async()=>{await h(),r?.()},y=_===void 0?BZ({task:g,members:a,now:s}):zZ({task:g,run:_,members:a,now:s}),b=t&&g.smbIsChatEnabled===!0,x=b&&(c===`chat`||u),S={display:`flex`,flex:1,flexDirection:`column`,gap:i.spacing[3],minHeight:0};return(0,Q.jsxs)(`div`,{style:S,children:[n&&(0,Q.jsx)(`div`,{style:{alignItems:`flex-start`,display:`flex`,gap:i.spacing[2],justifyContent:`space-between`},children:(0,Q.jsx)(`strong`,{style:{fontSize:i.font.size.lg,overflowWrap:`anywhere`},children:g.title?.trim()||`Без названия`})}),b&&(0,Q.jsx)(fq,{options:[{value:`work`,label:`Задание`},{value:`chat`,label:`Чат`}],value:c,onChange:e=>{e===`chat`&&d(!0),l(e)}}),(0,Q.jsx)(`div`,{style:{...S,display:!b||c===`work`?`flex`:`none`},children:(0,Q.jsx)(LZ,{task:g,onChanged:v,rail:(0,Q.jsx)(DX,{items:y}),meta:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(qq,{labelAlign:`right`,fontSize:`calc(${i.font.size.sm} + 1px)`,rows:[{label:`Исполнитель`,value:RZ(a,g.assigneeId)||`Не назначен`},{label:`Срок`,value:g.dueAt?SK(g.dueAt):`Без срока`},{label:`Автор`,value:g.createdBy?.name},{label:`Создано`,value:DK(g.createdAt)}]}),(0,Q.jsx)(`div`,{style:{borderTop:`1px solid ${i.border.color.light}`}})]})},`${g.id}-${g.updatedAt??``}`)}),x&&(0,Q.jsx)(`div`,{style:{...S,display:c===`chat`?`flex`:`none`},children:(0,Q.jsx)(TZ,{taskId:g.id,members:a,viewerId:o?.id})})]})};Be(),ut(),pt(),Yt(),cn(),_n(),Wn(),fe();var HZ=300,UZ=``,WZ=`any`,GZ=`nobody`,KZ=864e5,qZ=3,JZ=30,YZ=`IN_PROGRESS`,XZ=[`задание`,`задания`,`заданий`],ZZ=[{value:`open`,label:`Открытые`},{value:`mine`,label:`Мои`},{value:`done`,label:`Выполненные`}],QZ={source:`any`,due:`any`,assignee:WZ,scope:`active`},$Z={key:`dueAt`,direction:`asc`},eQ=[{key:`title`,label:`Задание`,width:`30%`,sortKey:`title`},{key:`assignee`,label:`Исполнитель`,width:`15%`,sortKey:`assigneeId`},{key:`dueAt`,label:`Срок`,width:`15%`,sortKey:`dueAt`},{key:`fields`,label:`Поля`,width:`11%`},{key:`status`,label:`Статус`,width:`13%`,sortKey:`status`},{key:`source`,label:`Откуда`,width:`10%`},{key:`createdAt`,label:`Создано`,sortKey:`createdAt`}],tQ=hG(sG(`status`,VG),cG(`status`)),nQ=e=>Ol({to:xl.RecordShowPage,params:{objectNameSingular:`task`,objectRecordId:e},pageTitle:`Задание`}),rQ=(e,t,n=!1)=>mG(n?lG(`deletedAt`):e===`done`?oG(`status`,VG):tQ,e===`mine`?t===void 0?cG(`assigneeId`):oG(`assigneeId`,t):void 0),iQ=({view:e,filters:t,searchQuery:n,currentMemberId:r,now:i,weekAhead:a})=>mG(oG(`smbSection`,LG),rQ(e,r,t.scope===`deleted`),t.source===`process`?lG(`smbWorkflowThreadId`):void 0,t.source===`own`?cG(`smbWorkflowThreadId`):void 0,t.due===`overdue`?uG(`dueAt`,i):void 0,t.due===`week`?mG(lG(`dueAt`),uG(`dueAt`,a)):void 0,t.due===`none`?cG(`dueAt`):void 0,t.assignee===GZ?cG(`assigneeId`):t.assignee===WZ?void 0:oG(`assigneeId`,t.assignee),n.trim().length>0?pG(`title`,n):void 0),aQ=(e,t)=>mG(oG(`assigneeId`,e),lG(`dueAt`),uG(`dueAt`,t)),oQ=(e,t)=>hG(sG(`assigneeId`,e),cG(`assigneeId`),cG(`dueAt`),dG(`dueAt`,t)),sQ=e=>e.map(e=>({value:e.id,label:xK(e)||e.id})),cQ=({currentMemberId:e,onCreated:t,onCancel:n})=>{let r=M(),{members:i}=OJ(),[a,o]=(0,L.useState)(``),[s,c]=(0,L.useState)(e??UZ),[l,u]=(0,L.useState)(``),[d,f]=(0,L.useState)(``),[p,m]=(0,L.useState)([]),[h,g]=(0,L.useState)(!1),[_,v]=(0,L.useState)(),y=async()=>{let e=eK(p);if(e!==void 0)v(e);else{g(!0),v(void 0);try{let e=await DG(`tasks`,{title:a.trim(),assigneeId:s===UZ?null:s,dueAt:/^\d{4}-\d{2}-\d{2}$/.test(l)?l:null,status:HG,smbSection:LG,smbInstruction:d.trim().length>0?d.trim():null,smbFormSchema:p.length>0?p:null,smbFormValues:p.length>0?{}:null});if(e===void 0)throw Error(`The created task was not returned`);await El({message:`Задание создано`,variant:`success`}),t(e.id)}catch(e){v(IG(e,`Не удалось создать задание`))}finally{g(!1)}}};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:r.spacing[3]},children:[(0,Q.jsx)(wq,{label:`Название`,value:a,onChange:o}),(0,Q.jsx)(Eq,{label:`Исполнитель`,value:s,options:[{value:UZ,label:`Не назначен`},...sQ(i)],onChange:c}),(0,Q.jsx)(wq,{label:`Срок`,type:`date`,value:l,onChange:u}),(0,Q.jsx)(Tq,{label:`Инструкция`,value:d,onChange:f,rows:4}),(0,Q.jsx)(kq,{children:`Поля для заполнения`}),(0,Q.jsx)(uX,{fields:p,onChange:m,disabled:h}),_!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:_}),(0,Q.jsxs)(`div`,{style:{display:`flex`,gap:r.spacing[2]},children:[(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`sm`,loading:h,disabled:a.trim().length===0,onClick:()=>void y(),children:`Создать`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,onClick:n,children:`Отмена`})]})]})},lQ=er({universalIdentifier:aJ,name:`docflow-tasks`,description:`Задания документооборота: штатные задачи с разделом «Документооборот»`,component:()=>{let e=M(),{members:t,currentMember:n}=OJ(),[r,i]=(0,L.useState)(``),a=BK(r,HZ),[o,s]=(0,L.useState)(`open`),[c,l]=(0,L.useState)(QZ),[u,d]=(0,L.useState)($Z),[f,p]=(0,L.useState)({kind:`closed`}),[m,h]=(0,L.useState)({}),[g,_]=(0,L.useState)(1),[v,y]=zq([`createdAt`]),[b,x]=(0,L.useState)(),[S]=(0,L.useState)(()=>new Date),C=S.toISOString(),w=new Date(S.getTime()+7*KZ).toISOString(),T=new Date(S.getFullYear(),S.getMonth(),S.getDate()+qZ+1).toISOString(),ee=n?.id,E=c.scope===`deleted`,D=o!==`done`&&!E&&ee!==void 0,O=f.kind===`task`?f.taskId:void 0,k=(0,L.useMemo)(()=>iQ({view:o,filters:c,searchQuery:a,currentMemberId:ee,now:C,weekAhead:w}),[o,c,a,ee,C,w]),{data:te,loading:ne,error:re,reload:A}=zK(()=>TG(`tasks`,{filter:D?mG(k,oQ(ee,T)):k,order_by:Mq(u),limit:50*g}),[k,D,ee,T,u,g]),{data:j,reload:ie}=zK(async()=>D?(await TG(`tasks`,{filter:mG(k,aQ(ee,T)),order_by:`dueAt[AscNullsLast]`,limit:JZ})).records:[],[k,D,ee,T]),{data:ae,reload:oe}=zK(async()=>Object.fromEntries(await Promise.all(ZZ.map(async({value:e})=>[e,await AG(`tasks`,mG(oG(`smbSection`,LG),rQ(e,ee),a.trim().length>0?pG(`title`,a):void 0))]))),[a,ee]),se=te?.records??[],ce=j??[],le=Nq(se.map(({id:e})=>e)),ue=se.filter(({id:e})=>le.selectedIds.includes(e)),de=(c.source===WZ?0:1)+(c.due===WZ?0:1)+(c.assignee===WZ?0:1)+ +!!E,fe=async()=>{await Promise.all([A(),ie(),oe()])},pe=VK({onDone:async()=>{le.clear(),x(void 0),await fe()}}),me=e=>{s(e),_(1),le.clear()},he=e=>{l(t=>({...t,...e})),_(1)},N=e=>pe.runEach(e,e=>FG(`/docflow/tasks/complete`,{taskId:e}),{done:e=>`Выполнено: ${e}`,failed:`Не выполнены`}),P=(e,t)=>pe.run(()=>MG(`tasks`,e,{status:t}),`Статус изменён: ${EK[t]}`,`Не удалось изменить статус`),F=e=>pe.run(async()=>{await NG(`tasks`,e),p(t=>t.kind===`task`&&e.includes(t.taskId)?{kind:`closed`}:t)},e.length===1?`Задание удалено: оно в фильтре «Удалённые»`:`Удалено заданий: ${e.length}, они в фильтре «Удалённые»`,`Не удалось удалить`),I=e=>pe.run(()=>PG(`tasks`,e),`Восстановлено: ${e.length}`,`Не удалось восстановить`),ge=e=>{let t=se.find(({id:t})=>t===e);if(E)return[{key:`restore`,label:`Восстановить`,icon:gn,onSelect:()=>void I([e])},{key:`card`,label:`Открыть карточку`,icon:lt,onSelect:()=>void nQ(e)}];let n=t?.status===VG;return[{key:`open`,label:`Открыть`,icon:ft,onSelect:()=>p({kind:`task`,taskId:e})},{key:`card`,label:`Карточка задачи`,icon:lt,onSelect:()=>void nQ(e)},...t?.status===`TODO`?[{key:`start`,label:`Взять в работу`,icon:sn,onSelect:()=>void P([e],YZ)}]:[],...n?[]:[{key:`complete`,label:`Выполнить`,icon:ze,onSelect:()=>void N([e])}],{key:`delete`,label:`Удалить`,confirmLabel:`Точно удалить?`,icon:Un,tone:`danger`,onSelect:()=>void F([e])}]},_e=le.selectedIds,ve=ue.filter(e=>e.status!==VG).length,ye=f.kind===`task`?se.find(({id:e})=>e===f.taskId)??ce.find(({id:e})=>e===f.taskId):void 0,be=ye?.title?.trim()??``;(0,L.useEffect)(()=>{ye!==void 0&&be.length>0&&h(e=>e[ye.id]===be?e:{...e,[ye.id]:be})},[ye?.id,be]);let xe=f.kind===`create`?`Новое задание`:f.kind===`task`?be||m[f.taskId]||`Без названия`:void 0;return(0,Q.jsxs)(xq,{children:[(0,Q.jsxs)(Kq,{panelTitle:xe,onClosePanel:()=>p({kind:`closed`}),panel:f.kind===`create`?(0,Q.jsx)(cQ,{currentMemberId:ee,onCancel:()=>p({kind:`closed`}),onCreated:e=>{p({kind:`task`,taskId:e}),fe()}}):f.kind===`task`?(0,Q.jsx)(VZ,{taskId:f.taskId,withChat:!0,showTitle:!1,onChanged:()=>void fe()},f.taskId):void 0,children:[(0,Q.jsx)(Vq,{search:{value:r,onChange:i,placeholder:`Поиск заданий`,activeFilterCount:de,onResetFilters:()=>he(QZ),filters:[{key:`source`,title:`Откуда`,value:c.source,options:[{value:WZ,label:`Все`},{value:`process`,label:`Шаги процессов`},{value:`own`,label:`Свои задания`}],onChange:e=>he({source:e})},{key:`due`,title:`Срок`,value:c.due,options:[{value:WZ,label:`Любой`},{value:`overdue`,label:`Просроченные`},{value:`week`,label:`В ближайшие 7 дней`},{value:`none`,label:`Без срока`}],onChange:e=>he({due:e})},{key:`assignee`,title:`Исполнитель`,value:c.assignee,options:[{value:WZ,label:`Любой`},{value:GZ,label:`Не назначен`},...sQ(t)],onChange:e=>he({assignee:e})},{key:`scope`,title:`Корзина`,value:c.scope,options:[{value:`active`,label:`Действующие`},{value:`deleted`,label:`Удалённые`}],onChange:e=>{he({scope:e}),le.clear()}}]},views:(0,Q.jsx)(mq,{value:o,onChange:me,options:ZZ.map(e=>({...e,count:ae?.[e.value]}))}),onCreate:()=>p({kind:`create`})}),D&&(0,Q.jsx)(tZ,{tasks:ce,members:t,now:S,selectedTaskId:O,onOpen:e=>p({kind:`task`,taskId:e})}),re!==void 0&&(0,Q.jsx)(`div`,{style:{padding:e.spacing[4]},children:(0,Q.jsx)(Oq,{tone:`danger`,children:IG(re,`Не удалось загрузить задания`)})}),ne&&te===void 0&&(0,Q.jsx)(rJ,{}),!ne&&re===void 0&&se.length===0&&(0,Q.jsx)(Oq,{children:ce.length>0?`Остальных заданий нет: все срочные — в карточках выше.`:`Заданий нет.`}),se.length>0&&(0,Q.jsxs)(Q.Fragment,{children:[D&&ce.length>0&&(0,Q.jsx)(`div`,{style:{padding:`${e.spacing[1]} ${e.spacing[5]} 0`},children:(0,Q.jsx)(kq,{children:`Остальные задания`})}),(0,Q.jsx)(Bq,{columns:eQ,hiddenColumnKeys:v,onHiddenColumnsChange:y,sort:u,onSortChange:e=>{d(e),_(1)},selectedRowId:O,selectedIds:_e,onSelectionChange:le.setSelectedIds,rowActions:ge,onRowClick:e=>E?void nQ(e):p({kind:`task`,taskId:e}),rows:se.map(n=>{let r=jK(n.dueAt,S),i=n.status===`DONE`,a=ZX(n);return{id:n.id,isMuted:i&&o!==`done`,cells:{title:n.title?.trim()||`Без названия`,assignee:xK(t.find(e=>e.id===n.assigneeId))||`—`,dueAt:n.dueAt?(0,Q.jsx)(`span`,{title:SK(n.dueAt),style:{color:i?void 0:r.tone===`overdue`?e.font.color.danger:r.tone===`today`?e.color.orange:void 0},children:i?SK(n.dueAt):`${SK(n.dueAt)} · ${r.label.toLowerCase()}`}):`—`,fields:a.total>0?(0,Q.jsxs)(`span`,{style:{alignItems:`center`,display:`flex`,gap:e.spacing[2]},children:[(0,Q.jsx)(`span`,{style:{flex:1,maxWidth:`48px`},children:(0,Q.jsx)(Gq,{value:a.filled,total:a.total,tone:i?`green`:`blue`})}),a.filled,`/`,a.total]}):`—`,status:(0,Q.jsx)(GK,{color:NK[n.status??``]??`gray`,children:EK[n.status??``]??n.status??`Без статуса`}),source:XX(n)?`Процесс`:`Своё`,createdAt:SK(n.createdAt)}}})})]}),(0,Q.jsx)(Wq,{isVisible:te?.pageInfo.hasNextPage===!0,loading:ne,onClick:()=>_(e=>e+1)}),(0,Q.jsx)(Hq,{count:_e.length,noun:XZ,onClear:le.clear,children:E?(0,Q.jsx)($,{icon:gn,loading:pe.isBusy,onClick:()=>void I(_e),children:`Восстановить`}):(0,Q.jsxs)(Q.Fragment,{children:[ve>0&&(0,Q.jsx)($,{icon:ze,loading:pe.isBusy,onClick:()=>void N(_e),children:`Выполнить`}),(0,Q.jsx)($,{icon:Jt,disabled:pe.isBusy,onClick:()=>x(`change`),children:`Изменить`}),(0,Q.jsx)(nq,{label:`Удалить`,icon:Un,disabled:pe.isBusy,actions:[{key:`delete`,label:`Удалить выбранные (${_e.length})`,confirmLabel:`Точно удалить?`,icon:Un,tone:`danger`,onSelect:()=>void F(_e)}]})]})})]}),b===`change`&&(0,Q.jsx)(bq,{title:`Изменить поле`,hint:`Для ${_e.length} ${Uq(_e.length,XZ)}`,fields:[{key:`status`,label:`Статус`,options:[`TODO`,YZ].map(e=>({value:e,label:EK[e]}))},{key:`assignee`,label:`Исполнитель`,options:[{value:UZ,label:`Не назначен`},...sQ(t)]},{key:`dueAt`,label:`Срок`,inputType:`date`}],onClose:()=>x(void 0),onSubmit:(e,t)=>e===`status`?P(_e,t):e===`assignee`?pe.run(()=>MG(`tasks`,_e,{assigneeId:t===UZ?null:t}),`Исполнитель назначен`,`Не удалось назначить исполнителя`):pe.run(()=>MG(`tasks`,_e,{dueAt:/^\d{4}-\d{2}-\d{2}$/.test(t)?t:null}),`Срок изменён`,`Не удалось изменить срок`)})]})}}),uQ=5e3,dQ=[],fQ=1,pQ=new Set,mQ=e=>{dQ=e,pQ.forEach(e=>e(dQ))},hQ=(e,t=`info`)=>{let n=fQ++;mQ([...dQ,{id:n,message:e,variant:t}]),setTimeout(()=>mQ(dQ.filter(e=>e.id!==n)),uQ)},gQ=e=>(pQ.add(e),e(dQ),()=>{pQ.delete(e)}),_Q=e=>{d.TWENTY_APP_ACCESS_TOKEN=e},vQ=(e,t,n,r)=>{window.open(re(e,t,n,r),`_blank`,`noopener`)},yQ=e=>{globalThis[kJ]=async(t,n)=>{let r=await fetch(`${e}/graphql`,{method:`POST`,credentials:`include`,headers:{"content-type":`application/json`},body:JSON.stringify({query:t,variables:n})}),i=await r.json().catch(()=>({})),[a]=i.errors??[];if(a!==void 0||i.data===void 0){let e=a?.extensions?.userFriendlyMessage;throw Error(typeof e==`string`?e:a?.message??`Ошибка CRM (HTTP ${r.status})`)}return i.data}},bQ=({crmUrl:e,userId:t,colorScheme:n,hasCrmSignIn:r,refreshAccessToken:i})=>{r&&yQ(e),globalThis.__twentySdkExecutionContext__={frontComponentId:`docflow-app`,userId:t,recordId:null,selectedRecordIds:[],timelineActivityId:null,colorScheme:n,locale:`ru-RU`},globalThis.frontComponentHostCommunicationApi??={},Object.assign(globalThis.frontComponentHostCommunicationApi,{enqueueSnackbar:async({message:e,variant:t})=>hQ(e,t),openSidePanelPage:async t=>{typeof t.to==`string`&&vQ(e,t.to,t.params)},navigate:async(t,n,r)=>vQ(e,t,n,r),closeSidePanel:async()=>void 0,copyToClipboard:e=>navigator.clipboard.writeText(e),requestAccessTokenRefresh:async()=>await i()??``})};ut(),gt(),Ut(),Kt(),fe();var xQ={tasks:lQ.config.component,processes:YX.config.component,documents:EJ.config.component},SQ=e=>e.crmUrl.length>0?e.crmUrl:window.location.origin,CQ=({config:e,section:t,onSectionChange:n})=>{let r=M(),[i,a]=(0,L.useState)(document.fullscreenElement!==null);return(0,L.useEffect)(()=>{let e=()=>a(document.fullscreenElement!==null);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]),(0,Q.jsxs)(`header`,{style:{alignItems:`center`,borderBottom:`1px solid ${r.border.color.medium}`,display:`grid`,gap:r.spacing[3],gridTemplateColumns:`1fr auto 1fr`,padding:`0 ${r.spacing[4]}`},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:r.spacing[2],fontWeight:r.font.weight.medium},children:[(0,Q.jsx)(ht,{size:18}),`Документооборот`]}),(0,Q.jsx)(`nav`,{role:`tablist`,style:{display:`flex`,gap:r.spacing[4]},children:T.map(e=>{let i=e===t;return(0,Q.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":i,onClick:()=>n(e),style:{background:`none`,border:`none`,borderBottom:`2px solid ${i?r.font.color.primary:`transparent`}`,color:i?r.font.color.primary:r.font.color.tertiary,cursor:`pointer`,fontFamily:`inherit`,fontSize:r.font.size.md,fontWeight:i?r.font.weight.medium:r.font.weight.regular,padding:`${r.spacing[3]} ${r.spacing[1]}`},children:ee[e]},e)})}),(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:r.spacing[2],justifyContent:`flex-end`},children:[document.fullscreenEnabled&&(0,Q.jsx)(WK,{icon:i?Gt:Ht,label:i?`Свернуть`:`На весь экран`,onClick:()=>void(i?document.exitFullscreen():document.documentElement.requestFullscreen())}),(0,Q.jsx)($,{icon:lt,onClick:()=>window.open(SQ(e),`_blank`,`noopener`),children:`Открыть CRM`})]})]})},wQ=()=>{let e=M(),[t,n]=(0,L.useState)([]);return(0,L.useEffect)(()=>gQ(n),[]),(0,Q.jsx)(`div`,{"aria-live":`polite`,style:{bottom:e.spacing[4],display:`flex`,flexDirection:`column`,gap:e.spacing[2],position:`fixed`,right:e.spacing[4],zIndex:1e3},children:t.map(t=>(0,Q.jsx)(`div`,{role:t.variant===`error`?`alert`:`status`,style:{background:e.background.primary,border:`1px solid ${t.variant===`error`?e.color.red:e.border.color.medium}`,borderRadius:e.border.radius.md,boxShadow:e.boxShadow.strong,color:t.variant===`error`?e.font.color.danger:e.font.color.primary,fontSize:e.font.size.sm,maxWidth:360,padding:`${e.spacing[2]} ${e.spacing[3]}`},children:t.message},t.id))})},TQ=({config:e,session:t})=>{let n=M(),[r,i]=(0,L.useState)(e.section),[a,o]=(0,L.useState)([e.section]),s=e.expectedWorkspaceMemberId!==void 0&&t.workspaceMemberId!==e.expectedWorkspaceMemberId;return(0,Q.jsxs)(`div`,{style:{background:n.background.primary,color:n.font.color.primary,display:`flex`,flexDirection:`column`,height:`100%`},children:[(0,Q.jsx)(CQ,{config:e,section:r,onSectionChange:e=>{i(e),o(t=>t.includes(e)?t:[...t,e])}}),s&&(0,Q.jsx)(`div`,{role:`status`,style:{background:n.background.transparent.light,color:n.font.color.secondary,fontSize:n.font.size.sm,padding:`${n.spacing[2]} ${n.spacing[4]}`},children:`В CRM в этом браузере вы вошли не под тем сотрудником, что в Битрикс24. Чтобы сменить, выйдите из CRM, войдите нужным сотрудником и откройте приложение заново.`}),(0,Q.jsx)(`main`,{style:{flex:1,minHeight:0,position:`relative`},children:a.map(e=>{let t=xQ[e];return(0,Q.jsx)(`div`,{style:{display:e===r?`block`:`none`,height:`100%`,overflow:`auto`},children:(0,Q.jsx)(t,{})},e)})}),(0,Q.jsx)(wQ,{})]})},EQ=({title:e,text:t,action:n})=>{let r=M();return(0,Q.jsxs)(`div`,{style:{alignItems:`center`,background:r.background.primary,color:r.font.color.primary,display:`flex`,flexDirection:`column`,gap:r.spacing[3],height:`100%`,justifyContent:`center`,padding:r.spacing[6],textAlign:`center`},children:[(0,Q.jsx)(ht,{size:32}),(0,Q.jsx)(`div`,{style:{fontSize:r.font.size.lg,fontWeight:r.font.weight.medium},children:e}),(0,Q.jsx)(`div`,{style:{color:r.font.color.tertiary,fontSize:r.font.size.md,maxWidth:420},children:t}),n!==void 0&&(0,Q.jsx)($,{variant:`solid`,tone:`accent`,loading:n.loading,onClick:n.onClick,children:n.label})]})},DQ=`docflow.app.session`,OQ=6e4,kQ=3e3,AQ=async e=>{try{let t=await fetch(C,{method:`POST`,credentials:e===void 0?`same-origin`:`omit`,headers:{"content-type":`application/json`,...e===void 0?{}:{authorization:`Bearer ${e}`}},body:`{}`});return t.ok?D(await t.json()):void 0}catch{return}},jQ=()=>{try{let e=window.localStorage.getItem(DQ);return e===null?void 0:D(JSON.parse(e))}catch{return}},MQ=e=>{try{e===void 0?window.localStorage.removeItem(DQ):window.localStorage.setItem(DQ,JSON.stringify(e))}catch{}},NQ=({mode:e,session:t,onRenewed:n,onLost:r})=>{let i=t,a=null,o=()=>(a??=(async()=>{let t=await AQ(e===`crm`?void 0:te(i,Date.now())?i.token:void 0);return t===void 0?(te(i,Date.now())||(MQ(void 0),r()),te(i,Date.now())?i.token:null):(i=t,MQ(e===`bitrix`?i:void 0),n(i),i.token)})().finally(()=>{a=null}),a),s=window.setInterval(()=>{ne(i,Date.now())&&o()},OQ);return{current:()=>i,refresh:o,stop:()=>window.clearInterval(s)}},PQ=async e=>{if(e===`bitrix`){let e=jQ();if(te(e,Date.now()))return e}let t=await AQ();return t!==void 0&&e===`bitrix`&&MQ(t),t},FQ=()=>new Promise(e=>{let t=window.open(`${S}?connect=1`,`docflow-sign-in`,`width=520,height=560`);if(t===null){e(void 0);return}let n=t=>{window.removeEventListener(`message`,r),window.clearInterval(i),t!==void 0&&MQ(t),e(t)},r=e=>{e.origin===window.location.origin&&e.source===t&&e.data?.type===`docflow-app-session`&&n(D(e.data.session))},i=window.setInterval(()=>{t.closed&&n(void 0)},500);window.addEventListener(`message`,r)}),IQ=(e,t)=>{let n=window.opener;if(n===null){t();return}let r=async()=>{let e=await AQ();return e!==void 0&&(n.postMessage({type:w,session:e},window.location.origin),window.close(),!0)};r().then(t=>{if(t)return;e();let n=window.setInterval(()=>{r().then(e=>{e&&window.clearInterval(n)})},kQ)})},LQ=3e3,RQ=800,zQ=()=>{let e=document.getElementById(`docflow-app-config`),t=JSON.parse(e?.textContent??`{}`);return{mode:t.mode===`bitrix`||t.mode===`connect`?t.mode:`crm`,crmUrl:typeof t.crmUrl==`string`?t.crmUrl:``,section:E(t.section),expectedWorkspaceMemberId:t.expectedWorkspaceMemberId,portalDomain:t.portalDomain}},BQ=e=>A({portalDomain:e.portalDomain,ancestorOrigins:window.location.ancestorOrigins===void 0?void 0:Array.from(window.location.ancestorOrigins),referrer:document.referrer}),VQ=window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`,HQ=e=>e.crmUrl.length>0?e.crmUrl:window.location.origin,UQ=({config:e})=>{let[t,n]=(0,L.useState)(`working`),r=(0,L.useRef)(!1);return(0,L.useEffect)(()=>{r.current||(r.current=!0,IQ(()=>n(`waiting`),()=>n(`no-opener`)))},[]),t===`no-opener`?(0,Q.jsx)(EQ,{title:`Вход в документооборот`,text:`Это окно открывается из приложения «Документооборот» в Битрикс24. Откройте приложение там и нажмите «Войти через CRM».`}):t===`working`?(0,Q.jsx)(EQ,{title:`Вход в документооборот`,text:`Проверяю вход в CRM…`}):(0,Q.jsx)(EQ,{title:`Войдите в CRM`,text:`Войдите в CRM в открывшейся вкладке. Это окно само заметит вход, передаст его в Битрикс24 и закроется.`,action:{label:`Открыть CRM`,onClick:()=>window.open(HQ(e),`_blank`,`noopener`)}})},WQ=({config:e})=>{let[t,n]=(0,L.useState)({kind:`loading`}),r=(0,L.useRef)(null),i=(0,L.useRef)(!1),a=t=>{r.current?.stop(),r.current=NQ({mode:e.mode,session:t,onRenewed:e=>_Q(e.token),onLost:()=>n({kind:`sign-in`,isWaiting:!1})}),_Q(t.token),bQ({crmUrl:HQ(e),userId:t.userId,colorScheme:VQ,hasCrmSignIn:e.mode===`crm`&&window.top===window&&new URL(HQ(e)).origin===window.location.origin,refreshAccessToken:()=>r.current?.refresh()??Promise.resolve(null)}),n({kind:`signed-in`,session:t})};switch((0,L.useEffect)(()=>{if(!i.current&&(i.current=!0,PQ(e.mode).then(e=>e===void 0?n({kind:`sign-in`,isWaiting:!1}):a(e)),e.mode===`bitrix`)){let e=window.BX24;e?.init(()=>e.resizeWindow?.(document.documentElement.scrollWidth,Math.max(RQ,window.innerHeight)))}},[]),(0,L.useEffect)(()=>{if(t.kind!==`sign-in`||!t.isWaiting||e.mode!==`crm`)return;let n=window.setInterval(()=>{AQ().then(e=>{e!==void 0&&(window.clearInterval(n),a(e))})},LQ);return()=>window.clearInterval(n)},[t]),t.kind){case`loading`:return(0,Q.jsx)(EQ,{title:`Документооборот`,text:`Загрузка…`});case`signed-in`:return(0,Q.jsx)(TQ,{config:e,session:t.session});case`sign-in`:return e.mode===`bitrix`?(0,Q.jsx)(EQ,{title:`Войдите через CRM`,text:`Документооборот работает с вашей учётной записью CRM. Вход откроется в отдельном окне; в этом браузере его хватит надолго.`,action:{label:`Войти через CRM`,loading:t.isWaiting,onClick:()=>{n({kind:`sign-in`,isWaiting:!0}),FQ().then(e=>e===void 0?n({kind:`sign-in`,isWaiting:!1}):a(e))}}}):(0,Q.jsx)(EQ,{title:`Войдите в CRM`,text:t.isWaiting?`Войдите в CRM в открывшейся вкладке, эта страница откроется сама.`:`Документооборот открывается для сотрудника, вошедшего в CRM.`,action:{label:`Войти в CRM`,loading:t.isWaiting,onClick:()=>{window.open(HQ(e),`_blank`,`noopener`),n({kind:`sign-in`,isWaiting:!0})}}})}},GQ=zQ();document.documentElement.className=VQ;var KQ=document.getElementById(`root`);KQ!==null&&(0,x.createRoot)(KQ).render(GQ.mode===`connect`?(0,Q.jsx)(UQ,{config:GQ}):GQ.mode===`bitrix`&&!BQ(GQ)?(0,Q.jsx)(EQ,{title:`Документооборот`,text:`Эта страница открывается только в приложении портала Битрикс24, связанного с CRM.`}):(0,Q.jsx)(WQ,{config:GQ}))})();
|
|
92
|
+
`)),await El({message:e.length===1?`Текст скопирован`:`Сообщения скопированы`,variant:`success`})},le=e=>j(async()=>{for(let t of e)A((await xZ({action:`removeMessage`,messageId:t.id})).message)},`Сообщение не удалено`),ue=(e,t)=>j(async()=>{A((await xZ(e)).message)},t),de=(e,t)=>{switch(t){case`reply`:b(void 0),v(e);return;case`copy`:ce([e]);return;case`edit`:v(void 0),b(e),m(e.text);return;case`forward`:ee([e.id]);return;case`createTask`:j(async()=>{let t=await DG(`tasks`,{title:(e.text.split(`
|
|
93
|
+
`).find(e=>e.trim().length>0)??`Задача из чата`).trim().slice(0,120),bodyV2:{markdown:e.text}});await El({message:`Задача создана`,variant:`success`}),t!==void 0&&await Ol({to:xl.RecordShowPage,params:{objectNameSingular:`task`,objectRecordId:t.id},pageTitle:`Задача`})},`Задача не создана`);return;case`toggleResult`:ue({action:`setResult`,messageId:e.id,isResult:!e.isResult},`Не удалось изменить результат`);return;case`togglePin`:ue({action:`setPinned`,messageId:e.id,isPinned:!e.isPinned},`Не удалось закрепить`);return;case`markUnread`:j(async()=>{O!==void 0&&(await xZ({action:`markUnread`,conversationId:O,seq:e.seq}),D(re))},`Не удалось отметить непрочитанным`);return;case`remove`:le([e]);return;case`select`:w([e.id]);return}};if(a===void 0)return d===void 0?(0,Q.jsx)(iJ,{rows:6}):(0,Q.jsx)(Oq,{tone:`danger`,children:d});let fe=s.filter(e=>C?.includes(e.id)),pe=ne?.pinned[0],me=y===void 0?_===void 0?void 0:{icon:ve,title:`Ответ: ${k(_.authorId)}`,text:_.text}:{icon:Jt,title:`Редактирование`,text:y.text},he=p.trim().length>0&&!h,N={overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flex:1,flexDirection:`column`,gap:r.spacing[2],minHeight:0,position:`relative`},children:[pe!==void 0&&(0,Q.jsxs)(`div`,{style:{alignItems:`center`,borderLeft:`2px solid ${r.color.blue}`,display:`flex`,gap:r.spacing[2],paddingLeft:r.spacing[2]},children:[(0,Q.jsx)(Zt,{size:r.icon.size.sm,color:r.color.blue}),(0,Q.jsxs)(`span`,{style:{display:`flex`,flex:1,flexDirection:`column`,minWidth:0},children:[(0,Q.jsxs)(`strong`,{style:{color:r.color.blue,fontSize:r.font.size.xs},children:[`Закреплено`,ne!==void 0&&ne.pinned.length>1?` · ${ne.pinned.length}`:``]}),(0,Q.jsx)(`span`,{style:{...N,fontSize:r.font.size.sm},children:pe.text})]}),(0,Q.jsx)(WK,{icon:Qn,label:`Открепить`,onClick:()=>de(pe,`togglePin`)})]}),(0,Q.jsx)(`div`,{role:`log`,"aria-live":`polite`,style:{display:`flex`,flex:`1 1 360px`,flexDirection:`column-reverse`,minHeight:0,overflowY:`auto`},children:(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:2,padding:`${r.spacing[2]} 0`},children:[l&&(0,Q.jsx)(`div`,{style:{alignSelf:`center`},children:(0,Q.jsx)($,{variant:`ghost`,size:`sm`,onClick:()=>void ae(),children:`Показать раньше`})}),s.length===0&&(0,Q.jsx)(Oq,{children:`Сообщений пока нет: обсудите задание здесь.`}),s.map((e,t)=>{let a=s[t-1],o=a===void 0||!CZ(a.createdAt,e.createdAt);return(0,Q.jsxs)(L.Fragment,{children:[o&&(0,Q.jsx)(`div`,{style:{alignSelf:`center`,background:r.background.transparent.light,borderRadius:r.border.radius.md,color:r.font.color.secondary,fontSize:r.font.size.xs,margin:`${r.spacing[2]} 0`,padding:`2px ${r.spacing[2]}`},children:wZ(e.createdAt,i)}),(0,Q.jsx)(gZ,{message:e,conversationId:O??``,viewerId:n,isGroupStart:o||a?.authorId!==e.authorId,readerIds:ie(e),memberName:k,isMenuOpen:x===e.id,menuPlacement:t>=s.length-4?`above`:`below`,isSelecting:C!==void 0,isSelected:C?.includes(e.id)??!1,onOpenMenu:()=>S(e.id),onCloseMenu:()=>S(void 0),onToggleSelected:()=>w(t=>t?.includes(e.id)?t.filter(t=>t!==e.id):[...t??[],e.id]),onAction:t=>de(e,t),onReact:t=>void ue({action:`toggleReaction`,messageId:e.id,emoji:t},`Реакция не поставлена`)})]},e.id)})]})}),d!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:d}),C===void 0?(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:r.spacing[1]},children:[me!==void 0&&(0,Q.jsxs)(`div`,{style:{alignItems:`center`,borderLeft:`2px solid ${r.color.blue}`,display:`flex`,gap:r.spacing[2],paddingLeft:r.spacing[2]},children:[(0,Q.jsx)(me.icon,{size:r.icon.size.sm,color:r.color.blue}),(0,Q.jsxs)(`span`,{style:{display:`flex`,flex:1,flexDirection:`column`,minWidth:0},children:[(0,Q.jsx)(`strong`,{style:{color:r.color.blue,fontSize:r.font.size.xs},children:me.title}),(0,Q.jsx)(`span`,{style:{...N,color:r.font.color.secondary,fontSize:r.font.size.sm},children:me.text})]}),(0,Q.jsx)(WK,{icon:Qn,label:`Отмена`,onClick:()=>{y!==void 0&&m(``),b(void 0),v(void 0)}})]}),(0,Q.jsxs)(`div`,{style:{alignItems:`flex-end`,display:`flex`,gap:r.spacing[2]},children:[(0,Q.jsx)(`textarea`,{"aria-label":`Сообщение`,placeholder:`Сообщение`,value:p,rows:Math.min(Math.max(p.split(`
|
|
94
|
+
`).length,1),bZ),onChange:e=>{let t=oe.current;oe.current=void 0,t!==void 0&&e.target.value.replace(`
|
|
95
|
+
`,``)===t?m(``):m(e.target.value)},onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),oe.current=he?p:void 0,se()),e.key===`Escape`&&me!==void 0&&(b(void 0),v(void 0))},style:{background:r.background.transparent.lighter,border:`1px solid ${r.border.color.light}`,borderRadius:r.border.radius.md,boxSizing:`border-box`,color:r.font.color.primary,flex:1,font:`inherit`,lineHeight:`20px`,minHeight:36,minWidth:0,padding:`7px 10px`,resize:`none`}}),(0,Q.jsx)(`button`,{type:`button`,"aria-label":y===void 0?`Отправить`:`Сохранить`,title:y===void 0?`Отправить · Enter`:`Сохранить · Enter`,disabled:!he,onClick:()=>void se(),style:{alignItems:`center`,background:he?r.color.blue:r.background.transparent.light,border:`none`,borderRadius:r.border.radius.md,color:he?r.font.color.inverted:r.font.color.light,cursor:he?`pointer`:`default`,display:`inline-flex`,flexShrink:0,height:36,justifyContent:`center`,padding:0,width:36},children:(0,Q.jsx)(Tn,{size:r.icon.size.md,stroke:r.icon.stroke.md})})]})]}):(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,flexWrap:`wrap`,gap:r.spacing[1]},children:[(0,Q.jsxs)(`strong`,{style:{flex:1},children:[`Выбрано: `,fe.length]}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,disabled:fe.length===0,onClick:()=>void ce(fe),children:`Копировать`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,disabled:fe.length===0,onClick:()=>ee(fe.map(e=>e.id)),children:`Переслать`}),fe.length>0&&fe.every(e=>e.authorId===n)&&(0,Q.jsx)($,{variant:`ghost`,size:`sm`,onClick:()=>void le(fe).then(()=>w(void 0)),children:`Удалить`}),(0,Q.jsx)($,{variant:`outline`,size:`sm`,onClick:()=>w(void 0),children:`Отмена`})]}),T!==void 0&&(0,Q.jsx)(EZ,{messageIds:T,viewerId:n,memberName:k,onClose:()=>ee(void 0),onForwarded:e=>{ee(void 0),w(void 0),El({message:`Переслано в «${e}»`,variant:`success`})}})]})},OZ=e=>typeof e==`string`&&e.length>0&&!Number.isNaN(Date.parse(e)),kZ=e=>Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=e;return t.kind===`run`&&OZ(t.start)?[{kind:`run`,start:t.start,end:OZ(t.end)?t.end:null}]:t.kind===`add`&&typeof t.minutes==`number`&&Number.isFinite(t.minutes)&&t.minutes>0?[{kind:`add`,minutes:Math.round(t.minutes),at:OZ(t.at)?t.at:new Date(0).toISOString()}]:[]}):[],AZ=e=>e.some(e=>e.kind===`run`&&e.end===null),jZ=(e,t)=>e.reduce((e,n)=>{if(n.kind===`add`)return e+n.minutes*6e4;let r=Date.parse(n.start),i=n.end===null?t.getTime():Date.parse(n.end);return Number.isNaN(r)||Number.isNaN(i)||i<r?e:e+(i-r)},0),MZ=e=>{let t=Math.max(0,Math.floor(e/1e3)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}ч ${String(r).padStart(2,`0`)}м`:r>0?i>0?`${r}м ${String(i).padStart(2,`0`)}с`:`${r}м`:`${i}с`},NZ=(e,t)=>AZ(e)?e:[...e,{kind:`run`,start:t.toISOString(),end:null}],PZ=(e,t)=>e.map(e=>e.kind===`run`&&e.end===null?{...e,end:t.toISOString()}:e),FZ=(e,t,n)=>{let r=Math.round(t);return!Number.isFinite(r)||r<=0?e:[...e,{kind:`add`,minutes:r,at:n.toISOString()}]};an(),cn(),mn(),fe();var IZ=`IN_PROGRESS`,LZ=({answers:e})=>e.length===0?null:(0,Q.jsx)(qq,{rows:e.map(({label:e,value:t})=>({label:e,value:MK(t)}))}),RZ=({task:e,disabled:t,onChanged:n})=>{let r=M(),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(!1),[c,l]=(0,L.useState)(``),[u,d]=(0,L.useState)(()=>new Date),f=kZ(e.smbTimeLog),p=AZ(f);(0,L.useEffect)(()=>{if(!p)return;let e=window.setInterval(()=>d(new Date),1e3);return()=>window.clearInterval(e)},[p]);let m=async(t,r)=>{s(!0);try{await OG(`tasks`,e.id,{smbTimeLog:t}),await El({message:r,variant:`success`}),await n()}catch(e){await El({message:IG(e,`Не удалось сохранить время`),variant:`error`})}finally{s(!1)}};return(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:r.spacing[1]},children:[(0,Q.jsx)(`span`,{style:{color:p?r.color.blue:r.font.color.secondary,fontSize:r.font.size.sm,fontVariantNumeric:`tabular-nums`,minWidth:`3.5em`},children:MZ(jZ(f,u))}),(0,Q.jsx)(WK,{icon:p?rn:sn,label:p?`Пауза`:`Пуск`,disabled:t||o,isActive:p,onClick:()=>{m(p?PZ(f,new Date):NZ(f,new Date),p?`Таймер остановлен`:`Таймер запущен`)}}),(0,Q.jsx)(ZK,{isOpen:i,onClose:()=>a(!1),align:`left`,width:`200px`,anchor:(0,Q.jsx)(WK,{icon:pn,label:`Добавить время`,disabled:t||o,isActive:i,onClick:()=>a(!i)}),children:(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:r.spacing[2],padding:r.spacing[2]},children:[(0,Q.jsxs)(`label`,{style:{color:r.font.color.tertiary,fontSize:r.font.size.xs},children:[`Минуты`,(0,Q.jsx)(`input`,{type:`number`,min:1,step:1,value:c,onChange:e=>l(e.target.value),style:{background:r.background.transparent.lighter,border:`1px solid ${r.border.color.medium}`,borderRadius:r.border.radius.sm,boxSizing:`border-box`,color:r.font.color.primary,display:`block`,fontFamily:`inherit`,fontSize:r.font.size.md,marginTop:r.spacing[1],outline:`none`,padding:r.spacing[2],width:`100%`}})]}),(0,Q.jsx)($,{variant:`outline`,size:`sm`,disabled:o||Number(c)<=0,onClick:()=>{let e=Number(c);m(FZ(f,e,new Date),`Добавлено ${Math.round(e)} мин`),l(``),a(!1)},children:`Добавить`})]})})]})},zZ=({task:e,onChanged:t,rail:n,meta:r})=>{let i=M(),[a,o]=(0,L.useState)(),[s,c]=(0,L.useState)(!1),[l,u]=(0,L.useState)(),d=tK(e.smbFormSchema),f=a??nK(e.smbFormValues),p=e.status===VG,m=async(e,n,r)=>{c(!0),u(void 0);try{await e(),await El({message:n,variant:`success`}),o(void 0),await t()}catch(e){u(IG(e,r))}finally{c(!1)}};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flex:1,flexDirection:`column`,minHeight:0},children:[(0,Q.jsxs)(`div`,{style:{display:`flex`,flex:1,gap:i.spacing[3],minHeight:0},children:[n,(0,Q.jsxs)(`div`,{style:{display:`flex`,flex:1,flexDirection:`column`,gap:i.spacing[3],minHeight:0,minWidth:0},children:[r,typeof e.smbInstruction==`string`&&e.smbInstruction.trim().length>0&&(0,Q.jsxs)(`section`,{"aria-label":`Инструкция`,style:{background:i.background.transparent.lighter,borderLeft:`2px solid ${i.border.color.medium}`,padding:i.spacing[3],whiteSpace:`pre-wrap`},children:[(0,Q.jsx)(`div`,{style:{color:i.font.color.tertiary,fontSize:i.font.size.sm,marginBottom:i.spacing[1]},children:`Инструкция`}),e.smbInstruction]}),d.length>0?(0,Q.jsx)(cX,{fields:d,values:f,disabled:s||p,onChange:o}):(0,Q.jsx)(Oq,{tone:`hint`,children:`Полей нет: задание выполняется без ответа.`}),l!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:l})]})]}),(0,Q.jsx)(qK,{value:`above`,children:(0,Q.jsxs)(`div`,{style:{alignItems:`center`,borderTop:`1px solid ${i.border.color.light}`,display:`flex`,flexWrap:`wrap`,gap:i.spacing[2],justifyContent:`space-between`,marginTop:i.spacing[3],paddingTop:i.spacing[3]},children:[(0,Q.jsx)(RZ,{task:e,disabled:s,onChanged:t}),(0,Q.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:i.spacing[2]},children:[!p&&a!==void 0&&(0,Q.jsx)($,{variant:`outline`,size:`sm`,disabled:s,onClick:()=>m(()=>FG(`/docflow/tasks/form`,{taskId:e.id,values:f}),`Сохранено`,`Не удалось сохранить`),children:`Сохранить`}),!p&&(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`sm`,loading:s,onClick:()=>m(()=>FG(`/docflow/tasks/complete`,{taskId:e.id,values:f}),`Задание выполнено`,`Не удалось выполнить задание`),children:`Выполнить`})]})]})})]})},BZ=(e,t)=>xK(e.find(e=>e.id===t)),VZ=({task:e,run:t,members:n,now:r})=>{let i=NX(t.state,r),a=t.status===`COMPLETED`,o=t.status===`FAILED`||t.status===`STOPPED`;return[{key:`start`,title:`Запуск процесса`,meta:[RK(t,n),DK(t.startedAt??t.createdAt)].filter(Boolean).join(` · `),state:`done`},...i.map(t=>{let r=t.stepId===e.smbWorkflowStepId,i=r?BZ(n,e.assigneeId):BZ(n,t.assigneeWorkspaceMemberId);return{key:t.stepId,title:t.name,meta:[FK[t.type]??t.type,i].filter(Boolean).join(` · `),state:t.state,isFocus:r,details:t.answers.length>0?(0,Q.jsx)(LZ,{answers:t.answers}):void 0}}),{key:`end`,title:o?`Процесс остановлен`:`Процесс завершён`,meta:t.endedAt?DK(t.endedAt):void 0,state:a?`done`:o?`failed`:`upcoming`}]},HZ=({task:e,members:t,now:n})=>{let r=e.status===VG,i=jK(e.dueAt,n);return[{key:`created`,title:`Задание создано`,meta:[e.createdBy?.name,DK(e.createdAt)].filter(Boolean).join(` · `),state:`done`},{key:`work`,title:e.status===IZ?`В работе`:`Исполнение`,meta:[BZ(t,e.assigneeId)||`Исполнитель не назначен`,e.dueAt?`срок ${SK(e.dueAt)}`:void 0].filter(Boolean).join(` · `),state:r?`done`:`current`,isFocus:!0},{key:`done`,title:`Выполнено`,meta:r?DK(e.updatedAt):e.dueAt?i.label:void 0,state:r?`done`:`upcoming`}]},UZ=({taskId:e,withChat:t=!1,showTitle:n=!0,onChanged:r})=>{let i=M(),{members:a,currentMember:o}=OJ(),[s]=(0,L.useState)(()=>new Date),[c,l]=(0,L.useState)(`work`),[u,d]=(0,L.useState)(!1),{data:f,loading:p,error:m,reload:h}=zK(async()=>{let t=await EG(`tasks`,e);return{task:t,run:typeof t?.smbWorkflowRunId==`string`&&t.smbWorkflowRunId.length>0?await EG(`workflowRuns`,t.smbWorkflowRunId).catch(()=>void 0):void 0}},[e]),g=f?.task;if(g===void 0)return p?(0,Q.jsx)(iJ,{rows:4}):(0,Q.jsx)(Oq,{tone:`danger`,children:IG(m,`Задание не найдено или нет доступа.`)});let _=f?.run,v=async()=>{await h(),r?.()},y=_===void 0?HZ({task:g,members:a,now:s}):VZ({task:g,run:_,members:a,now:s}),b=t&&g.smbIsChatEnabled===!0,x=b&&(c===`chat`||u),S={display:`flex`,flex:1,flexDirection:`column`,gap:i.spacing[3],minHeight:0};return(0,Q.jsxs)(`div`,{style:S,children:[n&&(0,Q.jsx)(`div`,{style:{alignItems:`flex-start`,display:`flex`,gap:i.spacing[2],justifyContent:`space-between`},children:(0,Q.jsx)(`strong`,{style:{fontSize:i.font.size.lg,overflowWrap:`anywhere`},children:g.title?.trim()||`Без названия`})}),b&&(0,Q.jsx)(fq,{options:[{value:`work`,label:`Задание`},{value:`chat`,label:`Чат`}],value:c,onChange:e=>{e===`chat`&&d(!0),l(e)}}),(0,Q.jsx)(`div`,{style:{...S,display:!b||c===`work`?`flex`:`none`},children:(0,Q.jsx)(zZ,{task:g,onChanged:v,rail:(0,Q.jsx)(kX,{items:y}),meta:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(qq,{labelAlign:`right`,fontSize:`calc(${i.font.size.sm} + 1px)`,rows:[{label:`Исполнитель`,value:BZ(a,g.assigneeId)||`Не назначен`},{label:`Срок`,value:g.dueAt?SK(g.dueAt):`Без срока`},{label:`Автор`,value:g.createdBy?.name},{label:`Создано`,value:DK(g.createdAt)}]}),(0,Q.jsx)(`div`,{style:{borderTop:`1px solid ${i.border.color.light}`}})]})},`${g.id}-${g.updatedAt??``}`)}),x&&(0,Q.jsx)(`div`,{style:{...S,display:c===`chat`?`flex`:`none`},children:(0,Q.jsx)(DZ,{taskId:g.id,members:a,viewerId:o?.id})})]})};Be(),ut(),pt(),Yt(),cn(),_n(),Wn(),fe();var WZ=300,GZ=``,KZ=`any`,qZ=`nobody`,JZ=864e5,YZ=3,XZ=30,ZZ=`IN_PROGRESS`,QZ=[`задание`,`задания`,`заданий`],$Z=[{value:`open`,label:`Открытые`},{value:`mine`,label:`Мои`},{value:`done`,label:`Выполненные`}],eQ={source:`any`,due:`any`,assignee:KZ,scope:`active`},tQ={key:`dueAt`,direction:`asc`},nQ=[{key:`title`,label:`Задание`,width:`30%`,sortKey:`title`},{key:`assignee`,label:`Исполнитель`,width:`15%`,sortKey:`assigneeId`},{key:`dueAt`,label:`Срок`,width:`15%`,sortKey:`dueAt`},{key:`fields`,label:`Поля`,width:`11%`},{key:`status`,label:`Статус`,width:`13%`,sortKey:`status`},{key:`source`,label:`Откуда`,width:`10%`},{key:`createdAt`,label:`Создано`,sortKey:`createdAt`}],rQ=hG(sG(`status`,VG),cG(`status`)),iQ=e=>Ol({to:xl.RecordShowPage,params:{objectNameSingular:`task`,objectRecordId:e},pageTitle:`Задание`}),aQ=(e,t,n=!1)=>mG(n?lG(`deletedAt`):e===`done`?oG(`status`,VG):rQ,e===`mine`?t===void 0?cG(`assigneeId`):oG(`assigneeId`,t):void 0),oQ=({view:e,filters:t,searchQuery:n,currentMemberId:r,now:i,weekAhead:a})=>mG(oG(`smbSection`,LG),aQ(e,r,t.scope===`deleted`),t.source===`process`?lG(`smbWorkflowThreadId`):void 0,t.source===`own`?cG(`smbWorkflowThreadId`):void 0,t.due===`overdue`?uG(`dueAt`,i):void 0,t.due===`week`?mG(lG(`dueAt`),uG(`dueAt`,a)):void 0,t.due===`none`?cG(`dueAt`):void 0,t.assignee===qZ?cG(`assigneeId`):t.assignee===KZ?void 0:oG(`assigneeId`,t.assignee),n.trim().length>0?pG(`title`,n):void 0),sQ=(e,t)=>mG(oG(`assigneeId`,e),lG(`dueAt`),uG(`dueAt`,t)),cQ=(e,t)=>hG(sG(`assigneeId`,e),cG(`assigneeId`),cG(`dueAt`),dG(`dueAt`,t)),lQ=e=>e.map(e=>({value:e.id,label:xK(e)||e.id})),uQ=({currentMemberId:e,onCreated:t,onCancel:n})=>{let r=M(),{members:i}=OJ(),[a,o]=(0,L.useState)(``),[s,c]=(0,L.useState)(e??GZ),[l,u]=(0,L.useState)(``),[d,f]=(0,L.useState)(``),[p,m]=(0,L.useState)([]),[h,g]=(0,L.useState)(!1),[_,v]=(0,L.useState)(),y=async()=>{let e=eK(p);if(e!==void 0)v(e);else{g(!0),v(void 0);try{let e=await DG(`tasks`,{title:a.trim(),assigneeId:s===GZ?null:s,dueAt:/^\d{4}-\d{2}-\d{2}$/.test(l)?l:null,status:HG,smbSection:LG,smbInstruction:d.trim().length>0?d.trim():null,smbFormSchema:p.length>0?p:null,smbFormValues:p.length>0?{}:null});if(e===void 0)throw Error(`The created task was not returned`);await El({message:`Задание создано`,variant:`success`}),t(e.id)}catch(e){v(IG(e,`Не удалось создать задание`))}finally{g(!1)}}};return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:r.spacing[3]},children:[(0,Q.jsx)(wq,{label:`Название`,value:a,onChange:o}),(0,Q.jsx)(Eq,{label:`Исполнитель`,value:s,options:[{value:GZ,label:`Не назначен`},...lQ(i)],onChange:c}),(0,Q.jsx)(wq,{label:`Срок`,type:`date`,value:l,onChange:u}),(0,Q.jsx)(Tq,{label:`Инструкция`,value:d,onChange:f,rows:4}),(0,Q.jsx)(kq,{children:`Поля для заполнения`}),(0,Q.jsx)(fX,{fields:p,onChange:m,disabled:h}),_!==void 0&&(0,Q.jsx)(Oq,{tone:`danger`,children:_}),(0,Q.jsxs)(`div`,{style:{display:`flex`,gap:r.spacing[2]},children:[(0,Q.jsx)($,{variant:`solid`,tone:`accent`,size:`sm`,loading:h,disabled:a.trim().length===0,onClick:()=>void y(),children:`Создать`}),(0,Q.jsx)($,{variant:`ghost`,size:`sm`,onClick:n,children:`Отмена`})]})]})},dQ=er({universalIdentifier:aJ,name:`docflow-tasks`,description:`Задания документооборота: штатные задачи с разделом «Документооборот»`,component:()=>{let e=M(),{members:t,currentMember:n}=OJ(),[r,i]=(0,L.useState)(``),a=BK(r,WZ),[o,s]=(0,L.useState)(`open`),[c,l]=(0,L.useState)(eQ),[u,d]=(0,L.useState)(tQ),[f,p]=(0,L.useState)({kind:`closed`}),[m,h]=(0,L.useState)({}),[g,_]=(0,L.useState)(1),[v,y]=zq([`createdAt`]),[b,x]=(0,L.useState)(),[S]=(0,L.useState)(()=>new Date),C=S.toISOString(),w=new Date(S.getTime()+7*JZ).toISOString(),T=new Date(S.getFullYear(),S.getMonth(),S.getDate()+YZ+1).toISOString(),ee=n?.id,E=c.scope===`deleted`,D=o!==`done`&&!E&&ee!==void 0,O=f.kind===`task`?f.taskId:void 0,k=(0,L.useMemo)(()=>oQ({view:o,filters:c,searchQuery:a,currentMemberId:ee,now:C,weekAhead:w}),[o,c,a,ee,C,w]),{data:te,loading:ne,error:re,reload:A}=zK(()=>TG(`tasks`,{filter:D?mG(k,cQ(ee,T)):k,order_by:Mq(u),limit:50*g}),[k,D,ee,T,u,g]),{data:j,reload:ie}=zK(async()=>D?(await TG(`tasks`,{filter:mG(k,sQ(ee,T)),order_by:`dueAt[AscNullsLast]`,limit:XZ})).records:[],[k,D,ee,T]),{data:ae,reload:oe}=zK(async()=>Object.fromEntries(await Promise.all($Z.map(async({value:e})=>[e,await AG(`tasks`,mG(oG(`smbSection`,LG),aQ(e,ee),a.trim().length>0?pG(`title`,a):void 0))]))),[a,ee]),se=te?.records??[],ce=j??[],le=Nq(se.map(({id:e})=>e)),ue=se.filter(({id:e})=>le.selectedIds.includes(e)),de=(c.source===KZ?0:1)+(c.due===KZ?0:1)+(c.assignee===KZ?0:1)+ +!!E,fe=async()=>{await Promise.all([A(),ie(),oe()])},pe=VK({onDone:async()=>{le.clear(),x(void 0),await fe()}}),me=e=>{s(e),_(1),le.clear()},he=e=>{l(t=>({...t,...e})),_(1)},N=e=>pe.runEach(e,e=>FG(`/docflow/tasks/complete`,{taskId:e}),{done:e=>`Выполнено: ${e}`,failed:`Не выполнены`}),P=(e,t)=>pe.run(()=>MG(`tasks`,e,{status:t}),`Статус изменён: ${EK[t]}`,`Не удалось изменить статус`),F=e=>pe.run(async()=>{await NG(`tasks`,e),p(t=>t.kind===`task`&&e.includes(t.taskId)?{kind:`closed`}:t)},e.length===1?`Задание удалено: оно в фильтре «Удалённые»`:`Удалено заданий: ${e.length}, они в фильтре «Удалённые»`,`Не удалось удалить`),I=e=>pe.run(()=>PG(`tasks`,e),`Восстановлено: ${e.length}`,`Не удалось восстановить`),ge=e=>{let t=se.find(({id:t})=>t===e);if(E)return[{key:`restore`,label:`Восстановить`,icon:gn,onSelect:()=>void I([e])},{key:`card`,label:`Открыть карточку`,icon:lt,onSelect:()=>void iQ(e)}];let n=t?.status===VG;return[{key:`open`,label:`Открыть`,icon:ft,onSelect:()=>p({kind:`task`,taskId:e})},{key:`card`,label:`Карточка задачи`,icon:lt,onSelect:()=>void iQ(e)},...t?.status===`TODO`?[{key:`start`,label:`Взять в работу`,icon:sn,onSelect:()=>void P([e],ZZ)}]:[],...n?[]:[{key:`complete`,label:`Выполнить`,icon:ze,onSelect:()=>void N([e])}],{key:`delete`,label:`Удалить`,confirmLabel:`Точно удалить?`,icon:Un,tone:`danger`,onSelect:()=>void F([e])}]},_e=le.selectedIds,ve=ue.filter(e=>e.status!==VG).length,ye=f.kind===`task`?se.find(({id:e})=>e===f.taskId)??ce.find(({id:e})=>e===f.taskId):void 0,be=ye?.title?.trim()??``;(0,L.useEffect)(()=>{ye!==void 0&&be.length>0&&h(e=>e[ye.id]===be?e:{...e,[ye.id]:be})},[ye?.id,be]);let xe=f.kind===`create`?`Новое задание`:f.kind===`task`?be||m[f.taskId]||`Без названия`:void 0;return(0,Q.jsxs)(xq,{children:[(0,Q.jsxs)(Kq,{panelTitle:xe,onClosePanel:()=>p({kind:`closed`}),panel:f.kind===`create`?(0,Q.jsx)(uQ,{currentMemberId:ee,onCancel:()=>p({kind:`closed`}),onCreated:e=>{p({kind:`task`,taskId:e}),fe()}}):f.kind===`task`?(0,Q.jsx)(UZ,{taskId:f.taskId,withChat:!0,showTitle:!1,onChanged:()=>void fe()},f.taskId):void 0,children:[(0,Q.jsx)(Vq,{search:{value:r,onChange:i,placeholder:`Поиск заданий`,activeFilterCount:de,onResetFilters:()=>he(eQ),filters:[{key:`source`,title:`Откуда`,value:c.source,options:[{value:KZ,label:`Все`},{value:`process`,label:`Шаги процессов`},{value:`own`,label:`Свои задания`}],onChange:e=>he({source:e})},{key:`due`,title:`Срок`,value:c.due,options:[{value:KZ,label:`Любой`},{value:`overdue`,label:`Просроченные`},{value:`week`,label:`В ближайшие 7 дней`},{value:`none`,label:`Без срока`}],onChange:e=>he({due:e})},{key:`assignee`,title:`Исполнитель`,value:c.assignee,options:[{value:KZ,label:`Любой`},{value:qZ,label:`Не назначен`},...lQ(t)],onChange:e=>he({assignee:e})},{key:`scope`,title:`Корзина`,value:c.scope,options:[{value:`active`,label:`Действующие`},{value:`deleted`,label:`Удалённые`}],onChange:e=>{he({scope:e}),le.clear()}}]},views:(0,Q.jsx)(mq,{value:o,onChange:me,options:$Z.map(e=>({...e,count:ae?.[e.value]}))}),onCreate:()=>p({kind:`create`})}),D&&(0,Q.jsx)(rZ,{tasks:ce,members:t,now:S,selectedTaskId:O,onOpen:e=>p({kind:`task`,taskId:e})}),re!==void 0&&(0,Q.jsx)(`div`,{style:{padding:e.spacing[4]},children:(0,Q.jsx)(Oq,{tone:`danger`,children:IG(re,`Не удалось загрузить задания`)})}),ne&&te===void 0&&(0,Q.jsx)(rJ,{}),!ne&&re===void 0&&se.length===0&&(0,Q.jsx)(Oq,{children:ce.length>0?`Остальных заданий нет: все срочные — в карточках выше.`:`Заданий нет.`}),se.length>0&&(0,Q.jsxs)(Q.Fragment,{children:[D&&ce.length>0&&(0,Q.jsx)(`div`,{style:{padding:`${e.spacing[1]} ${e.spacing[5]} 0`},children:(0,Q.jsx)(kq,{children:`Остальные задания`})}),(0,Q.jsx)(Bq,{columns:nQ,hiddenColumnKeys:v,onHiddenColumnsChange:y,sort:u,onSortChange:e=>{d(e),_(1)},selectedRowId:O,selectedIds:_e,onSelectionChange:le.setSelectedIds,rowActions:ge,onRowClick:e=>E?void iQ(e):p({kind:`task`,taskId:e}),rows:se.map(n=>{let r=jK(n.dueAt,S),i=n.status===`DONE`,a=$X(n);return{id:n.id,isMuted:i&&o!==`done`,cells:{title:n.title?.trim()||`Без названия`,assignee:xK(t.find(e=>e.id===n.assigneeId))||`—`,dueAt:n.dueAt?(0,Q.jsx)(`span`,{title:SK(n.dueAt),style:{color:i?void 0:r.tone===`overdue`?e.font.color.danger:r.tone===`today`?e.color.orange:void 0},children:i?SK(n.dueAt):`${SK(n.dueAt)} · ${r.label.toLowerCase()}`}):`—`,fields:a.total>0?(0,Q.jsxs)(`span`,{style:{alignItems:`center`,display:`flex`,gap:e.spacing[2]},children:[(0,Q.jsx)(`span`,{style:{flex:1,maxWidth:`48px`},children:(0,Q.jsx)(Gq,{value:a.filled,total:a.total,tone:i?`green`:`blue`})}),a.filled,`/`,a.total]}):`—`,status:(0,Q.jsx)(GK,{color:NK[n.status??``]??`gray`,children:EK[n.status??``]??n.status??`Без статуса`}),source:QX(n)?`Процесс`:`Своё`,createdAt:SK(n.createdAt)}}})})]}),(0,Q.jsx)(Wq,{isVisible:te?.pageInfo.hasNextPage===!0,loading:ne,onClick:()=>_(e=>e+1)}),(0,Q.jsx)(Hq,{count:_e.length,noun:QZ,onClear:le.clear,children:E?(0,Q.jsx)($,{icon:gn,loading:pe.isBusy,onClick:()=>void I(_e),children:`Восстановить`}):(0,Q.jsxs)(Q.Fragment,{children:[ve>0&&(0,Q.jsx)($,{icon:ze,loading:pe.isBusy,onClick:()=>void N(_e),children:`Выполнить`}),(0,Q.jsx)($,{icon:Jt,disabled:pe.isBusy,onClick:()=>x(`change`),children:`Изменить`}),(0,Q.jsx)(nq,{label:`Удалить`,icon:Un,disabled:pe.isBusy,actions:[{key:`delete`,label:`Удалить выбранные (${_e.length})`,confirmLabel:`Точно удалить?`,icon:Un,tone:`danger`,onSelect:()=>void F(_e)}]})]})})]}),b===`change`&&(0,Q.jsx)(bq,{title:`Изменить поле`,hint:`Для ${_e.length} ${Uq(_e.length,QZ)}`,fields:[{key:`status`,label:`Статус`,options:[`TODO`,ZZ].map(e=>({value:e,label:EK[e]}))},{key:`assignee`,label:`Исполнитель`,options:[{value:GZ,label:`Не назначен`},...lQ(t)]},{key:`dueAt`,label:`Срок`,inputType:`date`}],onClose:()=>x(void 0),onSubmit:(e,t)=>e===`status`?P(_e,t):e===`assignee`?pe.run(()=>MG(`tasks`,_e,{assigneeId:t===GZ?null:t}),`Исполнитель назначен`,`Не удалось назначить исполнителя`):pe.run(()=>MG(`tasks`,_e,{dueAt:/^\d{4}-\d{2}-\d{2}$/.test(t)?t:null}),`Срок изменён`,`Не удалось изменить срок`)})]})}}),fQ=5e3,pQ=[],mQ=1,hQ=new Set,gQ=e=>{pQ=e,hQ.forEach(e=>e(pQ))},_Q=(e,t=`info`)=>{let n=mQ++;gQ([...pQ,{id:n,message:e,variant:t}]),setTimeout(()=>gQ(pQ.filter(e=>e.id!==n)),fQ)},vQ=e=>(hQ.add(e),e(pQ),()=>{hQ.delete(e)}),yQ=e=>{d.TWENTY_APP_ACCESS_TOKEN=e},bQ=(e,t,n,r)=>{window.open(re(e,t,n,r),`_blank`,`noopener`)},xQ=e=>{globalThis[kJ]=async(t,n)=>{let r=await fetch(`${e}/graphql`,{method:`POST`,credentials:`include`,headers:{"content-type":`application/json`},body:JSON.stringify({query:t,variables:n})}),i=await r.json().catch(()=>({})),[a]=i.errors??[];if(a!==void 0||i.data===void 0){let e=a?.extensions?.userFriendlyMessage;throw Error(typeof e==`string`?e:a?.message??`Ошибка CRM (HTTP ${r.status})`)}return i.data}},SQ=({crmUrl:e,userId:t,colorScheme:n,hasCrmSignIn:r,refreshAccessToken:i})=>{r&&xQ(e),globalThis.__twentySdkExecutionContext__={frontComponentId:`docflow-app`,userId:t,recordId:null,selectedRecordIds:[],timelineActivityId:null,colorScheme:n,locale:`ru-RU`},globalThis.frontComponentHostCommunicationApi??={},Object.assign(globalThis.frontComponentHostCommunicationApi,{enqueueSnackbar:async({message:e,variant:t})=>_Q(e,t),openSidePanelPage:async t=>{typeof t.to==`string`&&bQ(e,t.to,t.params)},navigate:async(t,n,r)=>bQ(e,t,n,r),closeSidePanel:async()=>void 0,copyToClipboard:e=>navigator.clipboard.writeText(e),requestAccessTokenRefresh:async()=>await i()??``})};ut(),gt(),Ut(),Kt(),fe();var CQ={tasks:dQ.config.component,processes:ZX.config.component,documents:EJ.config.component},wQ=e=>e.crmUrl.length>0?e.crmUrl:window.location.origin,TQ=({config:e,section:t,onSectionChange:n})=>{let r=M(),[i,a]=(0,L.useState)(document.fullscreenElement!==null);return(0,L.useEffect)(()=>{let e=()=>a(document.fullscreenElement!==null);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]),(0,Q.jsxs)(`header`,{style:{alignItems:`center`,borderBottom:`1px solid ${r.border.color.medium}`,display:`grid`,gap:r.spacing[3],gridTemplateColumns:`1fr auto 1fr`,padding:`0 ${r.spacing[4]}`},children:[(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:r.spacing[2],fontWeight:r.font.weight.medium},children:[(0,Q.jsx)(ht,{size:18}),`Документооборот`]}),(0,Q.jsx)(`nav`,{role:`tablist`,style:{display:`flex`,gap:r.spacing[4]},children:T.map(e=>{let i=e===t;return(0,Q.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":i,onClick:()=>n(e),style:{background:`none`,border:`none`,borderBottom:`2px solid ${i?r.font.color.primary:`transparent`}`,color:i?r.font.color.primary:r.font.color.tertiary,cursor:`pointer`,fontFamily:`inherit`,fontSize:r.font.size.md,fontWeight:i?r.font.weight.medium:r.font.weight.regular,padding:`${r.spacing[3]} ${r.spacing[1]}`},children:ee[e]},e)})}),(0,Q.jsxs)(`div`,{style:{alignItems:`center`,display:`flex`,gap:r.spacing[2],justifyContent:`flex-end`},children:[document.fullscreenEnabled&&(0,Q.jsx)(WK,{icon:i?Gt:Ht,label:i?`Свернуть`:`На весь экран`,onClick:()=>void(i?document.exitFullscreen():document.documentElement.requestFullscreen())}),(0,Q.jsx)($,{icon:lt,onClick:()=>window.open(wQ(e),`_blank`,`noopener`),children:`Открыть CRM`})]})]})},EQ=()=>{let e=M(),[t,n]=(0,L.useState)([]);return(0,L.useEffect)(()=>vQ(n),[]),(0,Q.jsx)(`div`,{"aria-live":`polite`,style:{bottom:e.spacing[4],display:`flex`,flexDirection:`column`,gap:e.spacing[2],position:`fixed`,right:e.spacing[4],zIndex:1e3},children:t.map(t=>(0,Q.jsx)(`div`,{role:t.variant===`error`?`alert`:`status`,style:{background:e.background.primary,border:`1px solid ${t.variant===`error`?e.color.red:e.border.color.medium}`,borderRadius:e.border.radius.md,boxShadow:e.boxShadow.strong,color:t.variant===`error`?e.font.color.danger:e.font.color.primary,fontSize:e.font.size.sm,maxWidth:360,padding:`${e.spacing[2]} ${e.spacing[3]}`},children:t.message},t.id))})},DQ=({config:e,session:t})=>{let n=M(),[r,i]=(0,L.useState)(e.section),[a,o]=(0,L.useState)([e.section]),s=e.expectedWorkspaceMemberId!==void 0&&t.workspaceMemberId!==e.expectedWorkspaceMemberId;return(0,Q.jsxs)(`div`,{style:{background:n.background.primary,color:n.font.color.primary,display:`flex`,flexDirection:`column`,height:`100%`},children:[(0,Q.jsx)(TQ,{config:e,section:r,onSectionChange:e=>{i(e),o(t=>t.includes(e)?t:[...t,e])}}),s&&(0,Q.jsx)(`div`,{role:`status`,style:{background:n.background.transparent.light,color:n.font.color.secondary,fontSize:n.font.size.sm,padding:`${n.spacing[2]} ${n.spacing[4]}`},children:`В CRM в этом браузере вы вошли не под тем сотрудником, что в Битрикс24. Чтобы сменить, выйдите из CRM, войдите нужным сотрудником и откройте приложение заново.`}),(0,Q.jsx)(`main`,{style:{flex:1,minHeight:0,position:`relative`},children:a.map(e=>{let t=CQ[e];return(0,Q.jsx)(`div`,{style:{display:e===r?`block`:`none`,height:`100%`,overflow:`auto`},children:(0,Q.jsx)(t,{})},e)})}),(0,Q.jsx)(EQ,{})]})},OQ=({title:e,text:t,action:n})=>{let r=M();return(0,Q.jsxs)(`div`,{style:{alignItems:`center`,background:r.background.primary,color:r.font.color.primary,display:`flex`,flexDirection:`column`,gap:r.spacing[3],height:`100%`,justifyContent:`center`,padding:r.spacing[6],textAlign:`center`},children:[(0,Q.jsx)(ht,{size:32}),(0,Q.jsx)(`div`,{style:{fontSize:r.font.size.lg,fontWeight:r.font.weight.medium},children:e}),(0,Q.jsx)(`div`,{style:{color:r.font.color.tertiary,fontSize:r.font.size.md,maxWidth:420},children:t}),n!==void 0&&(0,Q.jsx)($,{variant:`solid`,tone:`accent`,loading:n.loading,onClick:n.onClick,children:n.label})]})},kQ=`docflow.app.session`,AQ=6e4,jQ=3e3,MQ=async e=>{try{let t=await fetch(C,{method:`POST`,credentials:e===void 0?`same-origin`:`omit`,headers:{"content-type":`application/json`,...e===void 0?{}:{authorization:`Bearer ${e}`}},body:`{}`});return t.ok?D(await t.json()):void 0}catch{return}},NQ=()=>{try{let e=window.localStorage.getItem(kQ);return e===null?void 0:D(JSON.parse(e))}catch{return}},PQ=e=>{try{e===void 0?window.localStorage.removeItem(kQ):window.localStorage.setItem(kQ,JSON.stringify(e))}catch{}},FQ=({mode:e,session:t,onRenewed:n,onLost:r})=>{let i=t,a=null,o=()=>(a??=(async()=>{let t=await MQ(e===`crm`?void 0:te(i,Date.now())?i.token:void 0);return t===void 0?(te(i,Date.now())||(PQ(void 0),r()),te(i,Date.now())?i.token:null):(i=t,PQ(e===`bitrix`?i:void 0),n(i),i.token)})().finally(()=>{a=null}),a),s=window.setInterval(()=>{ne(i,Date.now())&&o()},AQ);return{current:()=>i,refresh:o,stop:()=>window.clearInterval(s)}},IQ=async e=>{if(e===`bitrix`){let e=NQ();if(te(e,Date.now()))return e}let t=await MQ();return t!==void 0&&e===`bitrix`&&PQ(t),t},LQ=()=>new Promise(e=>{let t=window.open(`${S}?connect=1`,`docflow-sign-in`,`width=520,height=560`);if(t===null){e(void 0);return}let n=t=>{window.removeEventListener(`message`,r),window.clearInterval(i),t!==void 0&&PQ(t),e(t)},r=e=>{e.origin===window.location.origin&&e.source===t&&e.data?.type===`docflow-app-session`&&n(D(e.data.session))},i=window.setInterval(()=>{t.closed&&n(void 0)},500);window.addEventListener(`message`,r)}),RQ=(e,t)=>{let n=window.opener;if(n===null){t();return}let r=async()=>{let e=await MQ();return e!==void 0&&(n.postMessage({type:w,session:e},window.location.origin),window.close(),!0)};r().then(t=>{if(t)return;e();let n=window.setInterval(()=>{r().then(e=>{e&&window.clearInterval(n)})},jQ)})},zQ=3e3,BQ=800,VQ=()=>{let e=document.getElementById(`docflow-app-config`),t=JSON.parse(e?.textContent??`{}`);return{mode:t.mode===`bitrix`||t.mode===`connect`?t.mode:`crm`,crmUrl:typeof t.crmUrl==`string`?t.crmUrl:``,section:E(t.section),expectedWorkspaceMemberId:t.expectedWorkspaceMemberId,portalDomain:t.portalDomain}},HQ=e=>A({portalDomain:e.portalDomain,ancestorOrigins:window.location.ancestorOrigins===void 0?void 0:Array.from(window.location.ancestorOrigins),referrer:document.referrer}),UQ=window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`,WQ=e=>e.crmUrl.length>0?e.crmUrl:window.location.origin,GQ=({config:e})=>{let[t,n]=(0,L.useState)(`working`),r=(0,L.useRef)(!1);return(0,L.useEffect)(()=>{r.current||(r.current=!0,RQ(()=>n(`waiting`),()=>n(`no-opener`)))},[]),t===`no-opener`?(0,Q.jsx)(OQ,{title:`Вход в документооборот`,text:`Это окно открывается из приложения «Документооборот» в Битрикс24. Откройте приложение там и нажмите «Войти через CRM».`}):t===`working`?(0,Q.jsx)(OQ,{title:`Вход в документооборот`,text:`Проверяю вход в CRM…`}):(0,Q.jsx)(OQ,{title:`Войдите в CRM`,text:`Войдите в CRM в открывшейся вкладке. Это окно само заметит вход, передаст его в Битрикс24 и закроется.`,action:{label:`Открыть CRM`,onClick:()=>window.open(WQ(e),`_blank`,`noopener`)}})},KQ=({config:e})=>{let[t,n]=(0,L.useState)({kind:`loading`}),r=(0,L.useRef)(null),i=(0,L.useRef)(!1),a=t=>{r.current?.stop(),r.current=FQ({mode:e.mode,session:t,onRenewed:e=>yQ(e.token),onLost:()=>n({kind:`sign-in`,isWaiting:!1})}),yQ(t.token),SQ({crmUrl:WQ(e),userId:t.userId,colorScheme:UQ,hasCrmSignIn:e.mode===`crm`&&window.top===window&&new URL(WQ(e)).origin===window.location.origin,refreshAccessToken:()=>r.current?.refresh()??Promise.resolve(null)}),n({kind:`signed-in`,session:t})};switch((0,L.useEffect)(()=>{if(!i.current&&(i.current=!0,IQ(e.mode).then(e=>e===void 0?n({kind:`sign-in`,isWaiting:!1}):a(e)),e.mode===`bitrix`)){let e=window.BX24;e?.init(()=>e.resizeWindow?.(document.documentElement.scrollWidth,Math.max(BQ,window.innerHeight)))}},[]),(0,L.useEffect)(()=>{if(t.kind!==`sign-in`||!t.isWaiting||e.mode!==`crm`)return;let n=window.setInterval(()=>{MQ().then(e=>{e!==void 0&&(window.clearInterval(n),a(e))})},zQ);return()=>window.clearInterval(n)},[t]),t.kind){case`loading`:return(0,Q.jsx)(OQ,{title:`Документооборот`,text:`Загрузка…`});case`signed-in`:return(0,Q.jsx)(DQ,{config:e,session:t.session});case`sign-in`:return e.mode===`bitrix`?(0,Q.jsx)(OQ,{title:`Войдите через CRM`,text:`Документооборот работает с вашей учётной записью CRM. Вход откроется в отдельном окне; в этом браузере его хватит надолго.`,action:{label:`Войти через CRM`,loading:t.isWaiting,onClick:()=>{n({kind:`sign-in`,isWaiting:!0}),LQ().then(e=>e===void 0?n({kind:`sign-in`,isWaiting:!1}):a(e))}}}):(0,Q.jsx)(OQ,{title:`Войдите в CRM`,text:t.isWaiting?`Войдите в CRM в открывшейся вкладке, эта страница откроется сама.`:`Документооборот открывается для сотрудника, вошедшего в CRM.`,action:{label:`Войти в CRM`,loading:t.isWaiting,onClick:()=>{window.open(WQ(e),`_blank`,`noopener`),n({kind:`sign-in`,isWaiting:!0})}}})}},qQ=VQ();document.documentElement.className=UQ;var JQ=document.getElementById(`root`);JQ!==null&&(0,x.createRoot)(JQ).render(qQ.mode===`connect`?(0,Q.jsx)(GQ,{config:qQ}):qQ.mode===`bitrix`&&!HQ(qQ)?(0,Q.jsx)(OQ,{title:`Документооборот`,text:`Эта страница открывается только в приложении портала Битрикс24, связанного с CRM.`}):(0,Q.jsx)(KQ,{config:qQ}))})();
|