@vincenzosgueradev/pptb-connection-reference-governance 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- (function(){var e=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function t(t){let n;try{n=JSON.parse(t)}catch{return{ok:!1,error:`The flow definition is not valid JSON.`}}return e(n)?{ok:!0,value:n}:{ok:!1,error:`The flow definition is not an object.`}}function n(t){let n=t.properties;if(!e(n))return;let r=n.connectionReferences;return e(r)?r:void 0}function r(t){if(!e(t))return;let n=t.connection;if(!e(n))return;let r=n.connectionReferenceLogicalName;return typeof r==`string`&&r!==``?r:void 0}function i(e){let i=t(e);if(!i.ok)return i;let a=n(i.value);if(!a)return{ok:!0,value:[]};let o=[];for(let e of Object.values(a)){let t=r(e);t!==void 0&&!o.includes(t)&&o.push(t)}return{ok:!0,value:o}}function a(e,t){if(e===t)return!0;if(typeof e!=`object`||typeof t!=`object`||e===null||t===null||Array.isArray(e)!==Array.isArray(t))return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)&&a(e[n],t[n]))}var o=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);function s(e,i,s){let c=t(e);if(!c.ok)return c;let l=typeof i==`string`?[i]:i;if(l.some(e=>e===``)||s===``)return{ok:!1,error:`A reference name is empty.`};let u=[...new Set(l)].filter(e=>e!==s);if(u.length===0)return{ok:!1,error:`There is no reference to replace.`};let d=JSON.parse(e),f=0,p=n(d);if(p)for(let e of Object.values(p)){let t=r(e);t!==void 0&&u.includes(t)&&(e.connection.connectionReferenceLogicalName=s,f++)}if(f===0)return{ok:!1,error:`The flow does not declare ${u.length===1?`the reference`:`any of the references`} ${u.join(`, `)}.`};let m=u.map(e=>o(JSON.stringify(e))).join(`|`),h=RegExp(`("connectionReferenceLogicalName"\\s*:\\s*)(?:${m})`,`g`),g=e.replace(h,(e,t)=>t+JSON.stringify(s)),_=t(g);return!_.ok||!a(_.value,d)?{ok:!1,error:`The edited definition did not pass the safety check.`}:{ok:!0,value:g}}var c={instant:`Instant`,automated:`Automated`,scheduled:`Scheduled`,unknown:`Unknown`},l={type:`unknown`,triggerName:``,triggerType:``,triggerKind:``,triggerOperation:``,actionCount:0},u=e=>typeof e==`object`&&!!e&&!Array.isArray(e),d=e=>typeof e==`string`?e:``;function f(e){if(!u(e))return 0;let t=0;for(let n of Object.values(e)){if(!u(n))continue;t+=1+f(n.actions);let e=n.else;u(e)&&(t+=f(e.actions));let r=n.default;u(r)&&(t+=f(r.actions));let i=n.cases;if(u(i))for(let e of Object.values(i))u(e)&&(t+=f(e.actions))}return t}function p(e){if(e===``)return`unknown`;let t=e.toLowerCase();return t===`recurrence`?`scheduled`:t===`request`?`instant`:`automated`}function m(e){let t;try{t=JSON.parse(e)}catch{return l}if(!u(t))return l;let n=t.properties,r=u(n)?n.definition:void 0;if(!u(r))return l;let i=f(r.actions),a=r.triggers,o=u(a)?Object.entries(a)[0]:void 0;if(!o||!u(o[1]))return{...l,actionCount:i};let s=o[1],c=u(s.inputs)?s.inputs:{},m=u(c.host)?c.host:{},h=d(s.type);return{type:p(h),triggerName:o[0],triggerType:h,triggerKind:d(s.kind),triggerOperation:d(m.operationId),actionCount:i}}function h(e,t,n){let r=[];if(e.connectionId===``)return r.push({kind:`no-connection`,label:`No connection`,detail:`${e.logicalName} has no connection set.`}),r;let i=t.connections[e.connectionId];return i&&(n!==``&&i.ownerName!==n&&r.push({kind:`other-owner`,label:`Other owner`,detail:`Connection owned by ${i.ownerName}, expected ${n}.`}),i.connected||r.push({kind:`not-connected`,label:`Not connected`,detail:`The connection behind ${e.logicalName} is not connected.`})),r}function g(e,t=``){let n=new Map;for(let t of e.references)n.set(t.logicalName,t);let r=e.flows.map(r=>{let a=m(r.clientData),o=i(r.clientData);if(!o.ok)return{flow:r,info:a,uses:[],flags:[],unreadable:!0};let s=o.value.map(r=>{let i=n.get(r);return{logicalName:r,reference:i,flags:i?h(i,e,t):[{kind:`missing-reference`,label:`Missing reference`,detail:`The flow declares ${r}, which does not exist in the environment.`}]}});return{flow:r,info:a,uses:s,flags:s.flatMap(e=>e.flags),unreadable:!1}}),a=new Set(e.memberReferenceIds),o=e.references.filter(e=>a.has(e.id)).map(n=>({reference:n,flowIds:r.filter(e=>e.uses.some(e=>e.logicalName===n.logicalName)).map(e=>e.flow.id),flags:h(n,e,t)}));return{solution:e.solution,flows:r,references:o,allReferences:e.references,componentTypes:e.memberTypes??{}}}function _(e,t,n){if(e.allReferences.some(e=>e.id===t.id))return e;let r=h(t,{connections:{}},``),i=n===void 0?e.componentTypes:{...e.componentTypes,[t.id.toLowerCase()]:n};return{...e,componentTypes:i,allReferences:[...e.allReferences,t],references:[...e.references,{reference:t,flowIds:[],flags:r}]}}function v(e,t,n){return JSON.stringify({kind:e.kind,table:e.entity,environment:t,createdAt:n,rows:e.rows.filter(e=>e.blocked===void 0).map(e=>({id:e.id,name:e.label,column:e.field,previousValue:e.expectedCurrent}))},null,2)}function y(e,t){return`backup-${e.kind}-${t.replace(/[^0-9]/g,``).slice(0,14)}.json`}var b=`The flow is turned on: turn it off first, or allow the tool to turn it off in the confirmation.`;function x(e,t){if(t===``)return[];let n=e.filter(e=>e.ownerId!==``&&e.ownerId!==t);return n.length===0?[]:[`${n.length} of these references are owned by someone else. The environment may refuse changes that involve a reference you do not own; each refusal is reported on its row.`]}function S(e,t,n,r=``){let i=t.map(t=>e.references.find(e=>e.reference.id===t)).filter(e=>e!==void 0),a=new Set(i.map(e=>e.reference.connectorId)).size>1,o=n.trim(),s=i.map(t=>{let n=t.reference,r;return e.solution.managed||n.managed?r=`Managed: read-only.`:a?r=`The selected references use different connectors: a connection belongs to one connector.`:o===``?r=`No connection chosen.`:o===n.connectionId&&(r=`Already uses this connection.`),{id:n.id,label:n.displayName||n.logicalName,field:`connectionid`,oldValue:n.connectionId,newValue:o,payload:o,affectedFlows:t.flowIds.length,affectedOn:t.flowIds.filter(t=>e.flows.find(e=>e.flow.id===t)?.flow.stateCode===1).length,expectedCurrent:n.connectionId,...r===void 0?{}:{blocked:r}}}),c=[];if(o!==``&&!a&&i.length>0){let t=i[0].reference.connectorId;e.allReferences.some(e=>e.connectorId===t&&e.connectionId===o)||c.push(`This connection id is not used by any reference of this connector in the environment. Check that it is a connection of the right connector before applying.`)}let l=s.filter(e=>e.blocked===void 0).reduce((e,t)=>e+t.affectedOn,0);return l>0&&c.push(`${l} affected flows are turned on and will use the new connection immediately.`),c.push(...x(i.map(e=>e.reference),r)),{kind:`connection`,entity:`connectionreference`,rows:s,warnings:c}}function C(e,t,n){let r=t.map(t=>e.allReferences.find(e=>e.logicalName===t)),i=t.find((e,t)=>!r[t]);if(i!==void 0)return`The reference ${i} does not exist.`;if(new Set(r.map(e=>e.connectorId)).size>1)return`The chosen references belong to different connectors.`;let a=e.allReferences.find(e=>e.logicalName===n);if(!a)return`The target reference ${n} does not exist.`;if(!e.references.some(e=>e.reference.logicalName===n))return`The target reference is not in this solution.`;if(r[0].connectorId!==a.connectorId)return`The target uses a different connector.`;if(t.every(e=>e===n))return`Same reference.`}function w(e,t,n,r=``,i=!1){let a=[],o=n.map(e=>({target:e.target,chosen:[...new Set(e.from)]})).filter(e=>e.chosen.length>0).map(e=>({...e,effective:e.chosen.filter(t=>t!==e.target)})),c=o.map(t=>C(e,t.chosen,t.target)).find(e=>e!==void 0),l=0;for(let n of t){let t=e.flows.find(e=>e.flow.id===n);if(!t)continue;let r=t.flow,u=o.map(e=>e.effective.filter(e=>t.uses.some(t=>t.logicalName===e))),d=u.flat(),f,p=r.clientData;if(e.solution.managed||r.managed)f=`Managed: read-only.`;else if(r.stateCode!==0&&!(i&&r.stateCode===1))f=r.stateCode===1?b:`The flow is not off (suspended): turn it off first.`;else if(o.length===0)f=`No reference to replace was chosen.`;else if(c!==void 0)f=c;else if(d.length===0)f=o.some(e=>e.chosen.includes(e.target)&&t.uses.some(t=>t.logicalName===e.target))?`Already uses the new reference: nothing to change.`:`The flow does not use any of the chosen references.`;else{let e=r.clientData;for(let t=0;t<o.length&&f===void 0;t++){if(u[t].length===0)continue;let n=s(e,o[t].effective,o[t].target);n.ok?e=n.value:f=n.error}f===void 0&&(p=e,u.some(e=>e.length>1)&&l++)}let m=d.length>0?d:o.flatMap(e=>e.effective.length>0?e.effective:e.chosen),h=[...new Set(o.filter((e,t)=>u[t].length>0||d.length===0).map(e=>e.target))];a.push({id:n,label:r.name,field:`clientdata`,oldValue:m.join(`, `),newValue:h.join(`, `),payload:p,affectedFlows:1,affectedOn:+(r.stateCode===1),expectedCurrent:r.clientData,...f===void 0?{}:{blocked:f},...i&&r.stateCode===1&&f===void 0?{turnOff:!0}:{}})}let u=[...new Set(o.map(e=>e.target))].map(t=>e.allReferences.find(e=>e.logicalName===t)).filter(e=>e!==void 0),d=u.length>0?x(u,r):[];return l>0&&d.push(`${l} flow${l===1?` holds`:`s hold`} more than one of the chosen references: they will all become the new reference of their category.`),{kind:`repoint`,entity:`workflow`,rows:a,warnings:d,...i?{manageState:!0}:{}}}function ee(e){return e.rows.filter(e=>e.turnOff===!0&&e.blocked===void 0)}function te(e){return e.rows.filter(e=>e.blocked===b)}function ne(e){let t=new Map;for(let n of e.rows)n.blocked!==void 0&&t.set(n.blocked,(t.get(n.blocked)??0)+1);return[...t].map(([e,t])=>({reason:e,count:t})).sort((e,t)=>t.count-e.count)}function T(e){return e.rows.filter(e=>e.blocked===void 0)}function re(e){return T(e).reduce((e,t)=>e+t.affectedFlows,0)}function ie(e){return JSON.stringify({connectionreferenceid:e.id,connectionreferencelogicalname:e.logicalName,connectionreferencedisplayname:e.displayName,connectorid:e.connectorId,connectionid:e.connectionId},null,2)}var E=(e,t,n)=>e===1?t:n;function ae(e,t,n,r,i){let a=new Set(t),o=[],s=new Set,c=e=>a.has(e)&&!s.has(e),l=e.solution.managed?`Managed: read-only.`:void 0,u=(t,r,i,a)=>{let o=n===`remove`?{oldValue:`In this solution`,newValue:`Not in this solution`,field:`membership`}:{oldValue:`Exists`,newValue:`Deleted`,field:`row`},s=e.componentTypes[t.toLowerCase()],c=l??(i?`Managed: read-only.`:void 0);return c===void 0&&n===`remove`&&s===void 0&&(c=`The component type of this ${a} could not be read from the solution.`),{id:t,label:r,payload:``,...o,...s===void 0?{}:{componentType:s},blocked:c}},d=t=>{if(n!==`delete`||r===void 0)return;let a=r[t];if(a===void 0)return`The dependencies could not be checked, so nothing is deleted.`;let o=a.filter(e=>!c(e.id));if(o.length===0)return;let s=[...new Set(o.map(t=>i?.[t.id]??e.flows.find(e=>e.flow.id===t.id)?.flow.name??e.references.find(e=>e.reference.id===t.id)?.reference.displayName??`a component of type ${t.type}`))];return`Other components depend on it (${s.slice(0,3).join(`, `)}${s.length>3?` and ${s.length-3} more`:``}): it cannot be deleted.`},f=t=>e.flows.some(e=>e.flow.id===t);for(let t of[...a].sort((e,t)=>Number(f(t))-Number(f(e)))){let r=e.flows.find(e=>e.flow.id===t);if(r){let e=r.flow,i=u(t,e.name,e.managed,`flow`),a=i.blocked??d(t),c=!1;a===void 0&&n===`delete`&&e.stateCode!==0&&(e.stateCode===1?c=!0:a=`The flow is not off (suspended): turn it off first.`),a!==void 0&&s.add(t);let l=n===`delete`&&i.componentType===void 0?{componentType:29}:{},{blocked:f,...p}=i;o.push({...p,...l,entity:`workflow`,affectedFlows:1,affectedOn:+(e.stateCode===1),expectedCurrent:e.clientData,...a===void 0?{}:{blocked:a},...c?{turnOff:!0}:{}});continue}let i=e.references.find(e=>e.reference.id===t);if(!i)continue;let a=i.reference,l=u(t,a.displayName||a.logicalName,a.managed,`reference`),f=l.blocked,p=i.flowIds.filter(e=>!c(e)).length;f===void 0&&p>0&&(f=`Used by ${p} ${E(p,`flow`,`flows`)} of this solution that ${E(p,`stays`,`stay`)}: re-point ${E(p,`it`,`them`)} or take ${E(p,`it`,`them`)} out first.`),f??=d(t),f!==void 0&&s.add(t);let{blocked:m,...h}=l;o.push({...h,entity:`connectionreference`,affectedFlows:i.flowIds.length,affectedOn:0,expectedCurrent:ie(a),...f===void 0?{}:{blocked:f}})}let p=o.filter(e=>e.blocked===void 0),m=[];if(n===`remove`)m.push(`The rows stay in the environment and in every other solution that holds them: only their place in this solution goes. They can be added back from the maker portal.`);else{m.push(`Delete is permanent: the rows are removed from the environment and from every solution that holds them. Undo is not possible.`),p.some(t=>e.flows.some(e=>e.flow.id===t.id))&&m.push(`The run history of a deleted flow is deleted with it.`),p.some(t=>e.references.some(e=>e.reference.id===t.id))&&m.push(`The connection behind a deleted reference is not deleted. The environment may refuse to delete a reference that a flow outside this solution still uses: each refusal is reported on its row.`);let t=p.filter(e=>e.turnOff===!0).length;t>0&&m.push(`${t} ${E(t,`flow is`,`flows are`)} turned on: the tool turns ${E(t,`it`,`them`)} off first and then deletes ${E(t,`it`,`them`)}.`)}return{kind:n,entity:o.every(t=>e.references.some(e=>e.reference.id===t.id))&&o.length>0?`connectionreference`:`workflow`,rows:o,warnings:m,solution:{id:e.solution.id,uniqueName:e.solution.uniqueName}}}function D(e){let t=Number.isFinite(e)&&e>0?Math.floor(e/1e3):0,n=e=>String(e).padStart(2,`0`);return t<60?`${t} s`:t<3600?`${Math.floor(t/60)} min ${n(t%60)} s`:`${Math.floor(t/3600)} h ${n(Math.floor(t%3600/60))} min`}var oe=[`Confirmed`,`Write and verify`,`Refresh`,`Summary`],se=[`Confirmed`,`Turn off`,`Write and verify`,`Turn on`,`Refresh`,`Summary`];function ce(e,t,n=!1){if(n){let n={off:1,write:2,on:3,refresh:4,done:6}[e],r=se.map((e,t)=>t<n?`done`:t===n?`active`:`pending`);return e===`done`&&t&&(r[4]=`error`),se.map((e,t)=>({label:e,state:r[t]}))}let r=e===`write`||e===`off`||e===`on`?[`done`,`active`,`pending`,`pending`]:e===`refresh`?[`done`,`done`,`active`,`pending`]:[`done`,`done`,t?`error`:`done`,`done`];return oe.map((e,t)=>({label:e,state:r[t]}))}function le(e,t,n,r){let i=D(r);return e===`off`?`Turning the flows off · ${i}`:e===`on`?`Turning the flows on again · ${i}`:e===`write`?`Writing and verifying: ${t} of ${n} row${n===1?``:`s`} · ${i}`:e===`refresh`?`Reading the solution again · ${i}`:`Finished in ${i}`}function ue(e){let t=t=>e.filter(e=>e.status===t).length;return{changed:t(`done`),skipped:t(`skipped`),failed:t(`failed`),total:e.length}}function de(e,t){let n,r,i;return e.total===0?(n=`warning`,r=`Nothing to write`,i=[`No row could be written.`]):e.changed===0?(n=`error`,r=`Nothing was written`,i=[`${e.failed} failed, ${e.skipped} skipped. Read the messages below.`]):e.failed===0&&e.skipped===0?(n=`success`,r=`All changes were written`,i=[`${e.changed} row${e.changed===1?` was`:`s were`} written and read back.`]):(n=`warning`,r=`Partly done`,i=[`${e.changed} written, ${e.skipped} skipped, ${e.failed} failed.`]),t&&(n===`success`&&(n=`warning`),i=[...i,`The solution could not be read again, so the data on screen may be old. Use Refresh.`]),{tone:n,title:r,lines:i}}var fe={failed:0,skipped:1,done:2};function pe(e){return e.map((e,t)=>({r:e,i:t})).sort((e,t)=>fe[e.r.status]-fe[t.r.status]||e.i-t.i).map(e=>e.r)}function me(e,t,n){return e===`done`?100:e===`refresh`?92:e===`on`?88:e===`off`?5:n<=0?0:Math.round(Math.min(Math.max(t,0),n)/n*85)}function he(e){return e===`off`?`Turning flows off`:e===`write`?`Processing your changes`:e===`on`?`Turning flows on again`:e===`refresh`?`Reading the solution again`:`Finished`}function ge(e){return JSON.stringify({tool:`Connection Reference Governance`,operation:e.operation,solution:e.solution,environment:e.environment,startedAt:new Date(e.startedAt).toISOString(),finishedAt:new Date(e.finishedAt).toISOString(),durationMs:Math.max(0,e.finishedAt-e.startedAt),summary:ue(e.results),rows:e.results.map(e=>({id:e.id,name:e.label,outcome:e.status,message:e.message,...e.stateChange?{stateChange:e.stateChange}:{}})),turnedOff:e.results.filter(e=>e.stateChange!==void 0).map(e=>({name:e.label,onAgain:e.stateChange===`back-on`}))},null,2)}function _e(e,t){return`report-${e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)}-${new Date(t).toISOString().replace(/[^0-9]/g,``).slice(0,14)}.json`}var ve=[{key:`choose`,label:`Choose`},{key:`preview`,label:`Preview`},{key:`apply`,label:`Apply`},{key:`result`,label:`Result`}],ye=e=>ve.findIndex(t=>t.key===e);function be(e,t){return e===`preview`||e===`result`?t===`leave`:!1}function xe(e){let t=e===`preview`;return ve.filter(t=>t.key!==`choose`&&ye(t.key)<=ye(e)).map(n=>({key:n.key,label:n.label,link:t&&ye(n.key)<ye(e)}))}var Se=e=>({connection:`Change connection`,repoint:`Re-point flows`,remove:`Remove from this solution`,delete:`Delete`})[e];function Ce(e){return{preview:`Preview what will be stored`,apply:`Processing your changes`,result:`Result`}[e]}var we={mail:`info`,user:`primary`,users:`primary`,chat:`info`,layout:`primary`,cloud:`info`,table:`success`,"file-text":`info`,database:`primary`,"clipboard-check":`success`,"clipboard-list":`success`,"bar-chart":`warning`,key:`warning`,"git-branch":`primary`,globe:`info`,bell:`warning`,bot:`primary`,sliders:`muted`,plug:`muted`,sun:`warning`,layers:`info`,rss:`warning`},Te=e=>we[e]??`muted`,Ee={office365:{name:`Office 365 Outlook`,glyph:`mail`},office365users:{name:`Office 365 Users`,glyph:`user`},office365groups:{name:`Office 365 Groups`,glyph:`users`},office365groupsmail:{name:`Office 365 Groups Mail`,glyph:`mail`},sharepointonline:{name:`SharePoint`,glyph:`layout`},teams:{name:`Microsoft Teams`,glyph:`chat`},onedriveforbusiness:{name:`OneDrive for Business`,glyph:`cloud`},onedrive:{name:`OneDrive`,glyph:`cloud`},excelonlinebusiness:{name:`Excel Online (Business)`,glyph:`table`},wordonlinebusiness:{name:`Word Online (Business)`,glyph:`file-text`},onenote:{name:`OneNote (Business)`,glyph:`file-text`},planner:{name:`Planner`,glyph:`clipboard-list`},todo:{name:`Microsoft To-Do (Business)`,glyph:`clipboard-check`},approvals:{name:`Standard approvals`,glyph:`clipboard-check`},microsoftforms:{name:`Microsoft Forms`,glyph:`clipboard-list`},powerbi:{name:`Power BI`,glyph:`bar-chart`},commondataserviceforapps:{name:`Microsoft Dataverse`,glyph:`database`},commondataservice:{name:`Microsoft Dataverse (legacy)`,glyph:`database`},dynamicscrmonline:{name:`Dynamics 365 (deprecated)`,glyph:`database`},sql:{name:`SQL Server`,glyph:`database`},kusto:{name:`Azure Data Explorer`,glyph:`database`},azureblob:{name:`Azure Blob Storage`,glyph:`cloud`},azuretables:{name:`Azure Table Storage`,glyph:`table`},azurequeues:{name:`Azure Queues`,glyph:`layers`},servicebus:{name:`Service Bus`,glyph:`layers`},azureeventgrid:{name:`Azure Event Grid`,glyph:`layers`},keyvault:{name:`Azure Key Vault`,glyph:`key`},azuread:{name:`Microsoft Entra ID`,glyph:`user`},visualstudioteamservices:{name:`Azure DevOps`,glyph:`git-branch`},webcontents:{name:`HTTP with Microsoft Entra ID (preauthorized)`,glyph:`globe`},webcontentsv2:{name:`HTTP With Microsoft Entra ID`,glyph:`globe`},rss:{name:`RSS`,glyph:`rss`},msnweather:{name:`MSN Weather`,glyph:`sun`},sendmail:{name:`Mail`,glyph:`mail`},outlook:{name:`Outlook.com`,glyph:`mail`},gmail:{name:`Gmail`,glyph:`mail`},slack:{name:`Slack`,glyph:`chat`},powerappsnotification:{name:`Power Apps Notification`,glyph:`bell`},microsoftcopilotstudio:{name:`Microsoft Copilot Studio`,glyph:`bot`},powerplatformforadmins:{name:`Power Platform for Admins`,glyph:`sliders`},flowmanagement:{name:`Power Automate Management`,glyph:`sliders`}},De=`plug`;function Oe(e){return(e.split(`/`).filter(Boolean).pop()??``).toLowerCase().replace(/^shared_/,``)}function ke(e){let t=(e.split(`-`)[0]??``).replace(/_/g,` `).trim();return t===``?`Unknown connector`:t.replace(/\b\w/g,e=>e.toUpperCase())}function O(e){let t=Oe(e),n=Object.prototype.hasOwnProperty.call(Ee,t)?Ee[t]:void 0;return n?{key:t,name:n.name,glyph:n.glyph,known:!0,tone:Te(n.glyph)}:{key:t,name:ke(t),glyph:De,known:!1,tone:Te(De)}}var k=e=>typeof e==`string`?e:``,A=e=>typeof e==`object`&&e?e:{};function Ae(e){if(Array.isArray(e))return e;let t=A(e);for(let e of[t.value,A(t.data).value,A(t.body).value])if(Array.isArray(e))return e;return[]}function je(e){return(/\/apis\/([^/]+)\/connections\//i.exec(e)?.[1]??``).toLowerCase().replace(/^shared_/,``)}function Me(e){return Ae(e).flatMap(e=>{let t=A(e),n=k(t.name);if(n===``)return[];let r=A(t.properties);return[{name:n,connectorKey:je(k(t.id)),displayName:k(r.displayName),createdTime:k(r.createdTime)}]})}function Ne(e){let t=A(e),n=t.value,r=A(t.Detail),i=A(Array.isArray(n)?A(n[0]).Detail:A(n).Detail);return k(r.EnvironmentId)||k(i.EnvironmentId)}function j(e){let t=e.trim(),n=/\/connections\/([^/?#]+)\s*$/i.exec(t);return n?n[1]:t}var Pe={status:`idle`,items:[],error:``};function Fe(e,t,n){if(e.status!==`ready`)return`unknown`;let r=e.items.find(e=>e.name.toLowerCase()===n.toLowerCase());if(!r)return`missing`;let i=Oe(t).toLowerCase();return r.connectorKey!==``&&i!==``&&r.connectorKey!==i?`other-connector`:`found`}function Ie(e,t){let n=Oe(t).toLowerCase();return e.items.filter(e=>e.connectorKey===n)}var Le=/unauthenticated|reconnect|re-?authenticat|sign in again|expired/i;function Re(e){if(!Array.isArray(e)||e.length===0)return{status:`unknown`,detail:``};let t=``,n=``,r=!0;for(let i of e){let e=A(i),a=k(e.status),o=A(e.error),s=[k(o.code),k(o.message),a].filter(e=>e!==``).join(`: `);a.toLowerCase()!==`connected`&&(r=!1),Le.test(`${a} ${k(o.code)} ${k(o.message)}`)?t||=s:(/error/i.test(a)||Object.keys(o).length>0)&&(n||=s)}return t===``?n===``?r?{status:`connected`,detail:``}:{status:`unknown`,detail:``}:{status:`error`,detail:n}:{status:`reconnect`,detail:t}}function ze(e){return Ae(e).flatMap(e=>{let t=A(e),n=k(t.name);if(n===``)return[];let r=A(t.properties),i=je(k(t.id))||Oe(k(r.apiId)),a=A(r.createdBy),{status:o,detail:s}=Re(r.statuses);return[{name:n,connectorKey:i,connectorName:i===``?``:O(`shared_${i}`).name,displayName:k(r.displayName),status:o,statusDetail:s,createdTime:k(r.createdTime),modifiedTime:k(r.lastModifiedTime),creator:{name:k(a.displayName)||k(a.userPrincipalName),email:k(a.email)}}]})}function Be(e){let t=A(e);for(let e of[t.nextLink,A(t.data).nextLink,A(t.body).nextLink,t[`@odata.nextLink`]]){let t=k(e).trim();if(t!==``)return t}return``}var Ve=(e=`unused`,t=[])=>({tab:e,picked:t,keepers:{},open:[],summaryHidden:!1}),He=(e,t)=>(e.displayName||e.logicalName).localeCompare(t.displayName||t.logicalName,void 0,{sensitivity:`base`})||e.logicalName.localeCompare(t.logicalName),Ue=e=>`${e.connectorId.toLowerCase()}|${e.customConnectorId.toLowerCase()}|${e.connectionId.trim().toLowerCase()}`;function We(e){let t=new Map;for(let n of e.references){let r=n.reference;if(r.connectionId.trim()===``)continue;let i=n.flowIds.map(t=>e.flows.find(e=>e.flow.id===t)?.flow.name??t);t.set(Ue(r),[...t.get(Ue(r))??[],{reference:r,flows:i,flowIds:n.flowIds}])}return[...t].filter(([,e])=>e.length>=2).map(([e,t])=>{let n=[...t].sort((e,t)=>He(e.reference,t.reference)),r=[...n].sort((e,t)=>t.flowIds.length-e.flowIds.length||e.reference.logicalName.localeCompare(t.reference.logicalName))[0];return{key:e,connectorId:n[0].reference.connectorId,connectionId:n[0].reference.connectionId,members:n,suggestedKeeper:r.reference.id}}).sort((e,t)=>t.members.length-e.members.length||e.key.localeCompare(t.key))}function Ge(e,t){let n=t?.keepers[e.key];return n!==void 0&&e.members.some(e=>e.reference.id===n)?n:e.suggestedKeeper}function Ke(e,t=null){let n=We(e),r=t=>{let n=e.references.find(e=>e.reference.id===t)?.reference;return n?n.displayName||n.logicalName:void 0};return e.references.filter(e=>e.flowIds.length===0).map(i=>{let a=i.reference,o=n.find(e=>e.members.some(e=>e.reference.id===a.id));return{reference:a,blocked:e.solution.managed||a.managed?`Managed: read-only.`:void 0,neverConnected:a.connectionId.trim()===``,duplicateOf:o&&Ge(o,t)!==a.id?r(Ge(o,t)):void 0}}).sort((e,t)=>He(e.reference,t.reference))}var qe=e=>e.flows.filter(e=>e.unreadable).length;function Je(e,t,n){let r=t.members.find(e=>e.reference.id===n);if(!r)return;let i=t.members.filter(e=>e.reference.id!==n),a=i.filter(e=>e.flowIds.length>0),o=[...new Set(a.flatMap(e=>e.flowIds))].filter(t=>e.flows.some(e=>e.flow.id===t&&!e.unreadable));return{keeper:r.reference,duplicates:i.map(e=>e.reference),flowIds:o,group:o.length===0?null:{connectorId:t.connectorId,from:a.map(e=>e.reference.logicalName),target:r.reference.logicalName}}}function Ye(e){let t=We(e),n=new Set;for(let r of t){let t=Je(e,r,r.suggestedKeeper);for(let e of t?.flowIds??[])n.add(e)}return{unused:Ke(e).length,groups:t.length,flows:n.size}}function Xe(e,t){let n=new Set(Ke(e).filter(e=>e.blocked===void 0).map(e=>e.reference.id)),r=t.picked.filter(e=>n.has(e)),i=We(e),a=Object.entries(t.keepers).filter(([e,t])=>i.find(t=>t.key===e)?.members.some(e=>e.reference.id===t)===!0),o=r.length===t.picked.length,s=a.length===Object.keys(t.keepers).length;return o&&s?t:{...t,picked:r,keepers:Object.fromEntries(a)}}var Ze=2e3;function Qe(e,t=`00000`){return{connectorId:e,displayName:``,name:``,nameTouched:!1,description:``,connectionId:``,connectionSource:`none`,checked:null,live:Pe,openConnections:[],seed:t,suggestOpen:!0,step:``,reviewing:!1,saving:!1,error:``}}function $e(){let e=new Uint8Array(3);if(globalThis.crypto?.getRandomValues)globalThis.crypto.getRandomValues(e);else for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return[...e].map(e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,5)}function et(e){return e.normalize(`NFD`).replace(/[̀-ͯ]/g,``).replace(/[^A-Za-z0-9]+/g,``).replace(/^[0-9]+/,``).slice(0,50)}function tt(e){let t=e.solution.prefix.trim();if(t!==``)return t;let n=new Set(e.references.map(e=>/^([A-Za-z][A-Za-z0-9]{1,7})_/.exec(e.reference.logicalName)?.[1]?.toLowerCase()).filter(e=>e!==void 0));return n.size===1?[...n][0]:``}var M=(e,t)=>`${e}_${t}`,nt=/^[A-Za-z][A-Za-z0-9_]*$/,rt=/^[A-Za-z0-9][A-Za-z0-9_.-]*$/,it=(e,t)=>e.allReferences.some(e=>e.logicalName.toLowerCase()===t.toLowerCase());function at(e,t){let n={},r=[],i=tt(e),a=t.displayName.trim();a===``?n.displayName=`Enter a display name.`:a.length>200&&(n.displayName=`At most 200 characters.`),t.description.trim().length>2e3&&(n.description=`At most ${Ze} characters.`),i===``&&(n.prefix=`The publisher prefix of this solution could not be found, so a name cannot be built.`),t.name===``?n.name=`Enter a name.`:nt.test(t.name)?t.name.length>50?n.name=`At most 50 characters.`:i!==``&&it(e,M(i,t.name))&&(n.name=`${M(i,t.name)} already exists in this environment.`):n.name=`Letters, digits and underscores only, starting with a letter.`;let o=j(t.connectionId);if(o===``)n.connectionId=`Choose a connection. A reference without one cannot be saved in the Maker portal, and flows moved onto it cannot be written (error 0x80060467).`;else if(!rt.test(o)||o.length>1e3)n.connectionId=`Letters, digits, "-", "_" and "." only.`;else{let e=t.connectionSource===`typed`&&t.checked!==null&&t.checked.id===o.toLowerCase();if(t.connectionSource===`typed`&&!e)n.connectionId=`Press Enter or the search icon to check this connection.`;else{let e=t.connectionSource===`typed`?t.checked.verdict:Fe(t.live,t.connectorId,o);e===`missing`?n.connectionId=`This connection was not found among your connections. Check the id, or press Refresh.`:e===`other-connector`?n.connectionId=`This connection belongs to another connector, not ${O(t.connectorId).name}.`:e===`unknown`&&(n.connectionId=t.live.status===`loading`?`Reading your connections...`:`Your connections could not be read${t.live.error===``?``:` (${t.live.error})`}, so this one cannot be verified. Press Refresh to try again.`)}}if(a!==``){let t=e.allReferences.filter(e=>(e.displayName||``).trim().toLowerCase()===a.toLowerCase());t.some(t=>e.references.some(e=>e.reference.id===t.id))?r.push(`Another reference in this solution has the same display name. Microsoft recommends a unique display name so references can be told apart.`):t.length>0&&r.push(`A reference elsewhere in this environment has the same display name. It is allowed, but a unique name is easier to tell apart.`)}return{errors:n,warnings:r,ok:Object.keys(n).length===0}}function ot(e,t){let n=new Set(e.allReferences.filter(e=>e.connectorId===t).map(e=>e.customConnectorId));return n.size===1?[...n][0]:``}function st(e,t){let n={connectionreferencelogicalname:M(tt(e),t.name),connectionreferencedisplayname:t.displayName.trim(),connectorid:t.connectorId};t.description.trim()!==``&&(n.description=t.description.trim());let r=j(t.connectionId);r!==``&&(n.connectionid=r);let i=ot(e,t.connectorId);return i!==``&&(n[`customconnectorid@odata.bind`]=`/connectors(${i})`),n}function ct(e,t){return Ie(t.live,t.connectorId).map(t=>{let n=e.allReferences.filter(e=>e.connectionId.toLowerCase()===t.name.toLowerCase()).map(t=>({id:t.id,logicalName:t.logicalName,displayName:t.displayName||t.logicalName,ownerName:t.ownerName,ownerEmail:t.ownerEmail??``,flows:e.flows.filter(e=>e.uses.some(e=>e.logicalName===t.logicalName)).map(e=>e.flow.name)}));return{id:t.name,displayName:t.displayName,createdTime:t.createdTime,users:n,flowCount:new Set(n.flatMap(e=>e.flows)).size}}).sort((e,t)=>t.users.length-e.users.length||(e.displayName||e.id).localeCompare(t.displayName||t.id,void 0,{sensitivity:`base`}))}function lt(e,t,n,r){let i=e=>e.slice(0,50);if(!it(e,M(t,i(n))))return i(n);for(let a=0;a<1e3;a++){let o=`_${r}${a===0?``:String(a)}`,s=i(n.slice(0,50-o.length)+o);if(!it(e,M(t,s)))return s}return i(n)}function ut(e,t){let n=tt(e);if(n===``)return[];let r=O(t.connectorId).name,i=e.solution.name,a=Oe(t.connectorId).replace(/[^a-z0-9]/g,``),o=t.seed,s=t=>e.allReferences.some(e=>(e.displayName||``).trim().toLowerCase()===t.toLowerCase())?`${t}-${o}`:t,c=[{label:`Maker style`,displayName:`${r} ${i}-${o}`,name:lt(e,n,`shared${a}_${o}`,o),description:`${r} connection reference for ${i}.`},{label:`Readable`,displayName:s(`${r} - ${i}`),name:lt(e,n,et(`${r} ${i}`),o),description:`Connection used by the flows of ${i}.`}],l=t.connectionSource===`card`?Ie(t.live,t.connectorId).find(e=>e.name.toLowerCase()===j(t.connectionId).toLowerCase()):void 0;if(l&&l.displayName!==``){let t=l.displayName;c.push({label:`By account`,displayName:s(`${r} (${t})`),name:lt(e,n,et(`${r} ${t}`),o),description:`${r} as ${t}, for ${i}.`})}return c}function dt(e,t,n){let r={...e,reviewing:!1,error:``};return t===`connectionId`?{...r,connectionId:n,connectionSource:n.trim()===``?`none`:`typed`}:t===`displayName`?{...r,displayName:n,name:e.nameTouched?e.name:et(n)}:t===`name`?{...r,name:n,nameTouched:n!==``}:{...r,[t]:n}}function ft(e,t){return{...e,displayName:t.displayName,name:t.name,nameTouched:!0,description:t.description,suggestOpen:!1,reviewing:!1,error:``}}function pt(e,t){return e.displayName===t.displayName&&e.name===t.name&&e.description===t.description}function mt(e,t){return{...e,connectionId:t,connectionSource:t===``?`none`:`card`,reviewing:!1,error:``}}function ht(e,t,n){let r=j(t);if(e.connectionSource!==`typed`||j(e.connectionId).toLowerCase()!==r.toLowerCase())return e;if(n===`found`){let t=e.live.items.find(e=>e.name.toLowerCase()===r.toLowerCase());return mt(e,t?t.name:r)}return{...e,checked:{id:r.toLowerCase(),verdict:n}}}var gt=[`flow`,`agent`,`app`,`other`],_t={flow:`Flows`,agent:`Agents`,app:`Apps`,other:`Other components`},vt={flow:`workflow`,agent:`bot`,app:`layout`,other:`layers`},yt={1:{name:`Table`,entity:`entity`},20:{name:`Security role`,entity:`role`},24:{name:`Form`,entity:`systemform`},29:{name:`Flow`,entity:`workflow`},300:{name:`Canvas app`,entity:`canvasapp`},371:{name:`Connector`,entity:`connector`},372:{name:`Connector`,entity:`connector`},380:{name:`Environment variable`,entity:`environmentvariabledefinition`},381:{name:`Environment variable value`,entity:`environmentvariablevalue`}},bt=(e,t)=>t?.get(e)??yt[e];function xt(e,t){let n=(t??yt[e])?.entity.toLowerCase()??``;return e===29||n===`workflow`?`flow`:n===`bot`||n===`botcomponent`?`agent`:e===300||n===`canvasapp`||n===`appmodule`?`app`:`other`}var St=(e,t)=>(t??yt[e])?.name||`Component of type ${e}`,Ct={0:`Workflow`,1:`Dialog`,2:`Business rule`,3:`Action`,4:`Business process flow`,5:`Cloud flow`,6:`Desktop flow`,7:`AI flow`},wt={0:`Off`,1:`On`,2:`Suspended`};function Tt(e){let t={flow:0,agent:0,app:0,other:0};for(let n of e.items)t[n.kind]++;let n=e.items.filter(e=>e.inOpenSolution).length;return{total:e.items.length,inSolution:n,outside:e.items.length-n,byKind:t}}function Et(e){return gt.map(t=>({kind:t,label:_t[t],icon:vt[t],items:e.items.filter(e=>e.kind===t).sort((e,t)=>Number(e.inOpenSolution)-Number(t.inOpenSolution)||e.name.localeCompare(t.name,void 0,{sensitivity:`base`}))})).filter(e=>e.items.length>0)}function Dt(e){if(e.total===0)return`Nothing depends on it anywhere in the environment.`;let t=[`${e.total} ${e.total===1?`component depends`:`components depend`} on it`];return t.push(e.outside===0?`all in this solution`:`${e.inSolution} in this solution, ${e.outside} outside`),`${t.join(`: `)}.`}function Ot(e){let t=e.solutions.length===0?e.inOpenSolution?`in this solution`:`outside this solution`:`in ${e.solutions.join(` and `)}`;return`${e.name} (${e.typeLabel}, ${t})`}var N=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,kt=20,P=e=>typeof e==`string`?e:``,F=e=>e instanceof Error?e.message:String(e),At=`solutionid,friendlyname,uniquename,ismanaged,version,createdon`;function jt(e){let t=e.publisherid;return{id:P(e.solutionid),name:P(e.friendlyname)||P(e.uniquename),uniqueName:P(e.uniquename),managed:e.ismanaged===!0,version:P(e.version),publisher:typeof t==`object`&&t?P(t.friendlyname):``,prefix:typeof t==`object`&&t?P(t.customizationprefix):``,createdOn:P(e.createdon)}}async function Mt(e){let t=`solutions?$select=${At}`,n=`&$filter=isvisible eq true&$orderby=friendlyname`,r;try{try{r=await e.query(`${t}&$expand=publisherid($select=friendlyname,customizationprefix)${n}`)}catch{r=await e.query(`${t}${n}`)}}catch(e){return{ok:!1,error:`Could not read solutions: ${F(e)}`}}return{ok:!0,value:r.filter(e=>N.test(P(e.solutionid))).map(jt)}}var Nt=5e3;async function Pt(e,t){try{let n=await e.query(`workflows?$select=workflowid&$filter=category eq 5 and type eq 1`),r=await e.query(`solutioncomponents?$select=_solutionid_value,objectid&$filter=componenttype eq 29`);if(n.length>=Nt||r.length>=Nt)return{ok:!1,error:`Too many rows to count flows reliably.`};let i=new Set(n.map(e=>P(e.workflowid).toLowerCase())),a=new Set(t.map(e=>e.toLowerCase())),o=new Map,s=new Set;for(let e of r){let t=P(e._solutionid_value).toLowerCase(),n=P(e.objectid).toLowerCase();a.has(t)&&i.has(n)&&(o.set(t,(o.get(t)??new Set).add(n)),s.add(n))}let c={};for(let e of t)c[e]=o.get(e.toLowerCase())?.size??0;return{ok:!0,value:{perSolution:c,total:s.size}}}catch(e){return{ok:!1,error:`Could not count flows: ${F(e)}`}}}function Ft(e){return{id:P(e.connectionreferenceid),logicalName:P(e.connectionreferencelogicalname),displayName:P(e.connectionreferencedisplayname),connectorId:P(e.connectorid),connectionId:P(e.connectionid),customConnectorId:P(e._customconnectorid_value).toLowerCase(),ownerName:``,ownerId:P(e._ownerid_value).toLowerCase(),managed:e.ismanaged===!0}}async function It(e,t){let n=new Map,r=[[`systemusers`,`systemuserid`,`fullname`],[`teams`,`teamid`,`name`]];for(let i=0;i<t.length;i+=kt){let a=e=>t.slice(i,i+kt).map(t=>`${e} eq ${t}`).join(` or `);for(let[t,i,o]of r)try{let r=await e.query(`${t}?$select=${i},${o}&$filter=${a(i)}`);for(let e of r){let t=P(e[i]).toLowerCase();N.test(t)&&P(e[o])!==``&&n.set(t,P(e[o]))}}catch{}}return n}async function Lt(e,t){let n=new Map;for(let r=0;r<t.length;r+=kt)try{let i=t.slice(r,r+kt).map(e=>`systemuserid eq ${e}`).join(` or `),a=await e.query(`systemusers?$select=systemuserid,internalemailaddress&$filter=${i}`);for(let e of a){let t=P(e.systemuserid).toLowerCase();N.test(t)&&P(e.internalemailaddress)!==``&&n.set(t,P(e.internalemailaddress))}}catch{}return n}async function Rt(e,t){if(!N.test(t.id))return{ok:!1,error:`Invalid solution id.`};try{let n=await e.query(`solutioncomponents?$select=objectid,componenttype&$filter=_solutionid_value eq ${t.id}`),r=n.map(e=>P(e.objectid).toLowerCase()).filter(e=>N.test(e)),i=new Set(r),a={};for(let e of n){let t=P(e.objectid).toLowerCase();N.test(t)&&typeof e.componenttype==`number`&&(a[t]=e.componenttype)}let o=(await e.query(`connectionreferences?$select=connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectorid,connectionid,ismanaged,_ownerid_value,_customconnectorid_value`)).map(Ft).filter(e=>N.test(e.id)),s=await It(e,[...new Set(o.map(e=>e.ownerId).filter(e=>N.test(e)))]),c=await Lt(e,[...new Set(o.map(e=>e.ownerId).filter(e=>N.test(e)))]),l=o.map(e=>({...e,ownerName:s.get(e.ownerId)??``,ownerEmail:c.get(e.ownerId)??``})),u=l.filter(e=>i.has(e.id.toLowerCase())).map(e=>e.id),d=n.filter(e=>e.componenttype===29).map(e=>P(e.objectid)).filter(e=>N.test(e)),f=[];for(let t=0;t<d.length;t+=kt){let n=d.slice(t,t+kt).map(e=>`workflowid eq ${e}`).join(` or `),r=await e.query(`workflows?$select=workflowid,name,statecode,ismanaged,clientdata,description,createdon,modifiedon,_ownerid_value&$filter=category eq 5 and type eq 1 and (${n})`);for(let e of r)f.push({id:P(e.workflowid),name:P(e.name),stateCode:typeof e.statecode==`number`?e.statecode:0,managed:e.ismanaged===!0,clientData:P(e.clientdata),description:P(e.description),createdOn:P(e.createdon),modifiedOn:P(e.modifiedon),ownerId:P(e._ownerid_value).toLowerCase(),ownerName:``})}let p=await It(e,[...new Set(f.map(e=>e.ownerId).filter(e=>N.test(e)))]),m=f.map(e=>({...e,ownerName:p.get(e.ownerId)??``}));return m.sort((e,t)=>e.name.localeCompare(t.name)),{ok:!0,value:{solution:t,references:l,memberReferenceIds:u,memberTypes:a,flows:m,connections:{}}}}catch(e){return{ok:!1,error:`Could not read the solution: ${F(e)}`}}}async function zt(e,t,n){if(!N.test(n.id))return;let r=t===`workflow`?`workflows`:`connectionreferences`,i=t===`workflow`?`workflowid`:`connectionreferenceid`,a=await e.query(`${r}?$select=${n.field}&$filter=${i} eq ${n.id}`);return a.length===1?P(a[0][n.field]):void 0}var Bt=`Written and read back.`;async function Vt(e,t){if(!N.test(t))return;let n=await e.query(`workflows?$select=statecode&$filter=workflowid eq ${t}`),r=n.length===1?n[0].statecode:void 0;return typeof r==`number`?r:void 0}async function Ht(e,t,n){try{await e.update(`workflow`,t,n===`off`?{statecode:0,statuscode:1}:{statecode:1,statuscode:2});let r=await Vt(e,t);return r===(n===`off`?0:1)?void 0:`the environment accepted the change but the flow is ${r===1?`still on`:r===0?`still off`:`in an unknown state`}`}catch(e){return F(e)}}async function Ut(e,t,n,r){let i=[],a=new Set(T(t).map(e=>e.id)),o=e=>{i.push(e);try{n?.(e,i.length,t.rows.length)}catch{}},s=(e,t,n,r)=>({id:e.id,label:e.label,status:t,message:n,...r?{stateChange:r}:{}}),c=ee(t),l=new Set,u=new Set;if(c.length>0){r?.(`off`);for(let t of c)try{if(await Vt(e,t.id)!==1){u.add(t.id),o(s(t,`skipped`,`The state changed since the preview (the flow is no longer on); the flow was left alone and nothing was written.`));continue}let n=await Ht(e,t.id,`off`);if(n!==void 0){u.add(t.id),o(s(t,`failed`,`The flow could not be turned off: ${n}. Nothing was written.`));continue}l.add(t.id)}catch(e){u.add(t.id),o(s(t,`failed`,`The flow could not be turned off: ${F(e)}. Nothing was written.`))}}r?.(`write`);let d=new Map;for(let n of t.rows){if(u.has(n.id))continue;let r=(e,t)=>{let r=s(n,e,t);l.has(n.id)?d.set(n.id,r):o(r)};if(!a.has(n.id))r(`skipped`,n.blocked??`Blocked.`);else if(t.kind===`remove`||t.kind===`delete`){let i=await Zt(e,t,n);r(i.status,i.message)}else try{let i=await zt(e,t.entity,n);if(i===void 0){r(`skipped`,`The row could not be read again; nothing was written.`);continue}if(i!==n.expectedCurrent){r(`skipped`,`Changed by someone else since the preview; nothing was written. Refresh and preview again.`);continue}await e.update(t.entity,n.id,{[n.field]:n.payload});let a=await zt(e,t.entity,n);Qt(t.kind,n,a)?r(`done`,Bt):r(`failed`,`Written, but the stored value could not be confirmed. Check the row before relying on it.`)}catch(e){r(`failed`,F(e))}}if(t.kind===`delete`){for(let e of t.rows){let t=d.get(e.id);t&&o(t.status===`done`?t:{...t,message:`${t.message} The flow was turned off by this run and is still off.`,stateChange:`left-off`})}return i}if(l.size>0){r?.(`on`);for(let n of t.rows){if(!l.has(n.id))continue;let t=d.get(n.id)??s(n,`failed`,`The row was not processed.`),r;try{r=await Ht(e,n.id,`on`)}catch(e){r=F(e)}o(r===void 0?{...t,stateChange:`back-on`}:s(n,`failed`,`${n.label} could not be turned on again: ${r}. It is off: turn it on in the maker portal.${t.status===`done`?` The change itself was written.`:` ${t.message}`}`,`left-off`))}}return i}var Wt=(e,t,n)=>e[t.toLowerCase()]??(n?29:void 0);async function Gt(e,t,n){let r={},i=async n=>{let i=Wt(t.componentTypes,n,t.flows.some(e=>e.flow.id===n));if(i===void 0||!N.test(n))r[n]=void 0;else try{r[n]=await e.dependencies(i,n)}catch{r[n]=void 0}};for(let e=0;e<n.length;e+=5)await Promise.all(n.slice(e,e+5).map(i));return r}var Kt=(e,t)=>t.entity??e.entity;async function qt(e,t,n){let r=t===`workflow`?`workflows`:`connectionreferences`,i=t===`workflow`?`workflowid`:`connectionreferenceid`;return(await e.query(`${r}?$select=${i}&$filter=${i} eq ${n}`)).length>0}async function Jt(e,t,n){return(await e.query(`solutioncomponents?$select=objectid&$filter=_solutionid_value eq ${t} and objectid eq ${n}`)).length>0}var Yt=`Removed from the solution and read back.`,Xt=`Deleted and read back.`;async function Zt(e,t,n){let r=Kt(t,n);try{if(!N.test(n.id))return{status:`skipped`,message:`The row has no valid id; nothing was changed.`};if(t.kind===`remove`){let r=t.solution;return!r||!N.test(r.id)||n.componentType===void 0?{status:`skipped`,message:`The solution or the component type is not known; nothing was changed.`}:await Jt(e,r.id,n.id)?(await e.removeFromSolution(r.uniqueName,n.id,n.componentType),await Jt(e,r.id,n.id)?{status:`failed`,message:`The environment accepted the request but the row is still in the solution. Check it in the maker portal.`}:{status:`done`,message:Yt}):{status:`skipped`,message:`It is not in the solution any more; nothing was changed. Refresh and preview again.`}}if(!await qt(e,r,n.id))return{status:`skipped`,message:`The row is already gone; nothing was changed. Refresh and preview again.`};if(n.componentType===void 0)return{status:`skipped`,message:`The component type is not known, so its dependencies cannot be checked; nothing was deleted.`};let i;try{i=await e.dependencies(n.componentType,n.id)}catch(e){return{status:`skipped`,message:`The dependencies could not be checked (${F(e)}); nothing was deleted.`}}let a=new Set(T(t).map(e=>e.id)),o=i.filter(e=>!a.has(e.id));return o.length>0?{status:`skipped`,message:`${o.length} other component${o.length===1?``:`s`} depend${o.length===1?`s`:``} on it; nothing was deleted.`}:r===`workflow`&&await Vt(e,n.id)!==0?{status:`skipped`,message:`The flow is not off (its state changed since the preview); it was not deleted.`}:(await e.remove(r,n.id),await qt(e,r,n.id)?{status:`failed`,message:`The environment accepted the request but the row still exists. Check it in the maker portal.`}:{status:`done`,message:Xt})}catch(e){return{status:`failed`,message:F(e)}}}function Qt(e,t,n){if(n===void 0)return!1;if(e===`connection`)return n===t.payload;let r=i(t.payload),a=i(n);if(!r.ok||!a.ok)return!1;let o=t.oldValue.split(`,`).map(e=>e.trim()).filter(e=>e!==``&&!r.value.includes(e));return r.value.length===a.value.length&&r.value.every(e=>a.value.includes(e))&&o.every(e=>!a.value.includes(e))}var $t=`connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectorid,connectionid,ismanaged,_ownerid_value,_customconnectorid_value`;async function en(e,t){for(let e of t.references){let n=t.componentTypes[e.reference.id.toLowerCase()];if(typeof n==`number`)return n}try{let n=t.allReferences.find(e=>N.test(e.id));if(n){let t=(await e.query(`solutioncomponents?$select=componenttype&$filter=objectid eq ${n.id}`)).map(e=>e.componenttype).find(e=>typeof e==`number`);if(t!==void 0)return t}}catch{}try{return(await e.query(`solutioncomponentdefinitions?$select=solutioncomponenttype&$filter=primaryentityname eq 'connectionreference'`)).map(e=>e.solutioncomponenttype).find(e=>typeof e==`number`)}catch{return}}async function tn(e){try{let t=await e.environmentId();return t===``?{ok:!1,error:`the environment id could not be read`}:{ok:!0,value:Me(await e.listConnections(t))}}catch(e){return{ok:!1,error:F(e)}}}async function nn(e,t,n,r){let i=e=>{try{r?.(e)}catch{}},a=t.solution;if(a.managed)return{ok:!1,error:`A managed solution cannot be changed.`};if(!N.test(a.id))return{ok:!1,error:`Invalid solution id.`};let o=at(t,n);if(!o.ok)return{ok:!1,error:Object.values(o.errors)[0]??`The form is not valid.`};let s=st(t,n),c=String(s.connectionreferencelogicalname),l=``,u=!1,d=async t=>{if(!u)return{ok:!1,error:t};try{if(N.test(l)&&(await e.remove(`connectionreference`,l),!await qt(e,`connectionreference`,l)))return{ok:!1,error:`${t} The reference that had just been created was deleted again; nothing was left behind.`}}catch{}return{ok:!1,error:`${t} The reference ${c}${N.test(l)?` (${l})`:``} was created and could not be deleted again: delete it in the maker portal.`}};try{if(i(`check`),(await e.query(`connectionreferences?$select=connectionreferenceid&$filter=connectionreferencelogicalname eq '${c}'`)).length>0)return{ok:!1,error:`${c} already exists in this environment; nothing was created.`};let r=j(n.connectionId);if(r===``)return{ok:!1,error:`A connection is required: a reference without one cannot be saved in the Maker portal and flows cannot be moved onto it. Nothing was created.`};{let t=await tn(e);if(!t.ok)return{ok:!1,error:`The connection could not be verified (${t.error}); nothing was created.`};let i=Fe({status:`ready`,items:t.value,error:``},n.connectorId,r);if(i!==`found`)return{ok:!1,error:i===`other-connector`?`The connection belongs to another connector; nothing was created.`:`The connection was not found among your connections; nothing was created.`}}let o=await en(e,t);if(o===void 0)return{ok:!1,error:`The component type of a connection reference could not be read, so it could not be added to the solution; nothing was created.`};if(i(`write`),l=(await e.create(`connectionreference`,s)).toLowerCase(),u=!0,!N.test(l)&&(l=P((await e.query(`connectionreferences?$select=connectionreferenceid&$filter=connectionreferencelogicalname eq '${c}'`))[0]?.connectionreferenceid).toLowerCase(),!N.test(l)))return await d(`The environment did not return the id of the new reference.`);if(await e.addToSolution(a.uniqueName,l,o),i(`readback`),!await Jt(e,a.id,l))return await d(`The reference was created but it is not in the solution.`);let f=await e.query(`connectionreferences?$select=${$t}&$filter=connectionreferenceid eq ${l}`),p=f[0]?Ft(f[0]):void 0;if(!p||p.logicalName!==c||p.connectorId!==n.connectorId||p.connectionId!==j(n.connectionId))return await d(`The reference was written but what is stored is not what was asked.`);let m=await It(e,N.test(p.ownerId)?[p.ownerId]:[]);return{ok:!0,value:{reference:{...p,ownerName:m.get(p.ownerId)??``},componentType:o}}}catch(e){return await d(`Could not create the reference: ${F(e)}.`)}}var I=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,rn=20,an=new Set([`default`,`active`,`basic`]),on=-1,sn=-2,L=e=>typeof e==`string`?e:``,cn=e=>e instanceof Error?e.message:String(e),ln=(e,t=rn)=>Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,r*t+t)),un=new WeakMap;function dn(e){let t=un.get(e);return t||(t=e.query(`solutioncomponentdefinitions?$select=solutioncomponenttype,name,primaryentityname`).then(e=>{let t=new Map;for(let n of e)typeof n.solutioncomponenttype==`number`&&t.set(n.solutioncomponenttype,{name:L(n.name),entity:L(n.primaryentityname)});return t},()=>void 0),un.set(e,t)),t}var fn={solutionId:``,memberIds:new Set},pn=e=>({solutionId:e.solution.id.toLowerCase(),memberIds:new Set(Object.keys(e.componentTypes))});async function mn(e,t,n,r,i){let a=[];for(let o of ln(i))a.push(...await e.query(`${t}?$select=${n},${r}&$filter=${o.map(e=>`${n} eq ${e}`).join(` or `)}`));return a}async function hn(e,t,n,r,i){let a=await dn(e);a===void 0&&n.some(e=>bt(e.type)===void 0)&&i.push(`The names of some component types could not be read.`);let o=new Map;for(let e of n)o.set(e.id.toLowerCase(),{id:e.id.toLowerCase(),type:e.type});for(let[e,t]of r)o.has(e)||o.set(e,{id:e,type:t.type});let s=new Map;for(let[e,t]of r)s.set(e,t);let c=e=>e<0?``:bt(e,a)?.entity.toLowerCase()??``,l=e=>[...o.values()].filter(t=>t.type>=0&&e(t)).map(e=>e.id).filter(e=>I.test(e)),u=async(e,t)=>{try{await t()}catch{i.push(`The names of the ${e} could not be read.`)}},d=l(e=>e.type===29||c(e.type)===`workflow`),f=l(e=>c(e.type)===`bot`),p=l(e=>c(e.type)===`botcomponent`),m=l(e=>e.type===300||c(e.type)===`canvasapp`);d.length>0&&await u(`flows`,async()=>{for(let t of await mn(e,`workflows`,`workflowid`,`name,statecode,category,ismanaged,_ownerid_value`,d))s.set(L(t.workflowid).toLowerCase(),{name:L(t.name),state:typeof t.statecode==`number`?wt[t.statecode]??``:``,managed:t.ismanaged===!0,ownerId:L(t._ownerid_value).toLowerCase(),parentId:``,typeLabel:typeof t.category==`number`?Ct[t.category]??`Flow`:`Flow`})}),f.length>0&&await u(`agents`,async()=>{for(let t of await mn(e,`bots`,`botid`,`name,statecode,ismanaged,_ownerid_value`,f))s.set(L(t.botid).toLowerCase(),{name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:L(t._ownerid_value).toLowerCase(),parentId:``,typeLabel:`Agent`})}),p.length>0&&await u(`agent components`,async()=>{for(let t of await mn(e,`botcomponents`,`botcomponentid`,`name,ismanaged,_parentbotid_value`,p))s.set(L(t.botcomponentid).toLowerCase(),{name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:``,parentId:L(t._parentbotid_value).toLowerCase(),typeLabel:`Agent component`})}),m.length>0&&await u(`apps`,async()=>{for(let t of await mn(e,`canvasapps`,`canvasappid`,`displayname`,m))s.set(L(t.canvasappid).toLowerCase(),{name:L(t.displayname),state:``,managed:!1,ownerId:``,parentId:``,typeLabel:`Canvas app`})});let h=new Map;for(let[e,t]of s)t.typeLabel===`Agent`&&h.set(e,t.name);let g=[...new Set([...s.values()].map(e=>e.parentId).filter(e=>I.test(e)&&!h.has(e)))];if(g.length>0)try{for(let t of await mn(e,`bots`,`botid`,`name`,g))h.set(L(t.botid).toLowerCase(),L(t.name))}catch{i.push(`The names of the agents that own agent components could not be read.`)}let _=await It(e,[...new Set([...s.values()].map(e=>e.ownerId).filter(e=>I.test(e)))]),v=new Map,y=new Map,b=!0;try{for(let t of ln([...o.keys()]))for(let n of await e.query(`solutioncomponents?$select=objectid,_solutionid_value&$filter=${t.map(e=>`objectid eq ${e}`).join(` or `)}`)){let e=L(n.objectid).toLowerCase(),t=L(n._solutionid_value).toLowerCase();I.test(e)&&I.test(t)&&v.set(e,(v.get(e)??new Set).add(t))}let t=[...new Set([...v.values()].flatMap(e=>[...e]))];for(let n of await mn(e,`solutions`,`solutionid`,`friendlyname,uniquename`,t))an.has(L(n.uniquename).toLowerCase())||y.set(L(n.solutionid).toLowerCase(),L(n.friendlyname)||L(n.uniquename))}catch{b=!1,i.push(`The solutions that hold the components could not be read.`)}return[...o.values()].map(e=>{let n=s.get(e.id),r=e.type<0?void 0:bt(e.type,a),i=e.type===on||e.type===sn?`agent`:xt(e.type,r),o=n&&n.typeLabel!==``?n.typeLabel:St(e.type,r);return{id:e.id,type:e.type,kind:i,typeLabel:o,name:n?.name||`${o} ${e.id.slice(0,8)}`,state:n?.state??``,managed:n?.managed??!1,owner:n?_.get(n.ownerId)??``:``,parent:n?.parentId?h.get(n.parentId)??``:``,solutions:b?[...v.get(e.id)??[]].map(e=>y.get(e)).filter(e=>e!==void 0).sort():[],inOpenSolution:t.memberIds.has(e.id)||t.solutionId!==``&&v.get(e.id)?.has(t.solutionId)===!0}})}async function gn(e,t,n){try{let r=t.componentTypes[n.id.toLowerCase()]??await en(e,t);return r===void 0?{ok:!1,error:`The component type of this reference could not be read, so its dependencies cannot be asked.`}:await _n(e,pn(t),n,r)}catch(e){return{ok:!1,error:cn(e)}}}async function _n(e,t,n,r){let i=[];try{let a=(await e.dependents(r,n.id)).filter(e=>I.test(e.id)&&e.id.toLowerCase()!==n.id.toLowerCase()),o=new Map;try{for(let t of await e.query(`bots?$select=botid,name,statecode,ismanaged,_ownerid_value&$filter=_providerconnectionreferenceid_value eq ${n.id}`))o.set(L(t.botid).toLowerCase(),{type:on,name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:L(t._ownerid_value).toLowerCase(),parentId:``,typeLabel:`Agent`})}catch{i.push(`The agents that use it as their connection reference could not be read.`)}try{for(let t of await e.query(`connectionreferences(${n.id})/botcomponent_connectionreference?$select=botcomponentid,name,ismanaged,_parentbotid_value`))o.set(L(t.botcomponentid).toLowerCase(),{type:sn,name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:``,parentId:L(t._parentbotid_value).toLowerCase(),typeLabel:`Agent component`})}catch{i.push(`The agent components that use it could not be read.`)}let s=new Set(a.map(e=>e.id.toLowerCase()));for(let e of[...o.keys()])s.has(e)&&o.delete(e);return{ok:!0,value:{items:await hn(e,t,a,o,i),notes:[...new Set(i)]}}}catch(e){return{ok:!1,error:cn(e)}}}async function vn(e,t,n){let r={},i=n.filter(e=>I.test(e.id));if(i.length===0)return r;try{for(let n of await hn(e,pn(t),i,new Map,[]))r[n.id]=Ot(n)}catch{}return r}async function yn(e,t){let n=[...new Set(t.map(e=>e.toLowerCase()).filter(e=>I.test(e)))],r=new Map;if(n.length===0)return r;try{let t=new Map;for(let r of ln(n))for(let n of await e.query(`solutioncomponents?$select=objectid,_solutionid_value&$filter=${r.map(e=>`objectid eq ${e}`).join(` or `)}`)){let e=L(n.objectid).toLowerCase(),r=L(n._solutionid_value).toLowerCase();I.test(e)&&I.test(r)&&t.set(e,(t.get(e)??new Set).add(r))}let i=new Map;for(let n of await mn(e,`solutions`,`solutionid`,`friendlyname,uniquename`,[...new Set([...t.values()].flatMap(e=>[...e]))]))an.has(L(n.uniquename).toLowerCase())||i.set(L(n.solutionid).toLowerCase(),L(n.friendlyname)||L(n.uniquename));for(let e of n)r.set(e,[...t.get(e)??[]].map(e=>i.get(e)).filter(e=>e!==void 0).sort());return r}catch{return}}var bn=[],xn=new Set;function Sn(){for(let e of xn)try{e()}catch{}}function Cn(e){return xn.add(e),()=>xn.delete(e)}function R(e,t=`info`){bn.push({timestamp:new Date().toISOString(),level:t,message:e}),bn.length>500&&bn.splice(0,bn.length-500),Sn()}function wn(){bn.length=0,Sn()}function Tn(){return bn}function En(){return JSON.stringify(bn,null,2)}var Dn={connectionDelete:!0},On=`2024-10-01`;function kn(e,t){let n=t.trim();if(n===``)return e;if(/^https?:\/\//i.test(n)){let t=n.includes(`?`)?n.slice(n.indexOf(`?`)+1):``,r=e.split(`?`)[0];return t===``?e:`${r}?${/api-version=/i.test(t)?t:`${t}&api-version=${On}`}`}return`${e}&$skiptoken=${encodeURIComponent(n)}`}var An=(e,t=``,n=``)=>{let r=`https://make.powerapps.com/environments/${encodeURIComponent(e)}/connections`;return t!==``&&n!==``?`${r}/shared_${encodeURIComponent(t.replace(/^shared_/,``))}/${encodeURIComponent(n)}/details`:r},jn=/^[A-Za-z0-9._-]+$/,Mn=(e,t,n)=>`environments/${e}/connectors/shared_${t.replace(/^shared_/,``)}/connections/${n}?api-version=${On}`;function Nn(){let e=``;return{async environmentId(){return e===``&&(e=Ne(await window.dataverseAPI.queryData(`RetrieveCurrentOrganization(AccessType=@p1)?@p1=Microsoft.Dynamics.CRM.EndpointAccessType'Default'`))),e},async listConnections(e,t=``){return await window.powerplatformAPI.Connectivity.Get(kn(`environments/${e}/connections?api-version=${On}`,t))},async listApps(e,t=``){return await window.powerplatformAPI.PowerApps.Get(kn(`environments/${e}/apps?api-version=${On}&$top=100`,t))},async queryConnectorUsage(e,t=``){let n={TableName:`PowerPlatformResources`,Clauses:[{$type:`where`,FieldName:`type`,Operator:`in~`,Values:[`'microsoft.powerautomate/cloudflows'`,`'microsoft.powerautomate/agentflows'`,`'microsoft.powerautomate/m365agentflows'`,`'microsoft.powerapps/canvasapps'`,`'microsoft.powerapps/modeldrivenapps'`,`'microsoft.powerapps/apps'`,`'microsoft.copilotstudio/agents'`]},{$type:`where`,FieldName:`properties.environmentId`,Operator:`=~`,Values:[`'${e}'`]},{$type:`project`,FieldList:[`type`,`id = name`,`displayName = tostring(properties.displayName)`,`workflowId = tostring(properties.workflowEntityId)`,`connectors = properties.powerPlatformConnectors`]}],Options:{Top:1e3,Skip:0,SkipToken:t}};return await window.powerplatformAPI.ResourceQuery.Post(`resources/query?api-version=${On}`,n)},async searchFlowsByConnection(e){if(!jn.test(e))throw Error(`The connection name has characters that cannot be searched for.`);let t=`workflows?$select=workflowid,name,statecode,_ownerid_value&$filter=category eq 5 and contains(clientdata,'${e}')`;return(await window.dataverseAPI.queryData(t)).value},async deleteConnection(e,t,n){if(!Dn.connectionDelete)throw Error(`Deleting connections is switched off.`);await window.powerplatformAPI.Connectivity.Delete(Mn(e,t,n))},async copyText(e){await window.toolboxAPI.utils.copyToClipboard(e)},async query(e){return(await window.dataverseAPI.queryData(e)).value},async update(e,t,n){await window.dataverseAPI.update(e,t,n)},async create(e,t){let n=await window.dataverseAPI.create(e,t);return typeof n.id==`string`?n.id:``},async addToSolution(e,t,n){await window.dataverseAPI.execute({operationName:`AddSolutionComponent`,operationType:`action`,parameters:{ComponentId:t,ComponentType:n,SolutionUniqueName:e,AddRequiredComponents:!1}})},async remove(e,t){await window.dataverseAPI.delete(e,t)},async removeFromSolution(e,t,n){await window.dataverseAPI.execute({operationName:`RemoveSolutionComponent`,operationType:`action`,parameters:{SolutionComponent:{"@odata.type":`Microsoft.Dynamics.CRM.solutioncomponent`,solutioncomponentid:t},ComponentType:n,SolutionUniqueName:e}})},async dependents(e,t){let n=`RetrieveDependentComponents(ObjectId=${t},ComponentType=${e})`;return(await window.dataverseAPI.queryData(n)).value.map(e=>({id:String(e.dependentcomponentobjectid??``).toLowerCase(),type:Number(e.dependentcomponenttype??0)}))},async dependencies(e,t){let n=`RetrieveDependenciesForDelete(ObjectId=${t},ComponentType=${e})`;return(await window.dataverseAPI.queryData(n)).value.map(e=>({id:String(e.dependentcomponentobjectid??``).toLowerCase(),type:Number(e.dependentcomponenttype??0)}))},async currentUserId(){let e=await window.dataverseAPI.execute({operationName:`WhoAmI`,operationType:`function`});return typeof e.UserId==`string`?e.UserId.toLowerCase():``},async saveFile(e,t){return await window.toolboxAPI.fileSystem.saveFile(e,t)!==null},async connectionName(){let e=await window.toolboxAPI.connections.getActiveConnection();return e?e.name:``},async environmentName(){let e=await window.toolboxAPI.connections.getActiveConnection();return e?`${e.name} (${e.environment})`:``},async notify(e,t){await window.toolboxAPI.utils.showNotification({title:`Connection Reference Governance`,body:e,type:t,duration:6e3})}}}var Pn=[`apps`,`references`,`flows`,`agents`],Fn={apps:`apps`,references:`connection references`,flows:`flows`,agents:`agents`},In=()=>({apps:{status:`ok`},references:{status:`ok`},flows:{status:`ok`},agents:{status:`ok`}});function Ln(e,t){return e.length>0?`in-use`:Pn.some(e=>t[e].status===`failed`)?`unchecked-source`:`none-found`}function Rn(e){let t=Pn.filter(t=>e[t].status===`ok`).map(t=>{let n=e[t];return n.status===`ok`&&n.detail!==void 0&&n.detail!==``?n.detail:Fn[t]}),n=[];t.length>0&&n.push(`Looked at: ${t.join(`, `)}.`);for(let t of Pn){let r=e[t];r.status===`failed`&&n.push(`Could not read the ${Fn[t]}${r.reason===``?``:` (${r.reason})`}.`),r.status===`notScanned`&&n.push(`Not scanned: ${Fn[t]}${r.reason===``?``:` (${r.reason})`}.`)}return n.push(`Components that the signed-in user cannot read may still use this connection.`),n.join(` `)}function zn(e){let t=Pn.filter(t=>e[t].status===`ok`).map(t=>{let n=e[t];return n.status===`ok`&&n.detail!==void 0&&n.detail!==``?n.detail:Fn[t]});return`${t.length>0?`Looked at: ${t.join(`, `)}. `:``}Components that the signed-in user cannot read may still use this connection.`}function Bn(e,t){let n=new Set,r=[];for(let t of e){let e=`${t.kind}:${t.id.toLowerCase()}`;n.has(e)||(n.add(e),r.push(t))}return{dependents:r,sources:t,verdict:Ln(r,t),note:Rn(t)}}var Vn=[{kind:`app`,label:`Apps`},{kind:`flow`,label:`Flows`},{kind:`reference`,label:`Connection references`},{kind:`agent`,label:`Agents`},{kind:`other`,label:`Other components`}];function Hn(e){return Vn.map(t=>({...t,items:e.dependents.filter(e=>e.kind===t.kind).sort((e,t)=>e.name.localeCompare(t.name))})).filter(e=>e.items.length>0)}var Un=e=>e.dependents.length>0&&e.dependents.every(e=>e.kind===`reference`);function Wn(e){return Pn.filter(t=>e.sources[t].status!==`ok`).map(t=>({name:t,state:e.sources[t]}))}var Gn={key:`name`,dir:`asc`},Kn={all:`All`,broken:`Broken`,none:`No dependency found`,inuse:`In use`},qn={connected:`Connected`,reconnect:`Needs reconnect`,error:`Error`,unknown:`Unknown`},Jn=e=>e.status===`error`||e.status===`reconnect`;function Yn(e,t){let n=e[t];return n?.status===`ready`?n.report.verdict:void 0}var Xn=e=>/logicflows?$/i.test(e.connectorKey),Zn=`It belongs to a flow: the environment only deletes it together with that flow, so it is not offered here.`,Qn=(e,t)=>!Xn(e)&&Yn(t,e.name)===`none-found`;function $n(e,t){let n=0,r=0,i=0;for(let a of e){let e=Yn(t,a.name);e!==void 0&&(i++,e===`none-found`&&!Xn(a)&&n++,e===`in-use`&&r++)}return{total:e.length,broken:e.filter(Jn).length,noneFound:n,inUse:r,checked:i}}var er=e=>e.trim().toLowerCase();function tr(e,t,n,r,i){let a=er(i);return e.filter(e=>r!==``&&e.connectorKey!==r||n===`broken`&&!Jn(e)||n===`none`&&(Yn(t,e.name)!==`none-found`||Xn(e))||n===`inuse`&&Yn(t,e.name)!==`in-use`?!1:a===``||[e.name,e.displayName,e.connectorName,e.connectorKey,e.creator.name,e.creator.email].some(e=>er(e).includes(a)))}var nr={error:0,reconnect:1,unknown:2,connected:3},rr=(e,t)=>(e.displayName||e.name).localeCompare(t.displayName||t.name)||e.name.localeCompare(t.name);function ir(e,t){let n=t.dir===`asc`?1:-1,r=(e,n)=>{switch(t.key){case`connector`:return e.connectorName.localeCompare(n.connectorName)||rr(e,n);case`status`:return nr[e.status]-nr[n.status]||rr(e,n);case`modified`:return e.modifiedTime.localeCompare(n.modifiedTime)||rr(e,n);default:return rr(e,n)}};return[...e].sort((e,t)=>n*r(e,t))}function ar(e){let t=new Map;for(let n of e)n.connectorKey!==``&&!t.has(n.connectorKey)&&t.set(n.connectorKey,n.connectorName||n.connectorKey);return[...t.entries()].map(([e,t])=>({key:e,name:t})).sort((e,t)=>e.name.localeCompare(t.name))}function or(e){let t=/([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i.exec(e);return t?t[1].toLowerCase():e.slice(-8)}function sr(e){return[...e].sort((e,t)=>(e.connectorName||e.connectorKey).localeCompare(t.connectorName||t.connectorKey)||rr(e,t))}function cr(e,t,n){let r=new Map;for(let n of sr(e)){let e=r.get(n.connectorKey)??{name:n.connectorName||n.connectorKey||`Unknown connector`,total:0,done:0,loading:!1};e.total++;let i=t[n.name];(i?.status===`ready`||i?.status===`failed`)&&e.done++,i?.status===`loading`&&(e.loading=!0),r.set(n.connectorKey,e)}let i=!0,a=[...r.entries()].map(([e,t])=>{let r=t.done===t.total,a=`pending`;return r?a=`done`:n===`connections`&&(i||t.done>0||t.loading)&&(a=`active`),r||(i=!1),{key:e,name:t.name,total:t.total,done:t.done,state:a}});return{apps:n===`apps`?`active`:`done`,references:n===`apps`?`pending`:n===`references`?`active`:`done`,connectors:a,total:e.length,done:a.reduce((e,t)=>e+t.done,0)}}function lr(e,t,n){let r=e[t];if(n!==void 0&&Xn(n))return{text:`Belongs to a flow`,tone:`neutral`,title:Zn};if(r===void 0)return{text:`Not checked`,tone:`neutral`};if(r.status===`loading`)return{text:`Checking...`,tone:`info`};if(r.status===`failed`)return{text:`Could not be checked`,tone:`warning`};if(r.report.verdict===`in-use`){let e=r.report.dependents.length;return Un(r.report)?{text:`Held by ${e} reference${e===1?``:`s`}`,tone:`info`,title:`Only connection references hold this connection: no flow, app or agent was found using them. It still cannot be deleted by this run, because the reference would be left without its connection.`}:{text:`In use (${e})`,tone:`info`}}return r.report.verdict===`none-found`?{text:`No dependency found`,tone:`success`}:{text:`Could not be checked`,tone:`warning`}}var ur=(e,t,n)=>e===1?t:n;function dr(e,t){if(Qn(e,t))return;if(Xn(e))return Zn;let n=t[e.name];return n===void 0||n.status===`loading`?`Its dependencies were not read, so nothing is deleted.`:n.status===`failed`?`Its dependencies could not be read, so nothing is deleted.`:Yn(t,e.name)===`in-use`?`Something depends on it (${n.report.dependents.length}): it cannot be deleted by this run.`:`A source could not be read, so nothing is deleted.`}function fr(e){return e.map(e=>({name:e.name,connector:e.connectorKey,displayName:e.displayName,creator:e.creator.name,createdTime:e.createdTime,status:e.status}))}function pr(e,t,n){let r=new Set(n),i=e.filter(e=>r.has(e.name)),a=i.map(e=>{let n=dr(e,t);return{name:e.name,label:e.displayName||e.name,connector:e.connectorName,connectorKey:e.connectorKey,creator:e.creator.name,...n===void 0?{}:{blocked:n}}}),o=a.filter(e=>e.blocked===void 0),s=[];s.push(`Delete is permanent: the connections are removed from the environment. Undo is not possible.`),o.length>0&&s.push(`A connection reference that still holds the id of a deleted connection will show it as missing, and anything that needs it will have to be connected again.`),o.length>0&&s.push(`This tool cannot see the flows that the flow service has bound to a connection (the Maker portal shows them under "Flows using this connection"). Check the portal first.`);let c=new Set;for(let e of o){let n=t[e.name];if(n?.status===`ready`)for(let e of Wn(n.report))e.state.status===`notScanned`&&c.add(`${Fn[e.name]}${e.state.reason===``?``:` (${e.state.reason})`}`)}for(let e of c)s.push(`Not scanned: ${e}. Something there may still use ${ur(o.length,`this connection`,`these connections`)}.`);let l=a.length-o.length;return l>0&&s.push(`${l} ${ur(l,`connection is`,`connections are`)} blocked and will not be deleted.`),{rows:a,warnings:s,backup:JSON.stringify({kind:`connections-before-delete`,connections:fr(i)},null,2)}}var z=e=>e.rows.filter(e=>e.blocked===void 0),mr=[{key:`check`,label:`Check`,doing:`Reading what depends on it again`},{key:`exists`,label:`Find`,doing:`Making sure it is still in the environment`},{key:`delete`,label:`Delete`,doing:`Sending the delete request`},{key:`verify`,label:`Read back`,doing:`Reading the list again to confirm it is gone`}];function hr(e,t,n){if(t<=0)return 0;let r=n===null?0:mr.findIndex(e=>e.key===n)/mr.length;return Math.min(95,Math.round((Math.min(e,t)+r)/t*95))}var gr=e=>typeof e==`string`?e:``,B=e=>typeof e==`object`&&e?e:{};function _r(e){if(Array.isArray(e))return e;let t=B(e);for(let e of[t.value,B(t.data).value,B(t.body).value])if(Array.isArray(e))return e;return[]}function vr(e){let t=e.trim(),n=/\/connections\/([^/?#]+)\s*$/i.exec(t);return(n?n[1]:t).toLowerCase()}function yr(e){return _r(e).flatMap(e=>{let t=B(e),n=gr(t.name);if(n===``)return[];let r=B(t.properties),i=Array.isArray(r.connectionReferences)?r.connectionReferences:B(r.connectionReferences)&&Object.values(B(r.connectionReferences)),a=(Array.isArray(i)?i:[]).map(e=>vr(gr(B(e).sharedConnectionId))).filter(e=>e!==``);return[{id:n,name:gr(r.displayName)||n,owner:gr(B(r.owner).displayName),connections:[...new Set(a)]}]})}var br=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,xr=e=>e.trim().toLowerCase().replace(/^.*\//,``).replace(/^shared[_-]/,``),V=e=>typeof e==`object`&&e&&!Array.isArray(e)?e:{};function Sr(e){let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return[]}return Array.isArray(t)?t.map(e=>xr(typeof e==`string`?e:String(V(e).connectorId??``))).filter(e=>e!==``):[]}var Cr={"microsoft.powerautomate/cloudflows":`flows`,"microsoft.powerautomate/agentflows":`flows`,"microsoft.powerautomate/m365agentflows":`flows`,"microsoft.powerapps/canvasapps":`apps`,"microsoft.powerapps/modeldrivenapps":`apps`,"microsoft.powerapps/codeapps":`apps`,"microsoft.powerapps/apps":`apps`,"microsoft.copilotstudio/agents":`agents`};function wr(e){let t=V(e);for(let e of[t.data,V(t.body).data,V(t.data).data])if(Array.isArray(e))return e.map(V);return[]}function Tr(e){let t=V(e);for(let e of[t.skipToken,V(t.data).skipToken,V(t.body).skipToken])if(typeof e==`string`&&e.trim()!==``)return e.trim();return``}function Er(e,t,n){for(let r of t){let t=Cr[String(r.type??``).toLowerCase()];if(t!==void 0)for(let i of new Set(Sr(r.connectors??V(r.properties).powerPlatformConnectors))){let a=e[i]??={flows:0,apps:0,agents:0};if(a[t]++,t===`flows`&&n!==void 0){let e=String(r.workflowId??V(r.properties).workflowEntityId??``).trim().toLowerCase(),t=String(r.id??r.name??e).trim().toLowerCase(),a=n[i]??=[];a.some(e=>e.id===t)||a.push({id:t,name:String(r.displayName??V(r.properties).displayName??``)||t,workflowId:br.test(e)?e:``})}}}}var Dr=(e,t,n)=>`${e} ${e===1?t:n}`;function Or(e,t){if(e===null)return;let n=e[xr(t)];if(n!==void 0&&n.flows+n.apps+n.agents!==0)return`${[n.flows>0?Dr(n.flows,`flow`,`flows`):``,n.apps>0?Dr(n.apps,`app`,`apps`):``,n.agents>0?Dr(n.agents,`agent`,`agents`):``].filter(e=>e!==``).join(`, `)} of the environment use this connector`}function kr(e,t,n){if(e===null)return;let r=e[xr(t)];if(r!==void 0&&r.flows+r.apps+r.agents!==0)return`In this environment ${[r.flows>0?Dr(r.flows,`flow`,`flows`):``,r.apps>0?Dr(r.apps,`app`,`apps`):``,r.agents>0?Dr(r.agents,`agent`,`agents`):``].filter(e=>e!==``).join(`, `)} use the ${n===``?`same`:n} connector. The inventory does not say which connection each one uses, so some of them may use this one.`}var Ar=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,jr=200,H=e=>typeof e==`string`?e:``;function Mr(e){let t=e instanceof Error?e.message:String(e);return/ClientScopeAuthorizationFailed/i.test(t)?`the toolbox is not allowed to call this API (its application has no permission for it)`:t.replace(/^Error invoking remote method '[^']*':\s*(Error:\s*)?/i,``).replace(/^Power Platform request failed:\s*/i,``)}async function Nr(e,t){try{let n=await e.environmentId();if(n===``)return{ok:!1,error:`The id of the environment could not be read, so its connections cannot be listed.`};let r=new Map,i=new Set,a=``;for(let o=0;o<jr;o++){let o=await e.listConnections(n,a);for(let e of ze(o))Xn(e)||r.set(e.name,e);if(t?.(r.size),a=Be(o),a===``||i.has(a))break;i.add(a)}return{ok:!0,value:{rows:[...r.values()],environmentId:n}}}catch(e){return{ok:!1,error:`The connections could not be read: ${Mr(e)}`}}}async function Pr(e,t){try{let n={},r={},i=new Set,a=``;for(let o=0;o<jr;o++){let o=await e.queryConnectorUsage(t,a);if(Er(n,wr(o),r),a=Tr(o),a===``||i.has(a))break;i.add(a)}return{ok:!0,value:{usage:n,flows:r}}}catch(e){return{ok:!1,error:Mr(e)}}}var Fr=/"connectionReferenceLogicalName"\s*:\s*"([^"]+)"/gi,Ir=/shared-[a-z0-9]+-[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}/gi;function Lr(e){let t=H(e.clientdata);return{name:H(e.name),state:typeof e.statecode==`number`?wt[e.statecode]??``:``,references:[...new Set([...t.matchAll(Fr)].map(e=>e[1].toLowerCase()))],connections:[...new Set((t.match(Ir)??[]).map(e=>e.toLowerCase()))]}}function Rr(e,t){let n,r,i,a,o=new Map,s=async()=>{try{let n=[],r=new Set,i=``;for(let a=0;a<jr;a++){let a=await e.listApps(t,i);if(n.push(...yr(a)),i=Be(a),i===``||r.has(i))break;r.add(i)}return{ok:!0,value:n}}catch(e){return{ok:!1,reason:Mr(e)}}},c=async()=>{try{return{ok:!0,value:(await e.query(`connectionreferences?$select=connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectionid`)).map(e=>({id:H(e.connectionreferenceid).toLowerCase(),logicalName:H(e.connectionreferencelogicalname),displayName:H(e.connectionreferencedisplayname),connectionId:H(e.connectionid).trim().toLowerCase()})).filter(e=>Ar.test(e.id))}}catch(e){return{ok:!1,reason:Mr(e)}}},l=async()=>{try{let t=(await e.query(`solutioncomponentdefinitions?$select=solutioncomponenttype&$filter=primaryentityname eq 'connectionreference'`))[0]?.solutioncomponenttype;return typeof t==`number`?t:void 0}catch{return}};return{environmentId:t,inventory:()=>a??=Pr(e,t),flowDefinitions:async t=>{let n=[...new Set(t)].filter(e=>!o.has(e));for(let t=0;t<n.length;t+=10){let r=n.slice(t,t+10);try{let t=await e.query(`workflows?$select=workflowid,name,statecode,clientdata&$filter=${r.map(e=>`workflowid eq ${e}`).join(` or `)}`);for(let e of t)o.set(H(e.workflowid).toLowerCase(),Lr(e))}catch{}for(let e of r)o.has(e)||o.set(e,null)}return new Map(t.map(e=>[e,o.get(e)??null]))},apps:()=>n??=s(),references:()=>r??=c(),referenceType:()=>i??=l(),invalidate(){n=void 0,r=void 0,i=void 0,a=void 0,o.clear()}}}var zr=e=>e===`flow`||e===`agent`||e===`app`?e:`other`,U=e=>({status:`failed`,reason:e}),Br=/^The agents that use it|^The agent components that use it/;async function Vr(e,t,n){let r=[],i=In(),a=n.name.toLowerCase(),o=await t.apps();if(o.ok){for(let e of o.value)e.connections.includes(a)&&r.push({kind:`app`,id:e.id,name:e.name,state:``,ownerName:e.owner,solutions:[],via:``});i.apps={status:`ok`,detail:`${o.value.length} ${o.value.length===1?`app`:`apps`}`}}else i.apps=U(o.reason);let s=await t.references(),c=[];if(s.ok){c=s.value.filter(e=>e.connectionId===a),i.references={status:`ok`,detail:`${s.value.length} connection ${s.value.length===1?`reference`:`references`} (${c.length} ${c.length===1?`holds`:`hold`} it)`};let t=await yn(e,c.map(e=>e.id));for(let e of c)r.push({kind:`reference`,id:e.id,name:e.displayName||e.logicalName,state:``,ownerName:``,solutions:t?.get(e.id)??[],via:``})}else i.references=U(s.reason);if(!s.ok)i.flows=U(`the connection references could not be read, so the flows that use them are not known`),i.agents=U(`the connection references could not be read, so the agents that use them are not known`);else if(c.length>0){let n=await t.referenceType();if(n===void 0)i.flows=U(`the component type of a connection reference could not be read`),i.agents=U(`the component type of a connection reference could not be read`);else for(let t of c){let a=await _n(e,fn,t,n);if(!a.ok)i.flows=U(a.error),i.agents=U(a.error);else{for(let e of a.value.notes)Br.test(e)&&(i.agents=U(e));for(let e of a.value.items)r.push({kind:zr(e.kind),id:e.id,name:e.name,state:e.state,ownerName:e.owner,solutions:e.solutions,via:t.displayName||t.logicalName})}}}try{let t=[{text:n.name,via:``},...c.map(e=>({text:e.logicalName,via:e.displayName||e.logicalName})).filter(e=>e.text!==``)],a=0,o=0;for(let n of t){let t=await e.searchFlowsByConnection(n.text);a++,n.via!==``&&(o+=t.length);for(let e of t){let t=H(e.workflowid).toLowerCase();t!==``&&r.push({kind:`flow`,id:t,name:H(e.name)||t,state:typeof e.statecode==`number`?wt[e.statecode]??``:``,ownerName:``,solutions:[],via:n.via})}}i.flows.status===`ok`&&c.length>0&&a>1&&(i.flows={status:`ok`,detail:`flows (dependency tracking; the search of their definitions for ${c.length===1?`the reference`:`${c.length} references`} gave back ${o})`})}catch(e){i.flows.status===`ok`&&(i.flows={status:`notScanned`,reason:`the definitions of the flows could not be searched: ${Mr(e)}`})}let l=[],u=await t.inventory();if(u.ok&&i.flows.status===`ok`){let e=u.value.flows[xr(n.connectorKey)]??[],o=new Set(r.filter(e=>e.kind===`flow`).map(e=>e.id)),d=e.filter(e=>e.workflowId===``||!o.has(e.workflowId));if(d.length>0){let e=await t.flowDefinitions(d.map(e=>e.workflowId).filter(e=>e!==``)),n=new Map((s.ok?s.value:[]).map(e=>[e.logicalName.toLowerCase(),e])),o=new Set(c.map(e=>e.logicalName.toLowerCase())),u=0,f=0,p=[],m=[];for(let t of d){let i=t.workflowId===``?null:e.get(t.workflowId)??null;if(i===null){m.push(t.name);continue}if(i.connections.includes(a)||i.references.some(e=>o.has(e))){u++,r.push({kind:`flow`,id:t.workflowId,name:i.name||t.name,state:i.state,ownerName:``,solutions:[],via:`the inventory`});continue}let s=i.references.map(e=>n.get(e));s.length>0&&s.every(e=>e!==void 0&&e.connectionId!==``&&e.connectionId!==a)?(f++,p.push({name:i.name||t.name,references:s.map(e=>({name:e.displayName||e.logicalName,connection:e.connectionId}))})):m.push(t.name)}l=p;let h=m.slice(0,8).join(`, `)+(m.length>8?` and ${m.length-8} more`:``);i.flows=m.length>0?U(`the inventory names ${d.length} ${d.length===1?`flow`:`flows`} that use this connector and ${m.length} could not be tied to a connection (${h}); check them in the Maker portal`):{status:`ok`,detail:`flows (dependency tracking, definitions, and the inventory: ${d.length} ${d.length===1?`flow`:`flows`} of this connector read, ${u} use it, ${f} use another connection)`}}}return{...Bn(r,i),elsewhere:l}}async function Hr(e,t,n,r){r.onStep(`apps`),await t.apps(),r.onStep(`references`),await t.references(),r.onStep(`connections`);let i=0,a=0;return await Promise.all(Array.from({length:Math.min(4,Math.max(n.length,1))},async()=>{for(;!r.cancelled()&&i<n.length;){let o=n[i++];try{r.onResult(o.name,await Vr(e,t,o))}catch(e){r.onResult(o.name,{error:Mr(e)})}a++;try{r.onProgress(a,n.length)}catch{}}})),{done:a,cancelled:r.cancelled()}}var Ur=`Deleting connections is switched off.`;async function Wr(e,t,n,r,i,a,o){let s=[],c=(e,t,n)=>{try{o?.(e,t,n)}catch{}},l=e=>{s.push(e);try{a?.(e)}catch{}},u=new Set(z(n).map(e=>e.name));if(!Dn.connectionDelete){for(let e of n.rows)l({id:e.name,label:e.label,status:`skipped`,message:Ur});return s}let d=``;for(let a of n.rows){let n=(e,t)=>l({id:a.name,label:a.label,status:e,message:t});if(d!==``){n(`skipped`,d);continue}if(!u.has(a.name)){n(`skipped`,a.blocked??`Blocked.`);continue}let o=r.find(e=>e.name===a.name);if(!o)n(`skipped`,`It is not in the list any more.`);else try{c(a.name,a.label,`check`);let r=await i(o),s=dr(o,{[o.name]:{status:`ready`,report:r}});if(s!==void 0){n(`skipped`,`Checked again just before: ${s}`);continue}c(a.name,a.label,`exists`);let l=await Nr(e);if(!l.ok){n(`failed`,l.error);continue}if(!l.value.rows.some(e=>e.name===o.name)){n(`skipped`,`The connection is already gone; nothing was deleted.`);continue}c(a.name,a.label,`delete`),await e.deleteConnection(t,o.connectorKey,o.name),c(a.name,a.label,`verify`);let u=await Nr(e);u.ok?u.value.rows.some(e=>e.name===o.name)?n(`failed`,`The environment accepted the request but the connection is still listed.`):n(`done`,`Deleted and read back.`):n(`failed`,`Deleted, but the list could not be read to confirm it: ${u.error}`)}catch(e){let t=Mr(e);/not found|404|not supported|no route|cannot be reached|does not match any known API routes/i.test(t)?(n(`failed`,`The route for deleting a connection was refused: ${t}. The run stopped; nothing else was attempted.`),d=`Not attempted: the route for deleting a connection was refused.`):n(`failed`,t)}}return s}function Gr(e,t,n,r,i){let a=null,o=null,s=null,c=Promise.resolve(),l=!1,u=()=>t.get().connections;async function d(n){let r=Rr(e,n);t.dispatch({type:`cmUsageLoading`});let i=await(a!==null&&a.environmentId===n?a:r).inventory();i.ok?(t.dispatch({type:`cmUsageLoaded`,map:i.value.usage}),R(`Read how many flows, apps and agents use each connector: ${Object.keys(i.value.usage).length} connectors.`,`info`)):(t.dispatch({type:`cmUsageFailed`,error:i.error}),R(`The inventory of the connectors could not be read (the dependencies are not affected): ${i.error}`,`warning`))}async function f(){return o||(o=(async()=>{s&&(t.dispatch({type:`cmCheckAllCancel`}),await s),t.dispatch({type:`cmLoading`});let n=await Nr(e,e=>t.dispatch({type:`cmPage`,count:e}));n.ok?(a=Rr(e,n.value.environmentId),t.dispatch({type:`cmLoaded`,items:n.value.rows,environmentId:n.value.environmentId}),R(`Read ${n.value.rows.length} connections.`,`info`),d(n.value.environmentId)):(t.dispatch({type:`cmFailed`,error:n.error}),R(n.error,`warning`))})().finally(()=>{o=null}),c=o,o)}async function p(n){let r=a,i=u().list.items.find(e=>e.name===n);if(r&&i){t.dispatch({type:`cmDepsLoading`,names:[n]});try{let o=await Vr(e,r,i);if(a!==r)return;t.dispatch({type:`cmDepsLoaded`,name:n,report:o});let s=[`apps`,`references`,`flows`,`agents`].filter(e=>o.sources[e].status!==`ok`);R(`Read the dependencies of a connection: ${o.dependents.length} found${s.length>0?`; not fully read: ${s.join(`, `)}`:``}.`,s.length>0?`warning`:`info`)}catch(e){if(a!==r)return;let i=e instanceof Error?e.message:String(e);t.dispatch({type:`cmDepsFailed`,name:n,error:i}),R(`The dependencies of a connection could not be read: ${i}`,`warning`)}}}async function m(){t.dispatch({type:`setArea`,area:`connections`}),await f()}return{idle:()=>c,open:m,refresh:f,async toggleOpen(e){t.dispatch({type:`cmToggleOpen`,name:e});let n=u(),r=n.deps[e];n.open.includes(e)&&(r===void 0||r.status===`failed`)&&await p(e)},async checkAgain(e){a?.invalidate(),await p(e)},async checkAll(r){let i=a,o=r===`selected`?new Set(u().selected):null,l=sr(u().list.items.filter(e=>o===null||o.has(e.name)));i&&l.length!==0&&!s&&(i.invalidate(),t.dispatch({type:`cmCheckAllStarted`,total:l.length,now:n(),...o?{only:[...o]}:{}}),s=(async()=>{let r=await Hr(e,i,l,{onStep:e=>t.dispatch({type:`cmCheckAllStep`,step:e}),onProgress:e=>t.dispatch({type:`cmCheckAllProgress`,done:e,now:n()}),onResult:(e,n)=>{a===i&&t.dispatch(`error`in n?{type:`cmDepsFailed`,name:e,error:n.error}:{type:`cmDepsLoaded`,name:e,report:n})},cancelled:()=>u().checkAll?.cancelled===!0});t.dispatch({type:`cmCheckAllFinished`});let o=Object.values(u().deps),s=o.filter(e=>e.status===`ready`&&e.report.verdict===`none-found`).length,c=o.filter(e=>e.status===`ready`&&e.report.verdict===`in-use`).length;R(`Checked ${r.done} of ${l.length} connections${r.cancelled?` (cancelled)`:``}: ${s} with no dependency found, ${c} in use.`,`info`)})().finally(()=>{s=null}),c=s,await s)},cancelCheckAll(){t.dispatch({type:`cmCheckAllCancel`})},async copyAddress(t){let n=u().environmentId;if(n===``)R(`The id of the environment is not known, so the address cannot be built.`,`warning`);else try{let r=t===void 0?void 0:u().list.items.find(e=>e.name===t);await e.copyText(r?An(n,r.connectorKey,r.name):An(n)),R(r?`Address of the connection in the Maker portal copied.`:`Address of the connections page copied.`,`success`),await e.notify(`Address copied.`,`success`).catch(()=>void 0)}catch(e){R(`The address could not be copied: ${e instanceof Error?e.message:String(e)}`,`warning`)}},openDeletion(){if(!Dn.connectionDelete){l||R(Ur,`info`),l=!0;return}let e=u();t.dispatch({type:`cmDeletionOpen`,plan:pr(e.list.items,e.deps,e.selected),code:r()})},async saveBackup(){let r=u().deletion;if(!r)return;let i=new Date(n()).toISOString().replace(/[^0-9]/g,``).slice(0,14),a=await e.saveFile(`connections-backup-${i}.json`,r.plan.backup).catch(()=>!1);a&&t.dispatch({type:`cmDeletionBackupSaved`}),R(a?`Backup of the connections saved.`:`Backup not saved.`,a?`success`:`warning`)},confirmDeletion(){t.dispatch({type:`cmDeletionApply`,now:n()});let r=u().deletion,i=a;if(!r||r.step!==`apply`||!i)return;let o=u().list.items,s=u().environmentId,l=setInterval(()=>t.dispatch({type:`cmDeletionTick`,now:n()}),1e3);c=(async()=>{try{let c=await Wr(e,s,r.plan,o,async t=>(i.invalidate(),Vr(e,i,t)),e=>t.dispatch({type:`cmDeletionRow`,outcome:e,now:n()}),(e,r,i)=>t.dispatch({type:`cmDeletionStep`,id:e,label:r,step:i,now:n()})),l=await Nr(e);l.ok&&(a=Rr(e,l.value.environmentId),t.dispatch({type:`cmLoaded`,items:l.value.rows,environmentId:l.value.environmentId,keepDeps:!0})),t.dispatch({type:`cmDeletionDone`,results:c,refreshFailed:!l.ok,now:n()});let u=c.filter(e=>e.status===`failed`).length;R(`Deleted ${c.filter(e=>e.status===`done`).length} connections, ${u} failed.`,u>0?`warning`:`success`)}finally{clearInterval(l)}})()},closeDeletion(){t.dispatch({type:`cmDeletionClose`})},async saveReport(){let t=u().deletion;if(!t||t.step!==`result`||!t.results)return;let n=ge({operation:`Delete connections`,solution:`Connections`,environment:i(),startedAt:t.startedAt,finishedAt:t.now,results:t.results}),r=await e.saveFile(_e(`Delete connections`,t.now),n).catch(()=>!1);R(r?`Report saved.`:`Report not saved.`,r?`success`:`warning`)},async openConnection(e){await m(),u().list.items.some(t=>t.name===e)?(t.dispatch({type:`cmFilter`,filter:`all`}),t.dispatch({type:`cmConnector`,key:``}),t.dispatch({type:`cmSearch`,text:e}),u().open.includes(e)||t.dispatch({type:`cmToggleOpen`,name:e}),await p(e)):R(`That connection is not in the list of connections you can see.`,`info`)},backToSolutions(){t.dispatch({type:`setArea`,area:`solutions`})}}}function Kr(){let e=new Uint8Array(6);if(globalThis.crypto?.getRandomValues)globalThis.crypto.getRandomValues(e);else for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return`DELETE-${[...e].map(e=>`ABCDEFGHJKLMNPQRSTUVWXYZ23456789`[e%32]).join(``)}`}function qr(e,t,n=()=>Date.now(),r=1e3,i=Kr,a=700){let o=``,s=``,c=Promise.resolve(),l=Gr(e,t,n,i,()=>o);async function u(){t.dispatch({type:`busy`,busy:!0});let n=await Mt(e);if(!n.ok){R(n.error,`error`),t.dispatch({type:`error`,message:n.error});return}t.dispatch({type:`solutionsLoaded`,solutions:n.value});let r=await Pt(e,n.value.filter(e=>!e.managed).map(e=>e.id));r.ok?t.dispatch({type:`flowCountsLoaded`,counts:r.value.perSolution,total:r.value.total}):R(r.error,`warning`),t.dispatch({type:`busy`,busy:!1})}async function d(){let n=t.get(),r=n.solutions.find(e=>e.id===n.solutionId);if(!r)return!1;t.dispatch({type:`busy`,busy:!0});let i=await Rt(e,r);return i.ok?(t.get().solutionId===r.id&&(t.dispatch({type:`snapshotLoaded`,snapshot:g(i.value)}),R(`Read ${i.value.flows.length} flows and ${i.value.memberReferenceIds.length} references from ${r.name}.`,`info`)),!0):(R(i.error,`error`),t.dispatch({type:`error`,message:i.error}),!1)}async function f(){let i=t.get().plan;if(!i)return;let a=setInterval(()=>t.dispatch({type:`tick`,now:n()}),r),o;try{o=await Ut(e,i,e=>t.dispatch({type:`applyRow`,outcome:e,now:n()}),e=>t.dispatch({type:`setPhase`,phase:e,now:n()}))}catch(e){o=[{id:``,label:`The run`,status:`failed`,message:`The run stopped unexpectedly: ${e instanceof Error?e.message:String(e)}`}]}t.dispatch({type:`rowsDone`,now:n()});let s=!1;try{s=await d()}catch{s=!1}finally{clearInterval(a)}t.dispatch({type:`applied`,results:o,now:n(),refreshFailed:!s});let c=o.filter(e=>e.status===`failed`).length;R(`Applied: ${o.filter(e=>e.status===`done`).length} done, ${c} failed.`,c?`warning`:`success`)}function p(){let e=t.get();e.snapshot&&t.dispatch({type:`openPlan`,plan:w(e.snapshot,e.selected,e.repointGroups,s,e.manageState)})}function m(){let e=t.get(),n=e.cleanup?.picked??[];return!e.snapshot||n.length===0?[]:(t.dispatch({type:`selectAll`,ids:n}),n)}function h(e){let n=t.get().snapshot;n&&(t.dispatch({type:`openPlan`,plan:ae(n,e,`remove`)}),t.dispatch({type:`openConfirm`}))}async function _(n){let r=t.get().snapshot;if(!r)return;t.dispatch({type:`busy`,busy:!0});let a=await Gt(e,r,n),o=new Map;for(let e of Object.values(a))for(let t of e??[])n.includes(t.id)||o.set(t.id,t);let s=o.size===0?{}:await vn(e,r,[...o.values()]);t.dispatch({type:`busy`,busy:!1}),t.get().snapshot===r&&(t.dispatch({type:`openPlan`,plan:ae(r,n,`delete`,a,s),code:i()}),t.dispatch({type:`openConfirm`}))}let b=!1;function x(n){let r=t.get().newReference;if(!r||r.saving||b)return c;b=!0,t.dispatch({type:`connectionsLoading`});let i=r.connectorId,a=r.connectionSource===`typed`?r.connectionId:``;return c=(async()=>{try{let r=await tn(e);if(t.get().newReference?.connectorId!==i)return;r.ok?t.dispatch({type:`connectionsLoaded`,items:r.value}):(t.dispatch({type:`connectionsFailed`,error:r.error}),R(`The connections could not be read: ${r.error}`,`warning`)),n&&a!==``&&t.dispatch({type:`connectionChecked`,typed:a,verdict:Fe(t.get().newReference?.live??{status:`idle`,items:[],error:``},i,j(a))})}finally{b=!1}})(),c}return{environment:()=>o,connections:l,idle:async()=>{await c,await l.idle()},async start(){o=await e.environmentName().catch(()=>``),s=await e.currentUserId().catch(()=>``),await u()},selectSolution(e){t.get().wizard?.step!==`apply`&&(t.dispatch({type:`selectSolution`,id:e}),e===``?u():d())},refresh(){t.get().solutionId===``?u():d()},previewConnection(){let e=t.get();e.snapshot&&t.dispatch({type:`openPlan`,plan:S(e.snapshot,e.selected,e.newConnectionId,s)})},previewRepoint(){p()},setManageState(e){t.dispatch({type:`setManageState`,on:e});let n=t.get();n.snapshot&&n.plan&&n.plan.kind===`repoint`&&n.wizard?.step===`preview`&&t.dispatch({type:`replacePlan`,plan:w(n.snapshot,n.selected,n.repointGroups,s,e)})},previewRemove(){h(t.get().selected)},previewDelete(){return _(t.get().selected)},checkDependencies(n){let r=t.get(),i=r.snapshot;if(!i)return c;let a=[...new Set(n)].filter(e=>r.dependencies[e]?.status!==`loading`&&i.allReferences.some(t=>t.id===e));if(a.length===0)return c;t.dispatch({type:`dependenciesLoading`,ids:a});let o=0,s=async()=>{for(;o<a.length;){let n=a[o++],r=i.allReferences.find(e=>e.id===n),s=await gn(e,i,r);if(t.get().snapshot!==i)return;t.dispatch(s.ok?{type:`dependenciesLoaded`,id:n,report:s.value}:{type:`dependenciesFailed`,id:n,error:s.error}),s.ok||R(`The dependencies of ${r.logicalName} could not be read: ${s.error}`,`warning`)}};return c=Promise.all([s(),s(),s()]).then(()=>void 0),c},cleanupRemove(){let e=m();e.length!==0&&h(e)},cleanupDelete(){let e=m();return e.length===0?Promise.resolve():_(e)},startMerge(e){let n=t.get(),r=n.snapshot,i=r?We(r).find(t=>t.key===e):void 0;if(!r||!i)return;let a=Je(r,i,Ge(i,n.cleanup));if(!a)return;let o=a.duplicates.map(e=>e.id);a.group===null?t.dispatch({type:`openCleanup`,tab:`unused`,picked:o}):(t.dispatch({type:`startMerge`,flowIds:a.flowIds,group:a.group,followUp:{ids:o,keeper:a.keeper.displayName||a.keeper.logicalName}}),t.get().cleanupFollowUp!==null&&p())},openNewReference(e){return t.dispatch({type:`openNewReference`,connectorId:e,seed:$e()}),t.get().newReference===null?c:x(!1)},refreshConnections(){return x(!1)},checkConnection(){return x(!0)},createReference(){let n=t.get(),r=n.newReference,i=n.snapshot;return!r||!i||!r.reviewing||r.saving||(t.dispatch({type:`newReferenceSaving`}),t.get().newReference?.saving!==!0)||(c=(async()=>{let n=await nn(e,i,r,e=>t.dispatch({type:`newReferenceStep`,step:e}));if(t.get().solutionId===i.solution.id){if(n.ok){if(t.dispatch({type:`newReferenceStep`,step:`done`}),a>0&&await new Promise(e=>setTimeout(e,a)),t.get().solutionId!==i.solution.id)return;t.dispatch({type:`referenceCreated`,reference:n.value.reference,componentType:n.value.componentType}),R(`Created ${n.value.reference.logicalName} in ${i.solution.name}.`,`success`),await e.notify(`Created ${n.value.reference.displayName||n.value.reference.logicalName}.`,`success`).catch(()=>void 0)}else t.dispatch({type:`newReferenceFailed`,error:n.error}),R(n.error,`error`)}})()),c},setTypedCode(e){t.dispatch({type:`setTypedCode`,value:e})},async saveBackup(){let n=t.get().plan;if(!n)return;let r=new Date().toISOString(),i=await e.saveFile(y(n,r),v(n,o,r)).catch(()=>!1);i&&t.dispatch({type:`backupSaved`}),R(i?`Backup of the old values saved.`:`Backup not saved.`,i?`success`:`warning`)},async saveReport(){let n=t.get(),r=n.wizard;if(!r||r.step!==`result`||!n.results)return;let i=r.finishedAt??r.now,a=Se(r.operation),s=ge({operation:a,solution:n.snapshot?.solution.name??``,environment:o,startedAt:r.startedAt,finishedAt:i,results:n.results}),c=await e.saveFile(_e(a,i),s).catch(()=>!1);R(c?`Report saved.`:`Report not saved.`,c?`success`:`warning`)},confirm(){let e=t.get();e.plan&&(t.dispatch({type:`applyStarted`,now:n(),total:e.plan.rows.length}),t.get().wizard?.step===`apply`&&(c=f()))}}}function W(e,t=``,n){let r=document.createElement(e);return t&&(r.className=t),n!==void 0&&(r.textContent=n),r}function G(e,t=``){let n=W(`span`,`icon icon-${e}${t?` ${t}`:``}`);return n.setAttribute(`aria-hidden`,`true`),n}function K(e,t=`secondary`,n,r=!1){let i=W(`button`,`btn btn--${t}${r?` btn--sm`:``}`,e);return i.type=`button`,n&&i.addEventListener(`click`,n),i}function q(e,t=`neutral`,n){let r=W(`span`,t===`neutral`?`chip`:`chip chip--${t}`);return n&&r.append(G(n)),r.append(e),r}function Jr(e,t,n){let r=W(`button`,e?`check is-on`:`check`);return r.type=`button`,r.setAttribute(`role`,`checkbox`),r.setAttribute(`aria-checked`,String(e)),r.setAttribute(`aria-label`,t),r.addEventListener(`click`,n),r}function Yr(e,t){let n=W(`section`,`panel`),r=W(`div`,`panel-head`);r.append(W(`h2`,`panel-heading`,e)),t&&r.append(W(`span`,`panel-sub`,t));let i=W(`div`,`panel-body`);return n.append(r,i),{root:n,body:i}}function Xr(e){let t=W(`nav`,`breadcrumb`);return t.setAttribute(`aria-label`,`Breadcrumb`),e.forEach((n,r)=>{let i=r===e.length-1;if(r>0&&t.append(W(`span`,`crumb-sep`,`/`)),i||!n.onClick){let e=W(`span`,`crumb crumb--current`,n.label);e.title=n.label,t.append(e)}else{let e=W(`button`,`crumb crumb--link`,n.label);e.type=`button`,e.title=n.label,e.addEventListener(`click`,n.onClick),t.append(e)}}),t}function Zr(e,t){typeof t==`string`?(e.textContent=t,e.title=t):(e.append(t),t.textContent&&(e.title=t.textContent))}function Qr(e,t,n,r={}){let i=W(`table`,`data-table`),a=W(`thead`),o=W(`tr`);e.forEach((e,t)=>{let n=W(`th`),i=r.sort;if(r.numeric?.includes(t)&&n.classList.add(`col-num`),i&&i.columns.includes(t)){let r=i.active===t;n.classList.add(`sortable`),r&&n.classList.add(`sorted`),n.setAttribute(`aria-sort`,r?i.desc?`descending`:`ascending`:`none`),n.tabIndex=0;let a=W(`span`,`th-label`),o=W(`span`,r&&!i.desc?`sort-arrow sort-arrow--asc`:`sort-arrow`);r&&o.append(G(`chevron-down`)),a.append(e,o),n.append(a),n.addEventListener(`click`,()=>i.onSort(t)),n.addEventListener(`keydown`,e=>{e.key===`Enter`&&i.onSort(t)})}else n.textContent=e;o.append(n)}),a.append(o);let s=W(`tbody`);return t.forEach(e=>{let t=W(`tr`);n(e).forEach((e,n)=>{let i=W(`td`);r.numeric?.includes(n)&&i.classList.add(`col-num`),Zr(i,e),t.append(i)});let i=r.onOpen;i&&(t.classList.add(`row-link`),t.tabIndex=0,t.setAttribute(`role`,`link`),t.addEventListener(`click`,()=>i(e)),t.addEventListener(`keydown`,t=>{t.key===`Enter`&&i(e)})),s.append(t)}),i.append(a,s),i}function $r(e){let t=W(`div`,`table-wrap`);return t.append(e),t}function ei(e,t,n){let r=W(`div`,`search-box`),i=W(`input`);i.type=`text`,i.autocomplete=`off`,i.placeholder=t,i.value=e,i.setAttribute(`aria-label`,t),i.addEventListener(`input`,()=>n(i.value));let a=W(`button`,`search-clear`);return a.type=`button`,a.title=`Clear search`,a.hidden=e===``,a.append(G(`close`,`icon--xs`)),a.addEventListener(`click`,()=>n(``)),r.append(G(`search`,`icon--sm search-icon`),i,a),r}function ti(e,t,n){let r=W(`div`,`segmented`);r.setAttribute(`role`,`group`);for(let i of e){let e=W(`button`,i.key===t?`segment is-active`:`segment`);e.type=`button`,e.setAttribute(`aria-pressed`,String(i.key===t)),i.icon&&e.append(G(i.icon,`icon--sm`)),e.append(i.label),i.count!==void 0&&e.append(` `,W(`span`,`segment-count`,String(i.count))),i.disabled&&(e.disabled=!0),i.title&&(e.title=i.title),e.addEventListener(`click`,()=>n(i.key)),r.append(e)}return r}function ni(e,t){let n=W(`div`,`empty-state`);return t&&n.append(G(t)),n.append(e),n}function ri(e,t,n){let r=W(`button`,e?`toggle is-on`:`toggle`);return r.type=`button`,r.setAttribute(`role`,`switch`),r.setAttribute(`aria-checked`,String(e)),r.setAttribute(`aria-label`,t),r.addEventListener(`click`,n),r}function ii(e){let t=e.detail!==void 0&&e.onExpand!==void 0,n=t?[``,``]:[``],r=Qr([...n,...e.columns],e.rows,t=>[...n,...e.cells(t)]),i=e.rows.filter(t=>!e.isBlocked?.(t)).map(e.id),a=i.length>0&&i.every(t=>e.selected.includes(t)),o=r.querySelectorAll(`th`);o[0].className=`col-check`,o[0].append(Jr(a,`Select all shown`,()=>e.onToggleAll(i,a))),t&&(o[1].className=`col-expand`);let s=n.length+e.columns.length;return Array.from(r.querySelectorAll(`:scope > tbody > tr`)).forEach((n,r)=>{let i=e.rows[r],a=n.children[0];a.className=`col-check`,a.removeAttribute(`title`);let o=e.id(i);if(e.isBlocked?.(i))n.classList.add(`is-blocked`);else{let t=e.selected.includes(o);t&&n.classList.add(`is-selected`),a.append(Jr(t,`Select ${e.label(i)}`,()=>e.onToggle(o)))}if(!t)return;let c=e.expanded?.includes(o)??!1,l=n.children[1];l.className=`col-expand`,l.removeAttribute(`title`);let u=W(`button`,`icon-btn expand-btn`);if(u.type=`button`,u.setAttribute(`aria-expanded`,String(c)),u.setAttribute(`aria-label`,`${c?`Hide`:`Show`} details of ${e.label(i)}`),u.append(G(`chevron-down`)),l.append(u),n.classList.add(`is-expandable`),n.addEventListener(`click`,t=>{t.target.closest(`.check`)||e.onExpand(o)}),c){n.classList.add(`is-open`);let t=W(`tr`,`detail-row`),r=W(`td`);r.colSpan=s,r.append(e.detail(i)),t.append(r),n.after(t)}}),r}function ai(e,t){let n=W(`span`,t?`status-slot`:`status-slot is-idle`);return n.setAttribute(`role`,`status`),n.append(W(`span`,`spinner`),e),n}function oi(e){return W(`span`,e===0?`count-pill count-pill--zero`:`count-pill`,String(e))}function si(e,t,n,r=!1){let i=W(`div`,`stat stat--icon`),a=W(`span`,r?`stat-badge stat-badge--alt`:`stat-badge`);a.append(G(n));let o=W(`div`,`stat-text`);return o.append(W(`dt`,``,e),W(`dd`,``,t)),i.append(a,o),i}function ci(e,t,n){let r=W(`section`,`hero`),i=W(`div`,`hero-text`);i.append(W(`h2`,`hero-title`,e),W(`p`,`hero-subtitle`,t));let a=W(`dl`,`hero-stats`);return a.append(...n),r.append(i,a),r}function li(e,t){let n=W(`div`,`connection-badge connection-badge--${t}`);return n.append(W(`span`,`connection-dot`),W(`span`,`connection-name`,e)),n}function ui(e,t,n){e.className=`connection-badge connection-badge--${n}`;let r=e.querySelector(`.connection-name`);r&&(r.textContent=t)}function di(e){let t=W(`dl`,`kv`);for(let n of e){let e=W(`div`,`kv-item${n.mono?` kv-item--mono`:``}${n.wide?` kv-item--wide`:``}`),r=W(`dd`);r.append(n.value===``?`-`:n.value);let i=W(`dt`);n.icon&&i.append(G(n.icon)),i.append(n.label),e.append(i,r),t.append(e)}return t}function J(e,t,n,r=!1,i){let a=W(`section`,`detail-block`),o=W(`div`,`detail-head`),s=W(`h4`,`detail-title`);i&&s.append(G(i)),s.append(e),o.append(s),t!==void 0&&o.append(q(String(t)));let c=r?W(`div`,`detail-body`):a;return r?(c.append(n),a.append(o,c)):a.append(o,n),a}function fi(e){let t=W(`div`,`fig fig--${e.tone}`),n=W(`span`,`fig-badge`);n.append(G(e.icon));let r=W(`div`);return r.append(W(`div`,`fig-value`,e.value),W(`div`,`fig-label`,e.label)),t.append(n,r),t}function pi(e){let t=W(`div`,`fig-row`);return t.append(...e.map(fi)),t}function mi(e){let t=W(`div`,`change-list`);for(let n of e){let e=W(`div`,n.blocked?`change-row change-row--blocked`:`change-row`),r=W(`div`,`change-name`);r.append(W(`strong`,``,n.name)),n.sub&&r.append(W(`span`,``,n.sub));let i=W(`div`,`change-old`);i.append(n.from);let a=W(`div`,`change-new`);if(a.append(n.to),e.append(r,i,G(`arrow-big-right`,`change-arrow`),a),n.blocked){let t=W(`div`,`change-reason`);t.append(q(n.blocked,`warning`,`alert-triangle`)),e.append(t)}t.append(e)}return t}function Y(e,t,n,r,i){let a=W(`div`,`callout callout--${e}`),o=r??{primary:`info`,info:`info`,success:`check-circle`,warning:`alert-triangle`,error:`x-circle`}[e];a.append(G(o,`callout-icon`));let s=W(`div`,`callout-body`);s.append(W(`strong`,`callout-title`,t));for(let e of n)s.append(W(`p`,``,e));return a.append(s),i&&(i.classList.add(`callout-action`),a.append(i)),a}var hi=0;function gi(e){let t=`modal-${++hi}`,n=W(`div`,`modal-overlay`),r=W(`div`,`modal modal--${e.tone}`);r.setAttribute(`role`,`alertdialog`),r.setAttribute(`aria-modal`,`true`),r.setAttribute(`aria-labelledby`,`${t}-title`);let i=W(`div`,`modal-head`),a=W(`span`,`modal-badge`);a.append(G(e.icon));let o=W(`div`,`modal-titles`),s=W(`h2`,`modal-title`,e.title);if(s.id=`${t}-title`,o.append(s),e.subtitle!==void 0){let t=W(`div`,`modal-subtitle`);t.append(e.subtitle),o.append(t)}let c=W(`button`,`icon-btn modal-close`);c.type=`button`,c.title=`Close`,c.setAttribute(`aria-label`,`Close`),c.append(G(`close`)),c.addEventListener(`click`,e.onCancel),i.append(a,o,c);let l=W(`div`,`modal-body`);l.append(...e.body);let u=W(`div`,`modal-foot`);if(e.footNote){let t=W(`div`,`modal-foot-note`);t.append(e.footNote),u.append(t)}let d=K(e.cancelLabel??`Cancel`,`secondary`,e.onCancel);d.dataset.autofocus=`true`;let f=K(e.confirm.label,e.confirm.danger?`danger`:`primary`,e.confirm.onConfirm);e.confirm.icon&&f.prepend(G(e.confirm.icon)),f.disabled=e.confirm.disabled===!0;let p=W(`div`,`modal-actions`);return p.append(d,f),u.append(p),r.append(i,l,u),n.append(r),r.addEventListener(`keydown`,t=>{if(t.key===`Escape`){t.stopPropagation(),e.onCancel();return}if(t.key!==`Tab`)return;let n=[...r.querySelectorAll(`button, input, select, [tabindex]:not([tabindex="-1"])`)].filter(e=>!e.disabled&&!e.hidden);if(n.length===0)return;let i=n[0],a=n[n.length-1],o=document.activeElement;t.shiftKey&&(o===i||!r.contains(o))?(t.preventDefault(),a.focus()):t.shiftKey||o!==a&&r.contains(o)||(t.preventDefault(),i.focus())}),n}function _i(e,t){let n=W(`ol`,`stepper`);return n.setAttribute(`aria-label`,`Progress`),e.forEach((r,i)=>{let a=W(`li`,`stepper-item ${i<t?`is-done`:i===t?`is-active`:`is-upcoming`}`);i===t&&a.setAttribute(`aria-current`,`step`),a.dataset.step=r.key;let o=W(`span`,`stepper-dot`);if(i<t?o.append(G(`check`)):o.append(String(i+1)),a.append(o,W(`span`,`stepper-label`,r.label)),n.append(a),i<e.length-1){let e=W(`li`,i<t?`stepper-line is-done`:`stepper-line`);e.setAttribute(`aria-hidden`,`true`),n.append(e)}}),n}function vi(e,t){let n=W(`div`,`pipeline-box`),r=W(`ol`,`pipeline`);r.setAttribute(`aria-label`,`Phases`),e.forEach((e,t)=>{let n=W(`li`,`pipe-step is-${e.state===`pending`?`pending`:e.state}`);e.state===`active`&&n.setAttribute(`aria-current`,`step`);let i=W(`span`,`pipe-dot`);e.state===`done`?i.append(G(`check`)):e.state===`error`?i.append(G(`close`)):i.append(String(t+1)),n.append(i,W(`span`,`pipe-label`,e.label)),r.append(n)});let i=W(`div`,`pipe-status`);return i.setAttribute(`role`,`status`),i.append(t??`\xA0`),n.append(r,i),n}function yi(e,t){let n=document.createDocumentFragment();if(!t||t[0]>=t[1])return n.append(e),n;let r=W(`mark`,`diff-hl`,e.slice(t[0],t[1]));return n.append(e.slice(0,t[0]),r,e.slice(t[1])),n}function bi(e,t,n){let r=W(`td`,`diff-code${e===`old`?` diff-code--old`:e===`new`?` diff-code--new`:e===`empty`?` diff-code--empty`:``}`);return(e===`old`||e===`new`)&&r.append(W(`span`,`diff-mark`,e===`old`?`-`:`+`)),e!==`empty`&&r.append(yi(t,n)),r}var X=e=>W(`td`,`diff-no`,e===null?``:String(e));function xi(e,t){let n=W(`table`,`diff-table`),r=t===`split`?[`c-no`,`c-code`,`c-no`,`c-code`]:[`c-no`,`c-no`,`c-code`],i=W(`colgroup`);for(let e of r)i.append(W(`col`,e));n.append(i);let a=W(`tbody`);for(let n of e){let e=W(`tr`,`diff-row diff-row--${n.kind}`);if(n.kind===`gap`){e.className=`diff-row diff-row--gap`;let t=W(`td`,``,`${n.skipped} unchanged line${n.skipped===1?``:`s`}`);t.colSpan=r.length,e.append(t)}else if(t===`split`){let t=n.kind===`added`?bi(`empty`,``,null):bi(n.kind===`context`?`ctx`:`old`,n.oldText,n.oldSpan),r=n.kind===`removed`?bi(`empty`,``,null):bi(n.kind===`context`?`ctx`:`new`,n.newText,n.newSpan);e.append(X(n.oldNo),t,X(n.newNo),r)}else if(n.kind===`changed`){e.append(X(n.oldNo),X(null),bi(`old`,n.oldText,n.oldSpan)),a.append(e);let t=W(`tr`,`diff-row diff-row--changed`);t.append(X(null),X(n.newNo),bi(`new`,n.newText,n.newSpan)),a.append(t);continue}else{let t=n.kind===`context`?`ctx`:n.kind===`removed`?`old`:`new`;e.append(X(n.oldNo),X(n.newNo),bi(t,n.kind===`added`?n.newText:n.oldText,n.kind===`added`?n.newSpan:n.oldSpan))}a.append(e)}n.append(a);let o=W(`div`,`diff-scroll`);o.append(n);let s=W(`div`,`diff diff--${t}`);return s.append(o),s}function Si(e,t,n,r,i){let a=W(`div`,r.className),o=W(`div`,`diff-head`),s=W(`span`,`diff-stat`);s.append(W(`span`,`diff-add`,`+${t}`),W(`span`,`diff-del`,`-${n}`)),o.append(W(`span`,`diff-file`,e),s),a.append(o),i&&a.append(W(`p`,`diff-note`,i));for(let e of[...r.children])a.append(e);return a}function Ci(e){let t=W(`section`,e.blocked?`item-card item-card--blocked`:`item-card`),n=W(`div`,`item-head`),r=W(`button`,`icon-btn expand-btn`);r.type=`button`,r.setAttribute(`aria-expanded`,String(e.open)),r.setAttribute(`aria-label`,`${e.open?`Collapse`:`Expand`} ${e.title}`),r.append(G(`chevron-down`)),r.addEventListener(`click`,e.onToggle),n.append(r,W(`span`,`item-title`,e.title)),e.sub&&n.append(W(`span`,`item-sub`,e.sub)),n.append(W(`span`,`item-count`,e.countText)),e.controls&&n.append(e.controls);let i=W(`div`,`item-body`);return i.hidden=!e.open,i.append(e.body),t.append(n,i),t}var wi=`crg.logOpen`;function Ti(){try{return window.localStorage.getItem(wi)===`1`}catch{return!1}}function Ei(e){try{window.localStorage.setItem(wi,e?`1`:`0`)}catch{}}var Di={info:`info`,success:`check-circle`,warning:`alert-triangle`,error:`x-circle`},Oi=e=>new Date(e.timestamp).toTimeString().slice(0,8);function ki(e,t){let n=Ti(),r=!0,i=()=>{let a=Tn(),o=a.filter(e=>e.level===`warning`||e.level===`error`).length,s=a[a.length-1],c=e.querySelector(`.log-dock-list`);c&&(r=c.scrollTop+c.clientHeight>=c.scrollHeight-8);let l=c?.scrollTop??0,u=e.contains(document.activeElement)?document.activeElement.dataset.dock:void 0,d=W(`section`,n?`log-dock is-open`:`log-dock`);d.setAttribute(`aria-label`,`Log`);let f=W(`div`,`log-dock-bar`),p=W(`button`,`log-dock-toggle`);if(p.type=`button`,p.dataset.dock=`toggle`,p.setAttribute(`aria-expanded`,String(n)),p.setAttribute(`aria-controls`,`log-dock-list`),p.title=n?`Close the log`:`Open the log`,p.append(G(`list`),W(`span`,`log-dock-title`,`Log`),q(String(a.length),`info`)),o>0&&p.append(q(`${o} to check`,`warning`,`alert-triangle`)),!n&&s){let e=W(`span`,`log-dock-last log-entry--${s.level}`);e.append(W(`span`,`log-dock-time`,Oi(s)),s.message),p.append(e)}p.append(G(`chevron-down`,`log-dock-caret`)),p.addEventListener(`click`,()=>{n=!n,r=!0,Ei(n),i()}),f.append(p);let m=W(`div`,`log-dock-actions`),h=K(`Clear`,`secondary`,()=>wn(),!0);h.prepend(G(`trash`,`icon--sm`)),h.dataset.dock=`clear`,h.disabled=a.length===0;let g=K(`Save`,`secondary`,()=>void t(`log.json`,En()).catch(()=>!1),!0);if(g.prepend(G(`save`,`icon--sm`)),g.dataset.dock=`save`,g.disabled=a.length===0,m.append(h,g),f.append(m),d.append(f),n){let e=W(`div`,`log-dock-list`);e.id=`log-dock-list`,e.setAttribute(`role`,`log`),e.setAttribute(`aria-live`,`polite`),a.length===0&&e.append(W(`p`,`muted log-dock-empty`,`Nothing logged yet.`));for(let t of a){let n=W(`div`,`log-entry log-entry--${t.level}`);n.append(G(Di[t.level],`icon--sm`),W(`span`,`log-timestamp`,Oi(t)),W(`span`,`log-message`,t.message)),e.append(n)}d.append(e),queueMicrotask(()=>{e.scrollTop=r?e.scrollHeight:l})}e.replaceChildren(d),u&&e.querySelector(`[data-dock="${u}"]:not(:disabled)`)?.focus()},a=Cn(i);return i(),a}var Ai=(e,t)=>(e.displayName||e.logicalName).localeCompare(t.displayName||t.logicalName,void 0,{sensitivity:`base`});function ji(e,t){let n=e.flows.filter(e=>t.includes(e.flow.id)),r=new Map;for(let e of n)for(let t of e.uses)t.reference&&r.set(t.logicalName,(r.get(t.logicalName)??0)+1);return[...r.entries()].map(([t,r])=>{let i=e.allReferences.find(e=>e.logicalName===t);return{logicalName:t,displayName:i.displayName,connectorId:i.connectorId,used:r,selected:n.length}}).sort((e,t)=>t.used-e.used||Ai(e,t))}function Mi(e,t){let n=new Map;for(let r of ji(e,t))n.set(r.connectorId,[...n.get(r.connectorId)??[],r]);return[...n].map(([e,t])=>({connectorId:e,sources:t}))}function Ni(e){return!e||e.from.length===0?`empty`:e.target===``?`incomplete`:`done`}var Pi=e=>[...new Set(typeof e==`string`?[e]:e)].filter(e=>e!==``);function Fi(e,t){let n=Pi(t);if(n.length===0)return;let r=new Set;for(let t of n){let n=e.allReferences.find(e=>e.logicalName===t);if(!n)return;r.add(n.connectorId)}return r.size===1?[...r][0]:void 0}function Ii(e,t){let n=Pi(t),r=Fi(e,n);return r===void 0?[]:e.references.map(e=>e.reference).filter(e=>e.connectorId===r&&(n.length>1||e.logicalName!==n[0])).sort(Ai)}function Li(e,t,n){return Ii(e,t).some(e=>e.logicalName===n)}var Ri={key:`flows`,desc:!0};function zi(e){return{key:e,desc:e!==`name`}}function Bi(e,t){return e.key===t?{key:t,desc:!e.desc}:zi(t)}function Vi(e,t,n){let r=(e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`}),i=e=>{if(n.key===`flows`)return t?.[e.id]??-1;let r=Date.parse(e.createdOn);return Number.isNaN(r)?0:r},a=n.desc?-1:1;return[...e].sort((e,t)=>{if(n.key===`name`)return a*r(e,t);let o=i(e)-i(t);return o===0?r(e,t):a*o})}var Hi=e=>e.type.startsWith(`cm`);function Ui(){return{list:{status:`idle`,items:[],read:0,error:``},environmentId:``,filter:`all`,connector:``,search:``,sort:Gn,shown:100,open:[],selected:[],deps:{},checkAll:null,usage:{status:`idle`,map:null,error:``},deletion:null}}var Wi=e=>tr(e.list.items,e.deps,e.filter,e.connector,e.search).map(e=>e.name),Gi=(e,t)=>{let n=e.list.items.find(e=>e.name===t);return n!==void 0&&Qn(n,e.deps)};function Ki(e){if(e.selected.length===0)return e;let t=new Set(Wi(e)),n=e.selected.filter(n=>t.has(n)&&Gi(e,n));return n.length===e.selected.length?e:{...e,selected:n}}function qi(e,t){switch(t.type){case`cmLoading`:return{...e,list:{...e.list,status:`loading`,read:0,error:``},deps:{},selected:[],checkAll:null};case`cmPage`:return e.list.status===`loading`?{...e,list:{...e.list,read:t.count}}:e;case`cmLoaded`:{let n=new Set(t.items.map(e=>e.name));return{...e,list:{status:`ready`,items:t.items,read:t.items.length,error:``},environmentId:t.environmentId,open:e.open.filter(e=>n.has(e)),selected:[],deps:t.keepDeps?Object.fromEntries(Object.entries(e.deps).filter(([e,t])=>n.has(e)&&t.status!==`loading`)):{},checkAll:null}}case`cmFailed`:return{...e,list:{...e.list,status:`failed`,error:t.error},checkAll:null};case`cmUsageLoading`:return{...e,usage:{status:`loading`,map:e.usage.map,error:``}};case`cmUsageLoaded`:return{...e,usage:{status:`ready`,map:t.map,error:``}};case`cmUsageFailed`:return{...e,usage:{status:`failed`,map:null,error:t.error}};case`cmFilter`:return Ki({...e,filter:t.filter,shown:100});case`cmConnector`:return Ki({...e,connector:t.key,shown:100});case`cmSearch`:return Ki({...e,search:t.text,shown:100});case`cmSort`:return{...e,sort:e.sort.key===t.key?{key:t.key,dir:e.sort.dir===`asc`?`desc`:`asc`}:{key:t.key,dir:`asc`}};case`cmShowMore`:return{...e,shown:e.shown+100};case`cmToggleOpen`:return{...e,open:e.open.includes(t.name)?e.open.filter(e=>e!==t.name):[...e.open,t.name]};case`cmDepsLoading`:{let n={...e.deps};for(let e of t.names)n[e]={status:`loading`};return{...e,deps:n}}case`cmDepsLoaded`:return e.list.items.some(e=>e.name===t.name)?Ki({...e,deps:{...e.deps,[t.name]:{status:`ready`,report:t.report}}}):e;case`cmDepsFailed`:return e.list.items.some(e=>e.name===t.name)?Ki({...e,deps:{...e.deps,[t.name]:{status:`failed`,error:t.error}}}):e;case`cmCheckAllStarted`:return{...e,checkAll:{total:t.total,done:0,startedAt:t.now,now:t.now,step:`apps`,cancelled:!1,only:t.only??null}};case`cmCheckAllStep`:return e.checkAll?{...e,checkAll:{...e.checkAll,step:t.step}}:e;case`cmCheckAllProgress`:return e.checkAll?{...e,checkAll:{...e.checkAll,done:t.done,now:t.now}}:e;case`cmCheckAllCancel`:return e.checkAll?{...e,checkAll:{...e.checkAll,cancelled:!0}}:e;case`cmCheckAllFinished`:return{...e,checkAll:null};case`cmToggle`:return Gi(e,t.name)?{...e,selected:e.selected.includes(t.name)?e.selected.filter(e=>e!==t.name):[...e.selected,t.name]}:e;case`cmSelectEligible`:{let t=new Set(Wi(e));return{...e,selected:e.list.items.filter(n=>t.has(n.name)&&Qn(n,e.deps)).map(e=>e.name)}}case`cmClearSelection`:return e.selected.length===0?e:{...e,selected:[]};case`cmDeletionOpen`:return!Dn.connectionDelete||e.deletion!==null||z(t.plan).length===0?e:{...e,deletion:{plan:t.plan,step:`preview`,code:t.code,typedCode:``,ack:!1,portalChecked:[],backupSaved:!1,startedAt:0,now:0,total:0,live:[],current:null,log:[],results:null,refreshFailed:!1}};case`cmDeletionTyped`:return e.deletion&&e.deletion.step===`preview`?{...e,deletion:{...e.deletion,typedCode:t.text}}:e;case`cmDeletionAck`:return e.deletion&&e.deletion.step===`preview`?{...e,deletion:{...e.deletion,ack:t.on}}:e;case`cmDeletionPortal`:{let n=e.deletion;if(!n||n.step!==`preview`||!z(n.plan).some(e=>e.name===t.name))return e;let r=n.portalChecked.includes(t.name);return t.on===r?e:{...e,deletion:{...n,portalChecked:t.on?[...n.portalChecked,t.name]:n.portalChecked.filter(e=>e!==t.name)}}}case`cmDeletionPortalAll`:{let n=e.deletion;return!n||n.step!==`preview`?e:{...e,deletion:{...n,portalChecked:t.on?z(n.plan).map(e=>e.name):[]}}}case`cmDeletionBackupSaved`:return e.deletion?{...e,deletion:{...e.deletion,backupSaved:!0}}:e;case`cmDeletionApply`:{let n=e.deletion;return!n||n.step!==`preview`||n.typedCode.trim()!==n.code||!n.ack||!z(n.plan).every(e=>n.portalChecked.includes(e.name))?e:{...e,deletion:{...n,step:`apply`,startedAt:t.now,now:t.now,total:z(n.plan).length,live:[],current:null,log:[{at:0,text:`Started: ${z(n.plan).length} connection${z(n.plan).length===1?``:`s`} to delete.`,tone:`info`}]}}}case`cmDeletionStep`:{let n=e.deletion;if(!n||n.step!==`apply`)return e;let r=mr.find(e=>e.key===t.step).doing;return{...e,deletion:{...n,now:t.now,current:{id:t.id,label:t.label,step:t.step},log:[...n.log,{at:t.now-n.startedAt,text:`${t.label}: ${r}`,tone:`info`}]}}}case`cmDeletionTick`:return e.deletion&&e.deletion.step===`apply`?{...e,deletion:{...e.deletion,now:t.now}}:e;case`cmDeletionRow`:{let n=e.deletion;if(!n||n.step!==`apply`)return e;let r=t.outcome.status===`done`?`success`:t.outcome.status===`failed`?`error`:`warning`;return{...e,deletion:{...n,live:[...n.live,t.outcome],now:t.now,current:null,log:[...n.log,{at:t.now-n.startedAt,text:`${t.outcome.label}: ${t.outcome.message}`,tone:r}]}}}case`cmDeletionDone`:return e.deletion&&e.deletion.step===`apply`?{...e,deletion:{...e.deletion,step:`result`,results:t.results,refreshFailed:t.refreshFailed,now:t.now}}:e;case`cmDeletionClose`:return!e.deletion||e.deletion.step===`apply`?e:e.deletion.step===`result`?{...e,deletion:null,selected:[],search:``,shown:100}:{...e,deletion:null}}}function Ji(e){return{operation:e,step:`preview`,layout:`split`,tab:`diff`,collapsed:[],shown:20,confirmOpen:!1,startedAt:0,now:0,total:0,live:[],phase:`write`,states:!1,finishedAt:null,refreshFailed:!1}}function Yi(){return{solutions:[],solutionId:``,solutionFilter:``,solutionSort:Ri,flowCounts:null,flowTotal:null,snapshot:null,busy:!1,error:``,view:`flows`,filter:``,selected:[],expanded:[],newConnectionId:``,repointGroups:[],plan:null,wizard:null,planAck:!1,stateAck:!1,confirmCode:``,typedCode:``,manageState:!1,backupSaved:!1,results:null,studio:!1,dialogExpanded:!0,studioStep:0,newReference:null,cleanup:null,cleanupFollowUp:null,cleanupResume:!1,dependencies:{},area:`solutions`,connections:Ui()}}function Xi(e){if(e.repointGroups.length===0)return e;let t=e.snapshot,n=t===null?[]:ji(t,e.selected),r=e=>n.find(t=>t.logicalName===e)?.connectorId,i=[];for(let n of e.repointGroups){let e=[...new Set(n.from)].filter(e=>r(e)!==void 0);if(e.length===0)continue;let a=r(e[0]);if(i.some(e=>e.connectorId===a))continue;let o=e.filter(e=>r(e)===a);i.push({connectorId:a,from:o,target:Li(t,o,n.target)?n.target:``})}return i.length===e.repointGroups.length&&i.every((t,n)=>{let r=e.repointGroups[n];return t.connectorId===r.connectorId&&t.target===r.target&&t.from.length===r.from.length&&t.from.every((e,t)=>e===r.from[t])})?e:{...e,repointGroups:i}}function Zi(e,t,n){let r=e.snapshot?.allReferences??[],i=e=>r.find(t=>t.logicalName===e)?.connectorId??``,a=i(n),o=[];for(let e of t)o.includes(i(e))||o.push(i(e));return o.map((e,r)=>({connectorId:e,from:t.filter(t=>i(t)===e),target:a===e||r===0&&!o.includes(a)?n:``}))}function Qi(e){return(e.wizard===null||e.wizard.step===`result`)&&(e.planAck||e.stateAck||e.backupSaved||e.typedCode!==``)?{...e,planAck:!1,stateAck:!1,backupSaved:!1,typedCode:``}:e}function $i(e){if(!e.studio)return e.newReference===null?e:{...e,newReference:null};if(!(e.snapshot!==null&&!e.snapshot.solution.managed&&e.selected.length>0&&e.wizard===null))return{...e,studio:!1};let t=e.view===`flows`?Mi(e.snapshot,e.selected).length:0,n=Math.min(Math.max(e.studioStep,0),t),r=n===e.studioStep?e:{...e,studioStep:n},i=e.view===`flows`?Mi(e.snapshot,e.selected)[n]:void 0;return r.newReference!==null&&i?.connectorId!==r.newReference.connectorId?{...r,newReference:null}:r}function ea(e){if(!e.cleanup)return e;let t=e.wizard!==null&&e.wizard.step===`preview`&&e.plan!==null&&(e.plan.kind===`remove`||e.plan.kind===`delete`);if(e.snapshot===null||e.snapshot.solution.managed||e.view!==`references`||e.wizard!==null&&!t)return{...e,cleanup:null};let n=Xe(e.snapshot,e.cleanup);return n===e.cleanup?e:{...e,cleanup:n}}function ta(e,t){return ea($i(Qi(Xi(na(e,t)))))}function na(e,t){if(Hi(t))return{...e,connections:qi(e.connections,t)};switch(t.type){case`setArea`:return t.area===`solutions`&&(e.connections.deletion?.step===`apply`||e.connections.checkAll!==null)?e:{...e,area:t.area};case`busy`:return{...e,busy:t.busy};case`error`:return{...e,error:t.message,busy:!1};case`solutionsLoaded`:return{...e,solutions:t.solutions,error:``};case`selectSolution`:return e.wizard?.step===`apply`?e:{...e,solutionId:t.id,snapshot:null,selected:[],expanded:[],plan:null,wizard:null,results:null,error:``,filter:``,repointGroups:[],newConnectionId:``,newReference:null,cleanup:null,cleanupFollowUp:null,cleanupResume:!1,dependencies:{}};case`sortSolutions`:return{...e,solutionSort:Bi(e.solutionSort,t.key)};case`flowCountsLoaded`:return{...e,flowCounts:t.counts,flowTotal:t.total};case`setSolutionFilter`:return{...e,solutionFilter:t.filter};case`snapshotLoaded`:{let n=e.wizard!==null&&e.wizard.step===`preview`,r=e.wizard!==null&&!n;return{...e,snapshot:t.snapshot,dependencies:{},selected:e.selected.filter(e=>ra(t.snapshot,e)),expanded:e.expanded.filter(e=>ra(t.snapshot,e)),plan:r?e.plan:null,wizard:r?e.wizard:null,error:n?`The solution was read again, so the preview was closed. Choose again.`:``,busy:!1}}case`setView`:return{...e,view:t.view,selected:[],expanded:[],plan:null,wizard:null,cleanupFollowUp:null};case`setFilter`:return{...e,filter:t.filter};case`toggle`:return{...e,selected:e.selected.includes(t.id)?e.selected.filter(e=>e!==t.id):[...e.selected,t.id]};case`toggleExpand`:return{...e,expanded:e.expanded.includes(t.id)?e.expanded.filter(e=>e!==t.id):[...e.expanded,t.id]};case`selectAll`:return{...e,selected:[...t.ids]};case`clearSelection`:return{...e,selected:[]};case`setNewConnectionId`:return{...e,newConnectionId:t.value};case`setRepoint`:return{...e,repointGroups:Zi(e,typeof t.from==`string`?t.from===``?[]:[t.from]:t.from,t.target)};case`setGroups`:return{...e,repointGroups:t.groups};case`setGroup`:{let n=e.repointGroups.some(e=>e.connectorId===t.group.connectorId)?e.repointGroups.map(e=>e.connectorId===t.group.connectorId?t.group:e):[...e.repointGroups,t.group];return{...e,repointGroups:n.filter(e=>e.from.length>0)}}case`dismissCleanupSummary`:return e.cleanup?{...e,cleanup:{...e.cleanup,summaryHidden:!0}}:e;case`dependenciesLoading`:return{...e,cleanup:e.cleanup&&e.cleanup.summaryHidden?{...e.cleanup,summaryHidden:!1}:e.cleanup,dependencies:{...e.dependencies,...Object.fromEntries(t.ids.map(e=>[e,{status:`loading`}]))}};case`dependenciesLoaded`:return{...e,dependencies:{...e.dependencies,[t.id]:{status:`ready`,report:t.report}}};case`dependenciesFailed`:return{...e,dependencies:{...e.dependencies,[t.id]:{status:`failed`,error:t.error}}};case`openCleanup`:{if(e.snapshot===null||e.snapshot.solution.managed||e.view!==`references`||e.wizard!==null)return e;let n=Ye(e.snapshot),r=t.tab??(n.unused===0&&n.groups>0?`duplicates`:`unused`);return{...e,studio:!1,cleanup:Ve(r,t.picked??[])}}case`closeCleanup`:return{...e,cleanup:null,cleanupResume:!1};case`setCleanupTab`:return e.cleanup?{...e,cleanup:{...e.cleanup,tab:t.tab}}:e;case`toggleCleanupUnused`:return e.cleanup?{...e,cleanup:{...e.cleanup,picked:e.cleanup.picked.includes(t.id)?e.cleanup.picked.filter(e=>e!==t.id):[...e.cleanup.picked,t.id]}}:e;case`setCleanupUnused`:return e.cleanup?{...e,cleanup:{...e.cleanup,picked:[...new Set(t.ids)]}}:e;case`toggleCleanupDeps`:return e.cleanup?{...e,cleanup:{...e.cleanup,open:e.cleanup.open.includes(t.id)?e.cleanup.open.filter(e=>e!==t.id):[...e.cleanup.open,t.id]}}:e;case`setKeeper`:return e.cleanup?{...e,cleanup:{...e.cleanup,keepers:{...e.cleanup.keepers,[t.group]:t.id}}}:e;case`startMerge`:return{...e,view:`flows`,selected:[...t.flowIds],expanded:[],filter:``,plan:null,wizard:null,results:null,studio:!1,cleanup:null,cleanupResume:!1,repointGroups:[t.group],cleanupFollowUp:t.followUp};case`followUpCleanup`:{let t=e.cleanupFollowUp?.ids??[];return{...e,view:`references`,selected:[],expanded:[],plan:null,wizard:null,results:null,repointGroups:[],cleanupFollowUp:null,cleanupResume:!1,cleanup:Ve(`unused`,t)}}case`openStudio`:return{...e,studio:!0,studioStep:0};case`studioGo`:return{...e,studioStep:t.step};case`closeStudio`:return{...e,studio:!1,newReference:null};case`openNewReference`:return e.studio&&e.snapshot!==null&&!e.snapshot.solution.managed?{...e,newReference:{...Qe(t.connectorId,t.seed),live:{status:`loading`,items:[],error:``}}}:e;case`setNewReferenceField`:return e.newReference&&!e.newReference.saving?{...e,newReference:dt(e.newReference,t.field,t.value)}:e;case`applySuggestion`:return e.newReference&&!e.newReference.saving?{...e,newReference:ft(e.newReference,t.suggestion)}:e;case`pickConnection`:return e.newReference&&!e.newReference.saving?{...e,newReference:mt(e.newReference,t.id)}:e;case`connectionChecked`:return e.newReference&&!e.newReference.saving?{...e,newReference:ht(e.newReference,t.typed,t.verdict)}:e;case`toggleSuggestions`:return e.newReference?{...e,newReference:{...e.newReference,suggestOpen:!e.newReference.suggestOpen}}:e;case`connectionsLoading`:return e.newReference&&e.newReference.live.status!==`loading`?{...e,newReference:{...e.newReference,live:{...e.newReference.live,status:`loading`,error:``}}}:e;case`connectionsLoaded`:return e.newReference?{...e,newReference:{...e.newReference,live:{status:`ready`,items:t.items,error:``}}}:e;case`connectionsFailed`:return e.newReference?{...e,newReference:{...e.newReference,live:{status:`unavailable`,items:[],error:t.error}}}:e;case`toggleNewReferenceConnection`:return e.newReference?{...e,newReference:{...e.newReference,openConnections:e.newReference.openConnections.includes(t.id)?e.newReference.openConnections.filter(e=>e!==t.id):[...e.newReference.openConnections,t.id]}}:e;case`reviewNewReference`:return e.newReference&&!e.newReference.saving?{...e,newReference:{...e.newReference,reviewing:t.on,error:``}}:e;case`closeNewReference`:return e.newReference?.saving?e:{...e,newReference:null};case`newReferenceSaving`:return e.newReference&&e.newReference.reviewing?{...e,newReference:{...e.newReference,saving:!0,step:`check`,error:``}}:e;case`newReferenceStep`:return e.newReference&&e.newReference.saving?{...e,newReference:{...e.newReference,step:t.step}}:e;case`newReferenceFailed`:return e.newReference?{...e,newReference:{...e.newReference,saving:!1,step:``,reviewing:!1,error:t.error}}:e;case`referenceCreated`:{if(!e.snapshot)return e;let n=_(e.snapshot,t.reference,t.componentType),r=e.repointGroups.map(e=>e.connectorId===t.reference.connectorId?{...e,target:t.reference.logicalName}:e);return{...e,snapshot:n,repointGroups:r,newReference:null}}case`setDialogExpanded`:return{...e,dialogExpanded:t.on};case`openPlan`:return{...e,studio:!1,cleanupResume:e.cleanup!==null&&(t.plan.kind===`remove`||t.plan.kind===`delete`),plan:t.plan,wizard:Ji(t.plan.kind),planAck:!1,stateAck:!1,backupSaved:!1,confirmCode:t.code??``,typedCode:``};case`replacePlan`:return e.wizard&&e.wizard.step===`preview`?{...e,plan:t.plan,planAck:!1,stateAck:!1,backupSaved:!1}:e;case`setTypedCode`:return e.plan?{...e,typedCode:t.value}:e;case`setAck`:return e.plan?{...e,planAck:t.on}:e;case`setStateAck`:return e.plan?{...e,stateAck:t.on}:e;case`setManageState`:return{...e,manageState:t.on};case`setPhase`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,phase:t.phase,now:t.now}}:e;case`backupSaved`:return e.plan?{...e,backupSaved:!0}:e;case`closePlan`:return e.wizard&&be(e.wizard.step,`leave`)&&e.wizard.step!==`result`?{...e,plan:null,wizard:null,cleanupFollowUp:null,cleanupResume:!1,selected:e.cleanup?[]:e.selected}:e;case`setLayout`:return e.wizard?{...e,wizard:{...e.wizard,layout:t.layout}}:e;case`setTab`:return e.wizard?{...e,wizard:{...e.wizard,tab:t.tab}}:e;case`toggleItem`:return e.wizard?{...e,wizard:{...e.wizard,collapsed:e.wizard.collapsed.includes(t.id)?e.wizard.collapsed.filter(e=>e!==t.id):[...e.wizard.collapsed,t.id]}}:e;case`showMore`:return e.wizard?{...e,wizard:{...e.wizard,shown:e.wizard.shown+20}}:e;case`openConfirm`:return e.wizard&&e.wizard.step===`preview`?{...e,wizard:{...e.wizard,confirmOpen:!0}}:e;case`closeConfirm`:return e.wizard?{...e,wizard:{...e.wizard,confirmOpen:!1}}:e;case`applyStarted`:{let n=e.plan!==null&&ee(e.plan).length>0,r=e.plan?.kind!==`delete`||e.confirmCode!==``&&e.typedCode.trim()===e.confirmCode;return e.plan&&e.wizard&&e.wizard.step===`preview`&&e.wizard.confirmOpen&&e.planAck&&r&&(!n||e.stateAck)?{...e,busy:!0,wizard:{...e.wizard,step:`apply`,confirmOpen:!1,startedAt:t.now,now:t.now,total:t.total,live:[],phase:n?`off`:`write`,states:n,finishedAt:null,refreshFailed:!1}}:e}case`applyRow`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,live:[...e.wizard.live,t.outcome],now:t.now}}:e;case`tick`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,now:t.now}}:e;case`rowsDone`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,phase:`refresh`,now:t.now}}:e;case`applied`:return e.wizard?{...e,results:t.results,plan:null,busy:!1,wizard:{...e.wizard,step:`result`,phase:`done`,confirmOpen:!1,now:t.now??e.wizard.now,finishedAt:t.now??e.wizard.now,refreshFailed:t.refreshFailed??!1}}:{...e,results:t.results,plan:null,busy:!1};case`dismissResults`:return e.wizard&&e.wizard.step!==`result`?e:e.cleanupResume?{...e,results:null,wizard:null,cleanupFollowUp:null,cleanupResume:!1,selected:[],cleanup:Ve(`unused`,[])}:{...e,results:null,wizard:null,cleanupFollowUp:null}}}function ra(e,t){return e.flows.some(e=>e.flow.id===t)||e.references.some(e=>e.reference.id===t)}function ia(e){let t=e,n=new Set;return{get:()=>t,dispatch(e){let r=ta(t,e);r!==t&&(t=r,n.forEach(e=>e(t)))},subscribe(e){return n.add(e),()=>n.delete(e)}}}function aa(e){let t=t=>{let n=t instanceof Error?t.message:String(t);R(`Unexpected error: ${n}`,`error`),e(`Something went wrong: ${n}`)};window.addEventListener(`error`,e=>t(e.error??e.message)),window.addEventListener(`unhandledrejection`,e=>t(e.reason))}function oa(e,t=Date.now()){let n=Date.parse(e);if(Number.isNaN(n))return``;let r=Math.floor((t-n)/6e4);if(r<0)return new Date(n).toLocaleDateString();if(r<1)return`just now`;let i=(e,t)=>`${e} ${t}${e===1?``:`s`} ago`;if(r<60)return i(r,`minute`);let a=Math.floor(r/60);if(a<24)return i(a,`hour`);let o=Math.floor(a/24);if(o<7)return i(o,`day`);let s=Math.floor(o/7);return s<5?i(s,`week`):new Date(n).toLocaleDateString()}function sa(e){let t=Date.parse(e);return Number.isNaN(t)?``:new Date(t).toLocaleString()}function Z(e,t=!1,n=!1){let r=O(e),i=W(`span`,`conn-tile conn-tile--${t?`missing`:r.tone}${n?` conn-tile--sm`:``}`);return i.title=t?`Reference not found in this environment`:r.name,i.append(G(t?`alert-triangle`:r.glyph)),i}function ca(e,t){if(e===``){let e=q(`No connection`,`warning`,`alert-triangle`);return t&&(e.title=`This reference has no connection, so there is nothing to open.`),e}let n=q(e,`neutral`,`link`);if(n.classList.add(`chip--code`,`conn-id`),n.title=e,!t)return n;let r=W(`button`,`conn-link`);return r.type=`button`,r.title=`Open this connection in Connections: ${e}`,r.setAttribute(`aria-label`,`Open the connection ${e} in Connections`),r.append(n),r.addEventListener(`click`,e=>{e.stopPropagation(),t()}),r}function la(e,t){let n=W(`span`,`connector-name`);if(n.append(O(e).name),t){let e=q(`Custom connector`,`info`,`code`);e.title=`A connector built for this environment, not a standard Microsoft connector.`,n.append(` `,e)}return n}function ua(e,t){let n=W(`div`,`ref-cell`),r=W(`div`,`conn-text`);return e?(r.append(W(`div`,`conn-name`,e.displayName||e.logicalName),W(`div`,`conn-logical`,e.logicalName)),n.append(Z(e.connectorId),r),n):(r.append(W(`div`,`conn-name`,t),W(`div`,`conn-logical`,`Not found in this environment`)),n.append(Z(``,!0),r),n)}function da(e){let t=W(`div`,`tile-row`);if(e.unreadable)return t.append(q(`Unreadable`,`warning`,`alert-triangle`)),t;if(e.uses.length===0)return t.append(W(`span`,`muted`,`None`)),t;for(let n of e.uses.slice(0,5)){let e=Z(n.reference?.connectorId??``,n.reference===void 0,!0);e.title=`${n.reference?O(n.reference.connectorId).name+`: `+(n.reference.displayName||n.logicalName):n.logicalName+` (not found)`}`,t.append(e)}return e.uses.length>5&&t.append(W(`span`,`muted`,`+${e.uses.length-5}`)),t.append(W(`span`,`muted tile-count`,e.uses.length===1?`1 connection`:`${e.uses.length} connections`)),t}function fa(e){let t=W(`div`,`chip-list`);for(let n of e){let e=q(n.label,`warning`,`alert-triangle`);e.title=n.detail,t.append(e)}return t}function pa(e){return e===`done`?q(`done`,`success`,`check-circle`):e===`failed`?q(`failed`,`error`,`x-circle`):q(`skipped`,`warning`,`alert-triangle`)}var ma={preview:`eye`,apply:`refresh`,result:`check-circle`};function ha(e,t,n){let r=W(`div`,`step-panel`),i=W(`div`,`step-header-row`),a=W(`h2`,`step-title`);a.append(G(ma[e]),Ce(e)),i.append(a,_i(ve,ye(e)));let o=W(`div`,`step-footer`);o.append(...n);let s=W(`div`,`step-body`);return s.append(...t),r.append(i,s,o),r}function ga(){return W(`span`,`spacer`)}function _a(e,t,n,r,i={}){let a=K(e,t,r);return i.after?a.append(G(n)):a.prepend(G(n)),a.disabled=i.disabled===!0,i.title&&(a.title=i.title),a}function va(e,t,n){let r=e.live.length,i=me(e.phase,r,e.total),a=W(`div`,`run-hero`),o=W(`div`,e.phase===`done`?`run-ring is-done`:`run-ring is-moving`);o.style.setProperty(`--p`,String(i)),o.setAttribute(`role`,`progressbar`),o.setAttribute(`aria-label`,`Progress of the run`),o.setAttribute(`aria-valuemin`,`0`),o.setAttribute(`aria-valuemax`,`100`),o.setAttribute(`aria-valuenow`,String(i)),o.append(W(`span`,`run-percent`,`${i}%`));let s=W(`div`,`run-titles`),c=W(`div`,`run-headline-row`);if(e.phase!==`done`){let e=W(`span`,`run-spinner`);e.setAttribute(`aria-hidden`,`true`),c.append(e)}c.append(W(`h3`,`run-headline`,he(e.phase)));let l=e.phase===`off`?`Turning the flows that are on off, so that they can be changed`:e.phase===`write`?`Writing and verifying row ${Math.min(r+1,Math.max(e.total,1))} of ${e.total}`:e.phase===`on`?`Turning the flows on again`:e.phase===`refresh`?`All rows are written. Reading the solution again`:`Finished`;s.append(c,W(`p`,`run-now`,l),W(`p`,`run-sub`,`${{connection:`Writing to`,repoint:`Writing to`,remove:`Removing components in`,delete:`Deleting in`}[e.operation]} ${t===``?`the connected environment`:t}. Do not close this tool until it finishes.`));let u=W(`div`,`run-counters`),d=(t,n)=>{let r=W(`span`,`run-count run-count--${t}`);return r.append(W(`b`,``,String(e.live.filter(e=>e.status===t).length)),W(`span`,``,n)),r};return u.append(d(`done`,`written`),d(`skipped`,`skipped`),d(`failed`,`failed`)),a.append(o,s,n,u),a}var ya={done:`check-circle`,failed:`x-circle`,skipped:`alert-triangle`};function ba(e,t){let n=new Map;for(let t of e.live)n.has(t.id)||n.set(t.id,t);let r=new Set(t.map(e=>e.id)),i=e.live.filter(e=>!r.has(e.id)).map(e=>({id:e.id,label:e.label})),a=[...t,...i],o=e.phase===`refresh`||e.phase===`done`?void 0:a.find(e=>!n.has(e.id))?.id,s=W(`ul`,`run-items`);for(let e of a){let t=n.get(e.id),r=t?t.status:e.id===o?`working`:`pending`,i=W(`li`,`run-item run-item--${r}`);i.dataset.row=e.id;let a=W(`span`,`run-item-mark`);r===`working`?a.append(W(`span`,`run-spinner run-spinner--sm`)):t?a.append(G(ya[t.status])):a.append(G(`minus`));let c=W(`span`,`run-item-text`);c.append(W(`span`,`run-item-name`,e.label),W(`span`,`run-item-msg`,t?t.message:r===`working`?`Writing and verifying...`:`Waiting`)),i.append(a,c),t&&i.append(pa(t.status)),s.append(i)}return s}function xa(e,t=``,n=[]){let r=W(`section`,`run-panel`),i=W(`div`,`run-phases`);i.append(vi(ce(e.phase,!1,e.states),le(e.phase,e.live.length,e.total,e.now-e.startedAt)));let a=W(`div`,`run-rows-head`);a.append(G(`list`),W(`span`,`run-rows-title`,`Rows`)),e.total>0&&a.append(q(`${e.live.length} of ${e.total}`,`info`));let o=W(`div`,`run-rows`);return o.append(a,ba(e,n)),r.append(va(e,t,i),o),ha(`apply`,[r],[_a(`Back`,`secondary`,`arrow-left`,()=>void 0,{disabled:!0,title:`The write has started: there is no way back.`}),ga()])}function Sa(e,t,n){let r=e.querySelector(`.modal`);e.classList.add(`is-sizable`),t&&(r.classList.add(`is-expanded`),e.classList.add(`is-expanded`));let i=W(`button`,`icon-btn modal-expand`);i.type=`button`,i.setAttribute(`aria-label`,t?`Restore size`:`Expand`),i.setAttribute(`aria-pressed`,String(t)),i.title=t?`Restore size`:`Fill the window`,i.append(G(t?`minimize`:`maximize`)),i.addEventListener(`click`,()=>n(!t)),r.querySelector(`.modal-head`).insertBefore(i,r.querySelector(`.modal-close`))}function Ca(e,t,n){let r=e.allReferences.find(e=>e.logicalName===t),i=W(`div`,`ref-inline ref-inline--${n}`);i.append(Z(r?.connectorId??``,r===void 0,!0));let a=W(`div`,`conn-text`);return a.append(W(`div`,`conn-name`,r?.displayName||t),W(`div`,`conn-logical`,r?O(r.connectorId).name:`Not found`)),i.append(a),i}function wa(e,t,n){let r=t.split(`,`).map(e=>e.trim()).filter(e=>e!==``),i=W(`div`,`ref-list`);return i.append(...(r.length>0?r:[t]).map(t=>Ca(e,t,n))),i}function Ta(e,t){return e.rows.map(n=>{let r=n.blocked;if(e.kind===`remove`||e.kind===`delete`){let i=t.flows.some(e=>e.flow.id===n.id),a=W(`span`,e.kind===`delete`?`removal-to removal-to--delete`:`removal-to`,n.newValue);return{name:n.label,sub:i?`Flow`:`Connection reference`,from:W(`span`,`removal-from`,n.oldValue),to:a,...r===void 0?{}:{blocked:r}}}if(e.kind===`connection`){let e=t.references.find(e=>e.reference.id===n.id)?.reference.logicalName;return{name:n.label,sub:e,from:ca(n.oldValue),to:ca(n.newValue),...r===void 0?{}:{blocked:r}}}let i=t.flows.find(e=>e.flow.id===n.id);return{name:n.label,sub:i?`${c[i.info.type]} flow`:void 0,from:wa(t,n.oldValue,`old`),to:wa(t,n.newValue,`new`),...r===void 0?{}:{blocked:r}}})}function Ea(e){return e.warnings.length>0?Y(`warning`,`Read before you apply`,e.warnings):null}function Da(e){return Y(`info`,`What is written`,e.kind===`connection`?[`Only the connection id of these references is written. Every flow that uses them follows.`]:[`Only the connection reference name inside each flow definition changes. Everything else in the definition is kept exactly as stored.`,`Flows that are turned on are never written.`],`shield`)}function Oa(e,t,n=`connection`){let r=n===`delete`,i=K(e?`Save again`:`Save backup`,`secondary`,t,!0);return i.prepend(G(`save`)),Y(e?`success`:`primary`,e?`Backup saved`:r?`Save a copy first (strongly recommended)`:`Save a backup first (recommended)`,[r?`The definition of every flow and the record of every reference that will be deleted are written to a file you choose. Deleting cannot be undone: this file is the only copy.`:`The old values of every row that will change are written to a file you choose, so you can restore them by hand. Undo is not offered for writes to the environment.`],e?`check-circle`:`save`,i)}function ka(e){let t=Y(`warning`,`Flows will be turned off`,[`${e.length===1?`This flow is`:`These ${e.length} flows are`} turned on. The tool turns ${e.length===1?`it`:`them`} off, writes the change, checks it, and turns ${e.length===1?`it`:`them`} on again, also when a write fails.`,`While a flow is off it does not run: triggers that fire in the meantime are not handled. Runs that already started continue to the end.`,`Turning a flow on can be refused by the environment (connections, policies): then it stays off, and the result names it so that you can turn it on in the maker portal.`,`Do not close this tool until the run has finished.`,`Flows: ${e.join(`, `)}.`],`power`);return t.classList.add(`state-callout`),t}function Aa(e,t,n){let r=e.rows.filter(e=>e.blocked===`The flow is turned on: turn it off first, or allow the tool to turn it off in the confirmation.`||e.turnOff===!0).length;if(e.kind!==`repoint`||r===0)return null;let i=W(`section`,t?`studio-state is-on`:`studio-state`),a=W(`div`,`studio-state-text`);return a.append(W(`strong`,`studio-state-title`,`Turn these flows off for the change and on again afterwards`),W(`span`,`studio-state-hint`,`${r} flow${r===1?` is`:`s are`} turned on: without this ${r===1?`it stays`:`they stay`} blocked and is not written.`)),i.append(G(`power`,`studio-state-icon`),a,ri(t,`Turn the flows that are on off and on again`,()=>n(!t))),i}function ja(e,t){let{plan:n}=e,r=T(n),i=n.rows.length-r.length,a=r.reduce((e,t)=>e+t.affectedOn,0),o=n.kind===`connection`,s=e.environment||`the connected environment`,c=o?r.length===1?`reference row`:`reference rows`:r.length===1?`flow`:`flows`,l=W(`span`,`modal-env`);l.append(`Environment`,li(s,`connected`));let u=[pi([{label:o?`References to change`:`Flows to change`,value:String(r.length),icon:o?`plug`:`workflow`,tone:`primary`},{label:`Flows affected`,value:String(re(n)),icon:`workflow`,tone:`info`},{label:`Turned on`,value:String(a),icon:`power`,tone:a>0?`warning`:`success`},{label:`Not changed`,value:String(i),icon:`shield`,tone:i>0?`warning`:`success`}])],d=Aa(n,e.manageState,t.setManageState);d&&u.push(d);let f=Ea(n);f&&u.push(f);let p=ee(n);p.length>0&&u.push(ka(p.map(e=>e.label))),u.push(Da(n),Oa(e.backupSaved,t.saveBackup,n.kind));let m=W(`div`,`ack`),h=`I reviewed these changes and understand they are written to ${s}.`;m.append(ri(e.ack,`I reviewed these changes`,()=>t.setAck(!e.ack)),W(`span`,``,h));let g=e.ack?q(`Confirmed`,`success`,`check`):q(`Required`,`warning`,`alert-triangle`);g.classList.add(`ack-state`),m.append(g);let _=m;if(p.length>0){let n=W(`div`,`ack`);n.append(ri(e.stateAck,`I understand the flows are turned off`,()=>t.setStateAck(!e.stateAck)),W(`span`,``,`I understand that ${p.length} flow${p.length===1?` is`:`s are`} turned off for the write and turned on again afterwards.`)),_=W(`div`,`ack-stack`),_.append(m,n)}let v=gi({tone:`primary`,icon:o?`link`:`git-branch`,title:o?`Change the connection of ${r.length} reference${r.length===1?``:`s`}`:`Re-point ${r.length} flow${r.length===1?``:`s`}`,subtitle:l,body:u,footNote:_,confirm:{label:`Apply to ${r.length} ${c}`,icon:`check`,danger:!0,disabled:!e.ack||p.length>0&&!e.stateAck||r.length===0,onConfirm:t.confirm},onCancel:t.cancel});return v.classList.add(`confirm-overlay`),v.querySelector(`.modal`).classList.add(`confirm-dialog`),Sa(v,e.expanded,t.setExpanded),v}function Ma(e,t){let n=e.references.filter(e=>t.includes(e.reference.id)),r=new Set(n.flatMap(e=>e.flowIds)),i=[...r].filter(t=>e.flows.find(e=>e.flow.id===t)?.flow.stateCode===1).length;return{references:n.length,flows:r.size,turnedOn:i}}function Na(e,t){return t<=0?0:Math.round(e/t*100)}function Pa(e,t,n){let r=n.filter(e=>e.from.length>0),i=r.flatMap(e=>e.from.filter(t=>t!==e.target)),a=0,o=0,s=0;for(let n of t){let t=e.flows.find(e=>e.flow.id===n);t&&(t.uses.some(e=>i.includes(e.logicalName))?(a++,t.flow.stateCode===1&&o++):s++)}return{categories:r.length,affected:a,turnedOn:o,unrelated:s}}function Fa(e,t=`info`){let n=W(`p`,`dep-note${t===`warn`?` dep-note--warn`:t===`error`?` dep-note--error`:``}`);return n.append(G(t===`warn`?`alert-triangle`:t===`error`?`x-circle`:`info`,`icon--sm`),W(`span`,``,e)),n}function Ia(e){let t=W(`p`,`dep-loading`);t.setAttribute(`role`,`status`),t.setAttribute(`aria-live`,`polite`);let n=W(`span`,`spinner`);return n.setAttribute(`aria-hidden`,`true`),t.append(n,W(`span`,``,e)),t}function La(e){return e.state===``?null:q(e.state,e.state===`On`?`success`:e.state===`Suspended`?`warning`:`neutral`,e.state===`Suspended`?`pause`:`power`)}function Ra(e){let t=W(`li`,`dep-row${e.inOpenSolution?``:` is-outside`}`),n=W(`div`,`dep-row-head`);n.append(W(`span`,`dep-name`,e.name));let r=W(`span`,`dep-tags`);r.append(q(e.typeLabel,`neutral`));let i=La(e);i&&r.append(i),e.managed&&r.append(q(`Managed`,`neutral`,`lock`)),r.append(e.inOpenSolution?q(`In this solution`,`info`,`folder`):q(`Outside this solution`,`warning`,`alert-triangle`)),n.append(r),t.append(n);let a=[];return e.parent!==``&&a.push(`Agent: ${e.parent}`),e.owner!==``&&a.push(`Owner: ${e.owner}`),e.solutions.length>0&&a.push(`In ${e.solutions.length===1?`solution`:`solutions`}: ${e.solutions.join(`, `)}`),a.length>0&&t.append(W(`div`,`dep-facts`,a.join(` - `))),t}function za(e){let t=W(`div`,`dep-block`),n=e.state;if(n===void 0){let n=W(`div`,`dep-intro`);n.append(G(`layers`,`icon--sm icon--primary`),W(`span`,``,`What uses ${e.subject} in the whole environment, also outside this solution: flows of other solutions, agents, apps.`));let r=K(`Check dependencies`,`primary`,e.onCheck,!0);return r.prepend(G(`search`,`icon--sm`)),r.setAttribute(`aria-label`,`Check dependencies of ${e.name}`),t.append(n,r),t}if(n.status===`loading`)return t.append(Ia(`Reading what depends on it in the whole environment...`)),t;if(n.status===`failed`){t.append(Fa(`The dependencies could not be read: ${n.error}`,`error`));let r=K(`Try again`,`secondary`,e.onCheck,!0);return r.setAttribute(`aria-label`,`Try again to check the dependencies of ${e.name}`),t.append(r),t}let r=Tt(n.report),i=W(`div`,`dep-summary`);i.append(G(r.total===0?`check-circle`:r.outside>0?`alert-triangle`:`info`,`icon--sm ${r.total===0?`icon--success`:r.outside>0?`icon--warning`:`icon--primary`}`),W(`span`,`dep-summary-text`,Dt(r))),t.append(i);for(let e of Et(n.report)){let n=W(`section`,`dep-group`),r=W(`h5`,`dep-group-title`);r.append(G(e.icon,`icon--sm icon--muted`),`${e.label} `,W(`span`,`dep-count`,String(e.items.length)));let i=W(`ul`,`dep-list`);for(let t of e.items)i.append(Ra(t));n.append(r,i),t.append(n)}for(let e of n.report.notes)t.append(Fa(e,`warn`));let a=W(`div`,`dep-foot`);a.append(W(`span`,`dep-source`,`From Dataverse dependency tracking, the source of Show dependencies in the maker portal. A component whose dependency is not tracked is not listed.`));let o=K(`Check again`,`secondary`,e.onCheck,!0);return o.prepend(G(`refresh`,`icon--sm`)),o.setAttribute(`aria-label`,`Check the dependencies of ${e.name} again`),a.append(o),t.append(a),t}function Ba(e){if(e===void 0)return null;if(e.status===`loading`){let e=q(`Checking...`,`neutral`),t=W(`span`,`spinner`);return t.setAttribute(`aria-hidden`,`true`),e.prepend(t),e}if(e.status===`failed`)return q(`Could not check`,`error`,`x-circle`);let t=Tt(e.report);return t.total===0?q(`Nothing depends on it`,`success`,`check-circle`):t.outside>0?q(`Used by ${t.outside} outside this solution`,`warning`,`alert-triangle`):q(`Used by ${t.total} in this solution`,`info`,`info`)}var Va=0;function Ha(){Va=0}var Ua=(e,t)=>`${e} ${t}${e===1?``:`s`}`,Wa=e=>e.length>=10?e.slice(0,10):e;function Q(e,t=`info`){let n=W(`p`,`newref-note${t===`warn`?` newref-note--warn`:t===`error`?` newref-note--error`:t===`ok`?` newref-note--ok`:``}`);return n.append(G(t===`warn`?`alert-triangle`:t===`error`?`x-circle`:t===`ok`?`check-circle`:`info`,`icon--sm`),W(`span`,``,e)),n}function Ga(e,t,n={}){let r=W(`div`,`newref-field`),i=W(`span`,`newref-label`,e);return n.required&&i.append(W(`span`,`newref-req`,` *`)),r.append(i,t),n.hint&&r.append(W(`span`,`newref-hint`,n.hint)),n.error&&r.append(W(`span`,`newref-error`,n.error)),r}function Ka(e,t,n,r,i=``){let a=W(`input`,`text-input newref-input`);return a.type=`text`,a.value=r,a.placeholder=i,a.autocomplete=`off`,a.spellcheck=!1,a.setAttribute(`aria-label`,n),a.addEventListener(`input`,()=>e.dispatch({type:`setNewReferenceField`,field:t,value:a.value})),a}function qa(e=!1){let t=W(`span`,e?`spinner newref-spinner--on-primary`:`spinner`);return t.setAttribute(`aria-hidden`,`true`),t}function Ja(e,t,n=``){let r=W(`div`,`conn-fact${n?` ${n}`:``}`);return r.append(G(e,`icon--sm`),W(`span`,``,t)),r}function Ya(e,t){let n=W(`div`,`dep-connection`),r=e.users.map(e=>t.deps[e.id]),i=K(`Check every dependency of this connection`,`secondary`,()=>void t.h.checkDependencies(e.users.map(e=>e.id)),!0);if(i.prepend(G(`search`,`icon--sm`)),i.setAttribute(`aria-label`,`Check every dependency of connection ${e.id}`),r.some(e=>e?.status===`loading`))return n.append(Ia(`Reading what depends on the ${e.users.length===1?`reference`:`references`} that hold this connection...`)),n;if(r.every(e=>e?.status===`ready`)){let e=new Map;for(let t of r)if(t?.status===`ready`)for(let n of t.report.items)e.set(n.id,+!!n.inOpenSolution);let t=e.size,a=[...e.values()].filter(e=>e===0).length,o=W(`p`,`dep-note`);return o.append(G(t===0?`check-circle`:a>0?`alert-triangle`:`info`,`icon--sm ${t===0?`icon--success`:a>0?`icon--warning`:`icon--primary`}`),W(`span`,``,t===0?`Nothing depends on the references that hold this connection, anywhere in the environment.`:`${t} ${t===1?`component depends`:`components depend`} on the references that hold this connection: ${t-a} in this solution, ${a} outside.`)),n.append(o,i),i.textContent=`Check again`,i.prepend(G(`refresh`,`icon--sm`)),n}return n.append(i),n}function Xa(e,t,n,r,i){let a=W(`div`,n?`conn-item is-on`:`conn-item`),o=W(`span`,`conn-facts`);o.append(Ja(`key`,t.id,`conn-fact--id`)),t.displayName!==``&&o.append(Ja(`user`,t.displayName)),t.createdTime!==``&&o.append(Ja(`clock`,`Created ${Wa(t.createdTime)}`)),o.append(Ja(`plug`,t.users.length===0?`Not used by any reference yet`:`${Ua(t.users.length,`reference`)} and ${Ua(t.flowCount,`flow`)} of this solution use it`));let s=W(`button`,`choice choice--compact`+(n?` is-on`:``));if(s.type=`button`,s.setAttribute(`role`,`radio`),s.setAttribute(`aria-checked`,String(n)),s.setAttribute(`aria-label`,`Use connection ${t.id}`),s.append(W(`span`,`choice-mark`),o),s.addEventListener(`click`,()=>e.dispatch({type:`pickConnection`,id:t.id})),a.append(s),t.users.length===0)return a;let c=W(`button`,`conn-expander`);if(c.type=`button`,c.setAttribute(`aria-expanded`,String(r)),c.setAttribute(`aria-label`,`Used by, connection ${t.id}`),c.append(G(`users`,`icon--sm`),W(`span`,``,r?`Hide who uses it`:`Used by`),G(`chevron-down`,`icon--sm`)),c.addEventListener(`click`,()=>e.dispatch({type:`toggleNewReferenceConnection`,id:t.id})),a.append(c),r){let e=W(`ul`,`conn-users`),n=W(`li`,`conn-user conn-user--total`);n.append(Ya(t,i)),e.append(n);for(let n of t.users){let t=W(`li`,`conn-user`),r=W(`div`,`conn-user-name`);if(r.append(G(`plug`,`icon--sm icon--primary`),W(`span`,``,n.displayName)),t.append(r,W(`div`,`conn-user-logical`,n.logicalName)),(n.ownerName!==``||n.ownerEmail!==``)&&t.append(W(`div`,`conn-user-owner`,[`Owner of the reference`,n.ownerName,n.ownerEmail].filter(e=>e!==``).join(` - `))),n.flows.length===0)t.append(W(`div`,`conn-none`,`No flow of this solution uses it.`));else{let e=W(`ul`,`conn-flows`);for(let t of n.flows){let n=W(`li`,`conn-flow`);n.append(G(`workflow`,`icon--sm icon--muted`),W(`span`,``,t)),e.append(n)}t.append(e)}t.append(za({state:i.deps[n.id],subject:`this reference`,onCheck:()=>void i.h.checkDependencies([n.id]),name:n.displayName})),e.append(t)}a.append(e)}return a}function Za(e,t,n,r){let i=W(`button`,r?`sugg is-applied`:`sugg`);i.type=`button`,i.setAttribute(`aria-label`,`Use suggestion ${n.label}`);let a=W(`span`,`sugg-text`);return a.append(W(`span`,`sugg-label`,n.label),W(`span`,`sugg-display`,n.displayName),W(`span`,`sugg-logical`,M(t,n.name)),W(`span`,`sugg-desc`,n.description)),i.append(G(r?`check-circle`:`zap`,`icon--sm icon--primary`),a),r&&i.append(W(`span`,`sugg-badge`,`Applied`)),i.setAttribute(`aria-pressed`,String(r)),i.addEventListener(`click`,()=>e.dispatch({type:`applySuggestion`,suggestion:n})),i}function Qa(e,t){let n=W(`div`,`newref-row`);return n.append(W(`dt`,`newref-key`,e),W(`dd`,`newref-value`,t)),n}function $a(e){let t=W(`ol`,`newref-steps`);return t.setAttribute(`aria-label`,`Steps`),[[`Details`,`edit`],[`Review`,`eye`]].forEach(([n,r],i)=>{let a=e&&i===0,o=i===+!!e,s=W(`li`,`newref-step${o?` is-current`:``}${a?` is-done`:``}`);o&&s.setAttribute(`aria-current`,`step`),s.append(G(a?`check`:r,`icon--sm`),W(`span`,``,n)),t.append(s)}),t}function eo(e,t){e.classList.contains(`is-leaving`)||(e.classList.add(`is-leaving`),setTimeout(t,170))}function to(e,t,n,r,i,a={}){let o=O(r.connectorId),s=tt(e),c=at(e,r);Va===0&&(Va=Date.now());let l=Date.now()-Va,u=l<220,d=W(`div`,u?`newref-layer is-entering`:`newref-layer`);u&&d.style.setProperty(`--newref-elapsed`,`-${l}ms`);let f=()=>{r.saving||eo(d,()=>t.dispatch({type:`closeNewReference`}))},p=W(`div`,`newref-scrim`);p.addEventListener(`click`,f);let m=W(`aside`,`newref-panel`);m.setAttribute(`role`,`dialog`),m.setAttribute(`aria-modal`,`true`),m.setAttribute(`aria-label`,`New connection reference`);let h=W(`header`,`newref-head`),g=W(`span`,`newref-hero`);g.append(G(`plus`));let _=W(`div`,`newref-titles`);_.append(W(`h3`,`newref-title`,`New connection reference`));let v=W(`button`,`icon-btn newref-close`);v.type=`button`,v.setAttribute(`aria-label`,`Close new reference`),v.append(G(`close`)),v.disabled=r.saving,v.addEventListener(`click`,f),h.append(g,_,$a(r.reviewing),v);let y=(e,t,n)=>{let r=W(`div`,`newref-meta-row`),i=W(`span`,`newref-meta-text`);return i.append(W(`span`,`newref-caption`,t),W(`span`,`newref-meta-name`,n)),r.append(e,i),r},b=W(`span`,`newref-logo`);b.append(G(`folder`,`icon--folder`));let x=W(`div`,`newref-meta`);x.append(y(b,`Solution`,e.solution.name),y(Z(r.connectorId,!1,!0),`Connector`,o.name));let S=W(`div`,`newref-body`),C=W(`footer`,`newref-foot`);if(r.error!==``&&S.append(Q(r.error,`warn`)),r.reviewing){let a=j(r.connectionId),l=r.live.items.find(e=>e.name.toLowerCase()===a.toLowerCase()),u=W(`dl`,`newref-summary`);u.append(Qa(`Table`,`Connection reference`),Qa(`Logical name`,M(s,r.name)),Qa(`Display name`,r.displayName.trim()),Qa(`Connector`,`${o.name} (fixed)`),Qa(`Connection`,a===``?`None yet`:`${a}${l&&l.displayName!==``?` (${l.displayName})`:``}, found`),Qa(`Description`,r.description.trim()===``?`None`:r.description.trim()),Qa(`Solution`,e.solution.name),Qa(`Environment`,i===``?`The connected environment`:i));let d=W(`ol`,`newref-flow`);d.setAttribute(`aria-live`,`polite`);let f=[`check`,`write`,`readback`],p=[[`check`,`search`,`The name`+(a===``?` is`:` and the connection are`)+` checked again against the environment.`],[`write`,`plus`,`One row is created and added to ${e.solution.name}.`],[`readback`,`check-circle`,`The row and its place in the solution are read back.`]],h=r.step===`done`?f.length:r.step===``?-1:f.indexOf(r.step);for(let[e,t,n]of p){let i=f.indexOf(e),a=r.step===``?`idle`:i<h?`done`:i===h?`active`:`pending`,o=W(`li`,`newref-flow-item is-${a}`);o.dataset.state=a,o.append(a===`active`?qa():a===`done`?G(`check-circle`,`icon--sm icon--success`):G(a===`pending`?`clock`:t,a===`pending`?`icon--sm icon--muted`:`icon--sm icon--primary`),W(`span`,``,n)),d.append(o)}S.append(W(`h4`,`newref-section`,`What will be written`),u,W(`h4`,`newref-section`,`What happens`),d,Q(`Nothing is written until you press Create. No flow and no other reference is changed.`));for(let e of c.warnings)S.append(Q(e,`warn`));let g=K(`Back`,`secondary`,()=>t.dispatch({type:`reviewNewReference`,on:!1}));g.disabled=r.saving;let _=r.step===`done`,v=K(_?`Created`:r.saving?`Creating...`:`Create in ${e.solution.name}`,`primary`,()=>void n.createReference());if(v.disabled=r.saving||!c.ok,r.saving&&v.setAttribute(`aria-busy`,String(!_)),_?v.prepend(G(`check`,`icon--sm`)):r.saving&&v.prepend(qa(!0)),_&&v.classList.add(`is-finished`),C.append(g,v),r.saving&&!_){let e=W(`div`,`newref-progress`);e.setAttribute(`role`,`progressbar`),e.setAttribute(`aria-label`,`Creating the reference`),e.append(W(`span`,`newref-progress-fill`)),m.append(e)}}else{let i=ut(e,r);if(i.length>0){let e=i.find(e=>pt(r,e)),n=W(`section`,`newref-suggest`),a=W(`div`,`newref-suggest-head`),o=W(`div`,`newref-suggest-title`);r.suggestOpen||!e?o.append(W(`h4`,`newref-section`,`Suggestions`)):o.append(G(`check-circle`,`icon--sm icon--success`),W(`span`,`newref-applied`,`Suggestion applied: ${e.label}`));let c=W(`div`,`newref-suggest-tools`),l=K(`Auto-fill`,`secondary`,()=>t.dispatch({type:`applySuggestion`,suggestion:i[0]}),!0);l.prepend(G(`zap`,`icon--sm`));let u=K(r.suggestOpen?`Hide`:`Show`,`secondary`,()=>t.dispatch({type:`toggleSuggestions`}),!0);if(u.setAttribute(`aria-expanded`,String(r.suggestOpen)),u.setAttribute(`aria-label`,r.suggestOpen?`Hide suggestions`:`Show suggestions`),c.append(l,u),a.append(o,c),n.append(a),r.suggestOpen)for(let e of i)n.append(Za(t,s,e,pt(r,e)));S.append(n)}let l=Ka(t,`displayName`,`Display name`,r.displayName);u&&(l.dataset.autofocus=`true`),S.append(Ga(`Display name`,l,{required:!0,...r.displayName!==``&&c.errors.displayName?{error:c.errors.displayName}:{}}));let d=W(`div`,`newref-name`);d.append(W(`span`,`newref-prefix`,`${s===``?`?`:s}_`),Ka(t,`name`,`Name`,r.name));let p=c.errors.prefix??(r.name===``?void 0:c.errors.name);S.append(Ga(`Name`,d,{required:!0,...p?{error:p}:{},hint:`Logical name ${s===``?`(prefix unknown)`:M(s,r.name||`...`)}, unique in the environment. It follows the display name until you edit it.`})),S.append(Ga(`Description`,Ka(t,`description`,`Description`,r.description,`Optional`),{...c.errors.description?{error:c.errors.description}:{}}));let m=W(`section`,`newref-conns`),h=W(`div`,`newref-conns-head`);h.append(W(`span`,`newref-label`,`Connection`));let g=K(`Refresh`,`secondary`,()=>void n.refreshConnections(),!0);g.prepend(G(`refresh`,`icon--sm`)),g.setAttribute(`aria-label`,`Refresh connections`),g.setAttribute(`aria-busy`,String(r.live.status===`loading`)),h.append(g),m.append(h);let _=ct(e,r),v=r.connectionSource===`card`?j(r.connectionId).toLowerCase():``,y=W(`div`,`newref-connections`);y.setAttribute(`role`,`radiogroup`),y.setAttribute(`aria-label`,`Connection`),r.live.status===`loading`&&y.append(Q(`Reading your connections...`));for(let e of _)y.append(Xa(t,e,e.id.toLowerCase()===v,r.openConnections.includes(e.id),{h:n,deps:a}));m.append(y),r.live.status===`ready`&&_.length===0&&m.append(Q(`You have no ${o.name} connection yet. Create one in the Maker portal, then press Refresh.`)),r.live.status===`unavailable`&&m.append(Q(`Your connections could not be read${r.live.error===``?``:` (${r.live.error})`}. Without them a connection cannot be verified, so the reference cannot be created. Press Refresh to try again.`,`warn`));let b=W(`div`,`newref-paste`);b.append(Ka(t,`connectionId`,`Paste a connection id`,r.connectionSource===`typed`?r.connectionId:``,`Or paste a connection id`));let x=W(`button`,`icon-btn newref-check`);if(x.type=`button`,x.setAttribute(`aria-label`,`Check connection`),x.setAttribute(`aria-busy`,String(r.live.status===`loading`)),x.title=`Check that this connection exists (Enter)`,x.append(G(`search`)),x.addEventListener(`click`,()=>void n.checkConnection()),b.append(x),b.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),n.checkConnection())}),m.append(b),r.connectionSource===`typed`&&j(r.connectionId)!==``)r.live.status===`loading`?m.append(Q(`Checking...`)):c.errors.connectionId&&m.append(Q(c.errors.connectionId,r.checked===null||r.checked.id!==j(r.connectionId).toLowerCase()?`info`:`error`));else if(r.connectionSource===`none`)m.append(Q(`Choose a connection. The Maker portal does not save a reference without one, and flows cannot be moved onto it.`,`info`));else if(r.connectionSource===`card`){let e=_.find(e=>e.id.toLowerCase()===v);e&&m.append(Q(`Found: ${e.displayName===``?e.id:e.displayName}.`,`ok`))}m.append(W(`span`,`newref-hint`,`Optional. A connection is accepted only when it is found among your connections of this connector.`)),S.append(m);for(let e of c.warnings)S.append(Q(e,`warn`));let w=K(`Review`,`primary`,()=>t.dispatch({type:`reviewNewReference`,on:!0}));w.disabled=!c.ok,C.append(K(`Cancel`,`secondary`,f),w)}S.dataset.step=r.reviewing?`review`:`details`,m.append(h,x,S);let w=m.querySelector(`.newref-progress`);return m.append(C),w&&m.insertBefore(w,C),d.append(p,m),d}function no(e,t){let n=new Map;for(let r of e.allReferences)r.connectionId!==``&&t.has(r.connectorId)&&n.set(r.connectionId,[...n.get(r.connectionId)??[],r.displayName||r.logicalName]);return[...n.entries()].map(([e,t])=>({id:e,names:t}))}function ro(e,t,n){let r=W(`section`,`studio-pane studio-pane--${e}`),i=W(`div`,`studio-pane-head`),a=W(`div`,`studio-pane-titles`);a.append(W(`h3`,`studio-pane-title`,t),W(`p`,`studio-pane-sub`,n)),i.append(a);let o=W(`div`,`studio-pane-body`);return r.append(i,o),{root:r,body:o,head:i}}function io(e,t=!1){let n=W(`p`,t?`studio-note studio-note--warn`:`studio-note`);return n.append(G(t?`alert-triangle`:`info`,`icon--sm`),e),n}function ao(e,t){let n=W(`span`,`meter`);n.setAttribute(`role`,`img`),n.setAttribute(`aria-label`,t);let r=W(`span`,`meter-fill`);return r.style.width=`${e}%`,n.append(r),n}function oo(e,t,n){let r=e.displayName||e.logicalName,i=Na(e.used,e.selected),a=W(`div`,t?`source-row is-on`:`source-row`),o=Jr(t,`Replace ${r}`,n),s=W(`span`,`source-text`);s.append(W(`span`,`source-name`,r),W(`span`,`source-logical`,e.logicalName));let c=W(`span`,`source-usage`);return c.append(ao(i,`${i}% of the selected flows`),W(`span`,`source-use`,`${e.used} of ${e.selected} flow${e.selected===1?``:`s`}`),W(`span`,`source-pct`,`${i}%`)),a.append(o,s,c),a}function so(e,t,n,r,i){let a=W(`button`,t?`choice is-on`:`choice`);a.type=`button`,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(t)),a.setAttribute(`aria-label`,e),a.disabled=n;let o=W(`span`,`choice-mark`),s=W(`span`,`choice-text`);return s.append(...i.map(e=>typeof e==`string`?W(`span`,`choice-line`,e):e)),a.append(o,s),a.addEventListener(`click`,r),a}var co=e=>e.ownerName===``?`Owner unknown`:e.ownerName,lo=-1;function uo(){lo=-1}var fo={done:`Done`,incomplete:`Incomplete`,empty:`Not changed`};function po(e,t,n,r){let i=Mi(n,e.selected),a=i.length,o=Math.min(Math.max(e.studioStep,0),a),s=e.repointGroups,c=e=>s.find(t=>t.connectorId===e),l=e=>t.dispatch({type:`studioGo`,step:e}),u=(e,n)=>t.dispatch({type:`setGroup`,group:{connectorId:e,from:n,target:c(e)?.target??``}}),d=s.filter(e=>e.target===``).map(e=>O(e.connectorId).name),f=W(`div`,`studio-top`),p=W(`ol`,`studio-pipe`);p.setAttribute(`aria-label`,`Categories`);let m=(e,t,n,r,i)=>{let a=W(`li`,`studio-pipe-li`),s=W(`button`,`studio-pipe-item is-${n===`pending`?`pending`:n===`incomplete`?`warn`:n}${e===o?` is-current`:``}`);s.type=`button`,e===o&&s.setAttribute(`aria-current`,`step`);let c=W(`span`,`studio-pipe-mark`);return c.append(G(n===`done`?`check`:n===`incomplete`?`alert-triangle`:n===`empty`?`minus`:r)),s.append(...i?[i]:[],c,W(`span`,`studio-pipe-name`,t)),s.addEventListener(`click`,()=>l(e)),a.append(s),a};i.forEach((e,t)=>{let n=Ni(c(e.connectorId));p.append(m(t,O(e.connectorId).name,n===`empty`&&t>=o?`pending`:n,O(e.connectorId).glyph,Z(e.connectorId,!1,!0)))}),p.append(m(a,`Summary`,`pending`,`clipboard-check`)),f.append(p);let h=W(`section`,`studio-panel`);lo!==-1&&lo!==o&&h.classList.add(o>lo?`slide--next`:`slide--prev`),lo=o;let g=!1;if(o<a){let e=i[o],a=O(e.connectorId),s=c(e.connectorId),l=s?.from??[];g=Ni(s)===`incomplete`,h.classList.add(`studio-group--${a.tone}`);let d=ro(`from`,`References to replace`,`Tick one, some or all.`),f=K(`Select all`,`secondary`,()=>u(e.connectorId,e.sources.map(e=>e.logicalName)),!0);f.disabled=l.length===e.sources.length;let p=K(`Clear`,`secondary`,()=>u(e.connectorId,[]),!0);p.disabled=l.length===0;let m=W(`div`,`studio-pane-tools`);m.append(f,p),d.head.append(m);for(let t of e.sources){let n=l.includes(t.logicalName);d.body.append(oo(t,n,()=>u(e.connectorId,n?l.filter(e=>e!==t.logicalName):[...l,t.logicalName])))}let _=ro(`to`,`Reference to use instead`,`Only references of this connector in this solution.`),v=K(`New reference`,`secondary`,()=>void r.openNewReference(e.connectorId),!0);if(v.prepend(G(`plus`,`icon--sm`)),_.head.append(v),l.length===0)_.body.append(io(`Tick the references to replace first, or go to another category to leave this one as it is.`));else{let r=Ii(n,l);r.length===0&&_.body.append(io(`There is no other reference of this connector in this solution, so there is nothing to re-point to.`,!0));for(let n of r){let r=n.displayName||n.logicalName;_.body.append(so(`Use ${r}`,s!==void 0&&n.logicalName===s.target,!1,()=>t.dispatch({type:`setGroup`,group:{connectorId:e.connectorId,from:l,target:n.logicalName}}),[W(`span`,`choice-name`,r),n.logicalName,n.connectionId===``?`No connection set`:`Connection ${n.connectionId}`,`Owner: ${co(n)}`]))}}let y=W(`div`,`studio`);y.append(d.root,_.root),h.append(y)}else{let e=W(`div`,`studio-panel-head`),t=W(`div`,`studio-panel-titles`);t.append(W(`h3`,`studio-panel-title`,`Summary`),W(`span`,`studio-panel-sub`,`Review changes opens the preview of every change. Nothing is written yet.`)),e.append(t);let n=W(`div`,`summary-list`);i.forEach((e,t)=>{let r=Ni(c(e.connectorId)),i=W(`div`,`summary-line summary-line--${r}`),a=K(`Edit`,`secondary`,()=>l(t),!0);a.classList.add(`summary-edit`);let o=q(fo[r],r===`done`?`success`:r===`incomplete`?`warning`:`neutral`,r===`done`?`check`:r===`incomplete`?`alert-triangle`:`minus`);o.classList.add(`summary-state`),i.append(Z(e.connectorId,!1,!0),W(`span`,`summary-name`,O(e.connectorId).name),o,a),n.append(i)}),h.append(e,n)}let _=W(`div`,`studio-nav`),v=W(`div`,`studio-nav-mid`);v.append(W(`span`,`studio-where`,o<a?`Category ${o+1} of ${a}`:`Summary`));let y=W(`span`,g?`studio-nav-note`:`studio-nav-note is-idle`,g?`Choose the reference to use instead, or untick the references to leave this category as it is.`:` `);v.append(y),_.append(v);let b=Pa(n,e.selected,s),x=pi([{label:`Categories`,value:String(b.categories),icon:`layers`,tone:`primary`},{label:`Flows affected`,value:String(b.affected),icon:`workflow`,tone:`info`},{label:`Turned on`,value:String(b.turnedOn),icon:`power`,tone:b.turnedOn>0?`warning`:`info`},{label:`Without these references`,value:String(b.unrelated),icon:`minus`,tone:`info`}]),S=s.length>0&&d.length===0,C=S?w(n,e.selected,s,``,!0):null,ee=C!==null&&T(C).length===0,te=ee?`No selected flow can be written with these choices.`:``;return{main:[f,h],foot:_,impact:x,ready:S&&!ee&&e.newReference===null,missing:d,notice:te}}function mo(e,t,n){let r=n.references.filter(t=>e.selected.includes(t.reference.id)),i=new Set(r.map(e=>e.reference.connectorId)),a=i.size>1,o=ro(`from`,`Selected references`,`Every flow that uses them follows the new connection.`);for(let e of r){let t=W(`div`,`source-row`),n=W(`span`,`source-text`);n.append(W(`span`,`source-name`,e.reference.displayName||e.reference.logicalName),W(`span`,`source-logical`,e.reference.logicalName)),t.append(Z(e.reference.connectorId,!1,!0),n,W(`span`,`source-use`,e.reference.connectionId===``?`No connection`:e.reference.connectionId)),o.body.append(t)}let s=ro(`to`,`Connection to use`,`Connections already used by references of this connector, or paste another id.`),c=a?[]:no(n,i);a&&s.body.append(io(`The selected references use different connectors: a connection belongs to one connector. Select references of one connector.`,!0));for(let n of c)s.body.append(so(`Use ${n.id}`,e.newConnectionId===n.id,!1,()=>t.dispatch({type:`setNewConnectionId`,value:n.id}),[W(`span`,`choice-name`,n.id),`Used by ${n.names.join(`, `)}`]));let l=W(`input`,`text-input`);l.type=`text`,l.placeholder=`Paste a connection id`,l.value=c.some(t=>t.id===e.newConnectionId)?``:e.newConnectionId,l.disabled=a,l.setAttribute(`aria-label`,`Or paste a connection id`),l.addEventListener(`input`,()=>t.dispatch({type:`setNewConnectionId`,value:l.value.trim()})),s.body.append(l);let u=Ma(n,e.selected),d=pi([{label:`References`,value:String(u.references),icon:`plug`,tone:`primary`},{label:`Flows affected`,value:String(u.flows),icon:`workflow`,tone:`info`},{label:`Turned on`,value:String(u.turnedOn),icon:`power`,tone:u.turnedOn>0?`warning`:`info`}]),f=W(`div`,`studio`);return f.append(o.root,s.root),{main:[f],impact:d,ready:!a&&r.length>0&&e.newConnectionId!==``,missing:[],notice:``}}function ho(e,t,n,r){let i=e.snapshot,a=e.view===`flows`,o=a?po(e,t,i,n):mo(e,t,i),s=()=>t.dispatch({type:`closeStudio`}),c=W(`div`,`studio-impact`),l=o.missing.length>0?`Still to choose: ${o.missing.join(`, `)}.`:o.notice,u=W(`p`,l===``?`studio-note is-idle`:`studio-note studio-note--warn`);u.append(G(`alert-triangle`,`icon--sm`),l===``?` `:l),c.append(o.impact,u);let d=W(`div`,`studio-bottom`);d.append(c);let f=W(`span`,``);f.append(q(r===``?`Environment`:r,`info`,`database`),` ${e.selected.length} selected in ${i.solution.name}`);let p=gi({tone:`primary`,icon:a?`git-branch`:`link`,title:a?`Re-point flows`:`Change connection`,subtitle:f,body:[...o.main,d],...o.foot?{footNote:o.foot}:{},confirm:{label:`Review changes`,icon:`eye`,disabled:!o.ready||e.busy,onConfirm:a?n.previewRepoint:n.previewConnection},onCancel:()=>{if(e.newReference===null)return s();p.querySelector(`.newref-close`)?.click()}}),m=p.querySelector(`.modal`);m.classList.add(`studio-dialog`),p.classList.add(`studio-overlay`),Sa(p,e.dialogExpanded,e=>t.dispatch({type:`setDialogExpanded`,on:e}));let h=a&&e.newReference!==null?e.newReference:null;h?m.append(to(i,t,n,h,r,e.dependencies)):Ha();let g=m.querySelector(`[data-autofocus]`);g&&delete g.dataset.autofocus;let _=m.querySelector(`.studio .check:not(:disabled), .studio .choice:not(:disabled), .studio input:not(:disabled)`);return h||(_??g)?.setAttribute(`data-autofocus`,`true`),p}function go(e){if(e===``)return[];let t=e.replace(/\r\n/g,`
1
+ (function(){var e=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function t(t){let n;try{n=JSON.parse(t)}catch{return{ok:!1,error:`The flow definition is not valid JSON.`}}return e(n)?{ok:!0,value:n}:{ok:!1,error:`The flow definition is not an object.`}}function n(t){let n=t.properties;if(!e(n))return;let r=n.connectionReferences;return e(r)?r:void 0}function r(t){if(!e(t))return;let n=t.connection;if(!e(n))return;let r=n.connectionReferenceLogicalName;return typeof r==`string`&&r!==``?r:void 0}function i(e){let i=t(e);if(!i.ok)return i;let a=n(i.value);if(!a)return{ok:!0,value:[]};let o=[];for(let e of Object.values(a)){let t=r(e);t!==void 0&&!o.includes(t)&&o.push(t)}return{ok:!0,value:o}}function a(e,t){if(e===t)return!0;if(typeof e!=`object`||typeof t!=`object`||e===null||t===null||Array.isArray(e)!==Array.isArray(t))return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)&&a(e[n],t[n]))}var o=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);function s(e,i,s){let c=t(e);if(!c.ok)return c;let l=typeof i==`string`?[i]:i;if(l.some(e=>e===``)||s===``)return{ok:!1,error:`A reference name is empty.`};let u=[...new Set(l)].filter(e=>e!==s);if(u.length===0)return{ok:!1,error:`There is no reference to replace.`};let d=JSON.parse(e),f=0,p=n(d);if(p)for(let e of Object.values(p)){let t=r(e);t!==void 0&&u.includes(t)&&(e.connection.connectionReferenceLogicalName=s,f++)}if(f===0)return{ok:!1,error:`The flow does not declare ${u.length===1?`the reference`:`any of the references`} ${u.join(`, `)}.`};let m=u.map(e=>o(JSON.stringify(e))).join(`|`),h=RegExp(`("connectionReferenceLogicalName"\\s*:\\s*)(?:${m})`,`g`),g=e.replace(h,(e,t)=>t+JSON.stringify(s)),_=t(g);return!_.ok||!a(_.value,d)?{ok:!1,error:`The edited definition did not pass the safety check.`}:{ok:!0,value:g}}var c={instant:`Instant`,automated:`Automated`,scheduled:`Scheduled`,unknown:`Unknown`},l={type:`unknown`,triggerName:``,triggerType:``,triggerKind:``,triggerOperation:``,actionCount:0},u=e=>typeof e==`object`&&!!e&&!Array.isArray(e),d=e=>typeof e==`string`?e:``;function f(e){if(!u(e))return 0;let t=0;for(let n of Object.values(e)){if(!u(n))continue;t+=1+f(n.actions);let e=n.else;u(e)&&(t+=f(e.actions));let r=n.default;u(r)&&(t+=f(r.actions));let i=n.cases;if(u(i))for(let e of Object.values(i))u(e)&&(t+=f(e.actions))}return t}function p(e){if(e===``)return`unknown`;let t=e.toLowerCase();return t===`recurrence`?`scheduled`:t===`request`?`instant`:`automated`}function m(e){let t;try{t=JSON.parse(e)}catch{return l}if(!u(t))return l;let n=t.properties,r=u(n)?n.definition:void 0;if(!u(r))return l;let i=f(r.actions),a=r.triggers,o=u(a)?Object.entries(a)[0]:void 0;if(!o||!u(o[1]))return{...l,actionCount:i};let s=o[1],c=u(s.inputs)?s.inputs:{},m=u(c.host)?c.host:{},h=d(s.type);return{type:p(h),triggerName:o[0],triggerType:h,triggerKind:d(s.kind),triggerOperation:d(m.operationId),actionCount:i}}function h(e,t,n){let r=[];if(e.connectionId===``)return r.push({kind:`no-connection`,label:`No connection`,detail:`${e.logicalName} has no connection set.`}),r;let i=t.connections[e.connectionId];return i&&(n!==``&&i.ownerName!==n&&r.push({kind:`other-owner`,label:`Other owner`,detail:`Connection owned by ${i.ownerName}, expected ${n}.`}),i.connected||r.push({kind:`not-connected`,label:`Not connected`,detail:`The connection behind ${e.logicalName} is not connected.`})),r}function g(e,t=``){let n=new Map;for(let t of e.references)n.set(t.logicalName,t);let r=e.flows.map(r=>{let a=m(r.clientData),o=i(r.clientData);if(!o.ok)return{flow:r,info:a,uses:[],flags:[],unreadable:!0};let s=o.value.map(r=>{let i=n.get(r);return{logicalName:r,reference:i,flags:i?h(i,e,t):[{kind:`missing-reference`,label:`Missing reference`,detail:`The flow declares ${r}, which does not exist in the environment.`}]}});return{flow:r,info:a,uses:s,flags:s.flatMap(e=>e.flags),unreadable:!1}}),a=new Set(e.memberReferenceIds),o=e.references.filter(e=>a.has(e.id)).map(n=>({reference:n,flowIds:r.filter(e=>e.uses.some(e=>e.logicalName===n.logicalName)).map(e=>e.flow.id),flags:h(n,e,t)}));return{solution:e.solution,flows:r,references:o,allReferences:e.references,componentTypes:e.memberTypes??{}}}function _(e,t,n){if(e.allReferences.some(e=>e.id===t.id))return e;let r=h(t,{connections:{}},``),i=n===void 0?e.componentTypes:{...e.componentTypes,[t.id.toLowerCase()]:n};return{...e,componentTypes:i,allReferences:[...e.allReferences,t],references:[...e.references,{reference:t,flowIds:[],flags:r}]}}function v(e,t,n){return JSON.stringify({kind:e.kind,table:e.entity,environment:t,createdAt:n,rows:e.rows.filter(e=>e.blocked===void 0).map(e=>({id:e.id,name:e.label,column:e.field,previousValue:e.expectedCurrent}))},null,2)}function y(e,t){return`backup-${e.kind}-${t.replace(/[^0-9]/g,``).slice(0,14)}.json`}var b=`The flow is turned on: turn it off first, or allow the tool to turn it off in the confirmation.`;function x(e,t){if(t===``)return[];let n=e.filter(e=>e.ownerId!==``&&e.ownerId!==t);return n.length===0?[]:[`${n.length} of these references are owned by someone else. The environment may refuse changes that involve a reference you do not own; each refusal is reported on its row.`]}function S(e,t,n,r=``){let i=t.map(t=>e.references.find(e=>e.reference.id===t)).filter(e=>e!==void 0),a=new Set(i.map(e=>e.reference.connectorId)).size>1,o=n.trim(),s=i.map(t=>{let n=t.reference,r;return e.solution.managed||n.managed?r=`Managed: read-only.`:a?r=`The selected references use different connectors: a connection belongs to one connector.`:o===``?r=`No connection chosen.`:o===n.connectionId&&(r=`Already uses this connection.`),{id:n.id,label:n.displayName||n.logicalName,field:`connectionid`,oldValue:n.connectionId,newValue:o,payload:o,affectedFlows:t.flowIds.length,affectedOn:t.flowIds.filter(t=>e.flows.find(e=>e.flow.id===t)?.flow.stateCode===1).length,expectedCurrent:n.connectionId,...r===void 0?{}:{blocked:r}}}),c=[];if(o!==``&&!a&&i.length>0){let t=i[0].reference.connectorId;e.allReferences.some(e=>e.connectorId===t&&e.connectionId===o)||c.push(`This connection id is not used by any reference of this connector in the environment. Check that it is a connection of the right connector before applying.`)}let l=s.filter(e=>e.blocked===void 0).reduce((e,t)=>e+t.affectedOn,0);return l>0&&c.push(`${l} affected flows are turned on and will use the new connection immediately.`),c.push(...x(i.map(e=>e.reference),r)),{kind:`connection`,entity:`connectionreference`,rows:s,warnings:c}}function C(e,t,n){let r=t.map(t=>e.allReferences.find(e=>e.logicalName===t)),i=t.find((e,t)=>!r[t]);if(i!==void 0)return`The reference ${i} does not exist.`;if(new Set(r.map(e=>e.connectorId)).size>1)return`The chosen references belong to different connectors.`;let a=e.allReferences.find(e=>e.logicalName===n);if(!a)return`The target reference ${n} does not exist.`;if(!e.references.some(e=>e.reference.logicalName===n))return`The target reference is not in this solution.`;if(r[0].connectorId!==a.connectorId)return`The target uses a different connector.`;if(t.every(e=>e===n))return`Same reference.`}function w(e,t,n,r=``,i=!1){let a=[],o=n.map(e=>({target:e.target,chosen:[...new Set(e.from)]})).filter(e=>e.chosen.length>0).map(e=>({...e,effective:e.chosen.filter(t=>t!==e.target)})),c=o.map(t=>C(e,t.chosen,t.target)).find(e=>e!==void 0),l=0;for(let n of t){let t=e.flows.find(e=>e.flow.id===n);if(!t)continue;let r=t.flow,u=o.map(e=>e.effective.filter(e=>t.uses.some(t=>t.logicalName===e))),d=u.flat(),f,p=r.clientData;if(e.solution.managed||r.managed)f=`Managed: read-only.`;else if(r.stateCode!==0&&!(i&&r.stateCode===1))f=r.stateCode===1?b:`The flow is not off (suspended): turn it off first.`;else if(o.length===0)f=`No reference to replace was chosen.`;else if(c!==void 0)f=c;else if(d.length===0)f=o.some(e=>e.chosen.includes(e.target)&&t.uses.some(t=>t.logicalName===e.target))?`Already uses the new reference: nothing to change.`:`The flow does not use any of the chosen references.`;else{let e=r.clientData;for(let t=0;t<o.length&&f===void 0;t++){if(u[t].length===0)continue;let n=s(e,o[t].effective,o[t].target);n.ok?e=n.value:f=n.error}f===void 0&&(p=e,u.some(e=>e.length>1)&&l++)}let m=d.length>0?d:o.flatMap(e=>e.effective.length>0?e.effective:e.chosen),h=[...new Set(o.filter((e,t)=>u[t].length>0||d.length===0).map(e=>e.target))];a.push({id:n,label:r.name,field:`clientdata`,oldValue:m.join(`, `),newValue:h.join(`, `),payload:p,affectedFlows:1,affectedOn:+(r.stateCode===1),expectedCurrent:r.clientData,...f===void 0?{}:{blocked:f},...i&&r.stateCode===1&&f===void 0?{turnOff:!0}:{}})}let u=[...new Set(o.map(e=>e.target))].map(t=>e.allReferences.find(e=>e.logicalName===t)).filter(e=>e!==void 0),d=u.length>0?x(u,r):[];return l>0&&d.push(`${l} flow${l===1?` holds`:`s hold`} more than one of the chosen references: they will all become the new reference of their category.`),{kind:`repoint`,entity:`workflow`,rows:a,warnings:d,...i?{manageState:!0}:{}}}function ee(e){return e.rows.filter(e=>e.turnOff===!0&&e.blocked===void 0)}function te(e){return e.rows.filter(e=>e.blocked===b)}function ne(e){let t=new Map;for(let n of e.rows)n.blocked!==void 0&&t.set(n.blocked,(t.get(n.blocked)??0)+1);return[...t].map(([e,t])=>({reason:e,count:t})).sort((e,t)=>t.count-e.count)}function T(e){return e.rows.filter(e=>e.blocked===void 0)}function re(e){return T(e).reduce((e,t)=>e+t.affectedFlows,0)}function ie(e){return JSON.stringify({connectionreferenceid:e.id,connectionreferencelogicalname:e.logicalName,connectionreferencedisplayname:e.displayName,connectorid:e.connectorId,connectionid:e.connectionId},null,2)}var E=(e,t,n)=>e===1?t:n;function ae(e,t,n,r,i){let a=new Set(t),o=[],s=new Set,c=e=>a.has(e)&&!s.has(e),l=e.solution.managed?`Managed: read-only.`:void 0,u=(t,r,i,a)=>{let o=n===`remove`?{oldValue:`In this solution`,newValue:`Not in this solution`,field:`membership`}:{oldValue:`Exists`,newValue:`Deleted`,field:`row`},s=e.componentTypes[t.toLowerCase()],c=l??(i?`Managed: read-only.`:void 0);return c===void 0&&n===`remove`&&s===void 0&&(c=`The component type of this ${a} could not be read from the solution.`),{id:t,label:r,payload:``,...o,...s===void 0?{}:{componentType:s},blocked:c}},d=t=>{if(n!==`delete`||r===void 0)return;let a=r[t];if(a===void 0)return`The dependencies could not be checked, so nothing is deleted.`;let o=a.filter(e=>!c(e.id));if(o.length===0)return;let s=[...new Set(o.map(t=>i?.[t.id]??e.flows.find(e=>e.flow.id===t.id)?.flow.name??e.references.find(e=>e.reference.id===t.id)?.reference.displayName??`a component of type ${t.type}`))];return`Other components depend on it (${s.slice(0,3).join(`, `)}${s.length>3?` and ${s.length-3} more`:``}): it cannot be deleted.`},f=t=>e.flows.some(e=>e.flow.id===t);for(let t of[...a].sort((e,t)=>Number(f(t))-Number(f(e)))){let r=e.flows.find(e=>e.flow.id===t);if(r){let e=r.flow,i=u(t,e.name,e.managed,`flow`),a=i.blocked??d(t),c=!1;a===void 0&&n===`delete`&&e.stateCode!==0&&(e.stateCode===1?c=!0:a=`The flow is not off (suspended): turn it off first.`),a!==void 0&&s.add(t);let l=n===`delete`&&i.componentType===void 0?{componentType:29}:{},{blocked:f,...p}=i;o.push({...p,...l,entity:`workflow`,affectedFlows:1,affectedOn:+(e.stateCode===1),expectedCurrent:e.clientData,...a===void 0?{}:{blocked:a},...c?{turnOff:!0}:{}});continue}let i=e.references.find(e=>e.reference.id===t);if(!i)continue;let a=i.reference,l=u(t,a.displayName||a.logicalName,a.managed,`reference`),f=l.blocked,p=i.flowIds.filter(e=>!c(e)).length;f===void 0&&p>0&&(f=`Used by ${p} ${E(p,`flow`,`flows`)} of this solution that ${E(p,`stays`,`stay`)}: re-point ${E(p,`it`,`them`)} or take ${E(p,`it`,`them`)} out first.`),f??=d(t),f!==void 0&&s.add(t);let{blocked:m,...h}=l;o.push({...h,entity:`connectionreference`,affectedFlows:i.flowIds.length,affectedOn:0,expectedCurrent:ie(a),...f===void 0?{}:{blocked:f}})}let p=o.filter(e=>e.blocked===void 0),m=[];if(n===`remove`)m.push(`The rows stay in the environment and in every other solution that holds them: only their place in this solution goes. They can be added back from the maker portal.`);else{m.push(`Delete is permanent: the rows are removed from the environment and from every solution that holds them. Undo is not possible.`),p.some(t=>e.flows.some(e=>e.flow.id===t.id))&&m.push(`The run history of a deleted flow is deleted with it.`),p.some(t=>e.references.some(e=>e.reference.id===t.id))&&m.push(`The connection behind a deleted reference is not deleted. The environment may refuse to delete a reference that a flow outside this solution still uses: each refusal is reported on its row.`);let t=p.filter(e=>e.turnOff===!0).length;t>0&&m.push(`${t} ${E(t,`flow is`,`flows are`)} turned on: the tool turns ${E(t,`it`,`them`)} off first and then deletes ${E(t,`it`,`them`)}.`)}return{kind:n,entity:o.every(t=>e.references.some(e=>e.reference.id===t.id))&&o.length>0?`connectionreference`:`workflow`,rows:o,warnings:m,solution:{id:e.solution.id,uniqueName:e.solution.uniqueName}}}function D(e){let t=Number.isFinite(e)&&e>0?Math.floor(e/1e3):0,n=e=>String(e).padStart(2,`0`);return t<60?`${t} s`:t<3600?`${Math.floor(t/60)} min ${n(t%60)} s`:`${Math.floor(t/3600)} h ${n(Math.floor(t%3600/60))} min`}var oe=[`Confirmed`,`Write and verify`,`Refresh`,`Summary`],se=[`Confirmed`,`Turn off`,`Write and verify`,`Turn on`,`Refresh`,`Summary`];function ce(e,t,n=!1){if(n){let n={off:1,write:2,on:3,refresh:4,done:6}[e],r=se.map((e,t)=>t<n?`done`:t===n?`active`:`pending`);return e===`done`&&t&&(r[4]=`error`),se.map((e,t)=>({label:e,state:r[t]}))}let r=e===`write`||e===`off`||e===`on`?[`done`,`active`,`pending`,`pending`]:e===`refresh`?[`done`,`done`,`active`,`pending`]:[`done`,`done`,t?`error`:`done`,`done`];return oe.map((e,t)=>({label:e,state:r[t]}))}function le(e,t,n,r){let i=D(r);return e===`off`?`Turning the flows off · ${i}`:e===`on`?`Turning the flows on again · ${i}`:e===`write`?`Writing and verifying: ${t} of ${n} row${n===1?``:`s`} · ${i}`:e===`refresh`?`Reading the solution again · ${i}`:`Finished in ${i}`}function ue(e){let t=t=>e.filter(e=>e.status===t).length;return{changed:t(`done`),skipped:t(`skipped`),failed:t(`failed`),total:e.length}}function de(e,t){let n,r,i;return e.total===0?(n=`warning`,r=`Nothing to write`,i=[`No row could be written.`]):e.changed===0?(n=`error`,r=`Nothing was written`,i=[`${e.failed} failed, ${e.skipped} skipped. Read the messages below.`]):e.failed===0&&e.skipped===0?(n=`success`,r=`All changes were written`,i=[`${e.changed} row${e.changed===1?` was`:`s were`} written and read back.`]):(n=`warning`,r=`Partly done`,i=[`${e.changed} written, ${e.skipped} skipped, ${e.failed} failed.`]),t&&(n===`success`&&(n=`warning`),i=[...i,`The solution could not be read again, so the data on screen may be old. Use Refresh.`]),{tone:n,title:r,lines:i}}var fe={failed:0,skipped:1,done:2};function pe(e){return e.map((e,t)=>({r:e,i:t})).sort((e,t)=>fe[e.r.status]-fe[t.r.status]||e.i-t.i).map(e=>e.r)}function me(e,t,n){return e===`done`?100:e===`refresh`?92:e===`on`?88:e===`off`?5:n<=0?0:Math.round(Math.min(Math.max(t,0),n)/n*85)}function he(e){return e===`off`?`Turning flows off`:e===`write`?`Processing your changes`:e===`on`?`Turning flows on again`:e===`refresh`?`Reading the solution again`:`Finished`}function ge(e){return JSON.stringify({tool:`Connection Reference Governance`,operation:e.operation,solution:e.solution,environment:e.environment,startedAt:new Date(e.startedAt).toISOString(),finishedAt:new Date(e.finishedAt).toISOString(),durationMs:Math.max(0,e.finishedAt-e.startedAt),summary:ue(e.results),rows:e.results.map(e=>({id:e.id,name:e.label,outcome:e.status,message:e.message,...e.stateChange?{stateChange:e.stateChange}:{}})),turnedOff:e.results.filter(e=>e.stateChange!==void 0).map(e=>({name:e.label,onAgain:e.stateChange===`back-on`}))},null,2)}function _e(e,t){return`report-${e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)}-${new Date(t).toISOString().replace(/[^0-9]/g,``).slice(0,14)}.json`}var ve=[{key:`choose`,label:`Choose`},{key:`preview`,label:`Preview`},{key:`apply`,label:`Apply`},{key:`result`,label:`Result`}],ye=e=>ve.findIndex(t=>t.key===e);function be(e,t){return e===`preview`||e===`result`?t===`leave`:!1}function xe(e){let t=e===`preview`;return ve.filter(t=>t.key!==`choose`&&ye(t.key)<=ye(e)).map(n=>({key:n.key,label:n.label,link:t&&ye(n.key)<ye(e)}))}var Se=e=>({connection:`Change connection`,repoint:`Re-point flows`,remove:`Remove from this solution`,delete:`Delete`})[e];function Ce(e){return{preview:`Preview what will be stored`,apply:`Processing your changes`,result:`Result`}[e]}var we={mail:`info`,user:`primary`,users:`primary`,chat:`info`,layout:`primary`,cloud:`info`,table:`success`,"file-text":`info`,database:`primary`,"clipboard-check":`success`,"clipboard-list":`success`,"bar-chart":`warning`,key:`warning`,"git-branch":`primary`,globe:`info`,bell:`warning`,bot:`primary`,sliders:`muted`,plug:`muted`,sun:`warning`,layers:`info`,rss:`warning`},Te=e=>we[e]??`muted`,Ee={office365:{name:`Office 365 Outlook`,glyph:`mail`},office365users:{name:`Office 365 Users`,glyph:`user`},office365groups:{name:`Office 365 Groups`,glyph:`users`},office365groupsmail:{name:`Office 365 Groups Mail`,glyph:`mail`},sharepointonline:{name:`SharePoint`,glyph:`layout`},teams:{name:`Microsoft Teams`,glyph:`chat`},onedriveforbusiness:{name:`OneDrive for Business`,glyph:`cloud`},onedrive:{name:`OneDrive`,glyph:`cloud`},excelonlinebusiness:{name:`Excel Online (Business)`,glyph:`table`},wordonlinebusiness:{name:`Word Online (Business)`,glyph:`file-text`},onenote:{name:`OneNote (Business)`,glyph:`file-text`},planner:{name:`Planner`,glyph:`clipboard-list`},todo:{name:`Microsoft To-Do (Business)`,glyph:`clipboard-check`},approvals:{name:`Standard approvals`,glyph:`clipboard-check`},microsoftforms:{name:`Microsoft Forms`,glyph:`clipboard-list`},powerbi:{name:`Power BI`,glyph:`bar-chart`},commondataserviceforapps:{name:`Microsoft Dataverse`,glyph:`database`},commondataservice:{name:`Microsoft Dataverse (legacy)`,glyph:`database`},dynamicscrmonline:{name:`Dynamics 365 (deprecated)`,glyph:`database`},sql:{name:`SQL Server`,glyph:`database`},kusto:{name:`Azure Data Explorer`,glyph:`database`},azureblob:{name:`Azure Blob Storage`,glyph:`cloud`},azuretables:{name:`Azure Table Storage`,glyph:`table`},azurequeues:{name:`Azure Queues`,glyph:`layers`},servicebus:{name:`Service Bus`,glyph:`layers`},azureeventgrid:{name:`Azure Event Grid`,glyph:`layers`},keyvault:{name:`Azure Key Vault`,glyph:`key`},azuread:{name:`Microsoft Entra ID`,glyph:`user`},visualstudioteamservices:{name:`Azure DevOps`,glyph:`git-branch`},webcontents:{name:`HTTP with Microsoft Entra ID (preauthorized)`,glyph:`globe`},webcontentsv2:{name:`HTTP With Microsoft Entra ID`,glyph:`globe`},rss:{name:`RSS`,glyph:`rss`},msnweather:{name:`MSN Weather`,glyph:`sun`},sendmail:{name:`Mail`,glyph:`mail`},outlook:{name:`Outlook.com`,glyph:`mail`},gmail:{name:`Gmail`,glyph:`mail`},slack:{name:`Slack`,glyph:`chat`},powerappsnotification:{name:`Power Apps Notification`,glyph:`bell`},microsoftcopilotstudio:{name:`Microsoft Copilot Studio`,glyph:`bot`},powerplatformforadmins:{name:`Power Platform for Admins`,glyph:`sliders`},flowmanagement:{name:`Power Automate Management`,glyph:`sliders`}},De=`plug`;function Oe(e){return(e.split(`/`).filter(Boolean).pop()??``).toLowerCase().replace(/^shared_/,``)}function ke(e){let t=(e.split(`-`)[0]??``).replace(/_/g,` `).trim();return t===``?`Unknown connector`:t.replace(/\b\w/g,e=>e.toUpperCase())}function O(e){let t=Oe(e),n=Object.prototype.hasOwnProperty.call(Ee,t)?Ee[t]:void 0;return n?{key:t,name:n.name,glyph:n.glyph,known:!0,tone:Te(n.glyph)}:{key:t,name:ke(t),glyph:De,known:!1,tone:Te(De)}}var k=e=>typeof e==`string`?e:``,A=e=>typeof e==`object`&&e?e:{};function Ae(e){if(Array.isArray(e))return e;let t=A(e);for(let e of[t.value,A(t.data).value,A(t.body).value])if(Array.isArray(e))return e;return[]}function je(e){return(/\/apis\/([^/]+)\/connections\//i.exec(e)?.[1]??``).toLowerCase().replace(/^shared_/,``)}function Me(e){return Ae(e).flatMap(e=>{let t=A(e),n=k(t.name);if(n===``)return[];let r=A(t.properties);return[{name:n,connectorKey:je(k(t.id)),displayName:k(r.displayName),createdTime:k(r.createdTime)}]})}function Ne(e){let t=A(e),n=t.value,r=A(t.Detail),i=A(Array.isArray(n)?A(n[0]).Detail:A(n).Detail);return k(r.EnvironmentId)||k(i.EnvironmentId)}function j(e){let t=e.trim(),n=/\/connections\/([^/?#]+)\s*$/i.exec(t);return n?n[1]:t}var Pe={status:`idle`,items:[],error:``};function Fe(e,t,n){if(e.status!==`ready`)return`unknown`;let r=e.items.find(e=>e.name.toLowerCase()===n.toLowerCase());if(!r)return`missing`;let i=Oe(t).toLowerCase();return r.connectorKey!==``&&i!==``&&r.connectorKey!==i?`other-connector`:`found`}function Ie(e,t){let n=Oe(t).toLowerCase();return e.items.filter(e=>e.connectorKey===n)}var Le=/unauthenticated|reconnect|re-?authenticat|sign in again|expired/i;function Re(e){if(!Array.isArray(e)||e.length===0)return{status:`unknown`,detail:``};let t=``,n=``,r=!0;for(let i of e){let e=A(i),a=k(e.status),o=A(e.error),s=[k(o.code),k(o.message),a].filter(e=>e!==``).join(`: `);a.toLowerCase()!==`connected`&&(r=!1),Le.test(`${a} ${k(o.code)} ${k(o.message)}`)?t||=s:(/error/i.test(a)||Object.keys(o).length>0)&&(n||=s)}return t===``?n===``?r?{status:`connected`,detail:``}:{status:`unknown`,detail:``}:{status:`error`,detail:n}:{status:`reconnect`,detail:t}}function ze(e){return Ae(e).flatMap(e=>{let t=A(e),n=k(t.name);if(n===``)return[];let r=A(t.properties),i=je(k(t.id))||Oe(k(r.apiId)),a=A(r.createdBy),{status:o,detail:s}=Re(r.statuses);return[{name:n,connectorKey:i,connectorName:i===``?``:O(`shared_${i}`).name,displayName:k(r.displayName),status:o,statusDetail:s,createdTime:k(r.createdTime),modifiedTime:k(r.lastModifiedTime),creator:{name:k(a.displayName)||k(a.userPrincipalName),email:k(a.email)}}]})}function Be(e){let t=A(e);for(let e of[t.nextLink,A(t.data).nextLink,A(t.body).nextLink,t[`@odata.nextLink`]]){let t=k(e).trim();if(t!==``)return t}return``}var Ve=(e=`unused`,t=[])=>({tab:e,picked:t,keepers:{},open:[],summaryHidden:!1}),He=(e,t)=>(e.displayName||e.logicalName).localeCompare(t.displayName||t.logicalName,void 0,{sensitivity:`base`})||e.logicalName.localeCompare(t.logicalName),Ue=e=>`${e.connectorId.toLowerCase()}|${e.customConnectorId.toLowerCase()}|${e.connectionId.trim().toLowerCase()}`;function We(e){let t=new Map;for(let n of e.references){let r=n.reference;if(r.connectionId.trim()===``)continue;let i=n.flowIds.map(t=>e.flows.find(e=>e.flow.id===t)?.flow.name??t);t.set(Ue(r),[...t.get(Ue(r))??[],{reference:r,flows:i,flowIds:n.flowIds}])}return[...t].filter(([,e])=>e.length>=2).map(([e,t])=>{let n=[...t].sort((e,t)=>He(e.reference,t.reference)),r=[...n].sort((e,t)=>t.flowIds.length-e.flowIds.length||e.reference.logicalName.localeCompare(t.reference.logicalName))[0];return{key:e,connectorId:n[0].reference.connectorId,connectionId:n[0].reference.connectionId,members:n,suggestedKeeper:r.reference.id}}).sort((e,t)=>t.members.length-e.members.length||e.key.localeCompare(t.key))}function Ge(e,t){let n=t?.keepers[e.key];return n!==void 0&&e.members.some(e=>e.reference.id===n)?n:e.suggestedKeeper}function Ke(e,t=null){let n=We(e),r=t=>{let n=e.references.find(e=>e.reference.id===t)?.reference;return n?n.displayName||n.logicalName:void 0};return e.references.filter(e=>e.flowIds.length===0).map(i=>{let a=i.reference,o=n.find(e=>e.members.some(e=>e.reference.id===a.id));return{reference:a,blocked:e.solution.managed||a.managed?`Managed: read-only.`:void 0,neverConnected:a.connectionId.trim()===``,duplicateOf:o&&Ge(o,t)!==a.id?r(Ge(o,t)):void 0}}).sort((e,t)=>He(e.reference,t.reference))}var qe=e=>e.flows.filter(e=>e.unreadable).length;function Je(e,t,n){let r=t.members.find(e=>e.reference.id===n);if(!r)return;let i=t.members.filter(e=>e.reference.id!==n),a=i.filter(e=>e.flowIds.length>0),o=[...new Set(a.flatMap(e=>e.flowIds))].filter(t=>e.flows.some(e=>e.flow.id===t&&!e.unreadable));return{keeper:r.reference,duplicates:i.map(e=>e.reference),flowIds:o,group:o.length===0?null:{connectorId:t.connectorId,from:a.map(e=>e.reference.logicalName),target:r.reference.logicalName}}}function Ye(e){let t=We(e),n=new Set;for(let r of t){let t=Je(e,r,r.suggestedKeeper);for(let e of t?.flowIds??[])n.add(e)}return{unused:Ke(e).length,groups:t.length,flows:n.size}}function Xe(e,t){let n=new Set(Ke(e).filter(e=>e.blocked===void 0).map(e=>e.reference.id)),r=t.picked.filter(e=>n.has(e)),i=We(e),a=Object.entries(t.keepers).filter(([e,t])=>i.find(t=>t.key===e)?.members.some(e=>e.reference.id===t)===!0),o=r.length===t.picked.length,s=a.length===Object.keys(t.keepers).length;return o&&s?t:{...t,picked:r,keepers:Object.fromEntries(a)}}var Ze=2e3;function Qe(e,t=`00000`){return{connectorId:e,displayName:``,name:``,nameTouched:!1,description:``,connectionId:``,connectionSource:`none`,checked:null,live:Pe,openConnections:[],seed:t,suggestOpen:!0,step:``,reviewing:!1,saving:!1,error:``}}function $e(){let e=new Uint8Array(3);if(globalThis.crypto?.getRandomValues)globalThis.crypto.getRandomValues(e);else for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return[...e].map(e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,5)}function et(e){return e.normalize(`NFD`).replace(/[̀-ͯ]/g,``).replace(/[^A-Za-z0-9]+/g,``).replace(/^[0-9]+/,``).slice(0,50)}function tt(e){let t=e.solution.prefix.trim();if(t!==``)return t;let n=new Set(e.references.map(e=>/^([A-Za-z][A-Za-z0-9]{1,7})_/.exec(e.reference.logicalName)?.[1]?.toLowerCase()).filter(e=>e!==void 0));return n.size===1?[...n][0]:``}var M=(e,t)=>`${e}_${t}`,nt=/^[A-Za-z][A-Za-z0-9_]*$/,rt=/^[A-Za-z0-9][A-Za-z0-9_.-]*$/,it=(e,t)=>e.allReferences.some(e=>e.logicalName.toLowerCase()===t.toLowerCase());function at(e,t){let n={},r=[],i=tt(e),a=t.displayName.trim();a===``?n.displayName=`Enter a display name.`:a.length>200&&(n.displayName=`At most 200 characters.`),t.description.trim().length>2e3&&(n.description=`At most ${Ze} characters.`),i===``&&(n.prefix=`The publisher prefix of this solution could not be found, so a name cannot be built.`),t.name===``?n.name=`Enter a name.`:nt.test(t.name)?t.name.length>50?n.name=`At most 50 characters.`:i!==``&&it(e,M(i,t.name))&&(n.name=`${M(i,t.name)} already exists in this environment.`):n.name=`Letters, digits and underscores only, starting with a letter.`;let o=j(t.connectionId);if(o===``)n.connectionId=`Choose a connection. A reference without one cannot be saved in the Maker portal, and flows moved onto it cannot be written (error 0x80060467).`;else if(!rt.test(o)||o.length>1e3)n.connectionId=`Letters, digits, "-", "_" and "." only.`;else{let e=t.connectionSource===`typed`&&t.checked!==null&&t.checked.id===o.toLowerCase();if(t.connectionSource===`typed`&&!e)n.connectionId=`Press Enter or the search icon to check this connection.`;else{let e=t.connectionSource===`typed`?t.checked.verdict:Fe(t.live,t.connectorId,o);e===`missing`?n.connectionId=`This connection was not found among your connections. Check the id, or press Refresh.`:e===`other-connector`?n.connectionId=`This connection belongs to another connector, not ${O(t.connectorId).name}.`:e===`unknown`&&(n.connectionId=t.live.status===`loading`?`Reading your connections...`:`Your connections could not be read${t.live.error===``?``:` (${t.live.error})`}, so this one cannot be verified. Press Refresh to try again.`)}}if(a!==``){let t=e.allReferences.filter(e=>(e.displayName||``).trim().toLowerCase()===a.toLowerCase());t.some(t=>e.references.some(e=>e.reference.id===t.id))?r.push(`Another reference in this solution has the same display name. Microsoft recommends a unique display name so references can be told apart.`):t.length>0&&r.push(`A reference elsewhere in this environment has the same display name. It is allowed, but a unique name is easier to tell apart.`)}return{errors:n,warnings:r,ok:Object.keys(n).length===0}}function ot(e,t){let n=new Set(e.allReferences.filter(e=>e.connectorId===t).map(e=>e.customConnectorId));return n.size===1?[...n][0]:``}function st(e,t){let n={connectionreferencelogicalname:M(tt(e),t.name),connectionreferencedisplayname:t.displayName.trim(),connectorid:t.connectorId};t.description.trim()!==``&&(n.description=t.description.trim());let r=j(t.connectionId);r!==``&&(n.connectionid=r);let i=ot(e,t.connectorId);return i!==``&&(n[`customconnectorid@odata.bind`]=`/connectors(${i})`),n}function ct(e,t){return Ie(t.live,t.connectorId).map(t=>{let n=e.allReferences.filter(e=>e.connectionId.toLowerCase()===t.name.toLowerCase()).map(t=>({id:t.id,logicalName:t.logicalName,displayName:t.displayName||t.logicalName,ownerName:t.ownerName,ownerEmail:t.ownerEmail??``,flows:e.flows.filter(e=>e.uses.some(e=>e.logicalName===t.logicalName)).map(e=>e.flow.name)}));return{id:t.name,displayName:t.displayName,createdTime:t.createdTime,users:n,flowCount:new Set(n.flatMap(e=>e.flows)).size}}).sort((e,t)=>t.users.length-e.users.length||(e.displayName||e.id).localeCompare(t.displayName||t.id,void 0,{sensitivity:`base`}))}function lt(e,t,n,r){let i=e=>e.slice(0,50);if(!it(e,M(t,i(n))))return i(n);for(let a=0;a<1e3;a++){let o=`_${r}${a===0?``:String(a)}`,s=i(n.slice(0,50-o.length)+o);if(!it(e,M(t,s)))return s}return i(n)}function ut(e,t){let n=tt(e);if(n===``)return[];let r=O(t.connectorId).name,i=e.solution.name,a=Oe(t.connectorId).replace(/[^a-z0-9]/g,``),o=t.seed,s=t=>e.allReferences.some(e=>(e.displayName||``).trim().toLowerCase()===t.toLowerCase())?`${t}-${o}`:t,c=[{label:`Maker style`,displayName:`${r} ${i}-${o}`,name:lt(e,n,`shared${a}_${o}`,o),description:`${r} connection reference for ${i}.`},{label:`Readable`,displayName:s(`${r} - ${i}`),name:lt(e,n,et(`${r} ${i}`),o),description:`Connection used by the flows of ${i}.`}],l=t.connectionSource===`card`?Ie(t.live,t.connectorId).find(e=>e.name.toLowerCase()===j(t.connectionId).toLowerCase()):void 0;if(l&&l.displayName!==``){let t=l.displayName;c.push({label:`By account`,displayName:s(`${r} (${t})`),name:lt(e,n,et(`${r} ${t}`),o),description:`${r} as ${t}, for ${i}.`})}return c}function dt(e,t,n){let r={...e,reviewing:!1,error:``};return t===`connectionId`?{...r,connectionId:n,connectionSource:n.trim()===``?`none`:`typed`}:t===`displayName`?{...r,displayName:n,name:e.nameTouched?e.name:et(n)}:t===`name`?{...r,name:n,nameTouched:n!==``}:{...r,[t]:n}}function ft(e,t){return{...e,displayName:t.displayName,name:t.name,nameTouched:!0,description:t.description,suggestOpen:!1,reviewing:!1,error:``}}function pt(e,t){return e.displayName===t.displayName&&e.name===t.name&&e.description===t.description}function mt(e,t){return{...e,connectionId:t,connectionSource:t===``?`none`:`card`,reviewing:!1,error:``}}function ht(e,t,n){let r=j(t);if(e.connectionSource!==`typed`||j(e.connectionId).toLowerCase()!==r.toLowerCase())return e;if(n===`found`){let t=e.live.items.find(e=>e.name.toLowerCase()===r.toLowerCase());return mt(e,t?t.name:r)}return{...e,checked:{id:r.toLowerCase(),verdict:n}}}var gt=[`flow`,`agent`,`app`,`other`],_t={flow:`Flows`,agent:`Agents`,app:`Apps`,other:`Other components`},vt={flow:`workflow`,agent:`bot`,app:`layout`,other:`layers`},yt={1:{name:`Table`,entity:`entity`},20:{name:`Security role`,entity:`role`},24:{name:`Form`,entity:`systemform`},29:{name:`Flow`,entity:`workflow`},300:{name:`Canvas app`,entity:`canvasapp`},371:{name:`Connector`,entity:`connector`},372:{name:`Connector`,entity:`connector`},380:{name:`Environment variable`,entity:`environmentvariabledefinition`},381:{name:`Environment variable value`,entity:`environmentvariablevalue`}},bt=(e,t)=>t?.get(e)??yt[e];function xt(e,t){let n=(t??yt[e])?.entity.toLowerCase()??``;return e===29||n===`workflow`?`flow`:n===`bot`||n===`botcomponent`?`agent`:e===300||n===`canvasapp`||n===`appmodule`?`app`:`other`}var St=(e,t)=>(t??yt[e])?.name||`Component of type ${e}`,Ct={0:`Workflow`,1:`Dialog`,2:`Business rule`,3:`Action`,4:`Business process flow`,5:`Cloud flow`,6:`Desktop flow`,7:`AI flow`},wt={0:`Off`,1:`On`,2:`Suspended`};function Tt(e){let t={flow:0,agent:0,app:0,other:0};for(let n of e.items)t[n.kind]++;let n=e.items.filter(e=>e.inOpenSolution).length;return{total:e.items.length,inSolution:n,outside:e.items.length-n,byKind:t}}function Et(e){return gt.map(t=>({kind:t,label:_t[t],icon:vt[t],items:e.items.filter(e=>e.kind===t).sort((e,t)=>Number(e.inOpenSolution)-Number(t.inOpenSolution)||e.name.localeCompare(t.name,void 0,{sensitivity:`base`}))})).filter(e=>e.items.length>0)}function Dt(e){if(e.total===0)return`Nothing depends on it anywhere in the environment.`;let t=[`${e.total} ${e.total===1?`component depends`:`components depend`} on it`];return t.push(e.outside===0?`all in this solution`:`${e.inSolution} in this solution, ${e.outside} outside`),`${t.join(`: `)}.`}function Ot(e){let t=e.solutions.length===0?e.inOpenSolution?`in this solution`:`outside this solution`:`in ${e.solutions.join(` and `)}`;return`${e.name} (${e.typeLabel}, ${t})`}var N=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,kt=20,P=e=>typeof e==`string`?e:``,F=e=>e instanceof Error?e.message:String(e),At=`solutionid,friendlyname,uniquename,ismanaged,version,createdon`;function jt(e){let t=e.publisherid;return{id:P(e.solutionid),name:P(e.friendlyname)||P(e.uniquename),uniqueName:P(e.uniquename),managed:e.ismanaged===!0,version:P(e.version),publisher:typeof t==`object`&&t?P(t.friendlyname):``,prefix:typeof t==`object`&&t?P(t.customizationprefix):``,createdOn:P(e.createdon)}}async function Mt(e){let t=`solutions?$select=${At}`,n=`&$filter=isvisible eq true&$orderby=friendlyname`,r;try{try{r=await e.query(`${t}&$expand=publisherid($select=friendlyname,customizationprefix)${n}`)}catch{r=await e.query(`${t}${n}`)}}catch(e){return{ok:!1,error:`Could not read solutions: ${F(e)}`}}return{ok:!0,value:r.filter(e=>N.test(P(e.solutionid))).map(jt)}}var Nt=5e3;async function Pt(e,t){try{let n=await e.query(`workflows?$select=workflowid&$filter=category eq 5 and type eq 1`),r=await e.query(`solutioncomponents?$select=_solutionid_value,objectid&$filter=componenttype eq 29`);if(n.length>=Nt||r.length>=Nt)return{ok:!1,error:`Too many rows to count flows reliably.`};let i=new Set(n.map(e=>P(e.workflowid).toLowerCase())),a=new Set(t.map(e=>e.toLowerCase())),o=new Map,s=new Set;for(let e of r){let t=P(e._solutionid_value).toLowerCase(),n=P(e.objectid).toLowerCase();a.has(t)&&i.has(n)&&(o.set(t,(o.get(t)??new Set).add(n)),s.add(n))}let c={};for(let e of t)c[e]=o.get(e.toLowerCase())?.size??0;return{ok:!0,value:{perSolution:c,total:s.size}}}catch(e){return{ok:!1,error:`Could not count flows: ${F(e)}`}}}function Ft(e){return{id:P(e.connectionreferenceid),logicalName:P(e.connectionreferencelogicalname),displayName:P(e.connectionreferencedisplayname),connectorId:P(e.connectorid),connectionId:P(e.connectionid),customConnectorId:P(e._customconnectorid_value).toLowerCase(),ownerName:``,ownerId:P(e._ownerid_value).toLowerCase(),managed:e.ismanaged===!0}}async function It(e,t){let n=new Map,r=[[`systemusers`,`systemuserid`,`fullname`],[`teams`,`teamid`,`name`]];for(let i=0;i<t.length;i+=kt){let a=e=>t.slice(i,i+kt).map(t=>`${e} eq ${t}`).join(` or `);for(let[t,i,o]of r)try{let r=await e.query(`${t}?$select=${i},${o}&$filter=${a(i)}`);for(let e of r){let t=P(e[i]).toLowerCase();N.test(t)&&P(e[o])!==``&&n.set(t,P(e[o]))}}catch{}}return n}async function Lt(e,t){let n=new Map;for(let r=0;r<t.length;r+=kt)try{let i=t.slice(r,r+kt).map(e=>`systemuserid eq ${e}`).join(` or `),a=await e.query(`systemusers?$select=systemuserid,internalemailaddress&$filter=${i}`);for(let e of a){let t=P(e.systemuserid).toLowerCase();N.test(t)&&P(e.internalemailaddress)!==``&&n.set(t,P(e.internalemailaddress))}}catch{}return n}async function Rt(e,t){if(!N.test(t.id))return{ok:!1,error:`Invalid solution id.`};try{let n=await e.query(`solutioncomponents?$select=objectid,componenttype&$filter=_solutionid_value eq ${t.id}`),r=n.map(e=>P(e.objectid).toLowerCase()).filter(e=>N.test(e)),i=new Set(r),a={};for(let e of n){let t=P(e.objectid).toLowerCase();N.test(t)&&typeof e.componenttype==`number`&&(a[t]=e.componenttype)}let o=(await e.query(`connectionreferences?$select=connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectorid,connectionid,ismanaged,_ownerid_value,_customconnectorid_value`)).map(Ft).filter(e=>N.test(e.id)),s=await It(e,[...new Set(o.map(e=>e.ownerId).filter(e=>N.test(e)))]),c=await Lt(e,[...new Set(o.map(e=>e.ownerId).filter(e=>N.test(e)))]),l=o.map(e=>({...e,ownerName:s.get(e.ownerId)??``,ownerEmail:c.get(e.ownerId)??``})),u=l.filter(e=>i.has(e.id.toLowerCase())).map(e=>e.id),d=n.filter(e=>e.componenttype===29).map(e=>P(e.objectid)).filter(e=>N.test(e)),f=[];for(let t=0;t<d.length;t+=kt){let n=d.slice(t,t+kt).map(e=>`workflowid eq ${e}`).join(` or `),r=await e.query(`workflows?$select=workflowid,name,statecode,ismanaged,clientdata,description,createdon,modifiedon,_ownerid_value&$filter=category eq 5 and type eq 1 and (${n})`);for(let e of r)f.push({id:P(e.workflowid),name:P(e.name),stateCode:typeof e.statecode==`number`?e.statecode:0,managed:e.ismanaged===!0,clientData:P(e.clientdata),description:P(e.description),createdOn:P(e.createdon),modifiedOn:P(e.modifiedon),ownerId:P(e._ownerid_value).toLowerCase(),ownerName:``})}let p=await It(e,[...new Set(f.map(e=>e.ownerId).filter(e=>N.test(e)))]),m=f.map(e=>({...e,ownerName:p.get(e.ownerId)??``}));return m.sort((e,t)=>e.name.localeCompare(t.name)),{ok:!0,value:{solution:t,references:l,memberReferenceIds:u,memberTypes:a,flows:m,connections:{}}}}catch(e){return{ok:!1,error:`Could not read the solution: ${F(e)}`}}}async function zt(e,t,n){if(!N.test(n.id))return;let r=t===`workflow`?`workflows`:`connectionreferences`,i=t===`workflow`?`workflowid`:`connectionreferenceid`,a=await e.query(`${r}?$select=${n.field}&$filter=${i} eq ${n.id}`);return a.length===1?P(a[0][n.field]):void 0}var Bt=`Written and read back.`;async function Vt(e,t){if(!N.test(t))return;let n=await e.query(`workflows?$select=statecode&$filter=workflowid eq ${t}`),r=n.length===1?n[0].statecode:void 0;return typeof r==`number`?r:void 0}async function Ht(e,t,n){try{await e.update(`workflow`,t,n===`off`?{statecode:0,statuscode:1}:{statecode:1,statuscode:2});let r=await Vt(e,t);return r===(n===`off`?0:1)?void 0:`the environment accepted the change but the flow is ${r===1?`still on`:r===0?`still off`:`in an unknown state`}`}catch(e){return F(e)}}async function Ut(e,t,n,r){let i=[],a=new Set(T(t).map(e=>e.id)),o=e=>{i.push(e);try{n?.(e,i.length,t.rows.length)}catch{}},s=(e,t,n,r)=>({id:e.id,label:e.label,status:t,message:n,...r?{stateChange:r}:{}}),c=ee(t),l=new Set,u=new Set;if(c.length>0){r?.(`off`);for(let t of c)try{if(await Vt(e,t.id)!==1){u.add(t.id),o(s(t,`skipped`,`The state changed since the preview (the flow is no longer on); the flow was left alone and nothing was written.`));continue}let n=await Ht(e,t.id,`off`);if(n!==void 0){u.add(t.id),o(s(t,`failed`,`The flow could not be turned off: ${n}. Nothing was written.`));continue}l.add(t.id)}catch(e){u.add(t.id),o(s(t,`failed`,`The flow could not be turned off: ${F(e)}. Nothing was written.`))}}r?.(`write`);let d=new Map;for(let n of t.rows){if(u.has(n.id))continue;let r=(e,t)=>{let r=s(n,e,t);l.has(n.id)?d.set(n.id,r):o(r)};if(!a.has(n.id))r(`skipped`,n.blocked??`Blocked.`);else if(t.kind===`remove`||t.kind===`delete`){let i=await Zt(e,t,n);r(i.status,i.message)}else try{let i=await zt(e,t.entity,n);if(i===void 0){r(`skipped`,`The row could not be read again; nothing was written.`);continue}if(i!==n.expectedCurrent){r(`skipped`,`Changed by someone else since the preview; nothing was written. Refresh and preview again.`);continue}await e.update(t.entity,n.id,{[n.field]:n.payload});let a=await zt(e,t.entity,n);Qt(t.kind,n,a)?r(`done`,Bt):r(`failed`,`Written, but the stored value could not be confirmed. Check the row before relying on it.`)}catch(e){r(`failed`,F(e))}}if(t.kind===`delete`){for(let e of t.rows){let t=d.get(e.id);t&&o(t.status===`done`?t:{...t,message:`${t.message} The flow was turned off by this run and is still off.`,stateChange:`left-off`})}return i}if(l.size>0){r?.(`on`);for(let n of t.rows){if(!l.has(n.id))continue;let t=d.get(n.id)??s(n,`failed`,`The row was not processed.`),r;try{r=await Ht(e,n.id,`on`)}catch(e){r=F(e)}o(r===void 0?{...t,stateChange:`back-on`}:s(n,`failed`,`${n.label} could not be turned on again: ${r}. It is off: turn it on in the maker portal.${t.status===`done`?` The change itself was written.`:` ${t.message}`}`,`left-off`))}}return i}var Wt=(e,t,n)=>e[t.toLowerCase()]??(n?29:void 0);async function Gt(e,t,n){let r={},i=async n=>{let i=Wt(t.componentTypes,n,t.flows.some(e=>e.flow.id===n));if(i===void 0||!N.test(n))r[n]=void 0;else try{r[n]=await e.dependencies(i,n)}catch{r[n]=void 0}};for(let e=0;e<n.length;e+=5)await Promise.all(n.slice(e,e+5).map(i));return r}var Kt=(e,t)=>t.entity??e.entity;async function qt(e,t,n){let r=t===`workflow`?`workflows`:`connectionreferences`,i=t===`workflow`?`workflowid`:`connectionreferenceid`;return(await e.query(`${r}?$select=${i}&$filter=${i} eq ${n}`)).length>0}async function Jt(e,t,n){return(await e.query(`solutioncomponents?$select=objectid&$filter=_solutionid_value eq ${t} and objectid eq ${n}`)).length>0}var Yt=`Removed from the solution and read back.`,Xt=`Deleted and read back.`;async function Zt(e,t,n){let r=Kt(t,n);try{if(!N.test(n.id))return{status:`skipped`,message:`The row has no valid id; nothing was changed.`};if(t.kind===`remove`){let r=t.solution;return!r||!N.test(r.id)||n.componentType===void 0?{status:`skipped`,message:`The solution or the component type is not known; nothing was changed.`}:await Jt(e,r.id,n.id)?(await e.removeFromSolution(r.uniqueName,n.id,n.componentType),await Jt(e,r.id,n.id)?{status:`failed`,message:`The environment accepted the request but the row is still in the solution. Check it in the maker portal.`}:{status:`done`,message:Yt}):{status:`skipped`,message:`It is not in the solution any more; nothing was changed. Refresh and preview again.`}}if(!await qt(e,r,n.id))return{status:`skipped`,message:`The row is already gone; nothing was changed. Refresh and preview again.`};if(n.componentType===void 0)return{status:`skipped`,message:`The component type is not known, so its dependencies cannot be checked; nothing was deleted.`};let i;try{i=await e.dependencies(n.componentType,n.id)}catch(e){return{status:`skipped`,message:`The dependencies could not be checked (${F(e)}); nothing was deleted.`}}let a=new Set(T(t).map(e=>e.id)),o=i.filter(e=>!a.has(e.id));return o.length>0?{status:`skipped`,message:`${o.length} other component${o.length===1?``:`s`} depend${o.length===1?`s`:``} on it; nothing was deleted.`}:r===`workflow`&&await Vt(e,n.id)!==0?{status:`skipped`,message:`The flow is not off (its state changed since the preview); it was not deleted.`}:(await e.remove(r,n.id),await qt(e,r,n.id)?{status:`failed`,message:`The environment accepted the request but the row still exists. Check it in the maker portal.`}:{status:`done`,message:Xt})}catch(e){return{status:`failed`,message:F(e)}}}function Qt(e,t,n){if(n===void 0)return!1;if(e===`connection`)return n===t.payload;let r=i(t.payload),a=i(n);if(!r.ok||!a.ok)return!1;let o=t.oldValue.split(`,`).map(e=>e.trim()).filter(e=>e!==``&&!r.value.includes(e));return r.value.length===a.value.length&&r.value.every(e=>a.value.includes(e))&&o.every(e=>!a.value.includes(e))}var $t=`connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectorid,connectionid,ismanaged,_ownerid_value,_customconnectorid_value`;async function en(e,t){for(let e of t.references){let n=t.componentTypes[e.reference.id.toLowerCase()];if(typeof n==`number`)return n}try{let n=t.allReferences.find(e=>N.test(e.id));if(n){let t=(await e.query(`solutioncomponents?$select=componenttype&$filter=objectid eq ${n.id}`)).map(e=>e.componenttype).find(e=>typeof e==`number`);if(t!==void 0)return t}}catch{}try{return(await e.query(`solutioncomponentdefinitions?$select=solutioncomponenttype&$filter=primaryentityname eq 'connectionreference'`)).map(e=>e.solutioncomponenttype).find(e=>typeof e==`number`)}catch{return}}async function tn(e){try{let t=await e.environmentId();return t===``?{ok:!1,error:`the environment id could not be read`}:{ok:!0,value:Me(await e.listConnections(t))}}catch(e){return{ok:!1,error:F(e)}}}async function nn(e,t,n,r){let i=e=>{try{r?.(e)}catch{}},a=t.solution;if(a.managed)return{ok:!1,error:`A managed solution cannot be changed.`};if(!N.test(a.id))return{ok:!1,error:`Invalid solution id.`};let o=at(t,n);if(!o.ok)return{ok:!1,error:Object.values(o.errors)[0]??`The form is not valid.`};let s=st(t,n),c=String(s.connectionreferencelogicalname),l=``,u=!1,d=async t=>{if(!u)return{ok:!1,error:t};try{if(N.test(l)&&(await e.remove(`connectionreference`,l),!await qt(e,`connectionreference`,l)))return{ok:!1,error:`${t} The reference that had just been created was deleted again; nothing was left behind.`}}catch{}return{ok:!1,error:`${t} The reference ${c}${N.test(l)?` (${l})`:``} was created and could not be deleted again: delete it in the maker portal.`}};try{if(i(`check`),(await e.query(`connectionreferences?$select=connectionreferenceid&$filter=connectionreferencelogicalname eq '${c}'`)).length>0)return{ok:!1,error:`${c} already exists in this environment; nothing was created.`};let r=j(n.connectionId);if(r===``)return{ok:!1,error:`A connection is required: a reference without one cannot be saved in the Maker portal and flows cannot be moved onto it. Nothing was created.`};{let t=await tn(e);if(!t.ok)return{ok:!1,error:`The connection could not be verified (${t.error}); nothing was created.`};let i=Fe({status:`ready`,items:t.value,error:``},n.connectorId,r);if(i!==`found`)return{ok:!1,error:i===`other-connector`?`The connection belongs to another connector; nothing was created.`:`The connection was not found among your connections; nothing was created.`}}let o=await en(e,t);if(o===void 0)return{ok:!1,error:`The component type of a connection reference could not be read, so it could not be added to the solution; nothing was created.`};if(i(`write`),l=(await e.create(`connectionreference`,s)).toLowerCase(),u=!0,!N.test(l)&&(l=P((await e.query(`connectionreferences?$select=connectionreferenceid&$filter=connectionreferencelogicalname eq '${c}'`))[0]?.connectionreferenceid).toLowerCase(),!N.test(l)))return await d(`The environment did not return the id of the new reference.`);if(await e.addToSolution(a.uniqueName,l,o),i(`readback`),!await Jt(e,a.id,l))return await d(`The reference was created but it is not in the solution.`);let f=await e.query(`connectionreferences?$select=${$t}&$filter=connectionreferenceid eq ${l}`),p=f[0]?Ft(f[0]):void 0;if(!p||p.logicalName!==c||p.connectorId!==n.connectorId||p.connectionId!==j(n.connectionId))return await d(`The reference was written but what is stored is not what was asked.`);let m=await It(e,N.test(p.ownerId)?[p.ownerId]:[]);return{ok:!0,value:{reference:{...p,ownerName:m.get(p.ownerId)??``},componentType:o}}}catch(e){return await d(`Could not create the reference: ${F(e)}.`)}}var I=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,rn=20,an=new Set([`default`,`active`,`basic`]),on=-1,sn=-2,L=e=>typeof e==`string`?e:``,cn=e=>e instanceof Error?e.message:String(e),ln=(e,t=rn)=>Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,r*t+t)),un=new WeakMap;function dn(e){let t=un.get(e);return t||(t=e.query(`solutioncomponentdefinitions?$select=solutioncomponenttype,name,primaryentityname`).then(e=>{let t=new Map;for(let n of e)typeof n.solutioncomponenttype==`number`&&t.set(n.solutioncomponenttype,{name:L(n.name),entity:L(n.primaryentityname)});return t},()=>void 0),un.set(e,t)),t}var fn={solutionId:``,memberIds:new Set},pn=e=>({solutionId:e.solution.id.toLowerCase(),memberIds:new Set(Object.keys(e.componentTypes))});async function mn(e,t,n,r,i){let a=[];for(let o of ln(i))a.push(...await e.query(`${t}?$select=${n},${r}&$filter=${o.map(e=>`${n} eq ${e}`).join(` or `)}`));return a}async function hn(e,t,n,r,i){let a=await dn(e);a===void 0&&n.some(e=>bt(e.type)===void 0)&&i.push(`The names of some component types could not be read.`);let o=new Map;for(let e of n)o.set(e.id.toLowerCase(),{id:e.id.toLowerCase(),type:e.type});for(let[e,t]of r)o.has(e)||o.set(e,{id:e,type:t.type});let s=new Map;for(let[e,t]of r)s.set(e,t);let c=e=>e<0?``:bt(e,a)?.entity.toLowerCase()??``,l=e=>[...o.values()].filter(t=>t.type>=0&&e(t)).map(e=>e.id).filter(e=>I.test(e)),u=async(e,t)=>{try{await t()}catch{i.push(`The names of the ${e} could not be read.`)}},d=l(e=>e.type===29||c(e.type)===`workflow`),f=l(e=>c(e.type)===`bot`),p=l(e=>c(e.type)===`botcomponent`),m=l(e=>e.type===300||c(e.type)===`canvasapp`);d.length>0&&await u(`flows`,async()=>{for(let t of await mn(e,`workflows`,`workflowid`,`name,statecode,category,ismanaged,_ownerid_value`,d))s.set(L(t.workflowid).toLowerCase(),{name:L(t.name),state:typeof t.statecode==`number`?wt[t.statecode]??``:``,managed:t.ismanaged===!0,ownerId:L(t._ownerid_value).toLowerCase(),parentId:``,typeLabel:typeof t.category==`number`?Ct[t.category]??`Flow`:`Flow`})}),f.length>0&&await u(`agents`,async()=>{for(let t of await mn(e,`bots`,`botid`,`name,statecode,ismanaged,_ownerid_value`,f))s.set(L(t.botid).toLowerCase(),{name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:L(t._ownerid_value).toLowerCase(),parentId:``,typeLabel:`Agent`})}),p.length>0&&await u(`agent components`,async()=>{for(let t of await mn(e,`botcomponents`,`botcomponentid`,`name,ismanaged,_parentbotid_value`,p))s.set(L(t.botcomponentid).toLowerCase(),{name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:``,parentId:L(t._parentbotid_value).toLowerCase(),typeLabel:`Agent component`})}),m.length>0&&await u(`apps`,async()=>{for(let t of await mn(e,`canvasapps`,`canvasappid`,`displayname`,m))s.set(L(t.canvasappid).toLowerCase(),{name:L(t.displayname),state:``,managed:!1,ownerId:``,parentId:``,typeLabel:`Canvas app`})});let h=new Map;for(let[e,t]of s)t.typeLabel===`Agent`&&h.set(e,t.name);let g=[...new Set([...s.values()].map(e=>e.parentId).filter(e=>I.test(e)&&!h.has(e)))];if(g.length>0)try{for(let t of await mn(e,`bots`,`botid`,`name`,g))h.set(L(t.botid).toLowerCase(),L(t.name))}catch{i.push(`The names of the agents that own agent components could not be read.`)}let _=await It(e,[...new Set([...s.values()].map(e=>e.ownerId).filter(e=>I.test(e)))]),v=new Map,y=new Map,b=!0;try{for(let t of ln([...o.keys()]))for(let n of await e.query(`solutioncomponents?$select=objectid,_solutionid_value&$filter=${t.map(e=>`objectid eq ${e}`).join(` or `)}`)){let e=L(n.objectid).toLowerCase(),t=L(n._solutionid_value).toLowerCase();I.test(e)&&I.test(t)&&v.set(e,(v.get(e)??new Set).add(t))}let t=[...new Set([...v.values()].flatMap(e=>[...e]))];for(let n of await mn(e,`solutions`,`solutionid`,`friendlyname,uniquename`,t))an.has(L(n.uniquename).toLowerCase())||y.set(L(n.solutionid).toLowerCase(),L(n.friendlyname)||L(n.uniquename))}catch{b=!1,i.push(`The solutions that hold the components could not be read.`)}return[...o.values()].map(e=>{let n=s.get(e.id),r=e.type<0?void 0:bt(e.type,a),i=e.type===on||e.type===sn?`agent`:xt(e.type,r),o=n&&n.typeLabel!==``?n.typeLabel:St(e.type,r);return{id:e.id,type:e.type,kind:i,typeLabel:o,name:n?.name||`${o} ${e.id.slice(0,8)}`,state:n?.state??``,managed:n?.managed??!1,owner:n?_.get(n.ownerId)??``:``,parent:n?.parentId?h.get(n.parentId)??``:``,solutions:b?[...v.get(e.id)??[]].map(e=>y.get(e)).filter(e=>e!==void 0).sort():[],inOpenSolution:t.memberIds.has(e.id)||t.solutionId!==``&&v.get(e.id)?.has(t.solutionId)===!0}})}async function gn(e,t,n){try{let r=t.componentTypes[n.id.toLowerCase()]??await en(e,t);return r===void 0?{ok:!1,error:`The component type of this reference could not be read, so its dependencies cannot be asked.`}:await _n(e,pn(t),n,r)}catch(e){return{ok:!1,error:cn(e)}}}async function _n(e,t,n,r){let i=[];try{let a=(await e.dependents(r,n.id)).filter(e=>I.test(e.id)&&e.id.toLowerCase()!==n.id.toLowerCase()),o=new Map;try{for(let t of await e.query(`bots?$select=botid,name,statecode,ismanaged,_ownerid_value&$filter=_providerconnectionreferenceid_value eq ${n.id}`))o.set(L(t.botid).toLowerCase(),{type:on,name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:L(t._ownerid_value).toLowerCase(),parentId:``,typeLabel:`Agent`})}catch{i.push(`The agents that use it as their connection reference could not be read.`)}try{for(let t of await e.query(`connectionreferences(${n.id})/botcomponent_connectionreference?$select=botcomponentid,name,ismanaged,_parentbotid_value`))o.set(L(t.botcomponentid).toLowerCase(),{type:sn,name:L(t.name),state:``,managed:t.ismanaged===!0,ownerId:``,parentId:L(t._parentbotid_value).toLowerCase(),typeLabel:`Agent component`})}catch{i.push(`The agent components that use it could not be read.`)}let s=new Set(a.map(e=>e.id.toLowerCase()));for(let e of[...o.keys()])s.has(e)&&o.delete(e);return{ok:!0,value:{items:await hn(e,t,a,o,i),notes:[...new Set(i)]}}}catch(e){return{ok:!1,error:cn(e)}}}async function vn(e,t,n){let r={},i=n.filter(e=>I.test(e.id));if(i.length===0)return r;try{for(let n of await hn(e,pn(t),i,new Map,[]))r[n.id]=Ot(n)}catch{}return r}async function yn(e,t){let n=[...new Set(t.map(e=>e.toLowerCase()).filter(e=>I.test(e)))],r=new Map;if(n.length===0)return r;try{let t=new Map;for(let r of ln(n))for(let n of await e.query(`solutioncomponents?$select=objectid,_solutionid_value&$filter=${r.map(e=>`objectid eq ${e}`).join(` or `)}`)){let e=L(n.objectid).toLowerCase(),r=L(n._solutionid_value).toLowerCase();I.test(e)&&I.test(r)&&t.set(e,(t.get(e)??new Set).add(r))}let i=new Map;for(let n of await mn(e,`solutions`,`solutionid`,`friendlyname,uniquename`,[...new Set([...t.values()].flatMap(e=>[...e]))]))an.has(L(n.uniquename).toLowerCase())||i.set(L(n.solutionid).toLowerCase(),L(n.friendlyname)||L(n.uniquename));for(let e of n)r.set(e,[...t.get(e)??[]].map(e=>i.get(e)).filter(e=>e!==void 0).sort());return r}catch{return}}var bn=[],xn=new Set;function Sn(){for(let e of xn)try{e()}catch{}}function Cn(e){return xn.add(e),()=>xn.delete(e)}function R(e,t=`info`){bn.push({timestamp:new Date().toISOString(),level:t,message:e}),bn.length>500&&bn.splice(0,bn.length-500),Sn()}function wn(){bn.length=0,Sn()}function Tn(){return bn}function En(){return JSON.stringify(bn,null,2)}var Dn={connectionDelete:!0},On=`2024-10-01`;function kn(e,t){let n=t.trim();if(n===``)return e;if(/^https?:\/\//i.test(n)){let t=n.includes(`?`)?n.slice(n.indexOf(`?`)+1):``,r=e.split(`?`)[0];return t===``?e:`${r}?${/api-version=/i.test(t)?t:`${t}&api-version=${On}`}`}return`${e}&$skiptoken=${encodeURIComponent(n)}`}var An=(e,t=``,n=``)=>{let r=`https://make.powerapps.com/environments/${encodeURIComponent(e)}/connections`;return t!==``&&n!==``?`${r}/shared_${encodeURIComponent(t.replace(/^shared_/,``))}/${encodeURIComponent(n)}/details`:r},jn=/^[A-Za-z0-9._-]+$/,Mn=(e,t,n)=>`environments/${e}/connectors/shared_${t.replace(/^shared_/,``)}/connections/${n}?api-version=${On}`;function Nn(){let e=``;return{async environmentId(){return e===``&&(e=Ne(await window.dataverseAPI.queryData(`RetrieveCurrentOrganization(AccessType=@p1)?@p1=Microsoft.Dynamics.CRM.EndpointAccessType'Default'`))),e},async listConnections(e,t=``){return await window.powerplatformAPI.Connectivity.Get(kn(`environments/${e}/connections?api-version=${On}`,t))},async listApps(e,t=``){return await window.powerplatformAPI.PowerApps.Get(kn(`environments/${e}/apps?api-version=${On}&$top=100`,t))},async queryConnectorUsage(e,t=``){let n={TableName:`PowerPlatformResources`,Clauses:[{$type:`where`,FieldName:`type`,Operator:`in~`,Values:[`'microsoft.powerautomate/cloudflows'`,`'microsoft.powerautomate/agentflows'`,`'microsoft.powerautomate/m365agentflows'`,`'microsoft.powerapps/canvasapps'`,`'microsoft.powerapps/modeldrivenapps'`,`'microsoft.powerapps/apps'`,`'microsoft.copilotstudio/agents'`]},{$type:`where`,FieldName:`properties.environmentId`,Operator:`=~`,Values:[`'${e}'`]},{$type:`project`,FieldList:[`type`,`id = name`,`displayName = tostring(properties.displayName)`,`workflowId = tostring(properties.workflowEntityId)`,`connectors = properties.powerPlatformConnectors`]}],Options:{Top:1e3,Skip:0,SkipToken:t}};return await window.powerplatformAPI.ResourceQuery.Post(`resources/query?api-version=${On}`,n)},async searchFlowsByConnection(e){if(!jn.test(e))throw Error(`The connection name has characters that cannot be searched for.`);let t=`workflows?$select=workflowid,name,statecode,_ownerid_value&$filter=category eq 5 and contains(clientdata,'${e}')`;return(await window.dataverseAPI.queryData(t)).value},async deleteConnection(e,t,n){if(!Dn.connectionDelete)throw Error(`Deleting connections is switched off.`);await window.powerplatformAPI.Connectivity.Delete(Mn(e,t,n))},async copyText(e){await window.toolboxAPI.utils.copyToClipboard(e)},async query(e){return(await window.dataverseAPI.queryData(e)).value},async update(e,t,n){await window.dataverseAPI.update(e,t,n)},async create(e,t){let n=await window.dataverseAPI.create(e,t);return typeof n.id==`string`?n.id:``},async addToSolution(e,t,n){await window.dataverseAPI.execute({operationName:`AddSolutionComponent`,operationType:`action`,parameters:{ComponentId:t,ComponentType:n,SolutionUniqueName:e,AddRequiredComponents:!1}})},async remove(e,t){await window.dataverseAPI.delete(e,t)},async removeFromSolution(e,t,n){await window.dataverseAPI.execute({operationName:`RemoveSolutionComponent`,operationType:`action`,parameters:{SolutionComponent:{"@odata.type":`Microsoft.Dynamics.CRM.solutioncomponent`,solutioncomponentid:t},ComponentType:n,SolutionUniqueName:e}})},async dependents(e,t){let n=`RetrieveDependentComponents(ObjectId=${t},ComponentType=${e})`;return(await window.dataverseAPI.queryData(n)).value.map(e=>({id:String(e.dependentcomponentobjectid??``).toLowerCase(),type:Number(e.dependentcomponenttype??0)}))},async dependencies(e,t){let n=`RetrieveDependenciesForDelete(ObjectId=${t},ComponentType=${e})`;return(await window.dataverseAPI.queryData(n)).value.map(e=>({id:String(e.dependentcomponentobjectid??``).toLowerCase(),type:Number(e.dependentcomponenttype??0)}))},async currentUserId(){let e=await window.dataverseAPI.execute({operationName:`WhoAmI`,operationType:`function`});return typeof e.UserId==`string`?e.UserId.toLowerCase():``},async saveFile(e,t){return await window.toolboxAPI.fileSystem.saveFile(e,t)!==null},async connectionName(){let e=await window.toolboxAPI.connections.getActiveConnection();return e?e.name:``},async environmentName(){let e=await window.toolboxAPI.connections.getActiveConnection();return e?`${e.name} (${e.environment})`:``},async notify(e,t){await window.toolboxAPI.utils.showNotification({title:`Connection Reference Governance`,body:e,type:t,duration:6e3})}}}function Pn(){return window.toolboxAPI}var Fn=[`apps`,`references`,`flows`,`agents`],In={apps:`apps`,references:`connection references`,flows:`flows`,agents:`agents`},Ln=()=>({apps:{status:`ok`},references:{status:`ok`},flows:{status:`ok`},agents:{status:`ok`}});function Rn(e,t){return e.length>0?`in-use`:Fn.some(e=>t[e].status===`failed`)?`unchecked-source`:`none-found`}function zn(e){let t=Fn.filter(t=>e[t].status===`ok`).map(t=>{let n=e[t];return n.status===`ok`&&n.detail!==void 0&&n.detail!==``?n.detail:In[t]}),n=[];t.length>0&&n.push(`Looked at: ${t.join(`, `)}.`);for(let t of Fn){let r=e[t];r.status===`failed`&&n.push(`Could not read the ${In[t]}${r.reason===``?``:` (${r.reason})`}.`),r.status===`notScanned`&&n.push(`Not scanned: ${In[t]}${r.reason===``?``:` (${r.reason})`}.`)}return n.push(`Components that the signed-in user cannot read may still use this connection.`),n.join(` `)}function Bn(e){let t=Fn.filter(t=>e[t].status===`ok`).map(t=>{let n=e[t];return n.status===`ok`&&n.detail!==void 0&&n.detail!==``?n.detail:In[t]});return`${t.length>0?`Looked at: ${t.join(`, `)}. `:``}Components that the signed-in user cannot read may still use this connection.`}function Vn(e,t){let n=new Set,r=[];for(let t of e){let e=`${t.kind}:${t.id.toLowerCase()}`;n.has(e)||(n.add(e),r.push(t))}return{dependents:r,sources:t,verdict:Rn(r,t),note:zn(t)}}var Hn=[{kind:`app`,label:`Apps`},{kind:`flow`,label:`Flows`},{kind:`reference`,label:`Connection references`},{kind:`agent`,label:`Agents`},{kind:`other`,label:`Other components`}];function Un(e){return Hn.map(t=>({...t,items:e.dependents.filter(e=>e.kind===t.kind).sort((e,t)=>e.name.localeCompare(t.name))})).filter(e=>e.items.length>0)}var Wn=e=>e.dependents.length>0&&e.dependents.every(e=>e.kind===`reference`);function Gn(e){return Fn.filter(t=>e.sources[t].status!==`ok`).map(t=>({name:t,state:e.sources[t]}))}var Kn={key:`name`,dir:`asc`},qn={all:`All`,broken:`Broken`,none:`No dependency found`,inuse:`In use`},Jn={connected:`Connected`,reconnect:`Needs reconnect`,error:`Error`,unknown:`Unknown`},Yn=e=>e.status===`error`||e.status===`reconnect`;function Xn(e,t){let n=e[t];return n?.status===`ready`?n.report.verdict:void 0}var Zn=e=>/logicflows?$/i.test(e.connectorKey),Qn=`It belongs to a flow: the environment only deletes it together with that flow, so it is not offered here.`,$n=(e,t)=>!Zn(e)&&Xn(t,e.name)===`none-found`;function er(e,t){let n=0,r=0,i=0;for(let a of e){let e=Xn(t,a.name);e!==void 0&&(i++,e===`none-found`&&!Zn(a)&&n++,e===`in-use`&&r++)}return{total:e.length,broken:e.filter(Yn).length,noneFound:n,inUse:r,checked:i}}var tr=e=>e.trim().toLowerCase();function nr(e,t,n,r,i){let a=tr(i);return e.filter(e=>r!==``&&e.connectorKey!==r||n===`broken`&&!Yn(e)||n===`none`&&(Xn(t,e.name)!==`none-found`||Zn(e))||n===`inuse`&&Xn(t,e.name)!==`in-use`?!1:a===``||[e.name,e.displayName,e.connectorName,e.connectorKey,e.creator.name,e.creator.email].some(e=>tr(e).includes(a)))}var rr={error:0,reconnect:1,unknown:2,connected:3},ir=(e,t)=>(e.displayName||e.name).localeCompare(t.displayName||t.name)||e.name.localeCompare(t.name);function ar(e,t){let n=t.dir===`asc`?1:-1,r=(e,n)=>{switch(t.key){case`connector`:return e.connectorName.localeCompare(n.connectorName)||ir(e,n);case`status`:return rr[e.status]-rr[n.status]||ir(e,n);case`modified`:return e.modifiedTime.localeCompare(n.modifiedTime)||ir(e,n);default:return ir(e,n)}};return[...e].sort((e,t)=>n*r(e,t))}function or(e){let t=new Map;for(let n of e)n.connectorKey!==``&&!t.has(n.connectorKey)&&t.set(n.connectorKey,n.connectorName||n.connectorKey);return[...t.entries()].map(([e,t])=>({key:e,name:t})).sort((e,t)=>e.name.localeCompare(t.name))}function sr(e){let t=/([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i.exec(e);return t?t[1].toLowerCase():e.slice(-8)}function cr(e){return[...e].sort((e,t)=>(e.connectorName||e.connectorKey).localeCompare(t.connectorName||t.connectorKey)||ir(e,t))}function lr(e,t,n){let r=new Map;for(let n of cr(e)){let e=r.get(n.connectorKey)??{name:n.connectorName||n.connectorKey||`Unknown connector`,total:0,done:0,loading:!1};e.total++;let i=t[n.name];(i?.status===`ready`||i?.status===`failed`)&&e.done++,i?.status===`loading`&&(e.loading=!0),r.set(n.connectorKey,e)}let i=!0,a=[...r.entries()].map(([e,t])=>{let r=t.done===t.total,a=`pending`;return r?a=`done`:n===`connections`&&(i||t.done>0||t.loading)&&(a=`active`),r||(i=!1),{key:e,name:t.name,total:t.total,done:t.done,state:a}});return{apps:n===`apps`?`active`:`done`,references:n===`apps`?`pending`:n===`references`?`active`:`done`,connectors:a,total:e.length,done:a.reduce((e,t)=>e+t.done,0)}}function ur(e,t,n){let r=e[t];if(n!==void 0&&Zn(n))return{text:`Belongs to a flow`,tone:`neutral`,title:Qn};if(r===void 0)return{text:`Not checked`,tone:`neutral`};if(r.status===`loading`)return{text:`Checking...`,tone:`info`};if(r.status===`failed`)return{text:`Could not be checked`,tone:`warning`};if(r.report.verdict===`in-use`){let e=r.report.dependents.length;return Wn(r.report)?{text:`Held by ${e} reference${e===1?``:`s`}`,tone:`info`,title:`Only connection references hold this connection: no flow, app or agent was found using them. It still cannot be deleted by this run, because the reference would be left without its connection.`}:{text:`In use (${e})`,tone:`info`}}return r.report.verdict===`none-found`?{text:`No dependency found`,tone:`success`}:{text:`Could not be checked`,tone:`warning`}}var dr=(e,t,n)=>e===1?t:n;function fr(e,t){if($n(e,t))return;if(Zn(e))return Qn;let n=t[e.name];return n===void 0||n.status===`loading`?`Its dependencies were not read, so nothing is deleted.`:n.status===`failed`?`Its dependencies could not be read, so nothing is deleted.`:Xn(t,e.name)===`in-use`?`Something depends on it (${n.report.dependents.length}): it cannot be deleted by this run.`:`A source could not be read, so nothing is deleted.`}function pr(e){return e.map(e=>({name:e.name,connector:e.connectorKey,displayName:e.displayName,creator:e.creator.name,createdTime:e.createdTime,status:e.status}))}function mr(e,t,n){let r=new Set(n),i=e.filter(e=>r.has(e.name)),a=i.map(e=>{let n=fr(e,t);return{name:e.name,label:e.displayName||e.name,connector:e.connectorName,connectorKey:e.connectorKey,creator:e.creator.name,...n===void 0?{}:{blocked:n}}}),o=a.filter(e=>e.blocked===void 0),s=[];s.push(`Delete is permanent: the connections are removed from the environment. Undo is not possible.`),o.length>0&&s.push(`A connection reference that still holds the id of a deleted connection will show it as missing, and anything that needs it will have to be connected again.`),o.length>0&&s.push(`This tool cannot see the flows that the flow service has bound to a connection (the Maker portal shows them under "Flows using this connection"). Check the portal first.`);let c=new Set;for(let e of o){let n=t[e.name];if(n?.status===`ready`)for(let e of Gn(n.report))e.state.status===`notScanned`&&c.add(`${In[e.name]}${e.state.reason===``?``:` (${e.state.reason})`}`)}for(let e of c)s.push(`Not scanned: ${e}. Something there may still use ${dr(o.length,`this connection`,`these connections`)}.`);let l=a.length-o.length;return l>0&&s.push(`${l} ${dr(l,`connection is`,`connections are`)} blocked and will not be deleted.`),{rows:a,warnings:s,backup:JSON.stringify({kind:`connections-before-delete`,connections:pr(i)},null,2)}}var z=e=>e.rows.filter(e=>e.blocked===void 0),hr=[{key:`check`,label:`Check`,doing:`Reading what depends on it again`},{key:`exists`,label:`Find`,doing:`Making sure it is still in the environment`},{key:`delete`,label:`Delete`,doing:`Sending the delete request`},{key:`verify`,label:`Read back`,doing:`Reading the list again to confirm it is gone`}];function gr(e,t,n){if(t<=0)return 0;let r=n===null?0:hr.findIndex(e=>e.key===n)/hr.length;return Math.min(95,Math.round((Math.min(e,t)+r)/t*95))}var _r=e=>typeof e==`string`?e:``,B=e=>typeof e==`object`&&e?e:{};function vr(e){if(Array.isArray(e))return e;let t=B(e);for(let e of[t.value,B(t.data).value,B(t.body).value])if(Array.isArray(e))return e;return[]}function yr(e){let t=e.trim(),n=/\/connections\/([^/?#]+)\s*$/i.exec(t);return(n?n[1]:t).toLowerCase()}function br(e){return vr(e).flatMap(e=>{let t=B(e),n=_r(t.name);if(n===``)return[];let r=B(t.properties),i=Array.isArray(r.connectionReferences)?r.connectionReferences:B(r.connectionReferences)&&Object.values(B(r.connectionReferences)),a=(Array.isArray(i)?i:[]).map(e=>yr(_r(B(e).sharedConnectionId))).filter(e=>e!==``);return[{id:n,name:_r(r.displayName)||n,owner:_r(B(r.owner).displayName),connections:[...new Set(a)]}]})}var xr=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Sr=e=>e.trim().toLowerCase().replace(/^.*\//,``).replace(/^shared[_-]/,``),V=e=>typeof e==`object`&&e&&!Array.isArray(e)?e:{};function Cr(e){let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return[]}return Array.isArray(t)?t.map(e=>Sr(typeof e==`string`?e:String(V(e).connectorId??``))).filter(e=>e!==``):[]}var wr={"microsoft.powerautomate/cloudflows":`flows`,"microsoft.powerautomate/agentflows":`flows`,"microsoft.powerautomate/m365agentflows":`flows`,"microsoft.powerapps/canvasapps":`apps`,"microsoft.powerapps/modeldrivenapps":`apps`,"microsoft.powerapps/codeapps":`apps`,"microsoft.powerapps/apps":`apps`,"microsoft.copilotstudio/agents":`agents`};function Tr(e){let t=V(e);for(let e of[t.data,V(t.body).data,V(t.data).data])if(Array.isArray(e))return e.map(V);return[]}function Er(e){let t=V(e);for(let e of[t.skipToken,V(t.data).skipToken,V(t.body).skipToken])if(typeof e==`string`&&e.trim()!==``)return e.trim();return``}function Dr(e,t,n){for(let r of t){let t=wr[String(r.type??``).toLowerCase()];if(t!==void 0)for(let i of new Set(Cr(r.connectors??V(r.properties).powerPlatformConnectors))){let a=e[i]??={flows:0,apps:0,agents:0};if(a[t]++,t===`flows`&&n!==void 0){let e=String(r.workflowId??V(r.properties).workflowEntityId??``).trim().toLowerCase(),t=String(r.id??r.name??e).trim().toLowerCase(),a=n[i]??=[];a.some(e=>e.id===t)||a.push({id:t,name:String(r.displayName??V(r.properties).displayName??``)||t,workflowId:xr.test(e)?e:``})}}}}var Or=(e,t,n)=>`${e} ${e===1?t:n}`;function kr(e,t){if(e===null)return;let n=e[Sr(t)];if(n!==void 0&&n.flows+n.apps+n.agents!==0)return`${[n.flows>0?Or(n.flows,`flow`,`flows`):``,n.apps>0?Or(n.apps,`app`,`apps`):``,n.agents>0?Or(n.agents,`agent`,`agents`):``].filter(e=>e!==``).join(`, `)} of the environment use this connector`}function Ar(e,t,n){if(e===null)return;let r=e[Sr(t)];if(r!==void 0&&r.flows+r.apps+r.agents!==0)return`In this environment ${[r.flows>0?Or(r.flows,`flow`,`flows`):``,r.apps>0?Or(r.apps,`app`,`apps`):``,r.agents>0?Or(r.agents,`agent`,`agents`):``].filter(e=>e!==``).join(`, `)} use the ${n===``?`same`:n} connector. The inventory does not say which connection each one uses, so some of them may use this one.`}var jr=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Mr=200,H=e=>typeof e==`string`?e:``;function Nr(e){let t=e instanceof Error?e.message:String(e);return/ClientScopeAuthorizationFailed/i.test(t)?`the toolbox is not allowed to call this API (its application has no permission for it)`:t.replace(/^Error invoking remote method '[^']*':\s*(Error:\s*)?/i,``).replace(/^Power Platform request failed:\s*/i,``)}async function Pr(e,t){try{let n=await e.environmentId();if(n===``)return{ok:!1,error:`The id of the environment could not be read, so its connections cannot be listed.`};let r=new Map,i=new Set,a=``;for(let o=0;o<Mr;o++){let o=await e.listConnections(n,a);for(let e of ze(o))Zn(e)||r.set(e.name,e);if(t?.(r.size),a=Be(o),a===``||i.has(a))break;i.add(a)}return{ok:!0,value:{rows:[...r.values()],environmentId:n}}}catch(e){return{ok:!1,error:`The connections could not be read: ${Nr(e)}`}}}async function Fr(e,t){try{let n={},r={},i=new Set,a=``;for(let o=0;o<Mr;o++){let o=await e.queryConnectorUsage(t,a);if(Dr(n,Tr(o),r),a=Er(o),a===``||i.has(a))break;i.add(a)}return{ok:!0,value:{usage:n,flows:r}}}catch(e){return{ok:!1,error:Nr(e)}}}var Ir=/"connectionReferenceLogicalName"\s*:\s*"([^"]+)"/gi,Lr=/shared-[a-z0-9]+-[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}/gi;function Rr(e){let t=H(e.clientdata);return{name:H(e.name),state:typeof e.statecode==`number`?wt[e.statecode]??``:``,references:[...new Set([...t.matchAll(Ir)].map(e=>e[1].toLowerCase()))],connections:[...new Set((t.match(Lr)??[]).map(e=>e.toLowerCase()))]}}function zr(e,t){let n,r,i,a,o=new Map,s=async()=>{try{let n=[],r=new Set,i=``;for(let a=0;a<Mr;a++){let a=await e.listApps(t,i);if(n.push(...br(a)),i=Be(a),i===``||r.has(i))break;r.add(i)}return{ok:!0,value:n}}catch(e){return{ok:!1,reason:Nr(e)}}},c=async()=>{try{return{ok:!0,value:(await e.query(`connectionreferences?$select=connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectionid`)).map(e=>({id:H(e.connectionreferenceid).toLowerCase(),logicalName:H(e.connectionreferencelogicalname),displayName:H(e.connectionreferencedisplayname),connectionId:H(e.connectionid).trim().toLowerCase()})).filter(e=>jr.test(e.id))}}catch(e){return{ok:!1,reason:Nr(e)}}},l=async()=>{try{let t=(await e.query(`solutioncomponentdefinitions?$select=solutioncomponenttype&$filter=primaryentityname eq 'connectionreference'`))[0]?.solutioncomponenttype;return typeof t==`number`?t:void 0}catch{return}};return{environmentId:t,inventory:()=>a??=Fr(e,t),flowDefinitions:async t=>{let n=[...new Set(t)].filter(e=>!o.has(e));for(let t=0;t<n.length;t+=10){let r=n.slice(t,t+10);try{let t=await e.query(`workflows?$select=workflowid,name,statecode,clientdata&$filter=${r.map(e=>`workflowid eq ${e}`).join(` or `)}`);for(let e of t)o.set(H(e.workflowid).toLowerCase(),Rr(e))}catch{}for(let e of r)o.has(e)||o.set(e,null)}return new Map(t.map(e=>[e,o.get(e)??null]))},apps:()=>n??=s(),references:()=>r??=c(),referenceType:()=>i??=l(),invalidate(){n=void 0,r=void 0,i=void 0,a=void 0,o.clear()}}}var Br=e=>e===`flow`||e===`agent`||e===`app`?e:`other`,U=e=>({status:`failed`,reason:e}),Vr=/^The agents that use it|^The agent components that use it/;async function Hr(e,t,n){let r=[],i=Ln(),a=n.name.toLowerCase(),o=await t.apps();if(o.ok){for(let e of o.value)e.connections.includes(a)&&r.push({kind:`app`,id:e.id,name:e.name,state:``,ownerName:e.owner,solutions:[],via:``});i.apps={status:`ok`,detail:`${o.value.length} ${o.value.length===1?`app`:`apps`}`}}else i.apps=U(o.reason);let s=await t.references(),c=[];if(s.ok){c=s.value.filter(e=>e.connectionId===a),i.references={status:`ok`,detail:`${s.value.length} connection ${s.value.length===1?`reference`:`references`} (${c.length} ${c.length===1?`holds`:`hold`} it)`};let t=await yn(e,c.map(e=>e.id));for(let e of c)r.push({kind:`reference`,id:e.id,name:e.displayName||e.logicalName,state:``,ownerName:``,solutions:t?.get(e.id)??[],via:``})}else i.references=U(s.reason);if(!s.ok)i.flows=U(`the connection references could not be read, so the flows that use them are not known`),i.agents=U(`the connection references could not be read, so the agents that use them are not known`);else if(c.length>0){let n=await t.referenceType();if(n===void 0)i.flows=U(`the component type of a connection reference could not be read`),i.agents=U(`the component type of a connection reference could not be read`);else for(let t of c){let a=await _n(e,fn,t,n);if(!a.ok)i.flows=U(a.error),i.agents=U(a.error);else{for(let e of a.value.notes)Vr.test(e)&&(i.agents=U(e));for(let e of a.value.items)r.push({kind:Br(e.kind),id:e.id,name:e.name,state:e.state,ownerName:e.owner,solutions:e.solutions,via:t.displayName||t.logicalName})}}}try{let t=[{text:n.name,via:``},...c.map(e=>({text:e.logicalName,via:e.displayName||e.logicalName})).filter(e=>e.text!==``)],a=0,o=0;for(let n of t){let t=await e.searchFlowsByConnection(n.text);a++,n.via!==``&&(o+=t.length);for(let e of t){let t=H(e.workflowid).toLowerCase();t!==``&&r.push({kind:`flow`,id:t,name:H(e.name)||t,state:typeof e.statecode==`number`?wt[e.statecode]??``:``,ownerName:``,solutions:[],via:n.via})}}i.flows.status===`ok`&&c.length>0&&a>1&&(i.flows={status:`ok`,detail:`flows (dependency tracking; the search of their definitions for ${c.length===1?`the reference`:`${c.length} references`} gave back ${o})`})}catch(e){i.flows.status===`ok`&&(i.flows={status:`notScanned`,reason:`the definitions of the flows could not be searched: ${Nr(e)}`})}let l=[],u=await t.inventory();if(u.ok&&i.flows.status===`ok`){let e=u.value.flows[Sr(n.connectorKey)]??[],o=new Set(r.filter(e=>e.kind===`flow`).map(e=>e.id)),d=e.filter(e=>e.workflowId===``||!o.has(e.workflowId));if(d.length>0){let e=await t.flowDefinitions(d.map(e=>e.workflowId).filter(e=>e!==``)),n=new Map((s.ok?s.value:[]).map(e=>[e.logicalName.toLowerCase(),e])),o=new Set(c.map(e=>e.logicalName.toLowerCase())),u=0,f=0,p=[],m=[];for(let t of d){let i=t.workflowId===``?null:e.get(t.workflowId)??null;if(i===null){m.push(t.name);continue}if(i.connections.includes(a)||i.references.some(e=>o.has(e))){u++,r.push({kind:`flow`,id:t.workflowId,name:i.name||t.name,state:i.state,ownerName:``,solutions:[],via:`the inventory`});continue}let s=i.references.map(e=>n.get(e));s.length>0&&s.every(e=>e!==void 0&&e.connectionId!==``&&e.connectionId!==a)?(f++,p.push({name:i.name||t.name,references:s.map(e=>({name:e.displayName||e.logicalName,connection:e.connectionId}))})):m.push(t.name)}l=p;let h=m.slice(0,8).join(`, `)+(m.length>8?` and ${m.length-8} more`:``);i.flows=m.length>0?U(`the inventory names ${d.length} ${d.length===1?`flow`:`flows`} that use this connector and ${m.length} could not be tied to a connection (${h}); check them in the Maker portal`):{status:`ok`,detail:`flows (dependency tracking, definitions, and the inventory: ${d.length} ${d.length===1?`flow`:`flows`} of this connector read, ${u} use it, ${f} use another connection)`}}}return{...Vn(r,i),elsewhere:l}}async function Ur(e,t,n,r){r.onStep(`apps`),await t.apps(),r.onStep(`references`),await t.references(),r.onStep(`connections`);let i=0,a=0;return await Promise.all(Array.from({length:Math.min(4,Math.max(n.length,1))},async()=>{for(;!r.cancelled()&&i<n.length;){let o=n[i++];try{r.onResult(o.name,await Hr(e,t,o))}catch(e){r.onResult(o.name,{error:Nr(e)})}a++;try{r.onProgress(a,n.length)}catch{}}})),{done:a,cancelled:r.cancelled()}}var Wr=`Deleting connections is switched off.`;async function Gr(e,t,n,r,i,a,o){let s=[],c=(e,t,n)=>{try{o?.(e,t,n)}catch{}},l=e=>{s.push(e);try{a?.(e)}catch{}},u=new Set(z(n).map(e=>e.name));if(!Dn.connectionDelete){for(let e of n.rows)l({id:e.name,label:e.label,status:`skipped`,message:Wr});return s}let d=``;for(let a of n.rows){let n=(e,t)=>l({id:a.name,label:a.label,status:e,message:t});if(d!==``){n(`skipped`,d);continue}if(!u.has(a.name)){n(`skipped`,a.blocked??`Blocked.`);continue}let o=r.find(e=>e.name===a.name);if(!o)n(`skipped`,`It is not in the list any more.`);else try{c(a.name,a.label,`check`);let r=await i(o),s=fr(o,{[o.name]:{status:`ready`,report:r}});if(s!==void 0){n(`skipped`,`Checked again just before: ${s}`);continue}c(a.name,a.label,`exists`);let l=await Pr(e);if(!l.ok){n(`failed`,l.error);continue}if(!l.value.rows.some(e=>e.name===o.name)){n(`skipped`,`The connection is already gone; nothing was deleted.`);continue}c(a.name,a.label,`delete`),await e.deleteConnection(t,o.connectorKey,o.name),c(a.name,a.label,`verify`);let u=await Pr(e);u.ok?u.value.rows.some(e=>e.name===o.name)?n(`failed`,`The environment accepted the request but the connection is still listed.`):n(`done`,`Deleted and read back.`):n(`failed`,`Deleted, but the list could not be read to confirm it: ${u.error}`)}catch(e){let t=Nr(e);/not found|404|not supported|no route|cannot be reached|does not match any known API routes/i.test(t)?(n(`failed`,`The route for deleting a connection was refused: ${t}. The run stopped; nothing else was attempted.`),d=`Not attempted: the route for deleting a connection was refused.`):n(`failed`,t)}}return s}function Kr(e,t,n,r,i){let a=null,o=null,s=null,c=Promise.resolve(),l=!1,u=()=>t.get().connections;async function d(n){let r=zr(e,n);t.dispatch({type:`cmUsageLoading`});let i=await(a!==null&&a.environmentId===n?a:r).inventory();i.ok?(t.dispatch({type:`cmUsageLoaded`,map:i.value.usage}),R(`Read how many flows, apps and agents use each connector: ${Object.keys(i.value.usage).length} connectors.`,`info`)):(t.dispatch({type:`cmUsageFailed`,error:i.error}),R(`The inventory of the connectors could not be read (the dependencies are not affected): ${i.error}`,`warning`))}async function f(){return o||(o=(async()=>{s&&(t.dispatch({type:`cmCheckAllCancel`}),await s),t.dispatch({type:`cmLoading`});let n=await Pr(e,e=>t.dispatch({type:`cmPage`,count:e}));n.ok?(a=zr(e,n.value.environmentId),t.dispatch({type:`cmLoaded`,items:n.value.rows,environmentId:n.value.environmentId}),R(`Read ${n.value.rows.length} connections.`,`info`),d(n.value.environmentId)):(t.dispatch({type:`cmFailed`,error:n.error}),R(n.error,`warning`))})().finally(()=>{o=null}),c=o,o)}async function p(n){let r=a,i=u().list.items.find(e=>e.name===n);if(r&&i){t.dispatch({type:`cmDepsLoading`,names:[n]});try{let o=await Hr(e,r,i);if(a!==r)return;t.dispatch({type:`cmDepsLoaded`,name:n,report:o});let s=[`apps`,`references`,`flows`,`agents`].filter(e=>o.sources[e].status!==`ok`);R(`Read the dependencies of a connection: ${o.dependents.length} found${s.length>0?`; not fully read: ${s.join(`, `)}`:``}.`,s.length>0?`warning`:`info`)}catch(e){if(a!==r)return;let i=e instanceof Error?e.message:String(e);t.dispatch({type:`cmDepsFailed`,name:n,error:i}),R(`The dependencies of a connection could not be read: ${i}`,`warning`)}}}async function m(){t.dispatch({type:`setArea`,area:`connections`}),await f()}return{idle:()=>c,open:m,refresh:f,async toggleOpen(e){t.dispatch({type:`cmToggleOpen`,name:e});let n=u(),r=n.deps[e];n.open.includes(e)&&(r===void 0||r.status===`failed`)&&await p(e)},async checkAgain(e){a?.invalidate(),await p(e)},async checkAll(r){let i=a,o=r===`selected`?new Set(u().selected):null,l=cr(u().list.items.filter(e=>o===null||o.has(e.name)));i&&l.length!==0&&!s&&(i.invalidate(),t.dispatch({type:`cmCheckAllStarted`,total:l.length,now:n(),...o?{only:[...o]}:{}}),s=(async()=>{let r=await Ur(e,i,l,{onStep:e=>t.dispatch({type:`cmCheckAllStep`,step:e}),onProgress:e=>t.dispatch({type:`cmCheckAllProgress`,done:e,now:n()}),onResult:(e,n)=>{a===i&&t.dispatch(`error`in n?{type:`cmDepsFailed`,name:e,error:n.error}:{type:`cmDepsLoaded`,name:e,report:n})},cancelled:()=>u().checkAll?.cancelled===!0});t.dispatch({type:`cmCheckAllFinished`});let o=Object.values(u().deps),s=o.filter(e=>e.status===`ready`&&e.report.verdict===`none-found`).length,c=o.filter(e=>e.status===`ready`&&e.report.verdict===`in-use`).length;R(`Checked ${r.done} of ${l.length} connections${r.cancelled?` (cancelled)`:``}: ${s} with no dependency found, ${c} in use.`,`info`)})().finally(()=>{s=null}),c=s,await s)},cancelCheckAll(){t.dispatch({type:`cmCheckAllCancel`})},async copyAddress(t){let n=u().environmentId;if(n===``)R(`The id of the environment is not known, so the address cannot be built.`,`warning`);else try{let r=t===void 0?void 0:u().list.items.find(e=>e.name===t);await e.copyText(r?An(n,r.connectorKey,r.name):An(n)),R(r?`Address of the connection in the Maker portal copied.`:`Address of the connections page copied.`,`success`),await e.notify(`Address copied.`,`success`).catch(()=>void 0)}catch(e){R(`The address could not be copied: ${e instanceof Error?e.message:String(e)}`,`warning`)}},openDeletion(){if(!Dn.connectionDelete){l||R(Wr,`info`),l=!0;return}let e=u();t.dispatch({type:`cmDeletionOpen`,plan:mr(e.list.items,e.deps,e.selected),code:r()})},async saveBackup(){let r=u().deletion;if(!r)return;let i=new Date(n()).toISOString().replace(/[^0-9]/g,``).slice(0,14),a=await e.saveFile(`connections-backup-${i}.json`,r.plan.backup).catch(()=>!1);a&&t.dispatch({type:`cmDeletionBackupSaved`}),R(a?`Backup of the connections saved.`:`Backup not saved.`,a?`success`:`warning`)},confirmDeletion(){t.dispatch({type:`cmDeletionApply`,now:n()});let r=u().deletion,i=a;if(!r||r.step!==`apply`||!i)return;let o=u().list.items,s=u().environmentId,l=setInterval(()=>t.dispatch({type:`cmDeletionTick`,now:n()}),1e3);c=(async()=>{try{let c=await Gr(e,s,r.plan,o,async t=>(i.invalidate(),Hr(e,i,t)),e=>t.dispatch({type:`cmDeletionRow`,outcome:e,now:n()}),(e,r,i)=>t.dispatch({type:`cmDeletionStep`,id:e,label:r,step:i,now:n()})),l=await Pr(e);l.ok&&(a=zr(e,l.value.environmentId),t.dispatch({type:`cmLoaded`,items:l.value.rows,environmentId:l.value.environmentId,keepDeps:!0})),t.dispatch({type:`cmDeletionDone`,results:c,refreshFailed:!l.ok,now:n()});let u=c.filter(e=>e.status===`failed`).length;R(`Deleted ${c.filter(e=>e.status===`done`).length} connections, ${u} failed.`,u>0?`warning`:`success`)}finally{clearInterval(l)}})()},closeDeletion(){t.dispatch({type:`cmDeletionClose`})},async saveReport(){let t=u().deletion;if(!t||t.step!==`result`||!t.results)return;let n=ge({operation:`Delete connections`,solution:`Connections`,environment:i(),startedAt:t.startedAt,finishedAt:t.now,results:t.results}),r=await e.saveFile(_e(`Delete connections`,t.now),n).catch(()=>!1);R(r?`Report saved.`:`Report not saved.`,r?`success`:`warning`)},async openConnection(e){await m(),u().list.items.some(t=>t.name===e)?(t.dispatch({type:`cmFilter`,filter:`all`}),t.dispatch({type:`cmConnector`,key:``}),t.dispatch({type:`cmSearch`,text:e}),u().open.includes(e)||t.dispatch({type:`cmToggleOpen`,name:e}),await p(e)):R(`That connection is not in the list of connections you can see.`,`info`)},backToSolutions(){t.dispatch({type:`setArea`,area:`solutions`})}}}function qr(){let e=new Uint8Array(6);if(globalThis.crypto?.getRandomValues)globalThis.crypto.getRandomValues(e);else for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return`DELETE-${[...e].map(e=>`ABCDEFGHJKLMNPQRSTUVWXYZ23456789`[e%32]).join(``)}`}function Jr(e,t,n=()=>Date.now(),r=1e3,i=qr,a=700){let o=``,s=``,c=Promise.resolve(),l=Kr(e,t,n,i,()=>o);async function u(){t.dispatch({type:`busy`,busy:!0});let n=await Mt(e);if(!n.ok){R(n.error,`error`),t.dispatch({type:`error`,message:n.error});return}t.dispatch({type:`solutionsLoaded`,solutions:n.value});let r=await Pt(e,n.value.filter(e=>!e.managed).map(e=>e.id));r.ok?t.dispatch({type:`flowCountsLoaded`,counts:r.value.perSolution,total:r.value.total}):R(r.error,`warning`),t.dispatch({type:`busy`,busy:!1})}async function d(){let n=t.get(),r=n.solutions.find(e=>e.id===n.solutionId);if(!r)return!1;t.dispatch({type:`busy`,busy:!0});let i=await Rt(e,r);return i.ok?(t.get().solutionId===r.id&&(t.dispatch({type:`snapshotLoaded`,snapshot:g(i.value)}),R(`Read ${i.value.flows.length} flows and ${i.value.memberReferenceIds.length} references from ${r.name}.`,`info`)),!0):(R(i.error,`error`),t.dispatch({type:`error`,message:i.error}),!1)}async function f(){let i=t.get().plan;if(!i)return;let a=setInterval(()=>t.dispatch({type:`tick`,now:n()}),r),o;try{o=await Ut(e,i,e=>t.dispatch({type:`applyRow`,outcome:e,now:n()}),e=>t.dispatch({type:`setPhase`,phase:e,now:n()}))}catch(e){o=[{id:``,label:`The run`,status:`failed`,message:`The run stopped unexpectedly: ${e instanceof Error?e.message:String(e)}`}]}t.dispatch({type:`rowsDone`,now:n()});let s=!1;try{s=await d()}catch{s=!1}finally{clearInterval(a)}t.dispatch({type:`applied`,results:o,now:n(),refreshFailed:!s});let c=o.filter(e=>e.status===`failed`).length;R(`Applied: ${o.filter(e=>e.status===`done`).length} done, ${c} failed.`,c?`warning`:`success`)}function p(){let e=t.get();e.snapshot&&t.dispatch({type:`openPlan`,plan:w(e.snapshot,e.selected,e.repointGroups,s,e.manageState)})}function m(){let e=t.get(),n=e.cleanup?.picked??[];return!e.snapshot||n.length===0?[]:(t.dispatch({type:`selectAll`,ids:n}),n)}function h(e){let n=t.get().snapshot;n&&(t.dispatch({type:`openPlan`,plan:ae(n,e,`remove`)}),t.dispatch({type:`openConfirm`}))}async function _(n){let r=t.get().snapshot;if(!r)return;t.dispatch({type:`busy`,busy:!0});let a=await Gt(e,r,n),o=new Map;for(let e of Object.values(a))for(let t of e??[])n.includes(t.id)||o.set(t.id,t);let s=o.size===0?{}:await vn(e,r,[...o.values()]);t.dispatch({type:`busy`,busy:!1}),t.get().snapshot===r&&(t.dispatch({type:`openPlan`,plan:ae(r,n,`delete`,a,s),code:i()}),t.dispatch({type:`openConfirm`}))}let b=!1;function x(n){let r=t.get().newReference;if(!r||r.saving||b)return c;b=!0,t.dispatch({type:`connectionsLoading`});let i=r.connectorId,a=r.connectionSource===`typed`?r.connectionId:``;return c=(async()=>{try{let r=await tn(e);if(t.get().newReference?.connectorId!==i)return;r.ok?t.dispatch({type:`connectionsLoaded`,items:r.value}):(t.dispatch({type:`connectionsFailed`,error:r.error}),R(`The connections could not be read: ${r.error}`,`warning`)),n&&a!==``&&t.dispatch({type:`connectionChecked`,typed:a,verdict:Fe(t.get().newReference?.live??{status:`idle`,items:[],error:``},i,j(a))})}finally{b=!1}})(),c}return{environment:()=>o,connections:l,idle:async()=>{await c,await l.idle()},async start(){o=await e.environmentName().catch(()=>``),s=await e.currentUserId().catch(()=>``),await u()},selectSolution(e){t.get().wizard?.step!==`apply`&&(t.dispatch({type:`selectSolution`,id:e}),e===``?u():d())},refresh(){t.get().solutionId===``?u():d()},previewConnection(){let e=t.get();e.snapshot&&t.dispatch({type:`openPlan`,plan:S(e.snapshot,e.selected,e.newConnectionId,s)})},previewRepoint(){p()},setManageState(e){t.dispatch({type:`setManageState`,on:e});let n=t.get();n.snapshot&&n.plan&&n.plan.kind===`repoint`&&n.wizard?.step===`preview`&&t.dispatch({type:`replacePlan`,plan:w(n.snapshot,n.selected,n.repointGroups,s,e)})},previewRemove(){h(t.get().selected)},previewDelete(){return _(t.get().selected)},checkDependencies(n){let r=t.get(),i=r.snapshot;if(!i)return c;let a=[...new Set(n)].filter(e=>r.dependencies[e]?.status!==`loading`&&i.allReferences.some(t=>t.id===e));if(a.length===0)return c;t.dispatch({type:`dependenciesLoading`,ids:a});let o=0,s=async()=>{for(;o<a.length;){let n=a[o++],r=i.allReferences.find(e=>e.id===n),s=await gn(e,i,r);if(t.get().snapshot!==i)return;t.dispatch(s.ok?{type:`dependenciesLoaded`,id:n,report:s.value}:{type:`dependenciesFailed`,id:n,error:s.error}),s.ok||R(`The dependencies of ${r.logicalName} could not be read: ${s.error}`,`warning`)}};return c=Promise.all([s(),s(),s()]).then(()=>void 0),c},cleanupRemove(){let e=m();e.length!==0&&h(e)},cleanupDelete(){let e=m();return e.length===0?Promise.resolve():_(e)},startMerge(e){let n=t.get(),r=n.snapshot,i=r?We(r).find(t=>t.key===e):void 0;if(!r||!i)return;let a=Je(r,i,Ge(i,n.cleanup));if(!a)return;let o=a.duplicates.map(e=>e.id);a.group===null?t.dispatch({type:`openCleanup`,tab:`unused`,picked:o}):(t.dispatch({type:`startMerge`,flowIds:a.flowIds,group:a.group,followUp:{ids:o,keeper:a.keeper.displayName||a.keeper.logicalName}}),t.get().cleanupFollowUp!==null&&p())},openNewReference(e){return t.dispatch({type:`openNewReference`,connectorId:e,seed:$e()}),t.get().newReference===null?c:x(!1)},refreshConnections(){return x(!1)},checkConnection(){return x(!0)},createReference(){let n=t.get(),r=n.newReference,i=n.snapshot;return!r||!i||!r.reviewing||r.saving||(t.dispatch({type:`newReferenceSaving`}),t.get().newReference?.saving!==!0)||(c=(async()=>{let n=await nn(e,i,r,e=>t.dispatch({type:`newReferenceStep`,step:e}));if(t.get().solutionId===i.solution.id){if(n.ok){if(t.dispatch({type:`newReferenceStep`,step:`done`}),a>0&&await new Promise(e=>setTimeout(e,a)),t.get().solutionId!==i.solution.id)return;t.dispatch({type:`referenceCreated`,reference:n.value.reference,componentType:n.value.componentType}),R(`Created ${n.value.reference.logicalName} in ${i.solution.name}.`,`success`),await e.notify(`Created ${n.value.reference.displayName||n.value.reference.logicalName}.`,`success`).catch(()=>void 0)}else t.dispatch({type:`newReferenceFailed`,error:n.error}),R(n.error,`error`)}})()),c},setTypedCode(e){t.dispatch({type:`setTypedCode`,value:e})},async saveBackup(){let n=t.get().plan;if(!n)return;let r=new Date().toISOString(),i=await e.saveFile(y(n,r),v(n,o,r)).catch(()=>!1);i&&t.dispatch({type:`backupSaved`}),R(i?`Backup of the old values saved.`:`Backup not saved.`,i?`success`:`warning`)},async saveReport(){let n=t.get(),r=n.wizard;if(!r||r.step!==`result`||!n.results)return;let i=r.finishedAt??r.now,a=Se(r.operation),s=ge({operation:a,solution:n.snapshot?.solution.name??``,environment:o,startedAt:r.startedAt,finishedAt:i,results:n.results}),c=await e.saveFile(_e(a,i),s).catch(()=>!1);R(c?`Report saved.`:`Report not saved.`,c?`success`:`warning`)},confirm(){let e=t.get();e.plan&&(t.dispatch({type:`applyStarted`,now:n(),total:e.plan.rows.length}),t.get().wizard?.step===`apply`&&(c=f()))}}}function W(e,t=``,n){let r=document.createElement(e);return t&&(r.className=t),n!==void 0&&(r.textContent=n),r}function G(e,t=``){let n=W(`span`,`icon icon-${e}${t?` ${t}`:``}`);return n.setAttribute(`aria-hidden`,`true`),n}function K(e,t=`secondary`,n,r=!1){let i=W(`button`,`btn btn--${t}${r?` btn--sm`:``}`,e);return i.type=`button`,n&&i.addEventListener(`click`,n),i}function q(e,t=`neutral`,n){let r=W(`span`,t===`neutral`?`chip`:`chip chip--${t}`);return n&&r.append(G(n)),r.append(e),r}function Yr(e,t,n){let r=W(`button`,e?`check is-on`:`check`);return r.type=`button`,r.setAttribute(`role`,`checkbox`),r.setAttribute(`aria-checked`,String(e)),r.setAttribute(`aria-label`,t),r.addEventListener(`click`,n),r}function Xr(e,t){let n=W(`section`,`panel`),r=W(`div`,`panel-head`);r.append(W(`h2`,`panel-heading`,e)),t&&r.append(W(`span`,`panel-sub`,t));let i=W(`div`,`panel-body`);return n.append(r,i),{root:n,body:i}}function Zr(e){let t=W(`nav`,`breadcrumb`);return t.setAttribute(`aria-label`,`Breadcrumb`),e.forEach((n,r)=>{let i=r===e.length-1;if(r>0&&t.append(W(`span`,`crumb-sep`,`/`)),i||!n.onClick){let e=W(`span`,`crumb crumb--current`,n.label);e.title=n.label,t.append(e)}else{let e=W(`button`,`crumb crumb--link`,n.label);e.type=`button`,e.title=n.label,e.addEventListener(`click`,n.onClick),t.append(e)}}),t}function Qr(e,t){typeof t==`string`?(e.textContent=t,e.title=t):(e.append(t),t.textContent&&(e.title=t.textContent))}function $r(e,t,n,r={}){let i=W(`table`,`data-table`),a=W(`thead`),o=W(`tr`);e.forEach((e,t)=>{let n=W(`th`),i=r.sort;if(r.numeric?.includes(t)&&n.classList.add(`col-num`),i&&i.columns.includes(t)){let r=i.active===t;n.classList.add(`sortable`),r&&n.classList.add(`sorted`),n.setAttribute(`aria-sort`,r?i.desc?`descending`:`ascending`:`none`),n.tabIndex=0;let a=W(`span`,`th-label`),o=W(`span`,r&&!i.desc?`sort-arrow sort-arrow--asc`:`sort-arrow`);r&&o.append(G(`chevron-down`)),a.append(e,o),n.append(a),n.addEventListener(`click`,()=>i.onSort(t)),n.addEventListener(`keydown`,e=>{e.key===`Enter`&&i.onSort(t)})}else n.textContent=e;o.append(n)}),a.append(o);let s=W(`tbody`);return t.forEach(e=>{let t=W(`tr`);n(e).forEach((e,n)=>{let i=W(`td`);r.numeric?.includes(n)&&i.classList.add(`col-num`),Qr(i,e),t.append(i)});let i=r.onOpen;i&&(t.classList.add(`row-link`),t.tabIndex=0,t.setAttribute(`role`,`link`),t.addEventListener(`click`,()=>i(e)),t.addEventListener(`keydown`,t=>{t.key===`Enter`&&i(e)})),s.append(t)}),i.append(a,s),i}function ei(e){let t=W(`div`,`table-wrap`);return t.append(e),t}function ti(e,t,n){let r=W(`div`,`search-box`),i=W(`input`);i.type=`text`,i.autocomplete=`off`,i.placeholder=t,i.value=e,i.setAttribute(`aria-label`,t),i.addEventListener(`input`,()=>n(i.value));let a=W(`button`,`search-clear`);return a.type=`button`,a.title=`Clear search`,a.hidden=e===``,a.append(G(`close`,`icon--xs`)),a.addEventListener(`click`,()=>n(``)),r.append(G(`search`,`icon--sm search-icon`),i,a),r}function ni(e,t,n){let r=W(`div`,`segmented`);r.setAttribute(`role`,`group`);for(let i of e){let e=W(`button`,i.key===t?`segment is-active`:`segment`);e.type=`button`,e.setAttribute(`aria-pressed`,String(i.key===t)),i.icon&&e.append(G(i.icon,`icon--sm`)),e.append(i.label),i.count!==void 0&&e.append(` `,W(`span`,`segment-count`,String(i.count))),i.disabled&&(e.disabled=!0),i.title&&(e.title=i.title),e.addEventListener(`click`,()=>n(i.key)),r.append(e)}return r}function ri(e,t){let n=W(`div`,`empty-state`);return t&&n.append(G(t)),n.append(e),n}function ii(e,t,n){let r=W(`button`,e?`toggle is-on`:`toggle`);return r.type=`button`,r.setAttribute(`role`,`switch`),r.setAttribute(`aria-checked`,String(e)),r.setAttribute(`aria-label`,t),r.addEventListener(`click`,n),r}function ai(e){let t=e.detail!==void 0&&e.onExpand!==void 0,n=t?[``,``]:[``],r=$r([...n,...e.columns],e.rows,t=>[...n,...e.cells(t)]),i=e.rows.filter(t=>!e.isBlocked?.(t)).map(e.id),a=i.length>0&&i.every(t=>e.selected.includes(t)),o=r.querySelectorAll(`th`);o[0].className=`col-check`,o[0].append(Yr(a,`Select all shown`,()=>e.onToggleAll(i,a))),t&&(o[1].className=`col-expand`);let s=n.length+e.columns.length;return Array.from(r.querySelectorAll(`:scope > tbody > tr`)).forEach((n,r)=>{let i=e.rows[r],a=n.children[0];a.className=`col-check`,a.removeAttribute(`title`);let o=e.id(i);if(e.isBlocked?.(i))n.classList.add(`is-blocked`);else{let t=e.selected.includes(o);t&&n.classList.add(`is-selected`),a.append(Yr(t,`Select ${e.label(i)}`,()=>e.onToggle(o)))}if(!t)return;let c=e.expanded?.includes(o)??!1,l=n.children[1];l.className=`col-expand`,l.removeAttribute(`title`);let u=W(`button`,`icon-btn expand-btn`);if(u.type=`button`,u.setAttribute(`aria-expanded`,String(c)),u.setAttribute(`aria-label`,`${c?`Hide`:`Show`} details of ${e.label(i)}`),u.append(G(`chevron-down`)),l.append(u),n.classList.add(`is-expandable`),n.addEventListener(`click`,t=>{t.target.closest(`.check`)||e.onExpand(o)}),c){n.classList.add(`is-open`);let t=W(`tr`,`detail-row`),r=W(`td`);r.colSpan=s,r.append(e.detail(i)),t.append(r),n.after(t)}}),r}function oi(e,t){let n=W(`span`,t?`status-slot`:`status-slot is-idle`);return n.setAttribute(`role`,`status`),n.append(W(`span`,`spinner`),e),n}function si(e){return W(`span`,e===0?`count-pill count-pill--zero`:`count-pill`,String(e))}function ci(e,t,n,r=!1){let i=W(`div`,`stat stat--icon`),a=W(`span`,r?`stat-badge stat-badge--alt`:`stat-badge`);a.append(G(n));let o=W(`div`,`stat-text`);return o.append(W(`dt`,``,e),W(`dd`,``,t)),i.append(a,o),i}function li(e,t,n){let r=W(`section`,`hero`),i=W(`div`,`hero-text`);i.append(W(`h2`,`hero-title`,e),W(`p`,`hero-subtitle`,t));let a=W(`dl`,`hero-stats`);return a.append(...n),r.append(i,a),r}function ui(e,t){let n=W(`div`,`connection-badge connection-badge--${t}`);return n.append(W(`span`,`connection-dot`),W(`span`,`connection-name`,e)),n}function di(e,t,n){e.className=`connection-badge connection-badge--${n}`;let r=e.querySelector(`.connection-name`);r&&(r.textContent=t)}function fi(e){let t=W(`dl`,`kv`);for(let n of e){let e=W(`div`,`kv-item${n.mono?` kv-item--mono`:``}${n.wide?` kv-item--wide`:``}`),r=W(`dd`);r.append(n.value===``?`-`:n.value);let i=W(`dt`);n.icon&&i.append(G(n.icon)),i.append(n.label),e.append(i,r),t.append(e)}return t}function J(e,t,n,r=!1,i){let a=W(`section`,`detail-block`),o=W(`div`,`detail-head`),s=W(`h4`,`detail-title`);i&&s.append(G(i)),s.append(e),o.append(s),t!==void 0&&o.append(q(String(t)));let c=r?W(`div`,`detail-body`):a;return r?(c.append(n),a.append(o,c)):a.append(o,n),a}function pi(e){let t=W(`div`,`fig fig--${e.tone}`),n=W(`span`,`fig-badge`);n.append(G(e.icon));let r=W(`div`);return r.append(W(`div`,`fig-value`,e.value),W(`div`,`fig-label`,e.label)),t.append(n,r),t}function mi(e){let t=W(`div`,`fig-row`);return t.append(...e.map(pi)),t}function hi(e){let t=W(`div`,`change-list`);for(let n of e){let e=W(`div`,n.blocked?`change-row change-row--blocked`:`change-row`),r=W(`div`,`change-name`);r.append(W(`strong`,``,n.name)),n.sub&&r.append(W(`span`,``,n.sub));let i=W(`div`,`change-old`);i.append(n.from);let a=W(`div`,`change-new`);if(a.append(n.to),e.append(r,i,G(`arrow-big-right`,`change-arrow`),a),n.blocked){let t=W(`div`,`change-reason`);t.append(q(n.blocked,`warning`,`alert-triangle`)),e.append(t)}t.append(e)}return t}function Y(e,t,n,r,i){let a=W(`div`,`callout callout--${e}`),o=r??{primary:`info`,info:`info`,success:`check-circle`,warning:`alert-triangle`,error:`x-circle`}[e];a.append(G(o,`callout-icon`));let s=W(`div`,`callout-body`);s.append(W(`strong`,`callout-title`,t));for(let e of n)s.append(W(`p`,``,e));return a.append(s),i&&(i.classList.add(`callout-action`),a.append(i)),a}var gi=0;function _i(e){let t=`modal-${++gi}`,n=W(`div`,`modal-overlay`),r=W(`div`,`modal modal--${e.tone}`);r.setAttribute(`role`,`alertdialog`),r.setAttribute(`aria-modal`,`true`),r.setAttribute(`aria-labelledby`,`${t}-title`);let i=W(`div`,`modal-head`),a=W(`span`,`modal-badge`);a.append(G(e.icon));let o=W(`div`,`modal-titles`),s=W(`h2`,`modal-title`,e.title);if(s.id=`${t}-title`,o.append(s),e.subtitle!==void 0){let t=W(`div`,`modal-subtitle`);t.append(e.subtitle),o.append(t)}let c=W(`button`,`icon-btn modal-close`);c.type=`button`,c.title=`Close`,c.setAttribute(`aria-label`,`Close`),c.append(G(`close`)),c.addEventListener(`click`,e.onCancel),i.append(a,o,c);let l=W(`div`,`modal-body`);l.append(...e.body);let u=W(`div`,`modal-foot`);if(e.footNote){let t=W(`div`,`modal-foot-note`);t.append(e.footNote),u.append(t)}let d=K(e.cancelLabel??`Cancel`,`secondary`,e.onCancel);d.dataset.autofocus=`true`;let f=K(e.confirm.label,e.confirm.danger?`danger`:`primary`,e.confirm.onConfirm);e.confirm.icon&&f.prepend(G(e.confirm.icon)),f.disabled=e.confirm.disabled===!0;let p=W(`div`,`modal-actions`);return p.append(d,f),u.append(p),r.append(i,l,u),n.append(r),r.addEventListener(`keydown`,t=>{if(t.key===`Escape`){t.stopPropagation(),e.onCancel();return}if(t.key!==`Tab`)return;let n=[...r.querySelectorAll(`button, input, select, [tabindex]:not([tabindex="-1"])`)].filter(e=>!e.disabled&&!e.hidden);if(n.length===0)return;let i=n[0],a=n[n.length-1],o=document.activeElement;t.shiftKey&&(o===i||!r.contains(o))?(t.preventDefault(),a.focus()):t.shiftKey||o!==a&&r.contains(o)||(t.preventDefault(),i.focus())}),n}function vi(e,t){let n=W(`ol`,`stepper`);return n.setAttribute(`aria-label`,`Progress`),e.forEach((r,i)=>{let a=W(`li`,`stepper-item ${i<t?`is-done`:i===t?`is-active`:`is-upcoming`}`);i===t&&a.setAttribute(`aria-current`,`step`),a.dataset.step=r.key;let o=W(`span`,`stepper-dot`);if(i<t?o.append(G(`check`)):o.append(String(i+1)),a.append(o,W(`span`,`stepper-label`,r.label)),n.append(a),i<e.length-1){let e=W(`li`,i<t?`stepper-line is-done`:`stepper-line`);e.setAttribute(`aria-hidden`,`true`),n.append(e)}}),n}function yi(e,t){let n=W(`div`,`pipeline-box`),r=W(`ol`,`pipeline`);r.setAttribute(`aria-label`,`Phases`),e.forEach((e,t)=>{let n=W(`li`,`pipe-step is-${e.state===`pending`?`pending`:e.state}`);e.state===`active`&&n.setAttribute(`aria-current`,`step`);let i=W(`span`,`pipe-dot`);e.state===`done`?i.append(G(`check`)):e.state===`error`?i.append(G(`close`)):i.append(String(t+1)),n.append(i,W(`span`,`pipe-label`,e.label)),r.append(n)});let i=W(`div`,`pipe-status`);return i.setAttribute(`role`,`status`),i.append(t??`\xA0`),n.append(r,i),n}function bi(e,t){let n=document.createDocumentFragment();if(!t||t[0]>=t[1])return n.append(e),n;let r=W(`mark`,`diff-hl`,e.slice(t[0],t[1]));return n.append(e.slice(0,t[0]),r,e.slice(t[1])),n}function xi(e,t,n){let r=W(`td`,`diff-code${e===`old`?` diff-code--old`:e===`new`?` diff-code--new`:e===`empty`?` diff-code--empty`:``}`);return(e===`old`||e===`new`)&&r.append(W(`span`,`diff-mark`,e===`old`?`-`:`+`)),e!==`empty`&&r.append(bi(t,n)),r}var X=e=>W(`td`,`diff-no`,e===null?``:String(e));function Si(e,t){let n=W(`table`,`diff-table`),r=t===`split`?[`c-no`,`c-code`,`c-no`,`c-code`]:[`c-no`,`c-no`,`c-code`],i=W(`colgroup`);for(let e of r)i.append(W(`col`,e));n.append(i);let a=W(`tbody`);for(let n of e){let e=W(`tr`,`diff-row diff-row--${n.kind}`);if(n.kind===`gap`){e.className=`diff-row diff-row--gap`;let t=W(`td`,``,`${n.skipped} unchanged line${n.skipped===1?``:`s`}`);t.colSpan=r.length,e.append(t)}else if(t===`split`){let t=n.kind===`added`?xi(`empty`,``,null):xi(n.kind===`context`?`ctx`:`old`,n.oldText,n.oldSpan),r=n.kind===`removed`?xi(`empty`,``,null):xi(n.kind===`context`?`ctx`:`new`,n.newText,n.newSpan);e.append(X(n.oldNo),t,X(n.newNo),r)}else if(n.kind===`changed`){e.append(X(n.oldNo),X(null),xi(`old`,n.oldText,n.oldSpan)),a.append(e);let t=W(`tr`,`diff-row diff-row--changed`);t.append(X(null),X(n.newNo),xi(`new`,n.newText,n.newSpan)),a.append(t);continue}else{let t=n.kind===`context`?`ctx`:n.kind===`removed`?`old`:`new`;e.append(X(n.oldNo),X(n.newNo),xi(t,n.kind===`added`?n.newText:n.oldText,n.kind===`added`?n.newSpan:n.oldSpan))}a.append(e)}n.append(a);let o=W(`div`,`diff-scroll`);o.append(n);let s=W(`div`,`diff diff--${t}`);return s.append(o),s}function Ci(e,t,n,r,i){let a=W(`div`,r.className),o=W(`div`,`diff-head`),s=W(`span`,`diff-stat`);s.append(W(`span`,`diff-add`,`+${t}`),W(`span`,`diff-del`,`-${n}`)),o.append(W(`span`,`diff-file`,e),s),a.append(o),i&&a.append(W(`p`,`diff-note`,i));for(let e of[...r.children])a.append(e);return a}function wi(e){let t=W(`section`,e.blocked?`item-card item-card--blocked`:`item-card`),n=W(`div`,`item-head`),r=W(`button`,`icon-btn expand-btn`);r.type=`button`,r.setAttribute(`aria-expanded`,String(e.open)),r.setAttribute(`aria-label`,`${e.open?`Collapse`:`Expand`} ${e.title}`),r.append(G(`chevron-down`)),r.addEventListener(`click`,e.onToggle),n.append(r,W(`span`,`item-title`,e.title)),e.sub&&n.append(W(`span`,`item-sub`,e.sub)),n.append(W(`span`,`item-count`,e.countText)),e.controls&&n.append(e.controls);let i=W(`div`,`item-body`);return i.hidden=!e.open,i.append(e.body),t.append(n,i),t}var Ti=`crg.logOpen`;function Ei(){try{return window.localStorage.getItem(Ti)===`1`}catch{return!1}}function Di(e){try{window.localStorage.setItem(Ti,e?`1`:`0`)}catch{}}var Oi={info:`info`,success:`check-circle`,warning:`alert-triangle`,error:`x-circle`},ki=e=>new Date(e.timestamp).toTimeString().slice(0,8);function Ai(e,t){let n=Ei(),r=!0,i=()=>{let a=Tn(),o=a.filter(e=>e.level===`warning`||e.level===`error`).length,s=a[a.length-1],c=e.querySelector(`.log-dock-list`);c&&(r=c.scrollTop+c.clientHeight>=c.scrollHeight-8);let l=c?.scrollTop??0,u=e.contains(document.activeElement)?document.activeElement.dataset.dock:void 0,d=W(`section`,n?`log-dock is-open`:`log-dock`);d.setAttribute(`aria-label`,`Log`);let f=W(`div`,`log-dock-bar`),p=W(`button`,`log-dock-toggle`);if(p.type=`button`,p.dataset.dock=`toggle`,p.setAttribute(`aria-expanded`,String(n)),p.setAttribute(`aria-controls`,`log-dock-list`),p.title=n?`Close the log`:`Open the log`,p.append(G(`list`),W(`span`,`log-dock-title`,`Log`),q(String(a.length),`info`)),o>0&&p.append(q(`${o} to check`,`warning`,`alert-triangle`)),!n&&s){let e=W(`span`,`log-dock-last log-entry--${s.level}`);e.append(W(`span`,`log-dock-time`,ki(s)),s.message),p.append(e)}p.append(G(`chevron-down`,`log-dock-caret`)),p.addEventListener(`click`,()=>{n=!n,r=!0,Di(n),i()}),f.append(p);let m=W(`div`,`log-dock-actions`),h=K(`Clear`,`secondary`,()=>wn(),!0);h.prepend(G(`trash`,`icon--sm`)),h.dataset.dock=`clear`,h.disabled=a.length===0;let g=K(`Save`,`secondary`,()=>void t(`log.json`,En()).catch(()=>!1),!0);if(g.prepend(G(`save`,`icon--sm`)),g.dataset.dock=`save`,g.disabled=a.length===0,m.append(h,g),f.append(m),d.append(f),n){let e=W(`div`,`log-dock-list`);e.id=`log-dock-list`,e.setAttribute(`role`,`log`),e.setAttribute(`aria-live`,`polite`),a.length===0&&e.append(W(`p`,`muted log-dock-empty`,`Nothing logged yet.`));for(let t of a){let n=W(`div`,`log-entry log-entry--${t.level}`);n.append(G(Oi[t.level],`icon--sm`),W(`span`,`log-timestamp`,ki(t)),W(`span`,`log-message`,t.message)),e.append(n)}d.append(e),queueMicrotask(()=>{e.scrollTop=r?e.scrollHeight:l})}e.replaceChildren(d),u&&e.querySelector(`[data-dock="${u}"]:not(:disabled)`)?.focus()},a=Cn(i);return i(),a}var ji=(e,t)=>(e.displayName||e.logicalName).localeCompare(t.displayName||t.logicalName,void 0,{sensitivity:`base`});function Mi(e,t){let n=e.flows.filter(e=>t.includes(e.flow.id)),r=new Map;for(let e of n)for(let t of e.uses)t.reference&&r.set(t.logicalName,(r.get(t.logicalName)??0)+1);return[...r.entries()].map(([t,r])=>{let i=e.allReferences.find(e=>e.logicalName===t);return{logicalName:t,displayName:i.displayName,connectorId:i.connectorId,used:r,selected:n.length}}).sort((e,t)=>t.used-e.used||ji(e,t))}function Ni(e,t){let n=new Map;for(let r of Mi(e,t))n.set(r.connectorId,[...n.get(r.connectorId)??[],r]);return[...n].map(([e,t])=>({connectorId:e,sources:t}))}function Pi(e){return!e||e.from.length===0?`empty`:e.target===``?`incomplete`:`done`}var Fi=e=>[...new Set(typeof e==`string`?[e]:e)].filter(e=>e!==``);function Ii(e,t){let n=Fi(t);if(n.length===0)return;let r=new Set;for(let t of n){let n=e.allReferences.find(e=>e.logicalName===t);if(!n)return;r.add(n.connectorId)}return r.size===1?[...r][0]:void 0}function Li(e,t){let n=Fi(t),r=Ii(e,n);return r===void 0?[]:e.references.map(e=>e.reference).filter(e=>e.connectorId===r&&(n.length>1||e.logicalName!==n[0])).sort(ji)}function Ri(e,t,n){return Li(e,t).some(e=>e.logicalName===n)}var zi={key:`flows`,desc:!0};function Bi(e){return{key:e,desc:e!==`name`}}function Vi(e,t){return e.key===t?{key:t,desc:!e.desc}:Bi(t)}function Hi(e,t,n){let r=(e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`}),i=e=>{if(n.key===`flows`)return t?.[e.id]??-1;let r=Date.parse(e.createdOn);return Number.isNaN(r)?0:r},a=n.desc?-1:1;return[...e].sort((e,t)=>{if(n.key===`name`)return a*r(e,t);let o=i(e)-i(t);return o===0?r(e,t):a*o})}var Ui=e=>e.type.startsWith(`cm`);function Wi(){return{list:{status:`idle`,items:[],read:0,error:``},environmentId:``,filter:`all`,connector:``,search:``,sort:Kn,shown:100,open:[],selected:[],deps:{},checkAll:null,usage:{status:`idle`,map:null,error:``},deletion:null}}var Gi=e=>nr(e.list.items,e.deps,e.filter,e.connector,e.search).map(e=>e.name),Ki=(e,t)=>{let n=e.list.items.find(e=>e.name===t);return n!==void 0&&$n(n,e.deps)};function qi(e){if(e.selected.length===0)return e;let t=new Set(Gi(e)),n=e.selected.filter(n=>t.has(n)&&Ki(e,n));return n.length===e.selected.length?e:{...e,selected:n}}function Ji(e,t){switch(t.type){case`cmLoading`:return{...e,list:{...e.list,status:`loading`,read:0,error:``},deps:{},selected:[],checkAll:null};case`cmPage`:return e.list.status===`loading`?{...e,list:{...e.list,read:t.count}}:e;case`cmLoaded`:{let n=new Set(t.items.map(e=>e.name));return{...e,list:{status:`ready`,items:t.items,read:t.items.length,error:``},environmentId:t.environmentId,open:e.open.filter(e=>n.has(e)),selected:[],deps:t.keepDeps?Object.fromEntries(Object.entries(e.deps).filter(([e,t])=>n.has(e)&&t.status!==`loading`)):{},checkAll:null}}case`cmFailed`:return{...e,list:{...e.list,status:`failed`,error:t.error},checkAll:null};case`cmUsageLoading`:return{...e,usage:{status:`loading`,map:e.usage.map,error:``}};case`cmUsageLoaded`:return{...e,usage:{status:`ready`,map:t.map,error:``}};case`cmUsageFailed`:return{...e,usage:{status:`failed`,map:null,error:t.error}};case`cmFilter`:return qi({...e,filter:t.filter,shown:100});case`cmConnector`:return qi({...e,connector:t.key,shown:100});case`cmSearch`:return qi({...e,search:t.text,shown:100});case`cmSort`:return{...e,sort:e.sort.key===t.key?{key:t.key,dir:e.sort.dir===`asc`?`desc`:`asc`}:{key:t.key,dir:`asc`}};case`cmShowMore`:return{...e,shown:e.shown+100};case`cmToggleOpen`:return{...e,open:e.open.includes(t.name)?e.open.filter(e=>e!==t.name):[...e.open,t.name]};case`cmDepsLoading`:{let n={...e.deps};for(let e of t.names)n[e]={status:`loading`};return{...e,deps:n}}case`cmDepsLoaded`:return e.list.items.some(e=>e.name===t.name)?qi({...e,deps:{...e.deps,[t.name]:{status:`ready`,report:t.report}}}):e;case`cmDepsFailed`:return e.list.items.some(e=>e.name===t.name)?qi({...e,deps:{...e.deps,[t.name]:{status:`failed`,error:t.error}}}):e;case`cmCheckAllStarted`:return{...e,checkAll:{total:t.total,done:0,startedAt:t.now,now:t.now,step:`apps`,cancelled:!1,only:t.only??null}};case`cmCheckAllStep`:return e.checkAll?{...e,checkAll:{...e.checkAll,step:t.step}}:e;case`cmCheckAllProgress`:return e.checkAll?{...e,checkAll:{...e.checkAll,done:t.done,now:t.now}}:e;case`cmCheckAllCancel`:return e.checkAll?{...e,checkAll:{...e.checkAll,cancelled:!0}}:e;case`cmCheckAllFinished`:return{...e,checkAll:null};case`cmToggle`:return Ki(e,t.name)?{...e,selected:e.selected.includes(t.name)?e.selected.filter(e=>e!==t.name):[...e.selected,t.name]}:e;case`cmSelectEligible`:{let t=new Set(Gi(e));return{...e,selected:e.list.items.filter(n=>t.has(n.name)&&$n(n,e.deps)).map(e=>e.name)}}case`cmClearSelection`:return e.selected.length===0?e:{...e,selected:[]};case`cmDeletionOpen`:return!Dn.connectionDelete||e.deletion!==null||z(t.plan).length===0?e:{...e,deletion:{plan:t.plan,step:`preview`,code:t.code,typedCode:``,ack:!1,portalChecked:[],backupSaved:!1,startedAt:0,now:0,total:0,live:[],current:null,log:[],results:null,refreshFailed:!1}};case`cmDeletionTyped`:return e.deletion&&e.deletion.step===`preview`?{...e,deletion:{...e.deletion,typedCode:t.text}}:e;case`cmDeletionAck`:return e.deletion&&e.deletion.step===`preview`?{...e,deletion:{...e.deletion,ack:t.on}}:e;case`cmDeletionPortal`:{let n=e.deletion;if(!n||n.step!==`preview`||!z(n.plan).some(e=>e.name===t.name))return e;let r=n.portalChecked.includes(t.name);return t.on===r?e:{...e,deletion:{...n,portalChecked:t.on?[...n.portalChecked,t.name]:n.portalChecked.filter(e=>e!==t.name)}}}case`cmDeletionPortalAll`:{let n=e.deletion;return!n||n.step!==`preview`?e:{...e,deletion:{...n,portalChecked:t.on?z(n.plan).map(e=>e.name):[]}}}case`cmDeletionBackupSaved`:return e.deletion?{...e,deletion:{...e.deletion,backupSaved:!0}}:e;case`cmDeletionApply`:{let n=e.deletion;return!n||n.step!==`preview`||n.typedCode.trim()!==n.code||!n.ack||!z(n.plan).every(e=>n.portalChecked.includes(e.name))?e:{...e,deletion:{...n,step:`apply`,startedAt:t.now,now:t.now,total:z(n.plan).length,live:[],current:null,log:[{at:0,text:`Started: ${z(n.plan).length} connection${z(n.plan).length===1?``:`s`} to delete.`,tone:`info`}]}}}case`cmDeletionStep`:{let n=e.deletion;if(!n||n.step!==`apply`)return e;let r=hr.find(e=>e.key===t.step).doing;return{...e,deletion:{...n,now:t.now,current:{id:t.id,label:t.label,step:t.step},log:[...n.log,{at:t.now-n.startedAt,text:`${t.label}: ${r}`,tone:`info`}]}}}case`cmDeletionTick`:return e.deletion&&e.deletion.step===`apply`?{...e,deletion:{...e.deletion,now:t.now}}:e;case`cmDeletionRow`:{let n=e.deletion;if(!n||n.step!==`apply`)return e;let r=t.outcome.status===`done`?`success`:t.outcome.status===`failed`?`error`:`warning`;return{...e,deletion:{...n,live:[...n.live,t.outcome],now:t.now,current:null,log:[...n.log,{at:t.now-n.startedAt,text:`${t.outcome.label}: ${t.outcome.message}`,tone:r}]}}}case`cmDeletionDone`:return e.deletion&&e.deletion.step===`apply`?{...e,deletion:{...e.deletion,step:`result`,results:t.results,refreshFailed:t.refreshFailed,now:t.now}}:e;case`cmDeletionClose`:return!e.deletion||e.deletion.step===`apply`?e:e.deletion.step===`result`?{...e,deletion:null,selected:[],search:``,shown:100}:{...e,deletion:null}}}function Yi(e){return{operation:e,step:`preview`,layout:`split`,tab:`diff`,collapsed:[],shown:20,confirmOpen:!1,startedAt:0,now:0,total:0,live:[],phase:`write`,states:!1,finishedAt:null,refreshFailed:!1}}function Xi(){return{solutions:[],solutionId:``,solutionFilter:``,solutionSort:zi,flowCounts:null,flowTotal:null,snapshot:null,busy:!1,error:``,view:`flows`,filter:``,selected:[],expanded:[],newConnectionId:``,repointGroups:[],plan:null,wizard:null,planAck:!1,stateAck:!1,confirmCode:``,typedCode:``,manageState:!1,backupSaved:!1,results:null,studio:!1,dialogExpanded:!0,studioStep:0,newReference:null,cleanup:null,cleanupFollowUp:null,cleanupResume:!1,dependencies:{},area:`solutions`,connections:Wi()}}function Zi(e){if(e.repointGroups.length===0)return e;let t=e.snapshot,n=t===null?[]:Mi(t,e.selected),r=e=>n.find(t=>t.logicalName===e)?.connectorId,i=[];for(let n of e.repointGroups){let e=[...new Set(n.from)].filter(e=>r(e)!==void 0);if(e.length===0)continue;let a=r(e[0]);if(i.some(e=>e.connectorId===a))continue;let o=e.filter(e=>r(e)===a);i.push({connectorId:a,from:o,target:Ri(t,o,n.target)?n.target:``})}return i.length===e.repointGroups.length&&i.every((t,n)=>{let r=e.repointGroups[n];return t.connectorId===r.connectorId&&t.target===r.target&&t.from.length===r.from.length&&t.from.every((e,t)=>e===r.from[t])})?e:{...e,repointGroups:i}}function Qi(e,t,n){let r=e.snapshot?.allReferences??[],i=e=>r.find(t=>t.logicalName===e)?.connectorId??``,a=i(n),o=[];for(let e of t)o.includes(i(e))||o.push(i(e));return o.map((e,r)=>({connectorId:e,from:t.filter(t=>i(t)===e),target:a===e||r===0&&!o.includes(a)?n:``}))}function $i(e){return(e.wizard===null||e.wizard.step===`result`)&&(e.planAck||e.stateAck||e.backupSaved||e.typedCode!==``)?{...e,planAck:!1,stateAck:!1,backupSaved:!1,typedCode:``}:e}function ea(e){if(!e.studio)return e.newReference===null?e:{...e,newReference:null};if(!(e.snapshot!==null&&!e.snapshot.solution.managed&&e.selected.length>0&&e.wizard===null))return{...e,studio:!1};let t=e.view===`flows`?Ni(e.snapshot,e.selected).length:0,n=Math.min(Math.max(e.studioStep,0),t),r=n===e.studioStep?e:{...e,studioStep:n},i=e.view===`flows`?Ni(e.snapshot,e.selected)[n]:void 0;return r.newReference!==null&&i?.connectorId!==r.newReference.connectorId?{...r,newReference:null}:r}function ta(e){if(!e.cleanup)return e;let t=e.wizard!==null&&e.wizard.step===`preview`&&e.plan!==null&&(e.plan.kind===`remove`||e.plan.kind===`delete`);if(e.snapshot===null||e.snapshot.solution.managed||e.view!==`references`||e.wizard!==null&&!t)return{...e,cleanup:null};let n=Xe(e.snapshot,e.cleanup);return n===e.cleanup?e:{...e,cleanup:n}}function na(e,t){return ta(ea($i(Zi(ra(e,t)))))}function ra(e,t){if(Ui(t))return{...e,connections:Ji(e.connections,t)};switch(t.type){case`setArea`:return t.area===`solutions`&&(e.connections.deletion?.step===`apply`||e.connections.checkAll!==null)?e:{...e,area:t.area};case`busy`:return{...e,busy:t.busy};case`error`:return{...e,error:t.message,busy:!1};case`solutionsLoaded`:return{...e,solutions:t.solutions,error:``};case`selectSolution`:return e.wizard?.step===`apply`?e:{...e,solutionId:t.id,snapshot:null,selected:[],expanded:[],plan:null,wizard:null,results:null,error:``,filter:``,repointGroups:[],newConnectionId:``,newReference:null,cleanup:null,cleanupFollowUp:null,cleanupResume:!1,dependencies:{}};case`sortSolutions`:return{...e,solutionSort:Vi(e.solutionSort,t.key)};case`flowCountsLoaded`:return{...e,flowCounts:t.counts,flowTotal:t.total};case`setSolutionFilter`:return{...e,solutionFilter:t.filter};case`snapshotLoaded`:{let n=e.wizard!==null&&e.wizard.step===`preview`,r=e.wizard!==null&&!n;return{...e,snapshot:t.snapshot,dependencies:{},selected:e.selected.filter(e=>ia(t.snapshot,e)),expanded:e.expanded.filter(e=>ia(t.snapshot,e)),plan:r?e.plan:null,wizard:r?e.wizard:null,error:n?`The solution was read again, so the preview was closed. Choose again.`:``,busy:!1}}case`setView`:return{...e,view:t.view,selected:[],expanded:[],plan:null,wizard:null,cleanupFollowUp:null};case`setFilter`:return{...e,filter:t.filter};case`toggle`:return{...e,selected:e.selected.includes(t.id)?e.selected.filter(e=>e!==t.id):[...e.selected,t.id]};case`toggleExpand`:return{...e,expanded:e.expanded.includes(t.id)?e.expanded.filter(e=>e!==t.id):[...e.expanded,t.id]};case`selectAll`:return{...e,selected:[...t.ids]};case`clearSelection`:return{...e,selected:[]};case`setNewConnectionId`:return{...e,newConnectionId:t.value};case`setRepoint`:return{...e,repointGroups:Qi(e,typeof t.from==`string`?t.from===``?[]:[t.from]:t.from,t.target)};case`setGroups`:return{...e,repointGroups:t.groups};case`setGroup`:{let n=e.repointGroups.some(e=>e.connectorId===t.group.connectorId)?e.repointGroups.map(e=>e.connectorId===t.group.connectorId?t.group:e):[...e.repointGroups,t.group];return{...e,repointGroups:n.filter(e=>e.from.length>0)}}case`dismissCleanupSummary`:return e.cleanup?{...e,cleanup:{...e.cleanup,summaryHidden:!0}}:e;case`dependenciesLoading`:return{...e,cleanup:e.cleanup&&e.cleanup.summaryHidden?{...e.cleanup,summaryHidden:!1}:e.cleanup,dependencies:{...e.dependencies,...Object.fromEntries(t.ids.map(e=>[e,{status:`loading`}]))}};case`dependenciesLoaded`:return{...e,dependencies:{...e.dependencies,[t.id]:{status:`ready`,report:t.report}}};case`dependenciesFailed`:return{...e,dependencies:{...e.dependencies,[t.id]:{status:`failed`,error:t.error}}};case`openCleanup`:{if(e.snapshot===null||e.snapshot.solution.managed||e.view!==`references`||e.wizard!==null)return e;let n=Ye(e.snapshot),r=t.tab??(n.unused===0&&n.groups>0?`duplicates`:`unused`);return{...e,studio:!1,cleanup:Ve(r,t.picked??[])}}case`closeCleanup`:return{...e,cleanup:null,cleanupResume:!1};case`setCleanupTab`:return e.cleanup?{...e,cleanup:{...e.cleanup,tab:t.tab}}:e;case`toggleCleanupUnused`:return e.cleanup?{...e,cleanup:{...e.cleanup,picked:e.cleanup.picked.includes(t.id)?e.cleanup.picked.filter(e=>e!==t.id):[...e.cleanup.picked,t.id]}}:e;case`setCleanupUnused`:return e.cleanup?{...e,cleanup:{...e.cleanup,picked:[...new Set(t.ids)]}}:e;case`toggleCleanupDeps`:return e.cleanup?{...e,cleanup:{...e.cleanup,open:e.cleanup.open.includes(t.id)?e.cleanup.open.filter(e=>e!==t.id):[...e.cleanup.open,t.id]}}:e;case`setKeeper`:return e.cleanup?{...e,cleanup:{...e.cleanup,keepers:{...e.cleanup.keepers,[t.group]:t.id}}}:e;case`startMerge`:return{...e,view:`flows`,selected:[...t.flowIds],expanded:[],filter:``,plan:null,wizard:null,results:null,studio:!1,cleanup:null,cleanupResume:!1,repointGroups:[t.group],cleanupFollowUp:t.followUp};case`followUpCleanup`:{let t=e.cleanupFollowUp?.ids??[];return{...e,view:`references`,selected:[],expanded:[],plan:null,wizard:null,results:null,repointGroups:[],cleanupFollowUp:null,cleanupResume:!1,cleanup:Ve(`unused`,t)}}case`openStudio`:return{...e,studio:!0,studioStep:0};case`studioGo`:return{...e,studioStep:t.step};case`closeStudio`:return{...e,studio:!1,newReference:null};case`openNewReference`:return e.studio&&e.snapshot!==null&&!e.snapshot.solution.managed?{...e,newReference:{...Qe(t.connectorId,t.seed),live:{status:`loading`,items:[],error:``}}}:e;case`setNewReferenceField`:return e.newReference&&!e.newReference.saving?{...e,newReference:dt(e.newReference,t.field,t.value)}:e;case`applySuggestion`:return e.newReference&&!e.newReference.saving?{...e,newReference:ft(e.newReference,t.suggestion)}:e;case`pickConnection`:return e.newReference&&!e.newReference.saving?{...e,newReference:mt(e.newReference,t.id)}:e;case`connectionChecked`:return e.newReference&&!e.newReference.saving?{...e,newReference:ht(e.newReference,t.typed,t.verdict)}:e;case`toggleSuggestions`:return e.newReference?{...e,newReference:{...e.newReference,suggestOpen:!e.newReference.suggestOpen}}:e;case`connectionsLoading`:return e.newReference&&e.newReference.live.status!==`loading`?{...e,newReference:{...e.newReference,live:{...e.newReference.live,status:`loading`,error:``}}}:e;case`connectionsLoaded`:return e.newReference?{...e,newReference:{...e.newReference,live:{status:`ready`,items:t.items,error:``}}}:e;case`connectionsFailed`:return e.newReference?{...e,newReference:{...e.newReference,live:{status:`unavailable`,items:[],error:t.error}}}:e;case`toggleNewReferenceConnection`:return e.newReference?{...e,newReference:{...e.newReference,openConnections:e.newReference.openConnections.includes(t.id)?e.newReference.openConnections.filter(e=>e!==t.id):[...e.newReference.openConnections,t.id]}}:e;case`reviewNewReference`:return e.newReference&&!e.newReference.saving?{...e,newReference:{...e.newReference,reviewing:t.on,error:``}}:e;case`closeNewReference`:return e.newReference?.saving?e:{...e,newReference:null};case`newReferenceSaving`:return e.newReference&&e.newReference.reviewing?{...e,newReference:{...e.newReference,saving:!0,step:`check`,error:``}}:e;case`newReferenceStep`:return e.newReference&&e.newReference.saving?{...e,newReference:{...e.newReference,step:t.step}}:e;case`newReferenceFailed`:return e.newReference?{...e,newReference:{...e.newReference,saving:!1,step:``,reviewing:!1,error:t.error}}:e;case`referenceCreated`:{if(!e.snapshot)return e;let n=_(e.snapshot,t.reference,t.componentType),r=e.repointGroups.map(e=>e.connectorId===t.reference.connectorId?{...e,target:t.reference.logicalName}:e);return{...e,snapshot:n,repointGroups:r,newReference:null}}case`setDialogExpanded`:return{...e,dialogExpanded:t.on};case`openPlan`:return{...e,studio:!1,cleanupResume:e.cleanup!==null&&(t.plan.kind===`remove`||t.plan.kind===`delete`),plan:t.plan,wizard:Yi(t.plan.kind),planAck:!1,stateAck:!1,backupSaved:!1,confirmCode:t.code??``,typedCode:``};case`replacePlan`:return e.wizard&&e.wizard.step===`preview`?{...e,plan:t.plan,planAck:!1,stateAck:!1,backupSaved:!1}:e;case`setTypedCode`:return e.plan?{...e,typedCode:t.value}:e;case`setAck`:return e.plan?{...e,planAck:t.on}:e;case`setStateAck`:return e.plan?{...e,stateAck:t.on}:e;case`setManageState`:return{...e,manageState:t.on};case`setPhase`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,phase:t.phase,now:t.now}}:e;case`backupSaved`:return e.plan?{...e,backupSaved:!0}:e;case`closePlan`:return e.wizard&&be(e.wizard.step,`leave`)&&e.wizard.step!==`result`?{...e,plan:null,wizard:null,cleanupFollowUp:null,cleanupResume:!1,selected:e.cleanup?[]:e.selected}:e;case`setLayout`:return e.wizard?{...e,wizard:{...e.wizard,layout:t.layout}}:e;case`setTab`:return e.wizard?{...e,wizard:{...e.wizard,tab:t.tab}}:e;case`toggleItem`:return e.wizard?{...e,wizard:{...e.wizard,collapsed:e.wizard.collapsed.includes(t.id)?e.wizard.collapsed.filter(e=>e!==t.id):[...e.wizard.collapsed,t.id]}}:e;case`showMore`:return e.wizard?{...e,wizard:{...e.wizard,shown:e.wizard.shown+20}}:e;case`openConfirm`:return e.wizard&&e.wizard.step===`preview`?{...e,wizard:{...e.wizard,confirmOpen:!0}}:e;case`closeConfirm`:return e.wizard?{...e,wizard:{...e.wizard,confirmOpen:!1}}:e;case`applyStarted`:{let n=e.plan!==null&&ee(e.plan).length>0,r=e.plan?.kind!==`delete`||e.confirmCode!==``&&e.typedCode.trim()===e.confirmCode;return e.plan&&e.wizard&&e.wizard.step===`preview`&&e.wizard.confirmOpen&&e.planAck&&r&&(!n||e.stateAck)?{...e,busy:!0,wizard:{...e.wizard,step:`apply`,confirmOpen:!1,startedAt:t.now,now:t.now,total:t.total,live:[],phase:n?`off`:`write`,states:n,finishedAt:null,refreshFailed:!1}}:e}case`applyRow`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,live:[...e.wizard.live,t.outcome],now:t.now}}:e;case`tick`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,now:t.now}}:e;case`rowsDone`:return e.wizard&&e.wizard.step===`apply`?{...e,wizard:{...e.wizard,phase:`refresh`,now:t.now}}:e;case`applied`:return e.wizard?{...e,results:t.results,plan:null,busy:!1,wizard:{...e.wizard,step:`result`,phase:`done`,confirmOpen:!1,now:t.now??e.wizard.now,finishedAt:t.now??e.wizard.now,refreshFailed:t.refreshFailed??!1}}:{...e,results:t.results,plan:null,busy:!1};case`dismissResults`:return e.wizard&&e.wizard.step!==`result`?e:e.cleanupResume?{...e,results:null,wizard:null,cleanupFollowUp:null,cleanupResume:!1,selected:[],cleanup:Ve(`unused`,[])}:{...e,results:null,wizard:null,cleanupFollowUp:null}}}function ia(e,t){return e.flows.some(e=>e.flow.id===t)||e.references.some(e=>e.reference.id===t)}function aa(e){let t=e,n=new Set;return{get:()=>t,dispatch(e){let r=na(t,e);r!==t&&(t=r,n.forEach(e=>e(t)))},subscribe(e){return n.add(e),()=>n.delete(e)}}}function oa(e){let t=t=>{let n=t instanceof Error?t.message:String(t);R(`Unexpected error: ${n}`,`error`),e(`Something went wrong: ${n}`)};window.addEventListener(`error`,e=>t(e.error??e.message)),window.addEventListener(`unhandledrejection`,e=>t(e.reason))}function sa(e,t=Date.now()){let n=Date.parse(e);if(Number.isNaN(n))return``;let r=Math.floor((t-n)/6e4);if(r<0)return new Date(n).toLocaleDateString();if(r<1)return`just now`;let i=(e,t)=>`${e} ${t}${e===1?``:`s`} ago`;if(r<60)return i(r,`minute`);let a=Math.floor(r/60);if(a<24)return i(a,`hour`);let o=Math.floor(a/24);if(o<7)return i(o,`day`);let s=Math.floor(o/7);return s<5?i(s,`week`):new Date(n).toLocaleDateString()}function ca(e){let t=Date.parse(e);return Number.isNaN(t)?``:new Date(t).toLocaleString()}function Z(e,t=!1,n=!1){let r=O(e),i=W(`span`,`conn-tile conn-tile--${t?`missing`:r.tone}${n?` conn-tile--sm`:``}`);return i.title=t?`Reference not found in this environment`:r.name,i.append(G(t?`alert-triangle`:r.glyph)),i}function la(e,t){if(e===``){let e=q(`No connection`,`warning`,`alert-triangle`);return t&&(e.title=`This reference has no connection, so there is nothing to open.`),e}let n=q(e,`neutral`,`link`);if(n.classList.add(`chip--code`,`conn-id`),n.title=e,!t)return n;let r=W(`button`,`conn-link`);return r.type=`button`,r.title=`Open this connection in Connections: ${e}`,r.setAttribute(`aria-label`,`Open the connection ${e} in Connections`),r.append(n),r.addEventListener(`click`,e=>{e.stopPropagation(),t()}),r}function ua(e,t){let n=W(`span`,`connector-name`);if(n.append(O(e).name),t){let e=q(`Custom connector`,`info`,`code`);e.title=`A connector built for this environment, not a standard Microsoft connector.`,n.append(` `,e)}return n}function da(e,t){let n=W(`div`,`ref-cell`),r=W(`div`,`conn-text`);return e?(r.append(W(`div`,`conn-name`,e.displayName||e.logicalName),W(`div`,`conn-logical`,e.logicalName)),n.append(Z(e.connectorId),r),n):(r.append(W(`div`,`conn-name`,t),W(`div`,`conn-logical`,`Not found in this environment`)),n.append(Z(``,!0),r),n)}function fa(e){let t=W(`div`,`tile-row`);if(e.unreadable)return t.append(q(`Unreadable`,`warning`,`alert-triangle`)),t;if(e.uses.length===0)return t.append(W(`span`,`muted`,`None`)),t;for(let n of e.uses.slice(0,5)){let e=Z(n.reference?.connectorId??``,n.reference===void 0,!0);e.title=`${n.reference?O(n.reference.connectorId).name+`: `+(n.reference.displayName||n.logicalName):n.logicalName+` (not found)`}`,t.append(e)}return e.uses.length>5&&t.append(W(`span`,`muted`,`+${e.uses.length-5}`)),t.append(W(`span`,`muted tile-count`,e.uses.length===1?`1 connection`:`${e.uses.length} connections`)),t}function pa(e){let t=W(`div`,`chip-list`);for(let n of e){let e=q(n.label,`warning`,`alert-triangle`);e.title=n.detail,t.append(e)}return t}function ma(e){return e===`done`?q(`done`,`success`,`check-circle`):e===`failed`?q(`failed`,`error`,`x-circle`):q(`skipped`,`warning`,`alert-triangle`)}var ha={preview:`eye`,apply:`refresh`,result:`check-circle`};function ga(e,t,n){let r=W(`div`,`step-panel`),i=W(`div`,`step-header-row`),a=W(`h2`,`step-title`);a.append(G(ha[e]),Ce(e)),i.append(a,vi(ve,ye(e)));let o=W(`div`,`step-footer`);o.append(...n);let s=W(`div`,`step-body`);return s.append(...t),r.append(i,s,o),r}function _a(){return W(`span`,`spacer`)}function va(e,t,n,r,i={}){let a=K(e,t,r);return i.after?a.append(G(n)):a.prepend(G(n)),a.disabled=i.disabled===!0,i.title&&(a.title=i.title),a}function ya(e,t,n){let r=e.live.length,i=me(e.phase,r,e.total),a=W(`div`,`run-hero`),o=W(`div`,e.phase===`done`?`run-ring is-done`:`run-ring is-moving`);o.style.setProperty(`--p`,String(i)),o.setAttribute(`role`,`progressbar`),o.setAttribute(`aria-label`,`Progress of the run`),o.setAttribute(`aria-valuemin`,`0`),o.setAttribute(`aria-valuemax`,`100`),o.setAttribute(`aria-valuenow`,String(i)),o.append(W(`span`,`run-percent`,`${i}%`));let s=W(`div`,`run-titles`),c=W(`div`,`run-headline-row`);if(e.phase!==`done`){let e=W(`span`,`run-spinner`);e.setAttribute(`aria-hidden`,`true`),c.append(e)}c.append(W(`h3`,`run-headline`,he(e.phase)));let l=e.phase===`off`?`Turning the flows that are on off, so that they can be changed`:e.phase===`write`?`Writing and verifying row ${Math.min(r+1,Math.max(e.total,1))} of ${e.total}`:e.phase===`on`?`Turning the flows on again`:e.phase===`refresh`?`All rows are written. Reading the solution again`:`Finished`;s.append(c,W(`p`,`run-now`,l),W(`p`,`run-sub`,`${{connection:`Writing to`,repoint:`Writing to`,remove:`Removing components in`,delete:`Deleting in`}[e.operation]} ${t===``?`the connected environment`:t}. Do not close this tool until it finishes.`));let u=W(`div`,`run-counters`),d=(t,n)=>{let r=W(`span`,`run-count run-count--${t}`);return r.append(W(`b`,``,String(e.live.filter(e=>e.status===t).length)),W(`span`,``,n)),r};return u.append(d(`done`,`written`),d(`skipped`,`skipped`),d(`failed`,`failed`)),a.append(o,s,n,u),a}var ba={done:`check-circle`,failed:`x-circle`,skipped:`alert-triangle`};function xa(e,t){let n=new Map;for(let t of e.live)n.has(t.id)||n.set(t.id,t);let r=new Set(t.map(e=>e.id)),i=e.live.filter(e=>!r.has(e.id)).map(e=>({id:e.id,label:e.label})),a=[...t,...i],o=e.phase===`refresh`||e.phase===`done`?void 0:a.find(e=>!n.has(e.id))?.id,s=W(`ul`,`run-items`);for(let e of a){let t=n.get(e.id),r=t?t.status:e.id===o?`working`:`pending`,i=W(`li`,`run-item run-item--${r}`);i.dataset.row=e.id;let a=W(`span`,`run-item-mark`);r===`working`?a.append(W(`span`,`run-spinner run-spinner--sm`)):t?a.append(G(ba[t.status])):a.append(G(`minus`));let c=W(`span`,`run-item-text`);c.append(W(`span`,`run-item-name`,e.label),W(`span`,`run-item-msg`,t?t.message:r===`working`?`Writing and verifying...`:`Waiting`)),i.append(a,c),t&&i.append(ma(t.status)),s.append(i)}return s}function Sa(e,t=``,n=[]){let r=W(`section`,`run-panel`),i=W(`div`,`run-phases`);i.append(yi(ce(e.phase,!1,e.states),le(e.phase,e.live.length,e.total,e.now-e.startedAt)));let a=W(`div`,`run-rows-head`);a.append(G(`list`),W(`span`,`run-rows-title`,`Rows`)),e.total>0&&a.append(q(`${e.live.length} of ${e.total}`,`info`));let o=W(`div`,`run-rows`);return o.append(a,xa(e,n)),r.append(ya(e,t,i),o),ga(`apply`,[r],[va(`Back`,`secondary`,`arrow-left`,()=>void 0,{disabled:!0,title:`The write has started: there is no way back.`}),_a()])}function Ca(e,t,n){let r=e.querySelector(`.modal`);e.classList.add(`is-sizable`),t&&(r.classList.add(`is-expanded`),e.classList.add(`is-expanded`));let i=W(`button`,`icon-btn modal-expand`);i.type=`button`,i.setAttribute(`aria-label`,t?`Restore size`:`Expand`),i.setAttribute(`aria-pressed`,String(t)),i.title=t?`Restore size`:`Fill the window`,i.append(G(t?`minimize`:`maximize`)),i.addEventListener(`click`,()=>n(!t)),r.querySelector(`.modal-head`).insertBefore(i,r.querySelector(`.modal-close`))}function wa(e,t,n){let r=e.allReferences.find(e=>e.logicalName===t),i=W(`div`,`ref-inline ref-inline--${n}`);i.append(Z(r?.connectorId??``,r===void 0,!0));let a=W(`div`,`conn-text`);return a.append(W(`div`,`conn-name`,r?.displayName||t),W(`div`,`conn-logical`,r?O(r.connectorId).name:`Not found`)),i.append(a),i}function Ta(e,t,n){let r=t.split(`,`).map(e=>e.trim()).filter(e=>e!==``),i=W(`div`,`ref-list`);return i.append(...(r.length>0?r:[t]).map(t=>wa(e,t,n))),i}function Ea(e,t){return e.rows.map(n=>{let r=n.blocked;if(e.kind===`remove`||e.kind===`delete`){let i=t.flows.some(e=>e.flow.id===n.id),a=W(`span`,e.kind===`delete`?`removal-to removal-to--delete`:`removal-to`,n.newValue);return{name:n.label,sub:i?`Flow`:`Connection reference`,from:W(`span`,`removal-from`,n.oldValue),to:a,...r===void 0?{}:{blocked:r}}}if(e.kind===`connection`){let e=t.references.find(e=>e.reference.id===n.id)?.reference.logicalName;return{name:n.label,sub:e,from:la(n.oldValue),to:la(n.newValue),...r===void 0?{}:{blocked:r}}}let i=t.flows.find(e=>e.flow.id===n.id);return{name:n.label,sub:i?`${c[i.info.type]} flow`:void 0,from:Ta(t,n.oldValue,`old`),to:Ta(t,n.newValue,`new`),...r===void 0?{}:{blocked:r}}})}function Da(e){return e.warnings.length>0?Y(`warning`,`Read before you apply`,e.warnings):null}function Oa(e){return Y(`info`,`What is written`,e.kind===`connection`?[`Only the connection id of these references is written. Every flow that uses them follows.`]:[`Only the connection reference name inside each flow definition changes. Everything else in the definition is kept exactly as stored.`,`Flows that are turned on are never written.`],`shield`)}function ka(e,t,n=`connection`){let r=n===`delete`,i=K(e?`Save again`:`Save backup`,`secondary`,t,!0);return i.prepend(G(`save`)),Y(e?`success`:`primary`,e?`Backup saved`:r?`Save a copy first (strongly recommended)`:`Save a backup first (recommended)`,[r?`The definition of every flow and the record of every reference that will be deleted are written to a file you choose. Deleting cannot be undone: this file is the only copy.`:`The old values of every row that will change are written to a file you choose, so you can restore them by hand. Undo is not offered for writes to the environment.`],e?`check-circle`:`save`,i)}function Aa(e){let t=Y(`warning`,`Flows will be turned off`,[`${e.length===1?`This flow is`:`These ${e.length} flows are`} turned on. The tool turns ${e.length===1?`it`:`them`} off, writes the change, checks it, and turns ${e.length===1?`it`:`them`} on again, also when a write fails.`,`While a flow is off it does not run: triggers that fire in the meantime are not handled. Runs that already started continue to the end.`,`Turning a flow on can be refused by the environment (connections, policies): then it stays off, and the result names it so that you can turn it on in the maker portal.`,`Do not close this tool until the run has finished.`,`Flows: ${e.join(`, `)}.`],`power`);return t.classList.add(`state-callout`),t}function ja(e,t,n){let r=e.rows.filter(e=>e.blocked===`The flow is turned on: turn it off first, or allow the tool to turn it off in the confirmation.`||e.turnOff===!0).length;if(e.kind!==`repoint`||r===0)return null;let i=W(`section`,t?`studio-state is-on`:`studio-state`),a=W(`div`,`studio-state-text`);return a.append(W(`strong`,`studio-state-title`,`Turn these flows off for the change and on again afterwards`),W(`span`,`studio-state-hint`,`${r} flow${r===1?` is`:`s are`} turned on: without this ${r===1?`it stays`:`they stay`} blocked and is not written.`)),i.append(G(`power`,`studio-state-icon`),a,ii(t,`Turn the flows that are on off and on again`,()=>n(!t))),i}function Ma(e,t){let{plan:n}=e,r=T(n),i=n.rows.length-r.length,a=r.reduce((e,t)=>e+t.affectedOn,0),o=n.kind===`connection`,s=e.environment||`the connected environment`,c=o?r.length===1?`reference row`:`reference rows`:r.length===1?`flow`:`flows`,l=W(`span`,`modal-env`);l.append(`Environment`,ui(s,`connected`));let u=[mi([{label:o?`References to change`:`Flows to change`,value:String(r.length),icon:o?`plug`:`workflow`,tone:`primary`},{label:`Flows affected`,value:String(re(n)),icon:`workflow`,tone:`info`},{label:`Turned on`,value:String(a),icon:`power`,tone:a>0?`warning`:`success`},{label:`Not changed`,value:String(i),icon:`shield`,tone:i>0?`warning`:`success`}])],d=ja(n,e.manageState,t.setManageState);d&&u.push(d);let f=Da(n);f&&u.push(f);let p=ee(n);p.length>0&&u.push(Aa(p.map(e=>e.label))),u.push(Oa(n),ka(e.backupSaved,t.saveBackup,n.kind));let m=W(`div`,`ack`),h=`I reviewed these changes and understand they are written to ${s}.`;m.append(ii(e.ack,`I reviewed these changes`,()=>t.setAck(!e.ack)),W(`span`,``,h));let g=e.ack?q(`Confirmed`,`success`,`check`):q(`Required`,`warning`,`alert-triangle`);g.classList.add(`ack-state`),m.append(g);let _=m;if(p.length>0){let n=W(`div`,`ack`);n.append(ii(e.stateAck,`I understand the flows are turned off`,()=>t.setStateAck(!e.stateAck)),W(`span`,``,`I understand that ${p.length} flow${p.length===1?` is`:`s are`} turned off for the write and turned on again afterwards.`)),_=W(`div`,`ack-stack`),_.append(m,n)}let v=_i({tone:`primary`,icon:o?`link`:`git-branch`,title:o?`Change the connection of ${r.length} reference${r.length===1?``:`s`}`:`Re-point ${r.length} flow${r.length===1?``:`s`}`,subtitle:l,body:u,footNote:_,confirm:{label:`Apply to ${r.length} ${c}`,icon:`check`,danger:!0,disabled:!e.ack||p.length>0&&!e.stateAck||r.length===0,onConfirm:t.confirm},onCancel:t.cancel});return v.classList.add(`confirm-overlay`),v.querySelector(`.modal`).classList.add(`confirm-dialog`),Ca(v,e.expanded,t.setExpanded),v}function Na(e,t){let n=e.references.filter(e=>t.includes(e.reference.id)),r=new Set(n.flatMap(e=>e.flowIds)),i=[...r].filter(t=>e.flows.find(e=>e.flow.id===t)?.flow.stateCode===1).length;return{references:n.length,flows:r.size,turnedOn:i}}function Pa(e,t){return t<=0?0:Math.round(e/t*100)}function Fa(e,t,n){let r=n.filter(e=>e.from.length>0),i=r.flatMap(e=>e.from.filter(t=>t!==e.target)),a=0,o=0,s=0;for(let n of t){let t=e.flows.find(e=>e.flow.id===n);t&&(t.uses.some(e=>i.includes(e.logicalName))?(a++,t.flow.stateCode===1&&o++):s++)}return{categories:r.length,affected:a,turnedOn:o,unrelated:s}}function Ia(e,t=`info`){let n=W(`p`,`dep-note${t===`warn`?` dep-note--warn`:t===`error`?` dep-note--error`:``}`);return n.append(G(t===`warn`?`alert-triangle`:t===`error`?`x-circle`:`info`,`icon--sm`),W(`span`,``,e)),n}function La(e){let t=W(`p`,`dep-loading`);t.setAttribute(`role`,`status`),t.setAttribute(`aria-live`,`polite`);let n=W(`span`,`spinner`);return n.setAttribute(`aria-hidden`,`true`),t.append(n,W(`span`,``,e)),t}function Ra(e){return e.state===``?null:q(e.state,e.state===`On`?`success`:e.state===`Suspended`?`warning`:`neutral`,e.state===`Suspended`?`pause`:`power`)}function za(e){let t=W(`li`,`dep-row${e.inOpenSolution?``:` is-outside`}`),n=W(`div`,`dep-row-head`);n.append(W(`span`,`dep-name`,e.name));let r=W(`span`,`dep-tags`);r.append(q(e.typeLabel,`neutral`));let i=Ra(e);i&&r.append(i),e.managed&&r.append(q(`Managed`,`neutral`,`lock`)),r.append(e.inOpenSolution?q(`In this solution`,`info`,`folder`):q(`Outside this solution`,`warning`,`alert-triangle`)),n.append(r),t.append(n);let a=[];return e.parent!==``&&a.push(`Agent: ${e.parent}`),e.owner!==``&&a.push(`Owner: ${e.owner}`),e.solutions.length>0&&a.push(`In ${e.solutions.length===1?`solution`:`solutions`}: ${e.solutions.join(`, `)}`),a.length>0&&t.append(W(`div`,`dep-facts`,a.join(` - `))),t}function Ba(e){let t=W(`div`,`dep-block`),n=e.state;if(n===void 0){let n=W(`div`,`dep-intro`);n.append(G(`layers`,`icon--sm icon--primary`),W(`span`,``,`What uses ${e.subject} in the whole environment, also outside this solution: flows of other solutions, agents, apps.`));let r=K(`Check dependencies`,`primary`,e.onCheck,!0);return r.prepend(G(`search`,`icon--sm`)),r.setAttribute(`aria-label`,`Check dependencies of ${e.name}`),t.append(n,r),t}if(n.status===`loading`)return t.append(La(`Reading what depends on it in the whole environment...`)),t;if(n.status===`failed`){t.append(Ia(`The dependencies could not be read: ${n.error}`,`error`));let r=K(`Try again`,`secondary`,e.onCheck,!0);return r.setAttribute(`aria-label`,`Try again to check the dependencies of ${e.name}`),t.append(r),t}let r=Tt(n.report),i=W(`div`,`dep-summary`);i.append(G(r.total===0?`check-circle`:r.outside>0?`alert-triangle`:`info`,`icon--sm ${r.total===0?`icon--success`:r.outside>0?`icon--warning`:`icon--primary`}`),W(`span`,`dep-summary-text`,Dt(r))),t.append(i);for(let e of Et(n.report)){let n=W(`section`,`dep-group`),r=W(`h5`,`dep-group-title`);r.append(G(e.icon,`icon--sm icon--muted`),`${e.label} `,W(`span`,`dep-count`,String(e.items.length)));let i=W(`ul`,`dep-list`);for(let t of e.items)i.append(za(t));n.append(r,i),t.append(n)}for(let e of n.report.notes)t.append(Ia(e,`warn`));let a=W(`div`,`dep-foot`);a.append(W(`span`,`dep-source`,`From Dataverse dependency tracking, the source of Show dependencies in the maker portal. A component whose dependency is not tracked is not listed.`));let o=K(`Check again`,`secondary`,e.onCheck,!0);return o.prepend(G(`refresh`,`icon--sm`)),o.setAttribute(`aria-label`,`Check the dependencies of ${e.name} again`),a.append(o),t.append(a),t}function Va(e){if(e===void 0)return null;if(e.status===`loading`){let e=q(`Checking...`,`neutral`),t=W(`span`,`spinner`);return t.setAttribute(`aria-hidden`,`true`),e.prepend(t),e}if(e.status===`failed`)return q(`Could not check`,`error`,`x-circle`);let t=Tt(e.report);return t.total===0?q(`Nothing depends on it`,`success`,`check-circle`):t.outside>0?q(`Used by ${t.outside} outside this solution`,`warning`,`alert-triangle`):q(`Used by ${t.total} in this solution`,`info`,`info`)}var Ha=0;function Ua(){Ha=0}var Wa=(e,t)=>`${e} ${t}${e===1?``:`s`}`,Ga=e=>e.length>=10?e.slice(0,10):e;function Q(e,t=`info`){let n=W(`p`,`newref-note${t===`warn`?` newref-note--warn`:t===`error`?` newref-note--error`:t===`ok`?` newref-note--ok`:``}`);return n.append(G(t===`warn`?`alert-triangle`:t===`error`?`x-circle`:t===`ok`?`check-circle`:`info`,`icon--sm`),W(`span`,``,e)),n}function Ka(e,t,n={}){let r=W(`div`,`newref-field`),i=W(`span`,`newref-label`,e);return n.required&&i.append(W(`span`,`newref-req`,` *`)),r.append(i,t),n.hint&&r.append(W(`span`,`newref-hint`,n.hint)),n.error&&r.append(W(`span`,`newref-error`,n.error)),r}function qa(e,t,n,r,i=``){let a=W(`input`,`text-input newref-input`);return a.type=`text`,a.value=r,a.placeholder=i,a.autocomplete=`off`,a.spellcheck=!1,a.setAttribute(`aria-label`,n),a.addEventListener(`input`,()=>e.dispatch({type:`setNewReferenceField`,field:t,value:a.value})),a}function Ja(e=!1){let t=W(`span`,e?`spinner newref-spinner--on-primary`:`spinner`);return t.setAttribute(`aria-hidden`,`true`),t}function Ya(e,t,n=``){let r=W(`div`,`conn-fact${n?` ${n}`:``}`);return r.append(G(e,`icon--sm`),W(`span`,``,t)),r}function Xa(e,t){let n=W(`div`,`dep-connection`),r=e.users.map(e=>t.deps[e.id]),i=K(`Check every dependency of this connection`,`secondary`,()=>void t.h.checkDependencies(e.users.map(e=>e.id)),!0);if(i.prepend(G(`search`,`icon--sm`)),i.setAttribute(`aria-label`,`Check every dependency of connection ${e.id}`),r.some(e=>e?.status===`loading`))return n.append(La(`Reading what depends on the ${e.users.length===1?`reference`:`references`} that hold this connection...`)),n;if(r.every(e=>e?.status===`ready`)){let e=new Map;for(let t of r)if(t?.status===`ready`)for(let n of t.report.items)e.set(n.id,+!!n.inOpenSolution);let t=e.size,a=[...e.values()].filter(e=>e===0).length,o=W(`p`,`dep-note`);return o.append(G(t===0?`check-circle`:a>0?`alert-triangle`:`info`,`icon--sm ${t===0?`icon--success`:a>0?`icon--warning`:`icon--primary`}`),W(`span`,``,t===0?`Nothing depends on the references that hold this connection, anywhere in the environment.`:`${t} ${t===1?`component depends`:`components depend`} on the references that hold this connection: ${t-a} in this solution, ${a} outside.`)),n.append(o,i),i.textContent=`Check again`,i.prepend(G(`refresh`,`icon--sm`)),n}return n.append(i),n}function Za(e,t,n,r,i){let a=W(`div`,n?`conn-item is-on`:`conn-item`),o=W(`span`,`conn-facts`);o.append(Ya(`key`,t.id,`conn-fact--id`)),t.displayName!==``&&o.append(Ya(`user`,t.displayName)),t.createdTime!==``&&o.append(Ya(`clock`,`Created ${Ga(t.createdTime)}`)),o.append(Ya(`plug`,t.users.length===0?`Not used by any reference yet`:`${Wa(t.users.length,`reference`)} and ${Wa(t.flowCount,`flow`)} of this solution use it`));let s=W(`button`,`choice choice--compact`+(n?` is-on`:``));if(s.type=`button`,s.setAttribute(`role`,`radio`),s.setAttribute(`aria-checked`,String(n)),s.setAttribute(`aria-label`,`Use connection ${t.id}`),s.append(W(`span`,`choice-mark`),o),s.addEventListener(`click`,()=>e.dispatch({type:`pickConnection`,id:t.id})),a.append(s),t.users.length===0)return a;let c=W(`button`,`conn-expander`);if(c.type=`button`,c.setAttribute(`aria-expanded`,String(r)),c.setAttribute(`aria-label`,`Used by, connection ${t.id}`),c.append(G(`users`,`icon--sm`),W(`span`,``,r?`Hide who uses it`:`Used by`),G(`chevron-down`,`icon--sm`)),c.addEventListener(`click`,()=>e.dispatch({type:`toggleNewReferenceConnection`,id:t.id})),a.append(c),r){let e=W(`ul`,`conn-users`),n=W(`li`,`conn-user conn-user--total`);n.append(Xa(t,i)),e.append(n);for(let n of t.users){let t=W(`li`,`conn-user`),r=W(`div`,`conn-user-name`);if(r.append(G(`plug`,`icon--sm icon--primary`),W(`span`,``,n.displayName)),t.append(r,W(`div`,`conn-user-logical`,n.logicalName)),(n.ownerName!==``||n.ownerEmail!==``)&&t.append(W(`div`,`conn-user-owner`,[`Owner of the reference`,n.ownerName,n.ownerEmail].filter(e=>e!==``).join(` - `))),n.flows.length===0)t.append(W(`div`,`conn-none`,`No flow of this solution uses it.`));else{let e=W(`ul`,`conn-flows`);for(let t of n.flows){let n=W(`li`,`conn-flow`);n.append(G(`workflow`,`icon--sm icon--muted`),W(`span`,``,t)),e.append(n)}t.append(e)}t.append(Ba({state:i.deps[n.id],subject:`this reference`,onCheck:()=>void i.h.checkDependencies([n.id]),name:n.displayName})),e.append(t)}a.append(e)}return a}function Qa(e,t,n,r){let i=W(`button`,r?`sugg is-applied`:`sugg`);i.type=`button`,i.setAttribute(`aria-label`,`Use suggestion ${n.label}`);let a=W(`span`,`sugg-text`);return a.append(W(`span`,`sugg-label`,n.label),W(`span`,`sugg-display`,n.displayName),W(`span`,`sugg-logical`,M(t,n.name)),W(`span`,`sugg-desc`,n.description)),i.append(G(r?`check-circle`:`zap`,`icon--sm icon--primary`),a),r&&i.append(W(`span`,`sugg-badge`,`Applied`)),i.setAttribute(`aria-pressed`,String(r)),i.addEventListener(`click`,()=>e.dispatch({type:`applySuggestion`,suggestion:n})),i}function $a(e,t){let n=W(`div`,`newref-row`);return n.append(W(`dt`,`newref-key`,e),W(`dd`,`newref-value`,t)),n}function eo(e){let t=W(`ol`,`newref-steps`);return t.setAttribute(`aria-label`,`Steps`),[[`Details`,`edit`],[`Review`,`eye`]].forEach(([n,r],i)=>{let a=e&&i===0,o=i===+!!e,s=W(`li`,`newref-step${o?` is-current`:``}${a?` is-done`:``}`);o&&s.setAttribute(`aria-current`,`step`),s.append(G(a?`check`:r,`icon--sm`),W(`span`,``,n)),t.append(s)}),t}function to(e,t){e.classList.contains(`is-leaving`)||(e.classList.add(`is-leaving`),setTimeout(t,170))}function no(e,t,n,r,i,a={}){let o=O(r.connectorId),s=tt(e),c=at(e,r);Ha===0&&(Ha=Date.now());let l=Date.now()-Ha,u=l<220,d=W(`div`,u?`newref-layer is-entering`:`newref-layer`);u&&d.style.setProperty(`--newref-elapsed`,`-${l}ms`);let f=()=>{r.saving||to(d,()=>t.dispatch({type:`closeNewReference`}))},p=W(`div`,`newref-scrim`);p.addEventListener(`click`,f);let m=W(`aside`,`newref-panel`);m.setAttribute(`role`,`dialog`),m.setAttribute(`aria-modal`,`true`),m.setAttribute(`aria-label`,`New connection reference`);let h=W(`header`,`newref-head`),g=W(`span`,`newref-hero`);g.append(G(`plus`));let _=W(`div`,`newref-titles`);_.append(W(`h3`,`newref-title`,`New connection reference`));let v=W(`button`,`icon-btn newref-close`);v.type=`button`,v.setAttribute(`aria-label`,`Close new reference`),v.append(G(`close`)),v.disabled=r.saving,v.addEventListener(`click`,f),h.append(g,_,eo(r.reviewing),v);let y=(e,t,n)=>{let r=W(`div`,`newref-meta-row`),i=W(`span`,`newref-meta-text`);return i.append(W(`span`,`newref-caption`,t),W(`span`,`newref-meta-name`,n)),r.append(e,i),r},b=W(`span`,`newref-logo`);b.append(G(`folder`,`icon--folder`));let x=W(`div`,`newref-meta`);x.append(y(b,`Solution`,e.solution.name),y(Z(r.connectorId,!1,!0),`Connector`,o.name));let S=W(`div`,`newref-body`),C=W(`footer`,`newref-foot`);if(r.error!==``&&S.append(Q(r.error,`warn`)),r.reviewing){let a=j(r.connectionId),l=r.live.items.find(e=>e.name.toLowerCase()===a.toLowerCase()),u=W(`dl`,`newref-summary`);u.append($a(`Table`,`Connection reference`),$a(`Logical name`,M(s,r.name)),$a(`Display name`,r.displayName.trim()),$a(`Connector`,`${o.name} (fixed)`),$a(`Connection`,a===``?`None yet`:`${a}${l&&l.displayName!==``?` (${l.displayName})`:``}, found`),$a(`Description`,r.description.trim()===``?`None`:r.description.trim()),$a(`Solution`,e.solution.name),$a(`Environment`,i===``?`The connected environment`:i));let d=W(`ol`,`newref-flow`);d.setAttribute(`aria-live`,`polite`);let f=[`check`,`write`,`readback`],p=[[`check`,`search`,`The name`+(a===``?` is`:` and the connection are`)+` checked again against the environment.`],[`write`,`plus`,`One row is created and added to ${e.solution.name}.`],[`readback`,`check-circle`,`The row and its place in the solution are read back.`]],h=r.step===`done`?f.length:r.step===``?-1:f.indexOf(r.step);for(let[e,t,n]of p){let i=f.indexOf(e),a=r.step===``?`idle`:i<h?`done`:i===h?`active`:`pending`,o=W(`li`,`newref-flow-item is-${a}`);o.dataset.state=a,o.append(a===`active`?Ja():a===`done`?G(`check-circle`,`icon--sm icon--success`):G(a===`pending`?`clock`:t,a===`pending`?`icon--sm icon--muted`:`icon--sm icon--primary`),W(`span`,``,n)),d.append(o)}S.append(W(`h4`,`newref-section`,`What will be written`),u,W(`h4`,`newref-section`,`What happens`),d,Q(`Nothing is written until you press Create. No flow and no other reference is changed.`));for(let e of c.warnings)S.append(Q(e,`warn`));let g=K(`Back`,`secondary`,()=>t.dispatch({type:`reviewNewReference`,on:!1}));g.disabled=r.saving;let _=r.step===`done`,v=K(_?`Created`:r.saving?`Creating...`:`Create in ${e.solution.name}`,`primary`,()=>void n.createReference());if(v.disabled=r.saving||!c.ok,r.saving&&v.setAttribute(`aria-busy`,String(!_)),_?v.prepend(G(`check`,`icon--sm`)):r.saving&&v.prepend(Ja(!0)),_&&v.classList.add(`is-finished`),C.append(g,v),r.saving&&!_){let e=W(`div`,`newref-progress`);e.setAttribute(`role`,`progressbar`),e.setAttribute(`aria-label`,`Creating the reference`),e.append(W(`span`,`newref-progress-fill`)),m.append(e)}}else{let i=ut(e,r);if(i.length>0){let e=i.find(e=>pt(r,e)),n=W(`section`,`newref-suggest`),a=W(`div`,`newref-suggest-head`),o=W(`div`,`newref-suggest-title`);r.suggestOpen||!e?o.append(W(`h4`,`newref-section`,`Suggestions`)):o.append(G(`check-circle`,`icon--sm icon--success`),W(`span`,`newref-applied`,`Suggestion applied: ${e.label}`));let c=W(`div`,`newref-suggest-tools`),l=K(`Auto-fill`,`secondary`,()=>t.dispatch({type:`applySuggestion`,suggestion:i[0]}),!0);l.prepend(G(`zap`,`icon--sm`));let u=K(r.suggestOpen?`Hide`:`Show`,`secondary`,()=>t.dispatch({type:`toggleSuggestions`}),!0);if(u.setAttribute(`aria-expanded`,String(r.suggestOpen)),u.setAttribute(`aria-label`,r.suggestOpen?`Hide suggestions`:`Show suggestions`),c.append(l,u),a.append(o,c),n.append(a),r.suggestOpen)for(let e of i)n.append(Qa(t,s,e,pt(r,e)));S.append(n)}let l=qa(t,`displayName`,`Display name`,r.displayName);u&&(l.dataset.autofocus=`true`),S.append(Ka(`Display name`,l,{required:!0,...r.displayName!==``&&c.errors.displayName?{error:c.errors.displayName}:{}}));let d=W(`div`,`newref-name`);d.append(W(`span`,`newref-prefix`,`${s===``?`?`:s}_`),qa(t,`name`,`Name`,r.name));let p=c.errors.prefix??(r.name===``?void 0:c.errors.name);S.append(Ka(`Name`,d,{required:!0,...p?{error:p}:{},hint:`Logical name ${s===``?`(prefix unknown)`:M(s,r.name||`...`)}, unique in the environment. It follows the display name until you edit it.`})),S.append(Ka(`Description`,qa(t,`description`,`Description`,r.description,`Optional`),{...c.errors.description?{error:c.errors.description}:{}}));let m=W(`section`,`newref-conns`),h=W(`div`,`newref-conns-head`);h.append(W(`span`,`newref-label`,`Connection`));let g=K(`Refresh`,`secondary`,()=>void n.refreshConnections(),!0);g.prepend(G(`refresh`,`icon--sm`)),g.setAttribute(`aria-label`,`Refresh connections`),g.setAttribute(`aria-busy`,String(r.live.status===`loading`)),h.append(g),m.append(h);let _=ct(e,r),v=r.connectionSource===`card`?j(r.connectionId).toLowerCase():``,y=W(`div`,`newref-connections`);y.setAttribute(`role`,`radiogroup`),y.setAttribute(`aria-label`,`Connection`),r.live.status===`loading`&&y.append(Q(`Reading your connections...`));for(let e of _)y.append(Za(t,e,e.id.toLowerCase()===v,r.openConnections.includes(e.id),{h:n,deps:a}));m.append(y),r.live.status===`ready`&&_.length===0&&m.append(Q(`You have no ${o.name} connection yet. Create one in the Maker portal, then press Refresh.`)),r.live.status===`unavailable`&&m.append(Q(`Your connections could not be read${r.live.error===``?``:` (${r.live.error})`}. Without them a connection cannot be verified, so the reference cannot be created. Press Refresh to try again.`,`warn`));let b=W(`div`,`newref-paste`);b.append(qa(t,`connectionId`,`Paste a connection id`,r.connectionSource===`typed`?r.connectionId:``,`Or paste a connection id`));let x=W(`button`,`icon-btn newref-check`);if(x.type=`button`,x.setAttribute(`aria-label`,`Check connection`),x.setAttribute(`aria-busy`,String(r.live.status===`loading`)),x.title=`Check that this connection exists (Enter)`,x.append(G(`search`)),x.addEventListener(`click`,()=>void n.checkConnection()),b.append(x),b.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),n.checkConnection())}),m.append(b),r.connectionSource===`typed`&&j(r.connectionId)!==``)r.live.status===`loading`?m.append(Q(`Checking...`)):c.errors.connectionId&&m.append(Q(c.errors.connectionId,r.checked===null||r.checked.id!==j(r.connectionId).toLowerCase()?`info`:`error`));else if(r.connectionSource===`none`)m.append(Q(`Choose a connection. The Maker portal does not save a reference without one, and flows cannot be moved onto it.`,`info`));else if(r.connectionSource===`card`){let e=_.find(e=>e.id.toLowerCase()===v);e&&m.append(Q(`Found: ${e.displayName===``?e.id:e.displayName}.`,`ok`))}m.append(W(`span`,`newref-hint`,`Optional. A connection is accepted only when it is found among your connections of this connector.`)),S.append(m);for(let e of c.warnings)S.append(Q(e,`warn`));let w=K(`Review`,`primary`,()=>t.dispatch({type:`reviewNewReference`,on:!0}));w.disabled=!c.ok,C.append(K(`Cancel`,`secondary`,f),w)}S.dataset.step=r.reviewing?`review`:`details`,m.append(h,x,S);let w=m.querySelector(`.newref-progress`);return m.append(C),w&&m.insertBefore(w,C),d.append(p,m),d}function ro(e,t){let n=new Map;for(let r of e.allReferences)r.connectionId!==``&&t.has(r.connectorId)&&n.set(r.connectionId,[...n.get(r.connectionId)??[],r.displayName||r.logicalName]);return[...n.entries()].map(([e,t])=>({id:e,names:t}))}function io(e,t,n){let r=W(`section`,`studio-pane studio-pane--${e}`),i=W(`div`,`studio-pane-head`),a=W(`div`,`studio-pane-titles`);a.append(W(`h3`,`studio-pane-title`,t),W(`p`,`studio-pane-sub`,n)),i.append(a);let o=W(`div`,`studio-pane-body`);return r.append(i,o),{root:r,body:o,head:i}}function ao(e,t=!1){let n=W(`p`,t?`studio-note studio-note--warn`:`studio-note`);return n.append(G(t?`alert-triangle`:`info`,`icon--sm`),e),n}function oo(e,t){let n=W(`span`,`meter`);n.setAttribute(`role`,`img`),n.setAttribute(`aria-label`,t);let r=W(`span`,`meter-fill`);return r.style.width=`${e}%`,n.append(r),n}function so(e,t,n){let r=e.displayName||e.logicalName,i=Pa(e.used,e.selected),a=W(`div`,t?`source-row is-on`:`source-row`),o=Yr(t,`Replace ${r}`,n),s=W(`span`,`source-text`);s.append(W(`span`,`source-name`,r),W(`span`,`source-logical`,e.logicalName));let c=W(`span`,`source-usage`);return c.append(oo(i,`${i}% of the selected flows`),W(`span`,`source-use`,`${e.used} of ${e.selected} flow${e.selected===1?``:`s`}`),W(`span`,`source-pct`,`${i}%`)),a.append(o,s,c),a}function co(e,t,n,r,i){let a=W(`button`,t?`choice is-on`:`choice`);a.type=`button`,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(t)),a.setAttribute(`aria-label`,e),a.disabled=n;let o=W(`span`,`choice-mark`),s=W(`span`,`choice-text`);return s.append(...i.map(e=>typeof e==`string`?W(`span`,`choice-line`,e):e)),a.append(o,s),a.addEventListener(`click`,r),a}var lo=e=>e.ownerName===``?`Owner unknown`:e.ownerName,uo=-1;function fo(){uo=-1}var po={done:`Done`,incomplete:`Incomplete`,empty:`Not changed`};function mo(e,t,n,r){let i=Ni(n,e.selected),a=i.length,o=Math.min(Math.max(e.studioStep,0),a),s=e.repointGroups,c=e=>s.find(t=>t.connectorId===e),l=e=>t.dispatch({type:`studioGo`,step:e}),u=(e,n)=>t.dispatch({type:`setGroup`,group:{connectorId:e,from:n,target:c(e)?.target??``}}),d=s.filter(e=>e.target===``).map(e=>O(e.connectorId).name),f=W(`div`,`studio-top`),p=W(`ol`,`studio-pipe`);p.setAttribute(`aria-label`,`Categories`);let m=(e,t,n,r,i)=>{let a=W(`li`,`studio-pipe-li`),s=W(`button`,`studio-pipe-item is-${n===`pending`?`pending`:n===`incomplete`?`warn`:n}${e===o?` is-current`:``}`);s.type=`button`,e===o&&s.setAttribute(`aria-current`,`step`);let c=W(`span`,`studio-pipe-mark`);return c.append(G(n===`done`?`check`:n===`incomplete`?`alert-triangle`:n===`empty`?`minus`:r)),s.append(...i?[i]:[],c,W(`span`,`studio-pipe-name`,t)),s.addEventListener(`click`,()=>l(e)),a.append(s),a};i.forEach((e,t)=>{let n=Pi(c(e.connectorId));p.append(m(t,O(e.connectorId).name,n===`empty`&&t>=o?`pending`:n,O(e.connectorId).glyph,Z(e.connectorId,!1,!0)))}),p.append(m(a,`Summary`,`pending`,`clipboard-check`)),f.append(p);let h=W(`section`,`studio-panel`);uo!==-1&&uo!==o&&h.classList.add(o>uo?`slide--next`:`slide--prev`),uo=o;let g=!1;if(o<a){let e=i[o],a=O(e.connectorId),s=c(e.connectorId),l=s?.from??[];g=Pi(s)===`incomplete`,h.classList.add(`studio-group--${a.tone}`);let d=io(`from`,`References to replace`,`Tick one, some or all.`),f=K(`Select all`,`secondary`,()=>u(e.connectorId,e.sources.map(e=>e.logicalName)),!0);f.disabled=l.length===e.sources.length;let p=K(`Clear`,`secondary`,()=>u(e.connectorId,[]),!0);p.disabled=l.length===0;let m=W(`div`,`studio-pane-tools`);m.append(f,p),d.head.append(m);for(let t of e.sources){let n=l.includes(t.logicalName);d.body.append(so(t,n,()=>u(e.connectorId,n?l.filter(e=>e!==t.logicalName):[...l,t.logicalName])))}let _=io(`to`,`Reference to use instead`,`Only references of this connector in this solution.`),v=K(`New reference`,`secondary`,()=>void r.openNewReference(e.connectorId),!0);if(v.prepend(G(`plus`,`icon--sm`)),_.head.append(v),l.length===0)_.body.append(ao(`Tick the references to replace first, or go to another category to leave this one as it is.`));else{let r=Li(n,l);r.length===0&&_.body.append(ao(`There is no other reference of this connector in this solution, so there is nothing to re-point to.`,!0));for(let n of r){let r=n.displayName||n.logicalName;_.body.append(co(`Use ${r}`,s!==void 0&&n.logicalName===s.target,!1,()=>t.dispatch({type:`setGroup`,group:{connectorId:e.connectorId,from:l,target:n.logicalName}}),[W(`span`,`choice-name`,r),n.logicalName,n.connectionId===``?`No connection set`:`Connection ${n.connectionId}`,`Owner: ${lo(n)}`]))}}let y=W(`div`,`studio`);y.append(d.root,_.root),h.append(y)}else{let e=W(`div`,`studio-panel-head`),t=W(`div`,`studio-panel-titles`);t.append(W(`h3`,`studio-panel-title`,`Summary`),W(`span`,`studio-panel-sub`,`Review changes opens the preview of every change. Nothing is written yet.`)),e.append(t);let n=W(`div`,`summary-list`);i.forEach((e,t)=>{let r=Pi(c(e.connectorId)),i=W(`div`,`summary-line summary-line--${r}`),a=K(`Edit`,`secondary`,()=>l(t),!0);a.classList.add(`summary-edit`);let o=q(po[r],r===`done`?`success`:r===`incomplete`?`warning`:`neutral`,r===`done`?`check`:r===`incomplete`?`alert-triangle`:`minus`);o.classList.add(`summary-state`),i.append(Z(e.connectorId,!1,!0),W(`span`,`summary-name`,O(e.connectorId).name),o,a),n.append(i)}),h.append(e,n)}let _=W(`div`,`studio-nav`),v=W(`div`,`studio-nav-mid`);v.append(W(`span`,`studio-where`,o<a?`Category ${o+1} of ${a}`:`Summary`));let y=W(`span`,g?`studio-nav-note`:`studio-nav-note is-idle`,g?`Choose the reference to use instead, or untick the references to leave this category as it is.`:` `);v.append(y),_.append(v);let b=Fa(n,e.selected,s),x=mi([{label:`Categories`,value:String(b.categories),icon:`layers`,tone:`primary`},{label:`Flows affected`,value:String(b.affected),icon:`workflow`,tone:`info`},{label:`Turned on`,value:String(b.turnedOn),icon:`power`,tone:b.turnedOn>0?`warning`:`info`},{label:`Without these references`,value:String(b.unrelated),icon:`minus`,tone:`info`}]),S=s.length>0&&d.length===0,C=S?w(n,e.selected,s,``,!0):null,ee=C!==null&&T(C).length===0,te=ee?`No selected flow can be written with these choices.`:``;return{main:[f,h],foot:_,impact:x,ready:S&&!ee&&e.newReference===null,missing:d,notice:te}}function ho(e,t,n){let r=n.references.filter(t=>e.selected.includes(t.reference.id)),i=new Set(r.map(e=>e.reference.connectorId)),a=i.size>1,o=io(`from`,`Selected references`,`Every flow that uses them follows the new connection.`);for(let e of r){let t=W(`div`,`source-row`),n=W(`span`,`source-text`);n.append(W(`span`,`source-name`,e.reference.displayName||e.reference.logicalName),W(`span`,`source-logical`,e.reference.logicalName)),t.append(Z(e.reference.connectorId,!1,!0),n,W(`span`,`source-use`,e.reference.connectionId===``?`No connection`:e.reference.connectionId)),o.body.append(t)}let s=io(`to`,`Connection to use`,`Connections already used by references of this connector, or paste another id.`),c=a?[]:ro(n,i);a&&s.body.append(ao(`The selected references use different connectors: a connection belongs to one connector. Select references of one connector.`,!0));for(let n of c)s.body.append(co(`Use ${n.id}`,e.newConnectionId===n.id,!1,()=>t.dispatch({type:`setNewConnectionId`,value:n.id}),[W(`span`,`choice-name`,n.id),`Used by ${n.names.join(`, `)}`]));let l=W(`input`,`text-input`);l.type=`text`,l.placeholder=`Paste a connection id`,l.value=c.some(t=>t.id===e.newConnectionId)?``:e.newConnectionId,l.disabled=a,l.setAttribute(`aria-label`,`Or paste a connection id`),l.addEventListener(`input`,()=>t.dispatch({type:`setNewConnectionId`,value:l.value.trim()})),s.body.append(l);let u=Na(n,e.selected),d=mi([{label:`References`,value:String(u.references),icon:`plug`,tone:`primary`},{label:`Flows affected`,value:String(u.flows),icon:`workflow`,tone:`info`},{label:`Turned on`,value:String(u.turnedOn),icon:`power`,tone:u.turnedOn>0?`warning`:`info`}]),f=W(`div`,`studio`);return f.append(o.root,s.root),{main:[f],impact:d,ready:!a&&r.length>0&&e.newConnectionId!==``,missing:[],notice:``}}function go(e,t,n,r){let i=e.snapshot,a=e.view===`flows`,o=a?mo(e,t,i,n):ho(e,t,i),s=()=>t.dispatch({type:`closeStudio`}),c=W(`div`,`studio-impact`),l=o.missing.length>0?`Still to choose: ${o.missing.join(`, `)}.`:o.notice,u=W(`p`,l===``?`studio-note is-idle`:`studio-note studio-note--warn`);u.append(G(`alert-triangle`,`icon--sm`),l===``?` `:l),c.append(o.impact,u);let d=W(`div`,`studio-bottom`);d.append(c);let f=W(`span`,``);f.append(q(r===``?`Environment`:r,`info`,`database`),` ${e.selected.length} selected in ${i.solution.name}`);let p=_i({tone:`primary`,icon:a?`git-branch`:`link`,title:a?`Re-point flows`:`Change connection`,subtitle:f,body:[...o.main,d],...o.foot?{footNote:o.foot}:{},confirm:{label:`Review changes`,icon:`eye`,disabled:!o.ready||e.busy,onConfirm:a?n.previewRepoint:n.previewConnection},onCancel:()=>{if(e.newReference===null)return s();p.querySelector(`.newref-close`)?.click()}}),m=p.querySelector(`.modal`);m.classList.add(`studio-dialog`),p.classList.add(`studio-overlay`),Ca(p,e.dialogExpanded,e=>t.dispatch({type:`setDialogExpanded`,on:e}));let h=a&&e.newReference!==null?e.newReference:null;h?m.append(no(i,t,n,h,r,e.dependencies)):Ua();let g=m.querySelector(`[data-autofocus]`);g&&delete g.dataset.autofocus;let _=m.querySelector(`.studio .check:not(:disabled), .studio .choice:not(:disabled), .studio input:not(:disabled)`);return h||(_??g)?.setAttribute(`data-autofocus`,`true`),p}function _o(e){if(e===``)return[];let t=e.replace(/\r\n/g,`
2
2
  `).split(`
3
- `);return t[t.length-1]===``&&t.pop(),t}function _o(e,t,n){let r=0;for(;r<e.length&&r<t.length&&e[r]===t[r];)r++;let i=0;for(;i<e.length-r&&i<t.length-r&&e[e.length-1-i]===t[t.length-1-i];)i++;let a=[];for(let e=0;e<r;e++)a.push({t:`eq`,a:e,b:e});let o=e.length-r-i,s=t.length-r-i,c=!1;if(o*s<=n){let n=s+1,i=new Uint32Array((o+1)*n);for(let a=o-1;a>=0;a--)for(let o=s-1;o>=0;o--)i[a*n+o]=e[r+a]===t[r+o]?i[(a+1)*n+o+1]+1:Math.max(i[(a+1)*n+o],i[a*n+o+1]);let c=0,l=0;for(;c<o&&l<s;)e[r+c]===t[r+l]?(a.push({t:`eq`,a:r+c,b:r+l}),c++,l++):i[(c+1)*n+l]>=i[c*n+l+1]?(a.push({t:`del`,a:r+c,b:-1}),c++):(a.push({t:`ins`,a:-1,b:r+l}),l++);for(;c<o;)a.push({t:`del`,a:r+c,b:-1}),c++;for(;l<s;)a.push({t:`ins`,a:-1,b:r+l}),l++}else{c=!0;for(let e=0;e<o;e++)a.push({t:`del`,a:r+e,b:-1});for(let e=0;e<s;e++)a.push({t:`ins`,a:-1,b:r+e})}for(let n=0;n<i;n++)a.push({t:`eq`,a:e.length-i+n,b:t.length-i+n});return{ops:a,tooLarge:c}}function vo(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;let r=0;for(;r<e.length-n&&r<t.length-n&&e[e.length-1-r]===t[t.length-1-r];)r++;return{old:[n,e.length-r],neu:[n,t.length-r]}}var yo=e=>({oldNo:null,newNo:null,oldText:``,newText:``,oldSpan:null,newSpan:null,skipped:0,...e});function bo(e,t,n){let r=[],i=[],a=[],o=()=>{let n=Math.min(i.length,a.length);for(let o=0;o<n;o++){let n=e[i[o]],s=t[a[o]],c=vo(n,s);r.push(yo({kind:`changed`,oldNo:i[o]+1,newNo:a[o]+1,oldText:n,newText:s,oldSpan:c.old,newSpan:c.neu}))}for(let t=n;t<i.length;t++)r.push(yo({kind:`removed`,oldNo:i[t]+1,oldText:e[i[t]]}));for(let e=n;e<a.length;e++)r.push(yo({kind:`added`,newNo:a[e]+1,newText:t[a[e]]}));i=[],a=[]};for(let s of n)s.t===`del`?i.push(s.a):s.t===`ins`?a.push(s.b):(o(),r.push(yo({kind:`context`,oldNo:s.a+1,newNo:s.b+1,oldText:e[s.a],newText:t[s.b]})));return o(),r}function xo(e,t){if(!Number.isFinite(t))return[...e];let n=[],r=0;for(;r<e.length;){if(e[r].kind!==`context`){n.push(e[r]),r++;continue}let i=r;for(;i<e.length&&e[i].kind===`context`;)i++;let a=e.slice(r,i),o=r===0,s=i===e.length,c=o?0:t,l=s?0:t,u=a.length-c-l;u<2?n.push(...a):n.push(...a.slice(0,c),yo({kind:`gap`,skipped:u}),...a.slice(a.length-l)),r=i}return n}function So(e,t,n={}){let r=go(e),i=go(t),{ops:a,tooLarge:o}=_o(r,i,n.maxCells??4e6),s=a.filter(e=>e.t===`del`).length,c=a.filter(e=>e.t===`ins`).length;return c===0&&s===0?{changed:!1,rows:[],added:0,removed:0,tooLarge:!1}:{changed:!0,rows:xo(bo(r,i,a),n.context??3),added:c,removed:s,tooLarge:o}}var Co=200;function wo(e){if(e===``)return``;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}var To=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Eo=e=>e===void 0?`(none)`:To(e)?`{…}`:Array.isArray(e)?`[…]`:JSON.stringify(e);function Do(e,t){let n=[],r=(e,t,i)=>{if(!(n.length>=Co||e===t)){if(To(e)&&To(t))for(let n of new Set([...Object.keys(e),...Object.keys(t)]))r(e[n],t[n],i===``?n:`${i}.${n}`);else if(Array.isArray(e)&&Array.isArray(t))for(let n=0;n<Math.max(e.length,t.length);n++)r(e[n],t[n],`${i}[${n}]`);else n.push({what:i,before:Eo(e),after:Eo(t)})}};return r(e,t,``),n}function Oo(e){try{return JSON.parse(e)}catch{return}}function ko(e,t){return e.rows.map(n=>{let r={id:n.id,title:n.label,sub:n.id};if(n.blocked!==void 0)return{...r,blocked:n.blocked,before:``,after:``,fields:[]};if(e.kind===`remove`||e.kind===`delete`){let t=n.entity??e.entity,i=r=>JSON.stringify(e.kind===`remove`?{id:n.id,name:n.label,table:t,solution:e.solution?.uniqueName??``,componentType:n.componentType??null,inSolution:r}:{id:n.id,name:n.label,table:t,exists:r},null,2);return{...r,before:i(!0),after:e.kind===`remove`?i(!1):``,fields:[{what:e.kind===`remove`?`solution membership`:`row`,before:n.oldValue,after:n.newValue}]}}if(e.kind===`connection`){let e=t.references.find(e=>e.reference.id===n.id)?.reference.logicalName??``,i=t=>JSON.stringify({connectionreferenceid:n.id,connectionreferencelogicalname:e,connectionid:t},null,2);return{...r,before:i(n.oldValue),after:i(n.payload),fields:[{what:`connectionid`,before:n.oldValue===``?`(not set)`:n.oldValue,after:n.payload}]}}let i=wo(n.expectedCurrent),a=wo(n.payload),o=Do(Oo(n.expectedCurrent),Oo(n.payload));return{...r,before:i,after:a,fields:o.length>0?o:[{what:`definition`,before:`as stored`,after:`changed`}]}})}var Ao=new WeakMap;function jo(e,t){let n=Ao.get(e);return n||(n={items:ko(e,t),diffs:new Map},Ao.set(e,n)),n}function Mo(e,t){let n=e.diffs.get(t.id);return n||(n=So(t.before,t.after),e.diffs.set(t.id,n)),n}function No(e,t,n,r){return t.blocked===void 0?!r||!r.changed?W(`p`,`muted`,`No difference.`):Si(e.kind===`connection`?`connectionreference`:e.kind===`remove`?`solution membership`:e.kind===`delete`?`row`:`clientdata (formatted)`,r.added,r.removed,xi(r.rows,n),r.tooLarge?`This definition is too large to compare line by line: the changed part is shown as replaced.`:void 0):Y(`warning`,`Not written`,[t.blocked])}function Po(e,t){let{plan:n,snapshot:r,wizard:i}=e,a=jo(n,r),o=a.items,s=T(n).length,c=o.reduce((e,t)=>e+t.fields.length,0),l=o.slice(0,i.shown),u=W(`span`,`preview-summary`,[`${s===o.length?o.length:`${s} of ${o.length}`} item${o.length===1?``:`s`}`,`${c} change${c===1?``:`s`}`,...o.length>s?[`${o.length-s} not changed`]:[]].join(` · `)),d=W(`div`,`layout-bar`);d.append(W(`span`,`layout-bar-label`,`Layout`),ti([{key:`split`,label:`Split`},{key:`unified`,label:`Unified`}],i.layout,e=>t.setLayout(e)));let f=W(`div`,`item-list`);for(let e of l){let r=!i.collapsed.includes(e.id),o=e.fields.length,s=r&&e.blocked===void 0?Mo(a,e):null;f.append(Ci({title:e.title,sub:e.sub,countText:e.blocked===void 0?`${o} change${o===1?``:`s`}`:`Blocked`,open:r,onToggle:()=>t.toggle(e.id),body:r?No(n,e,i.layout,s):document.createDocumentFragment(),blocked:e.blocked!==void 0}))}let p=[];if(s===0&&n.rows.length>0){let e=n.kind===`repoint`?`flow`:n.kind===`connection`?`row`:`item`,t=ne(n),r=t.map(t=>`${t.count} ${e}${t.count===1?``:`s`}: ${t.reason}`);t.some(e=>e.reason.includes(`turned on`))&&r.push(`Apply... lets you allow the tool to turn the flows off for the change; or turn them off yourself and choose again.`);let i=Y(`error`,`No row can be written`,r);i.classList.add(`nothing-written`),p.push(i)}let m=W(`div`,`preview-tabs`);if(m.append(ti([{key:`diff`,label:`Code diff`,icon:`code`},{key:`table`,label:`Table`,icon:`list`}],i.tab,e=>t.setTab(e)),u),i.tab===`diff`&&m.append(d),p.push(m),i.tab===`table`?p.push(mi(Ta(n,r))):p.push(f),i.tab===`diff`&&o.length>l.length){let e=K(`Show ${Math.min(20,o.length-l.length)} more (${o.length-l.length} left)`,`secondary`,t.more);e.prepend(G(`plus`)),p.push(e)}return ha(`preview`,p,[_a(`Back`,`secondary`,`arrow-left`,t.back,{title:`Back to the choices: nothing is written`}),ga(),_a(`Apply...`,n.kind===`delete`?`danger`:`primary`,`check`,t.apply,{disabled:s===0&&te(n).length===0,title:s===0&&te(n).length===0?`No row can be written`:`Opens the confirmation: nothing is written yet`})])}function Fo(e,t){let n=e.wizard,r=ue(e.results),i=de(r,n.refreshFailed),a=Math.max(0,(n.finishedAt??n.now)-n.startedAt),o=pi([{label:`Changed`,value:String(r.changed),icon:`check-circle`,tone:`success`},{label:`Skipped`,value:String(r.skipped),icon:`alert-triangle`,tone:r.skipped>0?`warning`:`success`},{label:`Failed`,value:String(r.failed),icon:`x-circle`,tone:r.failed>0?`error`:`success`},{label:`Duration`,value:D(a),icon:`clock`,tone:`info`}]),s=Qr([`Item`,`Outcome`,`Message`],pe(e.results),e=>[W(`span`,`cell-strong`,e.label),pa(e.status),e.stateChange===`back-on`?`${e.message} The flow was turned off for the write and is on again.`:e.message]),c=e.results.filter(e=>e.stateChange===`left-off`),l=c.length===0?null:Y(`error`,`${c.length} flow${c.length===1?` was`:`s were`} left turned off`,[`${c.map(e=>e.label).join(`, `)}: turn ${c.length===1?`it`:`them`} on in the maker portal (Power Automate), then check the connections the message names.`],`power`);l?.classList.add(`left-off`);let u=Y(i.tone,i.title,i.lines);return u.classList.add(`callout--compact`),ha(`result`,[...l?[l]:[],u,o,J(`Rows`,r.total,$r(s),!1,`list`)],[_a(`Save report`,`secondary`,`save`,t.saveReport,{title:`A file with the outcome of every row`}),ga(),...t.followUp?[_a(`Back to solution`,`secondary`,`arrow-left`,t.back),_a(t.followUp.label,`primary`,`layers`,t.followUp.run,{title:`The references that are not used any more can be removed or deleted, with their own preview`})]:[_a(`Back to solution`,`primary`,`arrow-left`,t.back)]])}var Io=(e,t,n)=>`${e} ${e===1?t:n}`,$=e=>e.displayName||e.logicalName;function Lo(e){let t=W(`p`,`cleanup-note`);return t.append(G(`info`,`icon--sm`),W(`span`,``,e)),t}function Ro(e,t,n,r,i,a){let o=r.reference,s=W(`div`,`cleanup-row${i?` is-on`:``}${r.blocked?` is-blocked`:``}`),c=Jr(i,`Tick ${$(o)}`,a);r.blocked&&(c.disabled=!0,c.title=r.blocked);let l=W(`span`,`cleanup-text`);l.append(W(`span`,`source-name`,$(o)),W(`span`,`source-logical`,o.logicalName));let u=W(`span`,`cleanup-conn`);u.append(G(`key`,`icon--sm icon--muted`),W(`span`,``,o.connectionId===``?`No connection`:o.connectionId)),l.append(u);let d=W(`span`,`cleanup-tags`);r.neverConnected&&d.append(q(`Never connected`,`info`,`plug`)),r.duplicateOf!==void 0&&d.append(q(`Duplicate of ${r.duplicateOf}`,`warning`,`layers`)),r.blocked&&d.append(q(`Managed`,`neutral`,`lock`)),o.ownerName!==``&&d.append(W(`span`,`cleanup-owner`,o.ownerName));let f=e.dependencies[o.id],p=Ba(f),m=e.cleanup.open.includes(o.id);if(p){if(f?.status===`ready`&&Tt(f.report).total>0){let e=W(`button`,`dep-chip-button`);e.type=`button`,e.setAttribute(`aria-expanded`,String(m)),e.setAttribute(`aria-label`,`${m?`Hide`:`Show`} what depends on ${$(o)}`),e.append(p),e.addEventListener(`click`,()=>t.dispatch({type:`toggleCleanupDeps`,id:o.id})),d.append(e)}else d.append(p)}s.append(c,Z(o.connectorId,!1,!0),l,d);let h=W(`div`,`cleanup-item`);if(h.append(s),m&&f?.status===`ready`){let e=W(`div`,`cleanup-deps`);e.append(za({state:f,subject:`this reference`,onCheck:()=>void n.checkDependencies([o.id]),name:$(o)})),h.append(e)}return h}function zo(e,t,n,r){let i=Ke(r,e.cleanup),a=e.cleanup.picked,o=[];if(i.length===0)return[ni(`No unused connection reference in ${r.solution.name}: every one is used by a flow.`,`check-circle`)];let s=qe(r);s>0&&o.push(Y(`warning`,`${Io(s,`flow`,`flows`)} could not be read`,[`${s===1?`It`:`They`} might use a reference listed here. Check before you delete.`],`alert-triangle`)),o.push(Lo(`No flow of this solution uses these. Something outside it may: Check dependencies reads the whole environment. Remove keeps the row; Delete asks the environment first.`));let c=i.filter(e=>e.blocked===void 0),l=i.map(t=>e.dependencies[t.reference.id]),u=l.filter(e=>e?.status===`loading`).length,d=l.filter(e=>e?.status===`ready`).length,f=a.length>0?[...a]:i.map(e=>e.reference.id),p=f.every(t=>e.dependencies[t]?.status===`ready`),m=a.length>0?`${a.length} ticked`:`all ${i.length}`,h=u>0?`Checking... ${d} of ${d+u}`:p?`Check again (${a.length>0?a.length:`all`})`:`Check dependencies (${m})`,g=c.filter(t=>{let n=e.dependencies[t.reference.id];return n?.status===`ready`&&Tt(n.report).total===0}),_=W(`div`,`cleanup-bar`),v=K(h,`secondary`,()=>void n.checkDependencies(f),!0);if(u>0){let e=W(`span`,`spinner`);e.setAttribute(`aria-hidden`,`true`),v.prepend(e)}else v.prepend(G(p?`refresh`:`search`,`icon--sm`));v.setAttribute(`aria-busy`,String(u>0)),v.title=a.length>0?`Reads what depends on the ticked references, in every solution of the environment`:`Reads what depends on each unused reference, in every solution of the environment. Tick some to check only those`;let y=K(`Select the ones nobody uses`,`secondary`,()=>t.dispatch({type:`setCleanupUnused`,ids:g.map(e=>e.reference.id)}),!0);y.disabled=g.length===0,y.title=g.length===0?`Check the dependencies first: only references with nothing depending on them, anywhere, are selected`:`Ticks only the references with no dependent anywhere in the environment`;let b=W(`span`,`cleanup-count`,`${a.length} of ${c.length} ticked`);b.setAttribute(`aria-live`,`polite`);let x=K(`Select all`,`secondary`,()=>t.dispatch({type:`setCleanupUnused`,ids:c.map(e=>e.reference.id)}),!0);x.disabled=c.length===0||a.length===c.length;let S=K(`Clear`,`secondary`,()=>t.dispatch({type:`setCleanupUnused`,ids:[]}),!0);S.disabled=a.length===0,_.append(v,y,W(`span`,`cleanup-spacer`),b,x,S),o.push(_);let C=i.filter(t=>e.dependencies[t.reference.id]?.status===`ready`);if(u===0&&C.length>0&&!e.cleanup.summaryHidden){let n=C.filter(t=>{let n=e.dependencies[t.reference.id];return n?.status===`ready`&&Tt(n.report).total===0}).length,r=C.length-n,i=r===0?`Checked ${C.length}: nothing depends on ${C.length===1?`it`:`them`} in any solution, agent or app. Safe to remove or delete.`:`Checked ${C.length}: ${r} still ${r===1?`has`:`have`} dependents. Remove keeps the row; Delete refuses ${r===1?`it`:`them`} and names what blocks it.`,a=W(`div`,`cleanup-summary${r===0?` is-ok`:` is-warn`}`);a.setAttribute(`role`,`status`);let s=W(`button`,`icon-btn cleanup-summary-close`);s.type=`button`,s.setAttribute(`aria-label`,`Dismiss the summary`),s.append(G(`close`,`icon--sm`)),s.addEventListener(`click`,()=>t.dispatch({type:`dismissCleanupSummary`})),a.append(G(r===0?`check-circle`:`alert-triangle`,`icon--sm`),W(`span`,`cleanup-summary-text`,i),s),o.push(a)}let w=W(`div`,`cleanup-list`);for(let r of i)w.append(Ro(e,t,n,r,a.includes(r.reference.id),()=>t.dispatch({type:`toggleCleanupUnused`,id:r.reference.id})));return o.push(w),o}function Bo(e,t,n,r){let i=Je(n,r,Ge(r,e.cleanup)),a=i.flowIds.length,o=K(a>0?`Merge into ${$(i.keeper)}...`:`Review as unused...`,`primary`,()=>t.startMerge(r.key));return o.prepend(G(a>0?`git-branch`:`minus`)),o.setAttribute(`aria-label`,a>0?`Merge into ${$(i.keeper)}`:`Review the duplicates of ${r.connectionId} as unused`),o.disabled=e.busy,o}function Vo(e,t,n,r,i,a){let o=Ge(i,e.cleanup),s=Je(r,i,o),c=W(`section`,`dup-card`),l=W(`header`,`dup-head`),u=W(`span`,`cleanup-text`);u.append(W(`span`,`source-name`,O(i.connectorId).name));let d=W(`span`,`cleanup-conn`);d.append(G(`key`,`icon--sm icon--muted`),W(`span`,``,i.connectionId)),u.append(d),l.append(Z(i.connectorId,!1,!0),u,q(`${i.members.length} references share it`,`warning`,`layers`));let f=i.members.every(t=>e.dependencies[t.reference.id]?.status===`ready`),p=K(f?`Check again`:`Check dependencies`,`secondary`,()=>void n.checkDependencies(i.members.map(e=>e.reference.id)),!0);p.prepend(G(f?`refresh`:`search`,`icon--sm`)),p.setAttribute(`aria-label`,`Check the dependencies of the references that share ${i.connectionId}`),p.setAttribute(`aria-busy`,String(i.members.some(t=>e.dependencies[t.reference.id]?.status===`loading`))),l.append(p),c.append(l);let m=W(`div`,`dup-members`);m.setAttribute(`role`,`radiogroup`),m.setAttribute(`aria-label`,`Reference to keep for ${i.connectionId}`);for(let n of i.members){let r=n.reference.id===o,a=W(`button`,r?`choice choice--compact is-on`:`choice choice--compact`);a.type=`button`,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(r)),a.setAttribute(`aria-label`,`Keep ${$(n.reference)}`);let s=W(`span`,`choice-text`);s.append(W(`span`,`choice-name`,$(n.reference)),W(`span`,`choice-line`,n.reference.logicalName),W(`span`,`choice-line`,n.flowIds.length===0?`No flow of this solution uses it`:`Used by ${Io(n.flowIds.length,`flow`,`flows`)}: ${n.flows.slice(0,3).join(`, `)}${n.flows.length>3?` and ${n.flows.length-3} more`:``}`));let c=W(`span`,`cleanup-tags`);n.reference.id===i.suggestedKeeper&&c.append(q(`Suggested`,`info`,`check`)),c.append(r?q(`Keep`,`success`,`check-circle`):q(`Merged into it`,`neutral`,`arrow-right`));let l=Ba(e.dependencies[n.reference.id]);l&&c.append(l),n.reference.managed&&c.append(q(`Managed`,`neutral`,`lock`)),a.append(W(`span`,`choice-mark`),s,c),a.addEventListener(`click`,()=>t.dispatch({type:`setKeeper`,group:i.key,id:n.reference.id})),m.append(a)}c.append(m);let h=s.flowIds.length,g=s.duplicates.filter(e=>e.managed).length,_=W(`p`,`dup-effect`);if(_.append(G(h>0?`git-branch`:`check-circle`,`icon--sm icon--primary`),W(`span`,``,h>0?`${Io(h,`flow`,`flows`)} will be re-pointed to ${$(s.keeper)}. Then ${Io(s.duplicates.length,`duplicate becomes`,`duplicates become`)} unused and can be removed or deleted, with its own preview and confirmation.`:`No flow uses the other ${Io(s.duplicates.length,`reference`,`references`)}: ${s.duplicates.length===1?`it is`:`they are`} already unused and can be removed or deleted.`)),c.append(_),g>0&&c.append(Lo(`${Io(g,`managed reference`,`managed references`)} cannot be removed; the flows are re-pointed away from ${g===1?`it`:`them`} all the same.`)),!a){let t=W(`footer`,`dup-foot`);t.append(Bo(e,n,r,i)),c.append(t)}return c}function Ho(e,t,n,r){let i=We(r);if(i.length===0)return[ni(`No duplicates: no two references of this solution hold the same connection of the same connector.`,`check-circle`)];let a=[Lo(`Duplicates hold the same connection of the same connector, so one of them is enough. Choose the one to keep: the flows of the others are re-pointed to it (a Preview first), and then the others can be taken away.`)];for(let o of i)a.push(Vo(e,t,n,r,o,i.length===1));return a}function Uo(e,t,n,r){let i=e.snapshot,a=e.cleanup,o=Ye(i),s=()=>t.dispatch({type:`closeCleanup`}),c=pi([{label:`Unused`,value:String(o.unused),icon:`minus`,tone:o.unused>0?`warning`:`success`},{label:`Duplicate groups`,value:String(o.groups),icon:`layers`,tone:o.groups>0?`warning`:`success`},{label:`Flows to re-point`,value:String(o.flows),icon:`workflow`,tone:`info`}]),l=ti([{key:`unused`,label:`Unused`,count:o.unused,icon:`minus`},{key:`duplicates`,label:`Duplicates`,count:o.groups,icon:`layers`}],a.tab,e=>t.dispatch({type:`setCleanupTab`,tab:e})),u=W(`div`,`cleanup-content`);u.dataset.tab=a.tab,u.append(...a.tab===`unused`?zo(e,t,n,i):Ho(e,t,n,i));let d=W(`span`,``);d.append(q(r===``?`Environment`:r,`info`,`database`),` in ${i.solution.name}`);let f=gi({tone:`primary`,icon:`layers`,title:`Clean up connection references`,subtitle:d,body:[c,l,u],confirm:{label:`Remove from solution...`,onConfirm:()=>void 0},cancelLabel:`Close`,onCancel:s}),p=f.querySelector(`.modal`);p.classList.add(`studio-dialog`,`cleanup-dialog`),f.classList.add(`studio-overlay`),Sa(f,e.dialogExpanded,e=>t.dispatch({type:`setDialogExpanded`,on:e}));let m=p.querySelector(`.modal-actions`),h=K(`Close`,`secondary`,s);if(m.replaceChildren(h),a.tab===`unused`){let t=a.picked.length===0||e.busy,r=K(`Remove from solution...`,`secondary`,()=>void n.cleanupRemove());r.prepend(G(`minus`)),r.disabled=t,r.title=`Takes the ticked rows out of this solution; they stay in the environment`;let i=K(`Delete...`,`danger`,()=>void n.cleanupDelete());i.prepend(G(`trash`)),i.disabled=t,i.title=`Deletes the ticked rows from the environment, after checking what depends on them`,m.append(r,i)}else{let t=We(i);t.length===1&&m.append(Bo(e,n,i,t[0]))}let g=p.querySelector(`.cleanup-row .check:not(:disabled), .dup-card .choice, .segment`);return(g??h).dataset.autofocus=`true`,f}function Wo(e){return e.busy||Object.values(e.dependencies).some(e=>e.status===`loading`)||e.newReference?.saving===!0||e.newReference?.live.status===`loading`||e.wizard!==null&&e.wizard.step===`apply`||e.connections.list.status===`loading`||Object.values(e.connections.deps).some(e=>e.status===`loading`)||e.connections.checkAll!==null||e.connections.deletion?.step===`apply`}var Go=(e,t)=>e!==``&&t.trim()===e;function Ko(e,t){let n=Go(e.code,e.typed),r=W(`section`,n?`removal-gate is-open`:`removal-gate`),i=W(`div`,`removal-gate-head`);i.append(G(n?`check-circle`:`lock`),W(`strong`,``,n?`Delete unlocked`:`Copy the code and paste it to unlock Delete`));let a=W(`div`,`removal-gate-row`),o=W(`code`,`removal-code`,e.code),s=K(`Copy code`,`secondary`,()=>{try{navigator.clipboard.writeText(e.code).catch(()=>void 0)}catch{}},!0);s.prepend(G(`copy`,`icon--sm`));let c=W(`input`,`text-input removal-input`);return c.type=`text`,c.value=e.typed,c.placeholder=`Paste the code here`,c.autocomplete=`off`,c.spellcheck=!1,c.setAttribute(`aria-label`,`Confirmation code`),c.setAttribute(`aria-invalid`,String(e.typed!==``&&!n)),c.addEventListener(`input`,()=>t.setTyped(c.value)),a.append(o,s,c),r.append(i,a,W(`p`,`removal-gate-hint`,`The code changes every time this dialog is opened. It exists so that a delete is never one click away.`)),r}function qo(e,t){let{plan:n}=e,r=n.kind===`delete`,i=T(n),a=n.rows.length-i.length,o=e.environment||`the connected environment`,s=i.filter(t=>e.snapshot.flows.some(e=>e.flow.id===t.id)).length,c=i.length-s,l=[s>0?`${s} flow${s===1?``:`s`}`:``,c>0?`${c} connection reference${c===1?``:`s`}`:``].filter(e=>e!==``).join(` and `)||`rows`,u=i.filter(e=>e.turnOff===!0).length,d=W(`span`,`modal-env`);d.append(`Environment`,li(o,`connected`));let f=[],p=W(`p`,r?`removal-lead removal-lead--delete`:`removal-lead`);p.append(G(r?`alert-triangle`:`info`),r?`Permanent: the rows are removed from the environment and from every solution that holds them. The connection behind a reference is not deleted.`:`The rows leave this solution only: they stay in the environment and in any other solution.`),f.push(p,mi(Ta(n,e.snapshot))),a>0&&r&&f.push(Y(`warning`,`${a} blocked`,[`What still depends on a row, or could not be checked, is never deleted: re-point or remove it first.`],`shield`)),r&&f.push(Oa(e.backupSaved,t.saveBackup,n.kind)),r&&i.length>0&&f.push(Ko(e,t));let m=W(`div`,`ack`),h=r?`I understand that ${l} will be permanently deleted from ${o}.`:`I understand that ${l} will leave this solution in ${o}.`;m.append(ri(e.ack,`I understand`,()=>t.setAck(!e.ack)),W(`span`,``,h));let g=m;if(u>0&&t.setStateAck){let n=W(`div`,`ack`);n.append(ri(e.stateAck===!0,`I understand the flows are turned off`,()=>t.setStateAck(!e.stateAck)),W(`span`,``,`I understand that ${u} flow${u===1?` is`:`s are`} turned off before ${u===1?`it is`:`they are`} deleted.`)),g=W(`div`,`ack-stack`),g.append(m,n)}let _=i.length===0||!e.ack||u>0&&e.stateAck!==!0||r&&!Go(e.code,e.typed),v=gi({tone:r?`error`:`primary`,icon:r?`trash`:`minus`,title:r?`Delete ${l} permanently`:`Remove ${l} from this solution`,subtitle:d,body:f,footNote:g,confirm:{label:r?`Delete ${i.length} row${i.length===1?``:`s`}`:`Remove ${i.length} row${i.length===1?``:`s`}`,icon:r?`trash`:`check`,danger:r,disabled:_,onConfirm:t.confirm},onCancel:t.cancel});return v.classList.add(`confirm-overlay`,`removal-overlay`),v.querySelector(`.modal`).classList.add(`confirm-dialog`,`removal-dialog`),v}var Jo={instant:`success`,automated:`info`,scheduled:`warning`,unknown:`neutral`},Yo={instant:`pointer`,automated:`zap`,scheduled:`clock`,unknown:`info`},Xo={0:`Off`,1:`On`,2:`Suspended`};function Zo(e){let t=q(c[e],Jo[e],Yo[e]);return t.title={instant:`Starts manually (a button, an app or a request).`,automated:`Starts when an event happens.`,scheduled:`Starts on a schedule.`,unknown:`The definition has no trigger that can be read.`}[e],t}function Qo(e){return q(Xo[e]??String(e),e===1?`success`:e===2?`warning`:`neutral`,e===2?`pause`:`power`)}function $o(e){let t=e.info;if(t.triggerName===``)return``;let n=[t.triggerType,t.triggerKind].filter(e=>e!==``).join(`, `);return`${t.triggerOperation||t.triggerName}${n?` (${n})`:``}`}function es(e){let t=W(`div`,`detail`);if(t.append(J(`Flow`,void 0,di([{label:`Type`,value:Zo(e.info.type),icon:`tag`},{label:`State`,value:Qo(e.flow.stateCode),icon:`power`},{label:`Trigger`,value:$o(e),icon:`zap`},{label:`Actions`,value:e.unreadable?``:String(e.info.actionCount),icon:`list`},{label:`Owner`,value:e.flow.ownerName||(e.flow.ownerId===``?``:`Unknown`),icon:`user`},{label:`Created`,value:sa(e.flow.createdOn),icon:`calendar`},{label:`Modified`,value:sa(e.flow.modifiedOn),icon:`clock`},{label:`Flow ID`,value:e.flow.id,mono:!0,icon:`hash`},{label:`Description`,value:e.flow.description,wide:!0,icon:`file-text`}]),!0,`workflow`)),e.unreadable)return t.append(J(`Connections`,void 0,W(`p`,`muted`,`The flow definition could not be read, so its connections are not shown.`),!0,`link`)),t;if(e.uses.length===0)return t.append(J(`Connections`,0,W(`p`,`muted`,`This flow does not use any connection reference.`),!0,`link`)),t;let n=e.uses.some(e=>e.flags.length>0),r=Qr(n?[`Reference`,`Connector`,`Connection`,`Needs attention`]:[`Reference`,`Connector`,`Connection`],e.uses,e=>{let t=[ua(e.reference,e.logicalName),e.reference?la(e.reference.connectorId,e.reference.customConnectorId!==``):W(`span`,`muted`,`Unknown`),e.reference?ca(e.reference.connectionId):q(`Missing`,`error`,`x-circle`)];return n?[...t,fa(e.flags)]:t});return r.classList.add(`inner-table`),t.append(J(`Connections`,e.uses.length,$r(r),!1,`link`)),t}function ts(e,t,n){let r=e.reference,i=W(`div`,`detail`);i.append(J(`Connection reference`,void 0,di([{label:`Display name`,value:r.displayName,icon:`tag`},{label:`Logical name`,value:r.logicalName,mono:!0,icon:`code`},{label:`Connector`,value:la(r.connectorId,r.customConnectorId!==``),icon:`plug`},{label:`Owner of the reference`,value:r.ownerName||(r.ownerId===``?``:`Unknown`),icon:`user`},{label:`Connection ID`,value:r.connectionId===``?q(`No connection`,`warning`,`alert-triangle`):r.connectionId,mono:r.connectionId!==``,icon:`link`},{label:`Reference ID`,value:r.id,mono:!0,icon:`hash`},{label:`Connector ID`,value:r.connectorId,mono:!0,icon:`hash`},{label:`Custom connector ID`,value:r.customConnectorId,mono:!0,icon:`code`}]),!0,`plug`));let a=t.filter(t=>e.flowIds.includes(t.flow.id));if(a.length===0)i.append(J(`Used by`,0,W(`p`,`muted`,`No flow of this solution uses this reference.`),!0,`workflow`));else{let e=Qr([`Flow`,`Type`,`State`],a,e=>[W(`span`,`cell-strong`,e.flow.name),Zo(e.info.type),Qo(e.flow.stateCode)]);e.classList.add(`inner-table`),i.append(J(`Used by`,a.length,$r(e),!1,`workflow`))}if(n){let e=n.state?.status===`ready`?Tt(n.state.report).total:void 0;i.append(J(`Dependencies in the whole environment`,e,za({state:n.state,subject:`this reference`,onCheck:n.onCheck,name:r.displayName||r.logicalName}),!0,`layers`))}return i}var ns=!1;function rs(){ns||typeof document>`u`||(ns=!0,document.addEventListener(`click`,e=>{for(let t of document.querySelectorAll(`.cm-picker-list:not([hidden])`))t.parentElement?.contains(e.target)||is(t)}))}function is(e){e.hidden=!0,e.parentElement?.querySelector(`.cm-picker-btn`)?.setAttribute(`aria-expanded`,`false`)}function as(e,t,n,r){rs();let i=W(`div`,`cm-picker`),a=e.find(e=>e.key===n),o=W(`button`,`cm-picker-btn`);o.type=`button`,o.setAttribute(`aria-haspopup`,`listbox`),o.setAttribute(`aria-expanded`,`false`),o.setAttribute(`aria-label`,`Connector`);let s=a?Z(`shared_${a.key}`,!1,!0):(()=>{let e=W(`span`,`conn-tile conn-tile--muted conn-tile--sm`);return e.append(G(`layers`)),e})();o.append(s,W(`span`,`cm-picker-label`,a?a.name:`All connectors`),G(`chevron-down`,`icon--sm cm-picker-chevron`));let c=W(`div`,`cm-picker-list`);c.setAttribute(`role`,`listbox`),c.setAttribute(`aria-label`,`Connectors`),c.hidden=!0;let l=(e,t,i,a)=>{let o=W(`button`,e===n?`cm-picker-opt is-on`:`cm-picker-opt`);return o.type=`button`,o.setAttribute(`role`,`option`),o.setAttribute(`aria-selected`,String(e===n)),o.dataset.key=e,o.append(a,W(`span`,`cm-picker-name`,t),W(`span`,`cm-picker-count`,String(i))),o.addEventListener(`click`,()=>{is(c),r(e)}),o},u=W(`span`,`conn-tile conn-tile--muted conn-tile--sm`);u.append(G(`layers`)),c.append(l(``,`All connectors`,t,u));for(let t of e)c.append(l(t.key,t.name,t.count,Z(`shared_${t.key}`,!1,!0)));return o.addEventListener(`click`,()=>{let e=c.hidden;for(let e of document.querySelectorAll(`.cm-picker-list:not([hidden])`))is(e);c.hidden=!e,o.setAttribute(`aria-expanded`,String(e)),e&&(c.querySelector(`.is-on`)??c.firstElementChild)?.dispatchEvent(new Event(`focus`))}),i.addEventListener(`keydown`,e=>{let t=e.key,n=[...c.querySelectorAll(`.cm-picker-opt`)];if(t===`Escape`&&!c.hidden)is(c),o.focus();else if((t===`ArrowDown`||t===`ArrowUp`)&&n.length>0){e.preventDefault(),c.hidden&&(c.hidden=!1,o.setAttribute(`aria-expanded`,`true`));let r=n.indexOf(document.activeElement);n[Math.max(0,Math.min(n.length-1,r+(t===`ArrowDown`?1:-1)))].focus()}}),i.append(o,c),i}function os(e,t,n,r,i,a,o){let s=W(`section`,r?`cm-del-step is-done`:`cm-del-step`),c=W(`div`,`cm-del-step-head`),l=W(`span`,`cm-del-num`);r?l.append(G(`check`,`icon--sm`)):l.append(String(e));let u=W(`div`,`cm-del-step-text`);if(u.append(W(`strong`,``,t),W(`span`,`cm-del-step-hint`,n)),c.append(l,u,W(`span`,`cm-del-state`,i)),a&&c.append(a),s.append(c),o.length>0){let e=W(`div`,`cm-del-step-body`);e.append(...o),s.append(e)}return s}function ss(e,t,n){let r=Go(e,t),i=W(`div`,`removal-gate-row`),a=W(`code`,`removal-code`,e),o=K(`Copy code`,`secondary`,()=>{try{navigator.clipboard.writeText(e).catch(()=>void 0)}catch{}},!0);o.prepend(G(`copy`,`icon--sm`));let s=W(`input`,`text-input removal-input`);return s.type=`text`,s.value=t,s.placeholder=`Paste the code here`,s.autocomplete=`off`,s.spellcheck=!1,s.setAttribute(`aria-label`,`Confirmation code`),s.setAttribute(`aria-invalid`,String(t!==``&&!r)),s.addEventListener(`input`,()=>n.dispatch({type:`cmDeletionTyped`,text:s.value})),i.append(a,o,s),i}function cs(e,t){let n=W(`section`,`run-panel`),r=e.live.length,i=hr(r,e.total,e.current?.step??null),a=Math.max(0,e.now-e.startedAt),o=W(`div`,`run-hero`),s=W(`div`,`run-ring is-moving`);s.style.setProperty(`--p`,String(i)),s.setAttribute(`role`,`progressbar`),s.setAttribute(`aria-label`,`Progress of the deletion`),s.setAttribute(`aria-valuemin`,`0`),s.setAttribute(`aria-valuemax`,`100`),s.setAttribute(`aria-valuenow`,String(i)),s.append(W(`span`,`run-percent`,`${i}%`));let c=W(`div`,`run-titles`),l=W(`div`,`run-headline-row`);l.append(W(`h3`,`run-headline`,`Deleting the connections`));let u=e.current?mr.find(t=>t.key===e.current.step).doing:`Starting`,d=r>0&&r<e.total?` - about ${D(a/r*(e.total-r))} left`:``,f=W(`p`,`run-now`,`Connection ${Math.min(r+1,Math.max(e.total,1))} of ${e.total}: ${u}`);f.setAttribute(`role`,`status`),f.setAttribute(`aria-live`,`polite`),c.append(l,f,W(`p`,`run-sub`,`Time elapsed ${D(a)}${d}`),W(`p`,`run-sub`,`Deleting in ${t}. Do not close this tool until it finishes.`));let p=W(`div`,`run-phases`),m=e.current?mr.findIndex(t=>t.key===e.current.step):-1,h=mr.map((t,n)=>({label:t.label,state:e.current===null?`pending`:n<m?`done`:n===m?`active`:`pending`}));p.append(vi(h,e.current?e.current.label:`\xA0`));let g=W(`div`,`run-counters`),_=(t,n)=>{let r=W(`span`,`run-count run-count--${t}`);return r.append(W(`b`,``,String(e.live.filter(e=>e.status===t).length)),W(`span`,``,n)),r};g.append(_(`done`,`deleted`),_(`skipped`,`skipped`),_(`failed`,`failed`)),o.append(s,c,p,g);let v=W(`div`,`cm-runlog`);v.setAttribute(`role`,`log`),v.setAttribute(`aria-label`,`What is being done`);for(let t of e.log){let e=W(`div`,`cm-runlog-line cm-runlog-line--${t.tone}`);e.append(W(`span`,`cm-runlog-time`,D(t.at)),W(`span`,`cm-runlog-text`,t.text)),v.append(e)}return n.append(o,W(`div`,`run-rows-head cm-runlog-head`,`Log`),v),queueMicrotask(()=>{v.scrollTop=v.scrollHeight}),n}function ls(e,t,n,r,i){let a=W(`ul`,`cm-portal-list`);for(let o of t){let t=e.portalChecked.includes(o.name),s=W(`li`,`cm-portal-item`),c=W(`button`,t?`cm-portal-pick is-on`:`cm-portal-pick`);c.type=`button`,c.setAttribute(`role`,`checkbox`),c.setAttribute(`aria-checked`,String(t)),c.setAttribute(`aria-label`,`Confirmed in the portal: ${o.label}`),c.addEventListener(`click`,()=>n.dispatch({type:`cmDeletionPortal`,name:o.name,on:!t}));let l=W(`span`,`cm-portal-box`);t&&l.append(G(`check`,`icon--sm`));let u=[`${o.connector===``?o.connectorKey:o.connector}`,`#${or(o.name)}`,i(o.connectorKey)].filter(e=>e!==void 0&&e!==``),d=W(`span`,`cm-portal-text`);d.append(W(`span`,`cm-portal-name`,o.label),W(`span`,`cm-portal-hint`,u.join(` - `))),c.append(l,d);let f=K(`Copy address`,`secondary`,()=>void r.copyAddress(o.name),!0);f.prepend(G(`copy`,`icon--sm`)),f.setAttribute(`aria-label`,`Copy the portal address of ${o.label}`),s.append(c,W(`span`,`cm-portal-state`,t?`Confirmed`:`To confirm`),f),a.append(s)}return a}function us(e,t,n,r){let i=e.connections.deletion,a=i.plan,o=z(a),s=a.rows.length-o.length,c=`${o.length} connection${o.length===1?``:`s`}`,l=r||`the connected environment`,u=W(`span`,`modal-env`);u.append(`Environment`,li(l,`connected`));let d=[],f=`Delete ${c} permanently`,p,m=!0,h=`Delete ${c}`;if(i.step===`preview`){let r=W(`section`,`cm-del-summary`);r.append(G(`alert-triangle`));let a=W(`div`,`cm-del-summary-text`);a.append(W(`strong`,``,`${c} will be permanently removed from ${l}`),W(`span`,``,`A connection reference that holds one will show it as missing. This cannot be undone.`)),r.append(a),d.push(r),s>0&&d.push(W(`p`,`cm-del-blocked`,`${s} more ${s===1?`connection is`:`connections are`} blocked and will not be deleted: something still depends on ${s===1?`it`:`them`}, or ${s===1?`it`:`they`} could not be checked.`));let u=W(`section`,`cm-del-block`);u.append(W(`h4`,`cm-del-title`,`Connections to delete ${o.length}`));let f=W(`ul`,`cm-del-list`);for(let e of o){let t=W(`li`,`cm-del-item`);t.append(Z(`shared_${e.connectorKey}`,!1,!0));let n=W(`span`,`cm-del-item-text`);n.append(W(`span`,`cm-del-item-name`,e.label),W(`span`,`cm-del-item-sub`,[e.connector===``?e.connectorKey:e.connector,e.creator,`#${or(e.name)}`].filter(e=>e!==``).join(` - `))),t.append(n),f.append(t)}u.append(f),d.push(u);let h=W(`section`,`cm-del-block`);h.append(W(`h4`,`cm-del-title`,`Before you delete`));let g=K(i.backupSaved?`Save again`:`Save backup`,`secondary`,()=>void n.saveBackup(),!0);g.prepend(G(`save`,`icon--sm`));let _=o.filter(e=>i.portalChecked.includes(e.name)).length,v=Go(i.code,i.typedCode),y=o.length>0&&_===o.length,b=K(y?`Clear all`:`Select all`,`secondary`,()=>t.dispatch({type:`cmDeletionPortalAll`,on:!y}),!0);b.prepend(G(y?`x-circle`:`check-circle`,`icon--sm`)),b.title=y?`Remove every confirmation`:`Confirm every connection of the list in one go, once you have looked at each one in the portal`,h.append(os(1,`Save a backup`,`The records (name, connector, display name, creator name, time, status) go to a file you choose: no secret, no email. It is the only copy.`,i.backupSaved,i.backupSaved?`Saved`:`Recommended`,g,[]),os(2,`Confirm each one in the Maker portal`,`The tool cannot see flows that are outside any solution. Copy the address, open the connection, look at Flows using this connection and Apps using this connection, then tick it.`,o.length>0&&_===o.length,`${_} of ${o.length}`,o.length>1?b:void 0,o.length>0?[ls(i,o,t,n,t=>Or(e.connections.usage.map,t))]:[]),os(3,`Paste the code to unlock Delete`,`The code changes every time this dialog is opened, so a delete is never one click away.`,v,v?`Unlocked`:`Required`,void 0,o.length>0?[ss(i.code,i.typedCode,t)]:[])),d.push(h);let x=W(`div`,`ack`);x.append(ri(i.ack,`I understand`,()=>t.dispatch({type:`cmDeletionAck`,on:!i.ack})),W(`span`,``,`I understand that ${c} will be permanently deleted from ${l}.`)),p=x,m=o.length===0||!i.ack||!v||!o.every(e=>i.portalChecked.includes(e.name))}else if(i.step===`apply`)f=`Deleting connections`,d.push(cs(i,l));else{f=`Result`;let e=i.results??[],t=ue(e),n=de(t,i.refreshFailed),r=Y(n.tone,n.title,n.lines);r.classList.add(`callout--compact`),d.push(r,pi([{label:`Deleted`,value:String(t.changed),icon:`check-circle`,tone:`success`},{label:`Skipped`,value:String(t.skipped),icon:`alert-triangle`,tone:t.skipped>0?`warning`:`success`},{label:`Failed`,value:String(t.failed),icon:`x-circle`,tone:t.failed>0?`error`:`success`},{label:`Duration`,value:D(Math.max(0,i.now-i.startedAt)),icon:`clock`,tone:`info`}]),J(`Rows`,t.total,$r(Qr([`Connection`,`Outcome`,`Message`],e,e=>[W(`span`,`cell-strong`,e.label),pa(e.status),e.message])),!1,`list`))}let g=gi({tone:i.step===`result`?`primary`:`error`,icon:`trash`,title:f,subtitle:u,body:d,...p?{footNote:p}:{},confirm:{label:h,icon:`trash`,danger:!0,disabled:m,onConfirm:()=>n.confirmDeletion()},cancelLabel:`Cancel`,onCancel:()=>n.closeDeletion()});g.classList.add(`confirm-overlay`,`removal-overlay`,`cm-deletion`),g.querySelector(`.modal`).classList.add(`confirm-dialog`,`removal-dialog`);let _=g.querySelector(`.modal-actions`);if(i.step===`apply`&&(_.replaceChildren(),g.querySelector(`.modal-close`)?.remove()),i.step===`result`){let e=K(`Save report`,`secondary`,()=>void n.saveReport());e.prepend(G(`save`));let t=K(`Close`,`primary`,()=>n.closeDeletion());t.dataset.autofocus=`true`,_.replaceChildren(e,t)}return g}var ds=1800,fs=2,ps=`http://www.w3.org/2000/svg`,ms=[[4.5,6,2.5],[4.5,18,2.5],[19.5,12,2.5]],hs=[`M7 6.5C12 6.5 13.5 8.5 17.2 10.6`,`M7 17.5C12 17.5 13.5 15.5 17.2 13.4`];function gs(e,t){let n=document.createElementNS(ps,e);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);return n}function _s(){let e=gs(`svg`,{viewBox:`0 0 24 24`,class:`logo-loader-svg`,"aria-hidden":`true`,focusable:`false`});for(let t of hs)e.append(gs(`path`,{d:t,class:`logo-loader-flow`}));return ms.forEach(([t,n,r],i)=>{let a=gs(`circle`,{cx:String(t),cy:String(n),r:String(r),class:`logo-loader-node`});a.setAttribute(`style`,`--n:${i}`),e.append(a)}),e}function vs(){return typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches}var ys=null;function bs(){ys=null}function xs(e,t=performance.now(),n=vs()){let r=n?ds*fs:ds;ys??=t;let i=t-ys,a=W(`div`,`logo-loader`);a.setAttribute(`role`,`status`),a.setAttribute(`aria-live`,`polite`),a.setAttribute(`aria-busy`,`true`),a.style.setProperty(`--loader-period`,`${r}ms`),a.style.setProperty(`--loader-phase`,`${-(t%r)}ms`),i<200&&(a.classList.add(`logo-loader--new`),a.style.setProperty(`--loader-appear`,`${200-i}ms`));let o=W(`div`,`logo-loader-mark`);return o.append(W(`span`,`logo-loader-halo`),_s()),o.firstElementChild.setAttribute(`aria-hidden`,`true`),a.append(o,W(`p`,`logo-loader-text`,e)),a}function Ss(e,t){let n=W(`div`,`area-switch`);n.setAttribute(`role`,`group`),n.setAttribute(`aria-label`,`Area`);let r=Wo(e);for(let[i,a,o]of[[`solutions`,`Solutions`,`stack`],[`connections`,`Connections`,`plug`]]){let s=W(`button`,e.area===i?`area-tab is-active`:`area-tab`);s.type=`button`,e.area===i&&s.setAttribute(`aria-current`,`page`),s.append(G(o,`icon--sm`),a),r&&(s.title=`The tool is still reading: this tab is available when it ends.`),s.addEventListener(`click`,()=>t(i)),n.append(s)}return n}var Cs={connected:()=>q(qn.connected,`success`,`check-circle`),reconnect:()=>q(qn.reconnect,`warning`,`alert-triangle`),error:()=>q(qn.error,`error`,`x-circle`),unknown:()=>q(qn.unknown,`neutral`,`info`)},ws={app:`layout`,flow:`workflow`,reference:`link`,agent:`bot`,other:`layers`},Ts=`These are the connections you can see, without the ones that belong to a flow (they are removed with their flow). Something that you cannot read may still use one of them: No dependency found never means unused.`;function Es(){let e=W(`span`,`spinner`);return e.setAttribute(`aria-hidden`,`true`),e}function Ds(e,t=`info`){let n=W(`p`,`dep-note${t===`warn`?` dep-note--warn`:t===`error`?` dep-note--error`:``}`);return n.append(G(t===`warn`?`alert-triangle`:t===`error`?`x-circle`:`info`,`icon--sm`),W(`span`,``,e)),n}function Os(e){let t=W(`li`,`dep-row`),n=W(`div`,`dep-row-head`),r=W(`span`,`dep-title`);r.append(G(ws[e.kind],`icon--sm icon--muted`),W(`span`,`dep-name`,e.name));let i=W(`span`,`dep-tags`);e.state!==``&&i.append(q(e.state,e.state===`On`?`success`:e.state===`Suspended`?`warning`:`neutral`,e.state===`Suspended`?`pause`:`power`)),n.append(r,i),t.append(n);let a=[];return e.via!==``&&a.push(`Through the reference ${e.via}`),e.ownerName!==``&&a.push(`Owner: ${e.ownerName}`),e.solutions.length>0&&a.push(`In ${e.solutions.length===1?`solution`:`solutions`}: ${e.solutions.join(`, `)}`),a.length>0&&t.append(W(`div`,`dep-facts`,a.join(` - `))),t}function ks(e,t,n,r){let i=W(`div`,`dep-block cm-deps`),a=W(`div`,`dep-summary cm-verdict cm-verdict--${t.verdict}`),o=t.verdict===`in-use`&&Un(t)?`Only ${t.dependents.length===1?`a connection reference holds`:`connection references hold`} this connection: no flow, app or agent was found using ${t.dependents.length===1?`it`:`them`}.`:t.verdict===`in-use`?`${t.dependents.length} ${t.dependents.length===1?`thing depends`:`things depend`} on this connection.`:t.verdict===`none-found`?`No dependency found.`:`Could not be checked: a source could not be read, so nothing can be said.`;a.append(G(t.verdict===`in-use`?`info`:t.verdict===`none-found`?`check-circle`:`alert-triangle`,`icon--sm`),W(`strong`,``,o)),i.append(a),i.append(W(`p`,`dep-source cm-coverage`,zn(t.sources))),t.verdict===`none-found`&&i.append(Ds(`The Maker portal can list flows that this tool cannot see (the records of the flow service). Before deleting a connection, check "Flows using this connection" in the portal.`,`warn`)),r!==void 0&&(t.verdict===`none-found`||t.verdict===`in-use`)&&i.append(Ds(r,`info`)),t.verdict===`none-found`||t.verdict===`in-use`&&i.append(Ds(`This is what the tool could see. The Maker portal can list more flows (the records of the flow service, and flows of other users), so its list can be longer than this one: use Copy portal address to compare.`,`info`));for(let e of Hn(t)){let t=W(`section`,`dep-group`),n=W(`h5`,`dep-group-title`);n.append(G(ws[e.kind],`icon--sm icon--muted`),`${e.label} `,W(`span`,`dep-count`,String(e.items.length)));let r=W(`ul`,`dep-list`);for(let t of e.items)r.append(Os(t));t.append(n,r),i.append(t)}let s=t.elsewhere??[];if(s.length>0){let e=W(`section`,`dep-group`),t=W(`h5`,`dep-group-title`);t.append(G(`workflow`,`icon--sm icon--muted`),`Same connector, another connection `,W(`span`,`dep-count`,String(s.length)));let n=W(`ul`,`dep-list`);for(let e of s){let t=W(`li`,`dep-row`),r=W(`div`,`dep-row-head`),i=W(`span`,`dep-title`);i.append(G(`workflow`,`icon--sm icon--muted`),W(`span`,`dep-name`,e.name)),r.append(i),t.append(r,W(`div`,`dep-facts`,e.references.map(e=>`${e.name} holds ${or(e.connection)}`).join(` - `))),n.append(t)}e.append(t,n),i.append(e,Ds(`These flows use the same connector but their connection references hold another connection, so they are not counted as using this one. If the Maker portal lists one of them here, the portal may be showing a permission granted earlier (it can also list flows that no longer exist): open the flow there and see which connection it uses now.`,`info`))}for(let e of Wn(t)){let t=e.state;t.status!==`ok`&&i.append(Ds(t.status===`failed`?`Could not read the ${Fn[e.name]}: ${t.reason}`:`Not scanned: ${Fn[e.name]} (${t.reason})`,`warn`))}let c=W(`div`,`dep-foot`),l=K(`Check again`,`secondary`,()=>void n.checkAgain(e.name),!0);return l.prepend(G(`refresh`,`icon--sm`)),l.setAttribute(`aria-label`,`Check the dependencies of ${e.displayName||e.name} again`),c.append(l),i.append(c),i}function As(e,t,n){let r=e.connections,i=W(`div`,`detail cm-detail`),a=W(`dl`,`cm-facts`),o=(e,t)=>{t!==``&&a.append(W(`dt`,``,e),W(`dd`,``,t))};o(`Connection id`,t.name),o(`Connector`,t.connectorName),o(`Created by`,t.creator.name),o(`Created`,t.createdTime===``?``:sa(t.createdTime)),o(`Last modified`,t.modifiedTime===``?``:sa(t.modifiedTime)),o(`Status`,t.statusDetail===``?qn[t.status]:`${qn[t.status]}: ${t.statusDetail}`),i.append(a);let s=r.deps[t.name],c=W(`div`,`cm-dep-body`);if(s===void 0||s.status===`loading`)c.append(Ia(`Reading what depends on this connection: apps, connection references, flows and agents...`));else if(s.status===`failed`){c.append(Ds(`The dependencies could not be read: ${s.error}`,`error`));let e=K(`Try again`,`secondary`,()=>void n.checkAgain(t.name),!0);e.setAttribute(`aria-label`,`Try again to check the dependencies of ${t.displayName||t.name}`),c.append(e)}else c.append(ks(t,s.report,n,kr(r.usage.map,t.connectorKey,t.connectorName)));if(i.append(J(`What depends on it`,s?.status===`ready`?s.report.dependents.length:void 0,c,!0,`layers`)),!Dn.connectionDelete){let e=W(`div`,`cm-portal`),r=K(`Copy portal address`,`secondary`,()=>void n.copyAddress(t.name),!0);r.prepend(G(`copy`,`icon--sm`)),r.setAttribute(`aria-label`,`Copy the Maker portal address of ${t.displayName||t.name}`),e.append(r,W(`span`,`cm-portal-hint`,`Paste it in a browser to open this connection in the Maker portal. Deleting connections is switched off until the route is verified.`)),i.append(e)}return i}function js(e,t,n,r){let i=e.connections,a=i.open.includes(n.name),o=n.displayName||n.name,s=W(`div`,`cm-item${a?` is-open`:``}`),c=W(`div`,`cm-row cm-row--${n.status}`),l=Jr(i.selected.includes(n.name),`Select ${o}`,()=>t.dispatch({type:`cmToggle`,name:n.name}));l.classList.add(`cm-check`),Qn(n,i.deps)||(l.disabled=!0,l.title=i.deps[n.name]===void 0?`Check the dependencies first: only a connection with no dependency found can be selected.`:dr(n,i.deps)??`It cannot be selected.`);let u=W(`button`,`icon-btn expand-btn cm-chevron`);u.type=`button`,u.setAttribute(`aria-expanded`,String(a)),u.setAttribute(`aria-label`,`${a?`Hide`:`Show`} details of ${o}`),u.append(G(`chevron-down`)),u.addEventListener(`click`,e=>{e.stopPropagation(),r.toggleOpen(n.name)});let d=W(`div`,`cm-cell cm-cell--who`),f=W(`div`,`cm-names`),p=W(`div`,`cm-sub`);p.append(W(`span`,`cm-connector`,n.connectorName===``?``:n.connectorName),W(`span`,`cm-id`,`#${or(n.name)}`)),p.title=`${n.connectorName===``?``:`${n.connectorName} - `}${n.name}`,f.append(W(`div`,`conn-name`,o),p),d.append(Z(`shared_${n.connectorKey}`),f);let m=W(`div`,`cm-cell cm-cell--status`),h=Cs[n.status]();n.statusDetail!==``&&(h.title=n.statusDetail),m.append(h);let g=lr(i.deps,n.name,n),_=W(`div`,`cm-cell cm-cell--dep`);if(g.text===`Not checked`){let e=W(`span`,`cm-unchecked`,g.text);e.title=`Not checked yet: open the row, or use Check all.`,_.append(e)}else{let e=q(g.text,g.tone===`info`?`info`:g.tone===`success`?`success`:g.tone===`warning`?`warning`:`neutral`,g.text.startsWith(`In use`)?`layers`:g.text.startsWith(`Held by`)?`link`:g.text===`No dependency found`?`check-circle`:g.text===`Checking...`?void 0:`alert-triangle`);g.text===`Checking...`&&e.prepend(Es()),g.title&&(e.title=g.title),_.append(e)}let v=W(`div`,`cm-cell cm-cell--when`),y=W(`span`,`cell-time`,n.modifiedTime===``?`-`:oa(n.modifiedTime));n.modifiedTime!==``&&(y.title=sa(n.modifiedTime)),v.append(y),n.creator.name!==``&&v.append(W(`span`,`cm-creator`,n.creator.name));let b=W(`div`,`cm-cell cm-cell--select`);b.append(l);let x=W(`div`,`cm-cell cm-cell--link`),S=W(`button`,`icon-btn cm-link-btn`);return S.type=`button`,S.setAttribute(`aria-label`,`Copy the portal address of ${o}`),S.title=`Copy the portal address of this connection, to check it in the Maker portal`,S.append(G(`copy`,`icon--sm`)),S.addEventListener(`click`,()=>void r.copyAddress(n.name)),x.append(S),c.append(b,u,d,m,_,v,x),c.addEventListener(`click`,e=>{e.target.closest(`.check, .expand-btn, .cm-link-btn`)||r.toggleOpen(n.name)}),s.append(c),a&&s.append(As(e,n,r)),s}function Ms(e,t){let n=e.connections,r=t.only?n.list.items.filter(e=>t.only.includes(e.name)):n.list.items,i=cr(r,n.deps,t.step),a=$n(r,n.deps),o=r.filter(e=>n.deps[e.name]?.status===`failed`).length,s=W(`section`,`cm-pipe run-panel`);s.setAttribute(`aria-label`,`Check all`);let c=W(`div`,`run-hero`),l=t.step===`connections`&&t.total>0?Math.round(t.done/t.total*100):0,u=W(`div`,`run-ring is-moving`);u.style.setProperty(`--p`,String(l)),u.setAttribute(`role`,`progressbar`),u.setAttribute(`aria-label`,`Progress of Check all`),u.setAttribute(`aria-valuemin`,`0`),u.setAttribute(`aria-valuemax`,`100`),u.setAttribute(`aria-valuenow`,String(l)),u.append(W(`span`,`run-percent`,`${l}%`));let d=Math.max(0,t.now-t.startedAt),f=t.done>0?D(d/t.done*(t.total-t.done)):``,p=W(`div`,`run-titles`),m=W(`div`,`run-headline-row`);m.append(W(`h3`,`run-headline`,`Checking the connections`));let h=t.step===`apps`?`Reading the apps of the environment...`:t.step===`references`?`Reading the connection references...`:`Checked ${t.done} of ${t.total}${f===``?``:` - about ${f} left`}`,g=i.connectors.find(e=>e.state===`active`)??i.connectors.find(e=>e.state===`pending`);if(p.append(m,W(`p`,`run-now`,h)),t.step===`connections`&&g){let e=W(`div`,`cm-now-connector`),t=W(`span`,`cm-now-text`);t.append(W(`b`,``,g.name),W(`span`,``,`${g.done} of ${g.total}`)),e.append(Z(`shared_${g.key}`,!1,!0),t),p.append(e)}p.append(W(`p`,`run-sub`,`Time elapsed ${D(d)}. Nothing is changed: this only reads.`));let _=W(`div`,`run-phases`),v=e=>e===`pending`?`pending`:e;_.append(vi([{label:`Apps`,state:v(i.apps)},{label:`Connection references`,state:v(i.references)},{label:`Connections`,state:t.step===`connections`?`active`:`pending`}]));let y=W(`div`,`run-counters`),b=(e,t,n)=>{let r=W(`span`,`run-count run-count--${e}`);return r.append(W(`b`,``,String(t)),W(`span`,``,n)),r};return y.append(b(`done`,a.inUse,`in use`),b(`skipped`,a.noneFound,`no dependency`),b(`failed`,o,`not read`)),c.append(u,p,_,y),s.append(c),s}function Ns(e,t,n,r){let i=e.connections,a=i.sort.key===r,o=W(`button`,a?`cm-sort is-active`:`cm-sort`);return o.type=`button`,o.setAttribute(`aria-label`,`Sort by ${n}${a?`, ${i.sort.dir===`asc`?`ascending`:`descending`}`:``}`),o.append(n),a&&o.append(G(`chevron-down`,`icon--xs cm-sort-arrow${i.sort.dir===`asc`?` is-asc`:``}`)),o.addEventListener(`click`,()=>t.dispatch({type:`cmSort`,key:r})),o}function Ps(e,t,n,r,i){let a=e.connections,o=W(`div`,`screen cm-screen`),s=a.list.items,c=$n(s,a.deps),l=t=>(o.append(Ss(e,r),t),o);if((a.list.status===`idle`||a.list.status===`loading`)&&s.length===0)return l(xs(a.list.read>0?`Reading the connections... ${a.list.read} read so far`:`Reading the connections of the environment...`));if(a.list.status===`failed`&&s.length===0){let e=W(`div`,`cm-failed`);e.append(Ds(a.list.error===``?`The connections could not be read.`:a.list.error,`error`));let t=K(`Try again`,`primary`,()=>void n.refresh());return t.prepend(G(`refresh`,`icon--sm`)),e.append(t),l(e)}o.append(Ss(e,r));let u=ir(tr(s,a.deps,a.filter,a.connector,a.search),a.sort),d={all:s.length,broken:tr(s,a.deps,`broken`,a.connector,a.search).length,none:tr(s,a.deps,`none`,a.connector,a.search).length,inuse:tr(s,a.deps,`inuse`,a.connector,a.search).length},f=W(`div`,`toolbar cm-toolbar`);f.append(ti([`all`,`broken`,`none`,`inuse`].map(e=>({key:e,label:Kn[e],count:d[e],icon:{all:`layers`,broken:`alert-triangle`,none:`check-circle`,inuse:`link`}[e]})),a.filter,e=>t.dispatch({type:`cmFilter`,filter:e})),ei(a.search,`Search connections...`,e=>t.dispatch({type:`cmSearch`,text:e})));let p=ar(s);p.length>1&&f.append(as(p.map(e=>({...e,count:s.filter(t=>t.connectorKey===e.key).length})),s.length,a.connector,e=>t.dispatch({type:`cmConnector`,key:e})));let m=K(`Refresh`,`secondary`,()=>void n.refresh(),!0);m.prepend(a.list.status===`loading`?Es():G(`refresh`,`icon--sm`)),a.list.status===`loading`&&m.setAttribute(`aria-busy`,`true`),f.append(m),o.append(f),a.list.status===`failed`&&o.append(Ds(`${a.list.error} The list below is what was read before.`,`warn`)),a.list.status===`loading`&&o.append(Ia(`Reading the connections again... ${a.list.read} read so far`));let h=W(`div`,`cm-actions`),g=a.checkAll,_=a.selected.length,v=K(g?`Checking...`:_>0?`Check selected (${_})`:c.checked>0&&c.checked>=c.total?`Check all again`:`Check all`,`primary`,()=>void n.checkAll(_>0?`selected`:void 0));if(v.prepend(g?Es():G(`search`,`icon--sm`)),g&&v.setAttribute(`aria-busy`,`true`),v.disabled=s.length===0,v.title=_>0?`Reads again what depends on the ticked connections only: the apps, the connection references, the flows and the agents.`:`Reads what depends on every connection: the apps, the connection references, the flows and the agents, four connections at a time.`,h.append(v),g){let e=K(g.cancelled?`Cancelling...`:`Cancel`,`secondary`,()=>n.cancelCheckAll());e.dataset.allowRunning=`true`,e.disabled=g.cancelled,h.append(e)}let y=u.filter(e=>Qn(e,a.deps)).length,b=K(`Select the ones with no dependency found`,`secondary`,()=>t.dispatch({type:`cmSelectEligible`}));if(b.prepend(G(`check-circle`,`icon--sm`)),b.disabled=y===0,b.title=y===0?`Nothing to select yet: run Check all, then the connections with no dependency found can be selected.`:`Ticks the ${y} connection${y===1?``:`s`} shown with no dependency found.`,h.append(b),a.selected.length>0){let e=K(`Clear`,`secondary`,()=>t.dispatch({type:`cmClearSelection`}),!0);h.append(W(`span`,`cm-selected`,`${a.selected.length} selected`),e)}else h.append(W(`span`,`cm-selected`,`None selected`));if(Dn.connectionDelete){let e=K(`Delete...`,`danger`,()=>n.openDeletion());e.prepend(G(`trash`)),e.disabled=a.selected.length===0,h.append(e)}let x=W(`span`,`cm-checked`),S=a.selected.filter(e=>a.deps[e]?.status===`ready`||a.deps[e]?.status===`failed`).length;x.append(_>0?`Selected ${_} - checked ${S} of ${_}`:`Checked ${c.checked} of ${c.total}`);let C=W(`span`,`cm-info`);if(C.tabIndex=0,C.title=Ts,C.setAttribute(`role`,`note`),C.setAttribute(`aria-label`,Ts),C.append(G(`info`,`icon--sm`)),x.append(C),h.append(x),o.append(h),g&&o.append(Ms(e,g)),u.length===0)o.append(ni(s.length===0?`There are no connections that you can see in the connected environment.`:`No connection matches the filter or the search.`,s.length===0?`plug`:`search`));else{let r=W(`div`,`table-wrap cm-list`);r.setAttribute(`role`,`list`);let i=W(`div`,`cm-head`);i.append(W(`span`),W(`span`),Ns(e,t,`Connection`,`name`),Ns(e,t,`Status`,`status`),W(`span`,`cm-head-plain`,`Dependencies`),Ns(e,t,`Modified`,`modified`),W(`span`)),r.append(i);for(let i of u.slice(0,a.shown)){let a=js(e,t,i,n);a.setAttribute(`role`,`listitem`),r.append(a)}if(u.length>a.shown){let e=K(`Show more (${u.length-a.shown} left)`,`secondary`,()=>t.dispatch({type:`cmShowMore`}));e.classList.add(`cm-more`),r.append(e)}o.append(r)}return a.deletion&&o.append(us(e,t,n,i)),o}function Fs(e,t){return t===``||e.toLowerCase().includes(t.toLowerCase())}function Is(e){let t=W(`span`,`cell-strong name-with-icon`);return t.append(G(`stack`,`icon--sm icon--primary`),e),t}var Ls=[`name`,`flows`,`created`];function Rs(e,t,n){n===`connections`?t.connections?.open():e.dispatch({type:`setArea`,area:n})}function zs(e,t,n){let r=W(`div`,`screen`);n.connections&&r.append(Ss(e,e=>Rs(t,n,e)));let i=e.solutions.filter(e=>!e.managed),a=e.solutions.length-i.length;r.append(ci(`Solutions`,`Unmanaged solutions of the connected environment. Select one to see its flows and connection references.`,[si(`Solutions`,String(i.length),`stack`),si(`Flows`,e.flowTotal===null?`-`:String(e.flowTotal),`workflow`,!0)]));let o=W(`div`,`toolbar`),s=K(`Refresh`,`secondary`,n.refresh,!0);s.prepend(G(`refresh`,`icon--sm`)),s.disabled=e.busy,o.append(ti([{key:`unmanaged`,label:`Unmanaged`,count:i.length,icon:`edit`},{key:`managed`,label:`Managed`,count:a,icon:`lock`,disabled:!0,title:`Managed solutions cannot be changed, so they are not offered.`}],`unmanaged`,()=>void 0),ei(e.solutionFilter,`Search solutions...`,e=>t.dispatch({type:`setSolutionFilter`,filter:e})),ai(`Updating...`,e.busy),s),r.append(o);let c=Vi(i.filter(t=>Fs(`${t.name} ${t.uniqueName} ${t.publisher}`,e.solutionFilter)),e.flowCounts,e.solutionSort);if(c.length===0)return e.busy&&e.solutions.length===0?(r.append(xs(`Reading the solutions...`)),r):(r.append(ni(i.length===0?`There are no unmanaged solutions in the connected environment.`:`No solution matches "${e.solutionFilter}".`,i.length===0?`stack`:`search`)),r);let l=Ls.indexOf(e.solutionSort.key);return r.append($r(Qr([`Display name`,`Name`,`Flows`,`Created`,`Version`,`Publisher`],c,t=>{let n=W(`span`,`cell-muted cell-time`,oa(t.createdOn));n.title=sa(t.createdOn);let r=e.flowCounts?.[t.id];return[Is(t.name),W(`span`,`cell-muted`,t.uniqueName),r===void 0?W(`span`,`cell-muted`,`-`):oi(r),n,t.version,W(`span`,`cell-muted`,t.publisher)]},{onOpen:e=>n.selectSolution(e.id),sort:{columns:[0,2,3],active:[0,2,3][l]??2,desc:e.solutionSort.desc,onSort:e=>t.dispatch({type:`sortSolutions`,key:{0:`name`,2:`flows`,3:`created`}[e]})},numeric:[2]}))),r}function Bs(e,t){return{selected:e.selected,onToggle:e=>t.dispatch({type:`toggle`,id:e}),onToggleAll:(e,n)=>t.dispatch(n?{type:`clearSelection`}:{type:`selectAll`,ids:e}),expanded:e.expanded,onExpand:e=>t.dispatch({type:`toggleExpand`,id:e})}}function Vs(e,t){let n=e.snapshot.flows.filter(t=>Fs([t.flow.name,t.flow.description,c[t.info.type],t.flow.ownerName,...t.uses.map(e=>e.logicalName)].join(` `),e.filter)),r=n.some(e=>e.flags.length>0),i=ii({columns:r?[`Flow`,`Type`,`State`,`Connections`,`Modified`,`Needs attention`]:[`Flow`,`Type`,`State`,`Connections`,`Modified`],rows:n,id:e=>e.flow.id,label:e=>e.flow.name,cells:e=>{let t=W(`div`,`flow-cell`);if(t.append(W(`div`,`cell-strong`,e.flow.name)),e.flow.description!==``){let n=W(`div`,`cell-sub`,e.flow.description);n.title=e.flow.description,t.append(n)}let n=W(`span`,`cell-muted cell-time`,oa(e.flow.modifiedOn));n.title=sa(e.flow.modifiedOn);let i=[t,Zo(e.info.type),Qo(e.flow.stateCode),da(e),n];return r?[...i,fa(e.flags)]:i},detail:e=>es(e),...Bs(e,t)});return i.classList.add(`flows-table`),{table:$r(i),count:n.length}}function Hs(e,t,n){let r=e.snapshot,i=r.references.filter(t=>Fs(`${t.reference.displayName} ${t.reference.logicalName} ${O(t.reference.connectorId).name} ${t.reference.ownerName}`,e.filter)),a=i.some(e=>e.flags.length>0),o=r=>{let i=!e.expanded.includes(r);t.dispatch({type:`toggleExpand`,id:r});let a=e.dependencies[r];i&&(a===void 0||a.status===`failed`)&&n.checkDependencies([r])},s=ii({columns:a?[`Reference`,`Connector`,`Connection`,`Reference owner`,`Used by`,`Needs attention`]:[`Reference`,`Connector`,`Connection`,`Reference owner`,`Used by`],rows:i,id:e=>e.reference.id,label:e=>e.reference.displayName||e.reference.logicalName,cells:t=>{let i=t.reference,s=i.displayName||i.logicalName,c=W(`button`,`used-link${t.flowIds.length===0?` muted`:``}`,t.flowIds.length===0?`No flow`:t.flowIds.length===1?`1 flow`:`${t.flowIds.length} flows`);c.type=`button`,c.setAttribute(`aria-label`,`What uses ${s}`),c.title=t.flowIds.length===0?`No flow of this solution. Click to read everything that uses it in the whole environment.`:`Flows of this solution: ${t.flowIds.map(e=>r.flows.find(t=>t.flow.id===e)?.flow.name??e).join(`, `)}. Click to read everything that uses it in the whole environment.`,c.addEventListener(`click`,t=>{t.stopPropagation(),e.expanded.includes(i.id)||o(i.id)});let l=W(`span`,`cell-muted`,i.ownerName||`Unknown`);l.title=`The owner of the connection reference row, not of the connection behind it.`;let u=[ua(i,i.logicalName),la(i.connectorId,i.customConnectorId!==``),ca(i.connectionId,n.connections?()=>void n.connections.openConnection(i.connectionId):void 0),l,c];return a?[...u,fa(t.flags)]:u},detail:t=>ts(t,r.flows,{state:e.dependencies[t.reference.id],onCheck:()=>void n.checkDependencies([t.reference.id])}),...Bs(e,t),onExpand:o});return s.classList.add(`refs-table`),s.querySelectorAll(`th`).forEach(e=>{e.textContent===`Reference owner`&&(e.title=`The owner of the connection reference row in Dataverse. It is not the owner of the connection behind it.`)}),{table:$r(s),count:i.length}}function Us(e,t,n){let r=e.snapshot,i=!r.solution.managed,a=e.view===`references`,o=e.selected.length,s=a?new Set(r.references.filter(t=>e.selected.includes(t.reference.id)).flatMap(e=>e.flowIds)).size:0,c=W(`section`,`action-strip`),l=W(`div`,`action-strip-text`),u=W(`h3`,`action-title`);u.append(G(a?`link`:`git-branch`),a?`Change the connection of references`:`Re-point flows to another reference`);let d=a?r.references.filter(t=>e.selected.includes(t.reference.id)):[],f=d.filter(e=>e.flowIds.length>0).length,p=d.length>0&&f===d.length,m=i?p?`${d.length===1?`This reference is`:`These references are`} used by flows, so ${d.length===1?`it`:`they`} cannot be removed or deleted. Re-point those flows to another reference first (Flows view, Choose changes), or change the connection here.`:o===0?a?`Select connection references in the table to change their connection.`:`Select flows in the table to re-point them to another reference.`:a?`Choose what to change in the studio, or remove or delete the selected references. Nothing is written until you confirm.`:`Choose what to change in the studio. Nothing is written until you confirm.`:`This solution is managed: it can be read but not changed.`;l.append(u,W(`p`,`action-hint`,m));let h=W(`span`,`action-count`,a?`${o} selected, ${s} flows affected`:`${o} selected`);h.setAttribute(`aria-live`,`polite`);let g=K(`Choose changes...`,`primary`,()=>t.dispatch({type:`openStudio`}));g.prepend(G(`sliders`)),g.disabled=!i||o===0||e.busy;let _=!i||o===0||e.busy,v=K(`Remove from solution...`,`secondary`,n.previewRemove);v.prepend(G(`minus`)),v.disabled=_||p,v.title=p?`Used by flows: re-point those flows first`:`Takes the selected rows out of this solution; they stay in the environment`;let y=K(`Delete...`,`danger`,n.previewDelete);y.prepend(G(`trash`)),y.disabled=_||p,y.title=p?`Used by flows: re-point those flows first`:`Deletes the selected rows from the environment`;let b=Ye(r),x=b.unused+b.groups,S=K(`Clean up...`,`secondary`,()=>t.dispatch({type:`openCleanup`}));S.prepend(G(`layers`)),x>0&&S.append(` `,W(`span`,`segment-count`,String(x))),S.setAttribute(`aria-label`,`Clean up references`),S.disabled=!i||e.busy,S.title=i?x===0?`Nothing to clean up: every reference is used and none is a duplicate`:`${b.unused} unused, ${b.groups} duplicate ${b.groups===1?`group`:`groups`}`:`This solution is managed: it cannot be changed`;let C=W(`div`,`action-buttons`);return C.append(...a?[S,v,y]:[],g),c.append(l,h,C),c}function Ws(e){return e.wizard!==null&&e.wizard.step===`preview`&&e.plan!==null&&(e.plan.kind===`remove`||e.plan.kind===`delete`)}function Gs(e,t,n,r){let i=e.wizard,a=e.snapshot,o=W(`div`,`screen`);return i.step===`preview`&&e.plan?o.append(Po({plan:e.plan,snapshot:a,wizard:i},{back:()=>t.dispatch({type:`closePlan`}),apply:()=>t.dispatch({type:`openConfirm`}),setLayout:e=>t.dispatch({type:`setLayout`,layout:e}),setTab:e=>t.dispatch({type:`setTab`,tab:e}),toggle:e=>t.dispatch({type:`toggleItem`,id:e}),more:()=>t.dispatch({type:`showMore`})})):i.step===`apply`?o.append(xa(i,r,e.plan?.rows??[])):i.step===`result`&&o.append(Fo({wizard:i,results:e.results??[],solutionName:a.solution.name,environment:r},{saveReport:n.saveReport,back:()=>t.dispatch({type:`dismissResults`}),...e.cleanupFollowUp&&i.operation===`repoint`?{followUp:{label:`Clean up the ${e.cleanupFollowUp.ids.length===1?`duplicate`:`duplicates`}`,run:()=>t.dispatch({type:`followUpCleanup`})}}:{}})),i.confirmOpen&&e.plan&&o.append(ja({plan:e.plan,snapshot:a,environment:r,ack:e.planAck,backupSaved:e.backupSaved,expanded:e.dialogExpanded,stateAck:e.stateAck,manageState:e.manageState},{confirm:n.confirm,cancel:()=>t.dispatch({type:`closeConfirm`}),saveBackup:n.saveBackup,setAck:e=>t.dispatch({type:`setAck`,on:e}),setExpanded:e=>t.dispatch({type:`setDialogExpanded`,on:e}),setStateAck:e=>t.dispatch({type:`setStateAck`,on:e}),setManageState:n.setManageState})),o}function Ks(e,t,n,r){if(e.wizard&&!Ws(e))return Gs(e,t,n,r);let i=e.snapshot,a=i.flows.filter(e=>e.flags.length>0).length+i.references.filter(e=>e.flags.length>0).length,o=Yr(i.solution.name,`${i.flows.length} flows, ${i.references.length} connection references${a>0?`, ${a} need attention`:``}`),s=W(`div`,`toolbar`);s.append(ti([{key:`flows`,label:`Flows`,count:i.flows.length,icon:`workflow`},{key:`references`,label:`Connection references`,count:i.references.length,icon:`plug`}],e.view,e=>t.dispatch({type:`setView`,view:e})),ei(e.filter,`Filter...`,e=>t.dispatch({type:`setFilter`,filter:e})));let c=K(`Refresh`,`secondary`,n.refresh,!0);c.prepend(G(`refresh`,`icon--sm`)),c.disabled=e.busy,s.append(ai(`Updating...`,e.busy),c),o.body.append(s);let l=W(`p`,`hint-line`);l.append(G(`info`,`icon--sm`),`Click a row to see its details. The connection owner and state are not available from the connected environment: the owner shown is the owner of the reference.`),o.body.append(l,Us(e,t,n));let{table:u,count:d}=e.view===`flows`?Vs(e,t):Hs(e,t,n);if(d===0?o.body.append(ni(e.filter===``?e.view===`flows`?`${i.solution.name} has no flows.`:`${i.solution.name} has no connection references.`:`Nothing matches the filter "${e.filter}" in ${i.solution.name}.`,e.filter===``?e.view===`flows`?`workflow`:`plug`:`search`)):o.body.append(u),e.cleanup&&o.root.append(Uo(e,t,n,r)),Ws(e)?o.root.append(qo({plan:e.plan,snapshot:i,environment:r,ack:e.planAck,backupSaved:e.backupSaved,code:e.confirmCode,typed:e.typedCode,stateAck:e.stateAck},{confirm:n.confirm,cancel:()=>t.dispatch({type:`closePlan`}),saveBackup:n.saveBackup,setAck:e=>t.dispatch({type:`setAck`,on:e}),setTyped:n.setTypedCode,setStateAck:e=>t.dispatch({type:`setStateAck`,on:e})})):!e.cleanup&&e.studio?o.root.append(ho(e,t,n,r)):uo(),o.root.classList.add(`screen`),n.connections){let r=W(`div`,`screen`);return r.append(Ss(e,e=>Rs(t,n,e)),o.root),r}return o.root}function qs(e,t,n,r){let i=()=>{let i=t.get();e.replaceChildren();let a=document.getElementById(`breadcrumb`);if(a){a.replaceChildren();let e=i.area===`connections`&&n.connections!==void 0;if(a.hidden=i.solutionId===``,e&&i.solutionId!==``){let e=i.solutionId===``?``:i.snapshot?.solution.name??i.solutions.find(e=>e.id===i.solutionId)?.name??``;a.append(...Xr([{label:`Solutions`,onClick:()=>{n.connections.backToSolutions(),n.selectSolution(``)}},...e===``?[]:[{label:e,onClick:()=>n.connections.backToSolutions()}],{label:`Connections`}]).childNodes)}else if(!e&&i.solutionId!==``){let e=i.snapshot?.solution.name??i.solutions.find(e=>e.id===i.solutionId)?.name??``,r=Ws(i)?null:i.wizard,o=r===null||r.step!==`apply`,s=r===null?[{label:e}]:[{label:e,...be(r.step,`leave`)?{onClick:()=>r&&r.step===`result`?t.dispatch({type:`dismissResults`}):t.dispatch({type:`closePlan`})}:{}},...xe(r.step).slice(-1).map(e=>({label:e.label}))];a.append(...Xr([{label:`Solutions`,...o?{onClick:()=>n.selectSolution(``)}:{}},...s]).childNodes)}}if(i.error!==``){let t=W(`div`,`message message--error`);t.setAttribute(`role`,`alert`),t.append(W(`span`,`message-text`,i.error)),e.append(t)}i.area===`connections`&&n.connections?e.append(Ps(i,t,n.connections,e=>Rs(t,n,e),r())):i.solutionId===``?e.append(zs(i,t,n)):i.snapshot?e.append(Ks(i,t,n,r())):e.append(i.busy?xs(`Reading the solution...`):ni(`The solution could not be read.`))},a=``,o=()=>{let e=t.get(),r=e.wizard;return[e.area===`connections`&&n.connections?`connections`:``,e.solutionId,e.snapshot===null?`loading`:e.view,r?`${r.step}:${r.operation}:${r.tab}`:``,Ws(e)?`removal`:``].join(`|`)},s=()=>{let n=o(),r=n===a;a=n;let s=e.closest(`.main-content`),c=s?.scrollTop??0,l=e.querySelector(`.table-wrap`)?.scrollTop??0,u=[...e.querySelectorAll(`.modal-body`)].map(e=>e.scrollTop),d=e.querySelector(`.step-body`)?.scrollTop??0,f=`.cm-del-list, .cm-portal-list`,p=[...e.querySelectorAll(f)].map(e=>[e.className,e.scrollTop]),m=e.querySelectorAll(`.modal-overlay`).length,h=[...e.querySelectorAll(`.studio-pane-body`)].map(e=>e.scrollTop),g=e.querySelector(`.cleanup-content`),_=g?.scrollTop??0,v=g?.dataset.tab??``,y=e.querySelector(`.newref-body`),b=y?.scrollTop??0,x=y?.dataset.step??``,S=document.activeElement,C=S&&e.contains(S)?S.getAttribute(`aria-label`):null,w=C!==null&&typeof S.selectionStart==`number`?S.selectionStart:null,ee=C!==null&&typeof S.selectionEnd==`number`?S.selectionEnd:null;i(),e.querySelector(`.logo-loader`)||bs();let te=Wo(t.get());e.classList.toggle(`is-running`,te),te&&e.querySelectorAll(`button`).forEach(e=>{e.dataset.allowRunning!==`true`&&(e.disabled=!0)}),s&&(s.scrollTop=r?c:0);let ne=e.querySelector(`.table-wrap`);ne&&(ne.scrollTop=r?l:0);let T=e.querySelector(`.step-body`);T&&(T.scrollTop=r?d:0),e.querySelectorAll(`.modal-body`).forEach((e,t)=>{e.scrollTop=u[t]??0}),e.querySelectorAll(f).forEach(e=>{e.scrollTop=p.find(([t])=>t===e.className)?.[1]??0}),e.querySelectorAll(`.modal-overlay`).forEach((e,t)=>{t<m&&e.classList.add(`no-anim`)}),e.querySelectorAll(`.studio-pane-body`).forEach((e,t)=>{e.scrollTop=h[t]??0});let re=e.querySelector(`.newref-body`);re&&y&&re.dataset.step===x&&(re.scrollTop=b);let ie=e.querySelector(`.cleanup-content`);ie&&g&&ie.dataset.tab===v&&(ie.scrollTop=_);let E=e.querySelectorAll(`.modal`),ae=E.length>0?E[E.length-1]:null;if(ae&&!ae.contains(document.activeElement)&&C===null&&ae.querySelector(`[data-autofocus]`)?.focus({preventScroll:!0}),C===null)return;let D=[...e.querySelectorAll(`[aria-label]`)].find(e=>e.getAttribute(`aria-label`)===C);if(D&&!D.disabled){D.focus({preventScroll:!0});try{w!==null&&ee!==null&&D.setSelectionRange(w,ee)}catch{}}};t.subscribe(s),s()}function Js(){let e=Nn(),t=document.getElementById(`app-version`);t&&(t.textContent=`v0.1.0`);let n=document.getElementById(`log-dock`);n&&ki(n,(t,n)=>e.saveFile(t,n));let r=li(`Connecting...`,`loading`);document.getElementById(`header-right`)?.append(r),e.connectionName().then(e=>e===``?ui(r,`No connection`,`error`):ui(r,e,`connected`)).catch(()=>ui(r,`Connection error`,`error`));let i=document.getElementById(`content`);aa(e=>{i.textContent=e});let a=ia(Yi()),o=qr(e,a);qs(i,a,o,o.environment),R(`Ready.`,`info`),o.start()}document.addEventListener(`DOMContentLoaded`,Js)})();
3
+ `);return t[t.length-1]===``&&t.pop(),t}function vo(e,t,n){let r=0;for(;r<e.length&&r<t.length&&e[r]===t[r];)r++;let i=0;for(;i<e.length-r&&i<t.length-r&&e[e.length-1-i]===t[t.length-1-i];)i++;let a=[];for(let e=0;e<r;e++)a.push({t:`eq`,a:e,b:e});let o=e.length-r-i,s=t.length-r-i,c=!1;if(o*s<=n){let n=s+1,i=new Uint32Array((o+1)*n);for(let a=o-1;a>=0;a--)for(let o=s-1;o>=0;o--)i[a*n+o]=e[r+a]===t[r+o]?i[(a+1)*n+o+1]+1:Math.max(i[(a+1)*n+o],i[a*n+o+1]);let c=0,l=0;for(;c<o&&l<s;)e[r+c]===t[r+l]?(a.push({t:`eq`,a:r+c,b:r+l}),c++,l++):i[(c+1)*n+l]>=i[c*n+l+1]?(a.push({t:`del`,a:r+c,b:-1}),c++):(a.push({t:`ins`,a:-1,b:r+l}),l++);for(;c<o;)a.push({t:`del`,a:r+c,b:-1}),c++;for(;l<s;)a.push({t:`ins`,a:-1,b:r+l}),l++}else{c=!0;for(let e=0;e<o;e++)a.push({t:`del`,a:r+e,b:-1});for(let e=0;e<s;e++)a.push({t:`ins`,a:-1,b:r+e})}for(let n=0;n<i;n++)a.push({t:`eq`,a:e.length-i+n,b:t.length-i+n});return{ops:a,tooLarge:c}}function yo(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;let r=0;for(;r<e.length-n&&r<t.length-n&&e[e.length-1-r]===t[t.length-1-r];)r++;return{old:[n,e.length-r],neu:[n,t.length-r]}}var bo=e=>({oldNo:null,newNo:null,oldText:``,newText:``,oldSpan:null,newSpan:null,skipped:0,...e});function xo(e,t,n){let r=[],i=[],a=[],o=()=>{let n=Math.min(i.length,a.length);for(let o=0;o<n;o++){let n=e[i[o]],s=t[a[o]],c=yo(n,s);r.push(bo({kind:`changed`,oldNo:i[o]+1,newNo:a[o]+1,oldText:n,newText:s,oldSpan:c.old,newSpan:c.neu}))}for(let t=n;t<i.length;t++)r.push(bo({kind:`removed`,oldNo:i[t]+1,oldText:e[i[t]]}));for(let e=n;e<a.length;e++)r.push(bo({kind:`added`,newNo:a[e]+1,newText:t[a[e]]}));i=[],a=[]};for(let s of n)s.t===`del`?i.push(s.a):s.t===`ins`?a.push(s.b):(o(),r.push(bo({kind:`context`,oldNo:s.a+1,newNo:s.b+1,oldText:e[s.a],newText:t[s.b]})));return o(),r}function So(e,t){if(!Number.isFinite(t))return[...e];let n=[],r=0;for(;r<e.length;){if(e[r].kind!==`context`){n.push(e[r]),r++;continue}let i=r;for(;i<e.length&&e[i].kind===`context`;)i++;let a=e.slice(r,i),o=r===0,s=i===e.length,c=o?0:t,l=s?0:t,u=a.length-c-l;u<2?n.push(...a):n.push(...a.slice(0,c),bo({kind:`gap`,skipped:u}),...a.slice(a.length-l)),r=i}return n}function Co(e,t,n={}){let r=_o(e),i=_o(t),{ops:a,tooLarge:o}=vo(r,i,n.maxCells??4e6),s=a.filter(e=>e.t===`del`).length,c=a.filter(e=>e.t===`ins`).length;return c===0&&s===0?{changed:!1,rows:[],added:0,removed:0,tooLarge:!1}:{changed:!0,rows:So(xo(r,i,a),n.context??3),added:c,removed:s,tooLarge:o}}var wo=200;function To(e){if(e===``)return``;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}var Eo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Do=e=>e===void 0?`(none)`:Eo(e)?`{…}`:Array.isArray(e)?`[…]`:JSON.stringify(e);function Oo(e,t){let n=[],r=(e,t,i)=>{if(!(n.length>=wo||e===t)){if(Eo(e)&&Eo(t))for(let n of new Set([...Object.keys(e),...Object.keys(t)]))r(e[n],t[n],i===``?n:`${i}.${n}`);else if(Array.isArray(e)&&Array.isArray(t))for(let n=0;n<Math.max(e.length,t.length);n++)r(e[n],t[n],`${i}[${n}]`);else n.push({what:i,before:Do(e),after:Do(t)})}};return r(e,t,``),n}function ko(e){try{return JSON.parse(e)}catch{return}}function Ao(e,t){return e.rows.map(n=>{let r={id:n.id,title:n.label,sub:n.id};if(n.blocked!==void 0)return{...r,blocked:n.blocked,before:``,after:``,fields:[]};if(e.kind===`remove`||e.kind===`delete`){let t=n.entity??e.entity,i=r=>JSON.stringify(e.kind===`remove`?{id:n.id,name:n.label,table:t,solution:e.solution?.uniqueName??``,componentType:n.componentType??null,inSolution:r}:{id:n.id,name:n.label,table:t,exists:r},null,2);return{...r,before:i(!0),after:e.kind===`remove`?i(!1):``,fields:[{what:e.kind===`remove`?`solution membership`:`row`,before:n.oldValue,after:n.newValue}]}}if(e.kind===`connection`){let e=t.references.find(e=>e.reference.id===n.id)?.reference.logicalName??``,i=t=>JSON.stringify({connectionreferenceid:n.id,connectionreferencelogicalname:e,connectionid:t},null,2);return{...r,before:i(n.oldValue),after:i(n.payload),fields:[{what:`connectionid`,before:n.oldValue===``?`(not set)`:n.oldValue,after:n.payload}]}}let i=To(n.expectedCurrent),a=To(n.payload),o=Oo(ko(n.expectedCurrent),ko(n.payload));return{...r,before:i,after:a,fields:o.length>0?o:[{what:`definition`,before:`as stored`,after:`changed`}]}})}var jo=new WeakMap;function Mo(e,t){let n=jo.get(e);return n||(n={items:Ao(e,t),diffs:new Map},jo.set(e,n)),n}function No(e,t){let n=e.diffs.get(t.id);return n||(n=Co(t.before,t.after),e.diffs.set(t.id,n)),n}function Po(e,t,n,r){return t.blocked===void 0?!r||!r.changed?W(`p`,`muted`,`No difference.`):Ci(e.kind===`connection`?`connectionreference`:e.kind===`remove`?`solution membership`:e.kind===`delete`?`row`:`clientdata (formatted)`,r.added,r.removed,Si(r.rows,n),r.tooLarge?`This definition is too large to compare line by line: the changed part is shown as replaced.`:void 0):Y(`warning`,`Not written`,[t.blocked])}function Fo(e,t){let{plan:n,snapshot:r,wizard:i}=e,a=Mo(n,r),o=a.items,s=T(n).length,c=o.reduce((e,t)=>e+t.fields.length,0),l=o.slice(0,i.shown),u=W(`span`,`preview-summary`,[`${s===o.length?o.length:`${s} of ${o.length}`} item${o.length===1?``:`s`}`,`${c} change${c===1?``:`s`}`,...o.length>s?[`${o.length-s} not changed`]:[]].join(` · `)),d=W(`div`,`layout-bar`);d.append(W(`span`,`layout-bar-label`,`Layout`),ni([{key:`split`,label:`Split`},{key:`unified`,label:`Unified`}],i.layout,e=>t.setLayout(e)));let f=W(`div`,`item-list`);for(let e of l){let r=!i.collapsed.includes(e.id),o=e.fields.length,s=r&&e.blocked===void 0?No(a,e):null;f.append(wi({title:e.title,sub:e.sub,countText:e.blocked===void 0?`${o} change${o===1?``:`s`}`:`Blocked`,open:r,onToggle:()=>t.toggle(e.id),body:r?Po(n,e,i.layout,s):document.createDocumentFragment(),blocked:e.blocked!==void 0}))}let p=[];if(s===0&&n.rows.length>0){let e=n.kind===`repoint`?`flow`:n.kind===`connection`?`row`:`item`,t=ne(n),r=t.map(t=>`${t.count} ${e}${t.count===1?``:`s`}: ${t.reason}`);t.some(e=>e.reason.includes(`turned on`))&&r.push(`Apply... lets you allow the tool to turn the flows off for the change; or turn them off yourself and choose again.`);let i=Y(`error`,`No row can be written`,r);i.classList.add(`nothing-written`),p.push(i)}let m=W(`div`,`preview-tabs`);if(m.append(ni([{key:`diff`,label:`Code diff`,icon:`code`},{key:`table`,label:`Table`,icon:`list`}],i.tab,e=>t.setTab(e)),u),i.tab===`diff`&&m.append(d),p.push(m),i.tab===`table`?p.push(hi(Ea(n,r))):p.push(f),i.tab===`diff`&&o.length>l.length){let e=K(`Show ${Math.min(20,o.length-l.length)} more (${o.length-l.length} left)`,`secondary`,t.more);e.prepend(G(`plus`)),p.push(e)}return ga(`preview`,p,[va(`Back`,`secondary`,`arrow-left`,t.back,{title:`Back to the choices: nothing is written`}),_a(),va(`Apply...`,n.kind===`delete`?`danger`:`primary`,`check`,t.apply,{disabled:s===0&&te(n).length===0,title:s===0&&te(n).length===0?`No row can be written`:`Opens the confirmation: nothing is written yet`})])}function Io(e,t){let n=e.wizard,r=ue(e.results),i=de(r,n.refreshFailed),a=Math.max(0,(n.finishedAt??n.now)-n.startedAt),o=mi([{label:`Changed`,value:String(r.changed),icon:`check-circle`,tone:`success`},{label:`Skipped`,value:String(r.skipped),icon:`alert-triangle`,tone:r.skipped>0?`warning`:`success`},{label:`Failed`,value:String(r.failed),icon:`x-circle`,tone:r.failed>0?`error`:`success`},{label:`Duration`,value:D(a),icon:`clock`,tone:`info`}]),s=$r([`Item`,`Outcome`,`Message`],pe(e.results),e=>[W(`span`,`cell-strong`,e.label),ma(e.status),e.stateChange===`back-on`?`${e.message} The flow was turned off for the write and is on again.`:e.message]),c=e.results.filter(e=>e.stateChange===`left-off`),l=c.length===0?null:Y(`error`,`${c.length} flow${c.length===1?` was`:`s were`} left turned off`,[`${c.map(e=>e.label).join(`, `)}: turn ${c.length===1?`it`:`them`} on in the maker portal (Power Automate), then check the connections the message names.`],`power`);l?.classList.add(`left-off`);let u=Y(i.tone,i.title,i.lines);return u.classList.add(`callout--compact`),ga(`result`,[...l?[l]:[],u,o,J(`Rows`,r.total,ei(s),!1,`list`)],[va(`Save report`,`secondary`,`save`,t.saveReport,{title:`A file with the outcome of every row`}),_a(),...t.followUp?[va(`Back to solution`,`secondary`,`arrow-left`,t.back),va(t.followUp.label,`primary`,`layers`,t.followUp.run,{title:`The references that are not used any more can be removed or deleted, with their own preview`})]:[va(`Back to solution`,`primary`,`arrow-left`,t.back)]])}var Lo=(e,t,n)=>`${e} ${e===1?t:n}`,$=e=>e.displayName||e.logicalName;function Ro(e){let t=W(`p`,`cleanup-note`);return t.append(G(`info`,`icon--sm`),W(`span`,``,e)),t}function zo(e,t,n,r,i,a){let o=r.reference,s=W(`div`,`cleanup-row${i?` is-on`:``}${r.blocked?` is-blocked`:``}`),c=Yr(i,`Tick ${$(o)}`,a);r.blocked&&(c.disabled=!0,c.title=r.blocked);let l=W(`span`,`cleanup-text`);l.append(W(`span`,`source-name`,$(o)),W(`span`,`source-logical`,o.logicalName));let u=W(`span`,`cleanup-conn`);u.append(G(`key`,`icon--sm icon--muted`),W(`span`,``,o.connectionId===``?`No connection`:o.connectionId)),l.append(u);let d=W(`span`,`cleanup-tags`);r.neverConnected&&d.append(q(`Never connected`,`info`,`plug`)),r.duplicateOf!==void 0&&d.append(q(`Duplicate of ${r.duplicateOf}`,`warning`,`layers`)),r.blocked&&d.append(q(`Managed`,`neutral`,`lock`)),o.ownerName!==``&&d.append(W(`span`,`cleanup-owner`,o.ownerName));let f=e.dependencies[o.id],p=Va(f),m=e.cleanup.open.includes(o.id);if(p){if(f?.status===`ready`&&Tt(f.report).total>0){let e=W(`button`,`dep-chip-button`);e.type=`button`,e.setAttribute(`aria-expanded`,String(m)),e.setAttribute(`aria-label`,`${m?`Hide`:`Show`} what depends on ${$(o)}`),e.append(p),e.addEventListener(`click`,()=>t.dispatch({type:`toggleCleanupDeps`,id:o.id})),d.append(e)}else d.append(p)}s.append(c,Z(o.connectorId,!1,!0),l,d);let h=W(`div`,`cleanup-item`);if(h.append(s),m&&f?.status===`ready`){let e=W(`div`,`cleanup-deps`);e.append(Ba({state:f,subject:`this reference`,onCheck:()=>void n.checkDependencies([o.id]),name:$(o)})),h.append(e)}return h}function Bo(e,t,n,r){let i=Ke(r,e.cleanup),a=e.cleanup.picked,o=[];if(i.length===0)return[ri(`No unused connection reference in ${r.solution.name}: every one is used by a flow.`,`check-circle`)];let s=qe(r);s>0&&o.push(Y(`warning`,`${Lo(s,`flow`,`flows`)} could not be read`,[`${s===1?`It`:`They`} might use a reference listed here. Check before you delete.`],`alert-triangle`)),o.push(Ro(`No flow of this solution uses these. Something outside it may: Check dependencies reads the whole environment. Remove keeps the row; Delete asks the environment first.`));let c=i.filter(e=>e.blocked===void 0),l=i.map(t=>e.dependencies[t.reference.id]),u=l.filter(e=>e?.status===`loading`).length,d=l.filter(e=>e?.status===`ready`).length,f=a.length>0?[...a]:i.map(e=>e.reference.id),p=f.every(t=>e.dependencies[t]?.status===`ready`),m=a.length>0?`${a.length} ticked`:`all ${i.length}`,h=u>0?`Checking... ${d} of ${d+u}`:p?`Check again (${a.length>0?a.length:`all`})`:`Check dependencies (${m})`,g=c.filter(t=>{let n=e.dependencies[t.reference.id];return n?.status===`ready`&&Tt(n.report).total===0}),_=W(`div`,`cleanup-bar`),v=K(h,`secondary`,()=>void n.checkDependencies(f),!0);if(u>0){let e=W(`span`,`spinner`);e.setAttribute(`aria-hidden`,`true`),v.prepend(e)}else v.prepend(G(p?`refresh`:`search`,`icon--sm`));v.setAttribute(`aria-busy`,String(u>0)),v.title=a.length>0?`Reads what depends on the ticked references, in every solution of the environment`:`Reads what depends on each unused reference, in every solution of the environment. Tick some to check only those`;let y=K(`Select the ones nobody uses`,`secondary`,()=>t.dispatch({type:`setCleanupUnused`,ids:g.map(e=>e.reference.id)}),!0);y.disabled=g.length===0,y.title=g.length===0?`Check the dependencies first: only references with nothing depending on them, anywhere, are selected`:`Ticks only the references with no dependent anywhere in the environment`;let b=W(`span`,`cleanup-count`,`${a.length} of ${c.length} ticked`);b.setAttribute(`aria-live`,`polite`);let x=K(`Select all`,`secondary`,()=>t.dispatch({type:`setCleanupUnused`,ids:c.map(e=>e.reference.id)}),!0);x.disabled=c.length===0||a.length===c.length;let S=K(`Clear`,`secondary`,()=>t.dispatch({type:`setCleanupUnused`,ids:[]}),!0);S.disabled=a.length===0,_.append(v,y,W(`span`,`cleanup-spacer`),b,x,S),o.push(_);let C=i.filter(t=>e.dependencies[t.reference.id]?.status===`ready`);if(u===0&&C.length>0&&!e.cleanup.summaryHidden){let n=C.filter(t=>{let n=e.dependencies[t.reference.id];return n?.status===`ready`&&Tt(n.report).total===0}).length,r=C.length-n,i=r===0?`Checked ${C.length}: nothing depends on ${C.length===1?`it`:`them`} in any solution, agent or app. Safe to remove or delete.`:`Checked ${C.length}: ${r} still ${r===1?`has`:`have`} dependents. Remove keeps the row; Delete refuses ${r===1?`it`:`them`} and names what blocks it.`,a=W(`div`,`cleanup-summary${r===0?` is-ok`:` is-warn`}`);a.setAttribute(`role`,`status`);let s=W(`button`,`icon-btn cleanup-summary-close`);s.type=`button`,s.setAttribute(`aria-label`,`Dismiss the summary`),s.append(G(`close`,`icon--sm`)),s.addEventListener(`click`,()=>t.dispatch({type:`dismissCleanupSummary`})),a.append(G(r===0?`check-circle`:`alert-triangle`,`icon--sm`),W(`span`,`cleanup-summary-text`,i),s),o.push(a)}let w=W(`div`,`cleanup-list`);for(let r of i)w.append(zo(e,t,n,r,a.includes(r.reference.id),()=>t.dispatch({type:`toggleCleanupUnused`,id:r.reference.id})));return o.push(w),o}function Vo(e,t,n,r){let i=Je(n,r,Ge(r,e.cleanup)),a=i.flowIds.length,o=K(a>0?`Merge into ${$(i.keeper)}...`:`Review as unused...`,`primary`,()=>t.startMerge(r.key));return o.prepend(G(a>0?`git-branch`:`minus`)),o.setAttribute(`aria-label`,a>0?`Merge into ${$(i.keeper)}`:`Review the duplicates of ${r.connectionId} as unused`),o.disabled=e.busy,o}function Ho(e,t,n,r,i,a){let o=Ge(i,e.cleanup),s=Je(r,i,o),c=W(`section`,`dup-card`),l=W(`header`,`dup-head`),u=W(`span`,`cleanup-text`);u.append(W(`span`,`source-name`,O(i.connectorId).name));let d=W(`span`,`cleanup-conn`);d.append(G(`key`,`icon--sm icon--muted`),W(`span`,``,i.connectionId)),u.append(d),l.append(Z(i.connectorId,!1,!0),u,q(`${i.members.length} references share it`,`warning`,`layers`));let f=i.members.every(t=>e.dependencies[t.reference.id]?.status===`ready`),p=K(f?`Check again`:`Check dependencies`,`secondary`,()=>void n.checkDependencies(i.members.map(e=>e.reference.id)),!0);p.prepend(G(f?`refresh`:`search`,`icon--sm`)),p.setAttribute(`aria-label`,`Check the dependencies of the references that share ${i.connectionId}`),p.setAttribute(`aria-busy`,String(i.members.some(t=>e.dependencies[t.reference.id]?.status===`loading`))),l.append(p),c.append(l);let m=W(`div`,`dup-members`);m.setAttribute(`role`,`radiogroup`),m.setAttribute(`aria-label`,`Reference to keep for ${i.connectionId}`);for(let n of i.members){let r=n.reference.id===o,a=W(`button`,r?`choice choice--compact is-on`:`choice choice--compact`);a.type=`button`,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(r)),a.setAttribute(`aria-label`,`Keep ${$(n.reference)}`);let s=W(`span`,`choice-text`);s.append(W(`span`,`choice-name`,$(n.reference)),W(`span`,`choice-line`,n.reference.logicalName),W(`span`,`choice-line`,n.flowIds.length===0?`No flow of this solution uses it`:`Used by ${Lo(n.flowIds.length,`flow`,`flows`)}: ${n.flows.slice(0,3).join(`, `)}${n.flows.length>3?` and ${n.flows.length-3} more`:``}`));let c=W(`span`,`cleanup-tags`);n.reference.id===i.suggestedKeeper&&c.append(q(`Suggested`,`info`,`check`)),c.append(r?q(`Keep`,`success`,`check-circle`):q(`Merged into it`,`neutral`,`arrow-right`));let l=Va(e.dependencies[n.reference.id]);l&&c.append(l),n.reference.managed&&c.append(q(`Managed`,`neutral`,`lock`)),a.append(W(`span`,`choice-mark`),s,c),a.addEventListener(`click`,()=>t.dispatch({type:`setKeeper`,group:i.key,id:n.reference.id})),m.append(a)}c.append(m);let h=s.flowIds.length,g=s.duplicates.filter(e=>e.managed).length,_=W(`p`,`dup-effect`);if(_.append(G(h>0?`git-branch`:`check-circle`,`icon--sm icon--primary`),W(`span`,``,h>0?`${Lo(h,`flow`,`flows`)} will be re-pointed to ${$(s.keeper)}. Then ${Lo(s.duplicates.length,`duplicate becomes`,`duplicates become`)} unused and can be removed or deleted, with its own preview and confirmation.`:`No flow uses the other ${Lo(s.duplicates.length,`reference`,`references`)}: ${s.duplicates.length===1?`it is`:`they are`} already unused and can be removed or deleted.`)),c.append(_),g>0&&c.append(Ro(`${Lo(g,`managed reference`,`managed references`)} cannot be removed; the flows are re-pointed away from ${g===1?`it`:`them`} all the same.`)),!a){let t=W(`footer`,`dup-foot`);t.append(Vo(e,n,r,i)),c.append(t)}return c}function Uo(e,t,n,r){let i=We(r);if(i.length===0)return[ri(`No duplicates: no two references of this solution hold the same connection of the same connector.`,`check-circle`)];let a=[Ro(`Duplicates hold the same connection of the same connector, so one of them is enough. Choose the one to keep: the flows of the others are re-pointed to it (a Preview first), and then the others can be taken away.`)];for(let o of i)a.push(Ho(e,t,n,r,o,i.length===1));return a}function Wo(e,t,n,r){let i=e.snapshot,a=e.cleanup,o=Ye(i),s=()=>t.dispatch({type:`closeCleanup`}),c=mi([{label:`Unused`,value:String(o.unused),icon:`minus`,tone:o.unused>0?`warning`:`success`},{label:`Duplicate groups`,value:String(o.groups),icon:`layers`,tone:o.groups>0?`warning`:`success`},{label:`Flows to re-point`,value:String(o.flows),icon:`workflow`,tone:`info`}]),l=ni([{key:`unused`,label:`Unused`,count:o.unused,icon:`minus`},{key:`duplicates`,label:`Duplicates`,count:o.groups,icon:`layers`}],a.tab,e=>t.dispatch({type:`setCleanupTab`,tab:e})),u=W(`div`,`cleanup-content`);u.dataset.tab=a.tab,u.append(...a.tab===`unused`?Bo(e,t,n,i):Uo(e,t,n,i));let d=W(`span`,``);d.append(q(r===``?`Environment`:r,`info`,`database`),` in ${i.solution.name}`);let f=_i({tone:`primary`,icon:`layers`,title:`Clean up connection references`,subtitle:d,body:[c,l,u],confirm:{label:`Remove from solution...`,onConfirm:()=>void 0},cancelLabel:`Close`,onCancel:s}),p=f.querySelector(`.modal`);p.classList.add(`studio-dialog`,`cleanup-dialog`),f.classList.add(`studio-overlay`),Ca(f,e.dialogExpanded,e=>t.dispatch({type:`setDialogExpanded`,on:e}));let m=p.querySelector(`.modal-actions`),h=K(`Close`,`secondary`,s);if(m.replaceChildren(h),a.tab===`unused`){let t=a.picked.length===0||e.busy,r=K(`Remove from solution...`,`secondary`,()=>void n.cleanupRemove());r.prepend(G(`minus`)),r.disabled=t,r.title=`Takes the ticked rows out of this solution; they stay in the environment`;let i=K(`Delete...`,`danger`,()=>void n.cleanupDelete());i.prepend(G(`trash`)),i.disabled=t,i.title=`Deletes the ticked rows from the environment, after checking what depends on them`,m.append(r,i)}else{let t=We(i);t.length===1&&m.append(Vo(e,n,i,t[0]))}let g=p.querySelector(`.cleanup-row .check:not(:disabled), .dup-card .choice, .segment`);return(g??h).dataset.autofocus=`true`,f}function Go(e){return e.busy||Object.values(e.dependencies).some(e=>e.status===`loading`)||e.newReference?.saving===!0||e.newReference?.live.status===`loading`||e.wizard!==null&&e.wizard.step===`apply`||e.connections.list.status===`loading`||Object.values(e.connections.deps).some(e=>e.status===`loading`)||e.connections.checkAll!==null||e.connections.deletion?.step===`apply`}var Ko=(e,t)=>e!==``&&t.trim()===e;function qo(e,t){let n=Ko(e.code,e.typed),r=W(`section`,n?`removal-gate is-open`:`removal-gate`),i=W(`div`,`removal-gate-head`);i.append(G(n?`check-circle`:`lock`),W(`strong`,``,n?`Delete unlocked`:`Copy the code and paste it to unlock Delete`));let a=W(`div`,`removal-gate-row`),o=W(`code`,`removal-code`,e.code),s=K(`Copy code`,`secondary`,()=>{try{navigator.clipboard.writeText(e.code).catch(()=>void 0)}catch{}},!0);s.prepend(G(`copy`,`icon--sm`));let c=W(`input`,`text-input removal-input`);return c.type=`text`,c.value=e.typed,c.placeholder=`Paste the code here`,c.autocomplete=`off`,c.spellcheck=!1,c.setAttribute(`aria-label`,`Confirmation code`),c.setAttribute(`aria-invalid`,String(e.typed!==``&&!n)),c.addEventListener(`input`,()=>t.setTyped(c.value)),a.append(o,s,c),r.append(i,a,W(`p`,`removal-gate-hint`,`The code changes every time this dialog is opened. It exists so that a delete is never one click away.`)),r}function Jo(e,t){let{plan:n}=e,r=n.kind===`delete`,i=T(n),a=n.rows.length-i.length,o=e.environment||`the connected environment`,s=i.filter(t=>e.snapshot.flows.some(e=>e.flow.id===t.id)).length,c=i.length-s,l=[s>0?`${s} flow${s===1?``:`s`}`:``,c>0?`${c} connection reference${c===1?``:`s`}`:``].filter(e=>e!==``).join(` and `)||`rows`,u=i.filter(e=>e.turnOff===!0).length,d=W(`span`,`modal-env`);d.append(`Environment`,ui(o,`connected`));let f=[],p=W(`p`,r?`removal-lead removal-lead--delete`:`removal-lead`);p.append(G(r?`alert-triangle`:`info`),r?`Permanent: the rows are removed from the environment and from every solution that holds them. The connection behind a reference is not deleted.`:`The rows leave this solution only: they stay in the environment and in any other solution.`),f.push(p,hi(Ea(n,e.snapshot))),a>0&&r&&f.push(Y(`warning`,`${a} blocked`,[`What still depends on a row, or could not be checked, is never deleted: re-point or remove it first.`],`shield`)),r&&f.push(ka(e.backupSaved,t.saveBackup,n.kind)),r&&i.length>0&&f.push(qo(e,t));let m=W(`div`,`ack`),h=r?`I understand that ${l} will be permanently deleted from ${o}.`:`I understand that ${l} will leave this solution in ${o}.`;m.append(ii(e.ack,`I understand`,()=>t.setAck(!e.ack)),W(`span`,``,h));let g=m;if(u>0&&t.setStateAck){let n=W(`div`,`ack`);n.append(ii(e.stateAck===!0,`I understand the flows are turned off`,()=>t.setStateAck(!e.stateAck)),W(`span`,``,`I understand that ${u} flow${u===1?` is`:`s are`} turned off before ${u===1?`it is`:`they are`} deleted.`)),g=W(`div`,`ack-stack`),g.append(m,n)}let _=i.length===0||!e.ack||u>0&&e.stateAck!==!0||r&&!Ko(e.code,e.typed),v=_i({tone:r?`error`:`primary`,icon:r?`trash`:`minus`,title:r?`Delete ${l} permanently`:`Remove ${l} from this solution`,subtitle:d,body:f,footNote:g,confirm:{label:r?`Delete ${i.length} row${i.length===1?``:`s`}`:`Remove ${i.length} row${i.length===1?``:`s`}`,icon:r?`trash`:`check`,danger:r,disabled:_,onConfirm:t.confirm},onCancel:t.cancel});return v.classList.add(`confirm-overlay`,`removal-overlay`),v.querySelector(`.modal`).classList.add(`confirm-dialog`,`removal-dialog`),v}var Yo={instant:`success`,automated:`info`,scheduled:`warning`,unknown:`neutral`},Xo={instant:`pointer`,automated:`zap`,scheduled:`clock`,unknown:`info`},Zo={0:`Off`,1:`On`,2:`Suspended`};function Qo(e){let t=q(c[e],Yo[e],Xo[e]);return t.title={instant:`Starts manually (a button, an app or a request).`,automated:`Starts when an event happens.`,scheduled:`Starts on a schedule.`,unknown:`The definition has no trigger that can be read.`}[e],t}function $o(e){return q(Zo[e]??String(e),e===1?`success`:e===2?`warning`:`neutral`,e===2?`pause`:`power`)}function es(e){let t=e.info;if(t.triggerName===``)return``;let n=[t.triggerType,t.triggerKind].filter(e=>e!==``).join(`, `);return`${t.triggerOperation||t.triggerName}${n?` (${n})`:``}`}function ts(e){let t=W(`div`,`detail`);if(t.append(J(`Flow`,void 0,fi([{label:`Type`,value:Qo(e.info.type),icon:`tag`},{label:`State`,value:$o(e.flow.stateCode),icon:`power`},{label:`Trigger`,value:es(e),icon:`zap`},{label:`Actions`,value:e.unreadable?``:String(e.info.actionCount),icon:`list`},{label:`Owner`,value:e.flow.ownerName||(e.flow.ownerId===``?``:`Unknown`),icon:`user`},{label:`Created`,value:ca(e.flow.createdOn),icon:`calendar`},{label:`Modified`,value:ca(e.flow.modifiedOn),icon:`clock`},{label:`Flow ID`,value:e.flow.id,mono:!0,icon:`hash`},{label:`Description`,value:e.flow.description,wide:!0,icon:`file-text`}]),!0,`workflow`)),e.unreadable)return t.append(J(`Connections`,void 0,W(`p`,`muted`,`The flow definition could not be read, so its connections are not shown.`),!0,`link`)),t;if(e.uses.length===0)return t.append(J(`Connections`,0,W(`p`,`muted`,`This flow does not use any connection reference.`),!0,`link`)),t;let n=e.uses.some(e=>e.flags.length>0),r=$r(n?[`Reference`,`Connector`,`Connection`,`Needs attention`]:[`Reference`,`Connector`,`Connection`],e.uses,e=>{let t=[da(e.reference,e.logicalName),e.reference?ua(e.reference.connectorId,e.reference.customConnectorId!==``):W(`span`,`muted`,`Unknown`),e.reference?la(e.reference.connectionId):q(`Missing`,`error`,`x-circle`)];return n?[...t,pa(e.flags)]:t});return r.classList.add(`inner-table`),t.append(J(`Connections`,e.uses.length,ei(r),!1,`link`)),t}function ns(e,t,n){let r=e.reference,i=W(`div`,`detail`);i.append(J(`Connection reference`,void 0,fi([{label:`Display name`,value:r.displayName,icon:`tag`},{label:`Logical name`,value:r.logicalName,mono:!0,icon:`code`},{label:`Connector`,value:ua(r.connectorId,r.customConnectorId!==``),icon:`plug`},{label:`Owner of the reference`,value:r.ownerName||(r.ownerId===``?``:`Unknown`),icon:`user`},{label:`Connection ID`,value:r.connectionId===``?q(`No connection`,`warning`,`alert-triangle`):r.connectionId,mono:r.connectionId!==``,icon:`link`},{label:`Reference ID`,value:r.id,mono:!0,icon:`hash`},{label:`Connector ID`,value:r.connectorId,mono:!0,icon:`hash`},{label:`Custom connector ID`,value:r.customConnectorId,mono:!0,icon:`code`}]),!0,`plug`));let a=t.filter(t=>e.flowIds.includes(t.flow.id));if(a.length===0)i.append(J(`Used by`,0,W(`p`,`muted`,`No flow of this solution uses this reference.`),!0,`workflow`));else{let e=$r([`Flow`,`Type`,`State`],a,e=>[W(`span`,`cell-strong`,e.flow.name),Qo(e.info.type),$o(e.flow.stateCode)]);e.classList.add(`inner-table`),i.append(J(`Used by`,a.length,ei(e),!1,`workflow`))}if(n){let e=n.state?.status===`ready`?Tt(n.state.report).total:void 0;i.append(J(`Dependencies in the whole environment`,e,Ba({state:n.state,subject:`this reference`,onCheck:n.onCheck,name:r.displayName||r.logicalName}),!0,`layers`))}return i}var rs=!1;function is(){rs||typeof document>`u`||(rs=!0,document.addEventListener(`click`,e=>{for(let t of document.querySelectorAll(`.cm-picker-list:not([hidden])`))t.parentElement?.contains(e.target)||as(t)}))}function as(e){e.hidden=!0,e.parentElement?.querySelector(`.cm-picker-btn`)?.setAttribute(`aria-expanded`,`false`)}function os(e,t,n,r){is();let i=W(`div`,`cm-picker`),a=e.find(e=>e.key===n),o=W(`button`,`cm-picker-btn`);o.type=`button`,o.setAttribute(`aria-haspopup`,`listbox`),o.setAttribute(`aria-expanded`,`false`),o.setAttribute(`aria-label`,`Connector`);let s=a?Z(`shared_${a.key}`,!1,!0):(()=>{let e=W(`span`,`conn-tile conn-tile--muted conn-tile--sm`);return e.append(G(`layers`)),e})();o.append(s,W(`span`,`cm-picker-label`,a?a.name:`All connectors`),G(`chevron-down`,`icon--sm cm-picker-chevron`));let c=W(`div`,`cm-picker-list`);c.setAttribute(`role`,`listbox`),c.setAttribute(`aria-label`,`Connectors`),c.hidden=!0;let l=(e,t,i,a)=>{let o=W(`button`,e===n?`cm-picker-opt is-on`:`cm-picker-opt`);return o.type=`button`,o.setAttribute(`role`,`option`),o.setAttribute(`aria-selected`,String(e===n)),o.dataset.key=e,o.append(a,W(`span`,`cm-picker-name`,t),W(`span`,`cm-picker-count`,String(i))),o.addEventListener(`click`,()=>{as(c),r(e)}),o},u=W(`span`,`conn-tile conn-tile--muted conn-tile--sm`);u.append(G(`layers`)),c.append(l(``,`All connectors`,t,u));for(let t of e)c.append(l(t.key,t.name,t.count,Z(`shared_${t.key}`,!1,!0)));return o.addEventListener(`click`,()=>{let e=c.hidden;for(let e of document.querySelectorAll(`.cm-picker-list:not([hidden])`))as(e);c.hidden=!e,o.setAttribute(`aria-expanded`,String(e)),e&&(c.querySelector(`.is-on`)??c.firstElementChild)?.dispatchEvent(new Event(`focus`))}),i.addEventListener(`keydown`,e=>{let t=e.key,n=[...c.querySelectorAll(`.cm-picker-opt`)];if(t===`Escape`&&!c.hidden)as(c),o.focus();else if((t===`ArrowDown`||t===`ArrowUp`)&&n.length>0){e.preventDefault(),c.hidden&&(c.hidden=!1,o.setAttribute(`aria-expanded`,`true`));let r=n.indexOf(document.activeElement);n[Math.max(0,Math.min(n.length-1,r+(t===`ArrowDown`?1:-1)))].focus()}}),i.append(o,c),i}function ss(e,t,n,r,i,a,o){let s=W(`section`,r?`cm-del-step is-done`:`cm-del-step`),c=W(`div`,`cm-del-step-head`),l=W(`span`,`cm-del-num`);r?l.append(G(`check`,`icon--sm`)):l.append(String(e));let u=W(`div`,`cm-del-step-text`);if(u.append(W(`strong`,``,t),W(`span`,`cm-del-step-hint`,n)),c.append(l,u,W(`span`,`cm-del-state`,i)),a&&c.append(a),s.append(c),o.length>0){let e=W(`div`,`cm-del-step-body`);e.append(...o),s.append(e)}return s}function cs(e,t,n){let r=Ko(e,t),i=W(`div`,`removal-gate-row`),a=W(`code`,`removal-code`,e),o=K(`Copy code`,`secondary`,()=>{try{navigator.clipboard.writeText(e).catch(()=>void 0)}catch{}},!0);o.prepend(G(`copy`,`icon--sm`));let s=W(`input`,`text-input removal-input`);return s.type=`text`,s.value=t,s.placeholder=`Paste the code here`,s.autocomplete=`off`,s.spellcheck=!1,s.setAttribute(`aria-label`,`Confirmation code`),s.setAttribute(`aria-invalid`,String(t!==``&&!r)),s.addEventListener(`input`,()=>n.dispatch({type:`cmDeletionTyped`,text:s.value})),i.append(a,o,s),i}function ls(e,t){let n=W(`section`,`run-panel`),r=e.live.length,i=gr(r,e.total,e.current?.step??null),a=Math.max(0,e.now-e.startedAt),o=W(`div`,`run-hero`),s=W(`div`,`run-ring is-moving`);s.style.setProperty(`--p`,String(i)),s.setAttribute(`role`,`progressbar`),s.setAttribute(`aria-label`,`Progress of the deletion`),s.setAttribute(`aria-valuemin`,`0`),s.setAttribute(`aria-valuemax`,`100`),s.setAttribute(`aria-valuenow`,String(i)),s.append(W(`span`,`run-percent`,`${i}%`));let c=W(`div`,`run-titles`),l=W(`div`,`run-headline-row`);l.append(W(`h3`,`run-headline`,`Deleting the connections`));let u=e.current?hr.find(t=>t.key===e.current.step).doing:`Starting`,d=r>0&&r<e.total?` - about ${D(a/r*(e.total-r))} left`:``,f=W(`p`,`run-now`,`Connection ${Math.min(r+1,Math.max(e.total,1))} of ${e.total}: ${u}`);f.setAttribute(`role`,`status`),f.setAttribute(`aria-live`,`polite`),c.append(l,f,W(`p`,`run-sub`,`Time elapsed ${D(a)}${d}`),W(`p`,`run-sub`,`Deleting in ${t}. Do not close this tool until it finishes.`));let p=W(`div`,`run-phases`),m=e.current?hr.findIndex(t=>t.key===e.current.step):-1,h=hr.map((t,n)=>({label:t.label,state:e.current===null?`pending`:n<m?`done`:n===m?`active`:`pending`}));p.append(yi(h,e.current?e.current.label:`\xA0`));let g=W(`div`,`run-counters`),_=(t,n)=>{let r=W(`span`,`run-count run-count--${t}`);return r.append(W(`b`,``,String(e.live.filter(e=>e.status===t).length)),W(`span`,``,n)),r};g.append(_(`done`,`deleted`),_(`skipped`,`skipped`),_(`failed`,`failed`)),o.append(s,c,p,g);let v=W(`div`,`cm-runlog`);v.setAttribute(`role`,`log`),v.setAttribute(`aria-label`,`What is being done`);for(let t of e.log){let e=W(`div`,`cm-runlog-line cm-runlog-line--${t.tone}`);e.append(W(`span`,`cm-runlog-time`,D(t.at)),W(`span`,`cm-runlog-text`,t.text)),v.append(e)}return n.append(o,W(`div`,`run-rows-head cm-runlog-head`,`Log`),v),queueMicrotask(()=>{v.scrollTop=v.scrollHeight}),n}function us(e,t,n,r,i){let a=W(`ul`,`cm-portal-list`);for(let o of t){let t=e.portalChecked.includes(o.name),s=W(`li`,`cm-portal-item`),c=W(`button`,t?`cm-portal-pick is-on`:`cm-portal-pick`);c.type=`button`,c.setAttribute(`role`,`checkbox`),c.setAttribute(`aria-checked`,String(t)),c.setAttribute(`aria-label`,`Confirmed in the portal: ${o.label}`),c.addEventListener(`click`,()=>n.dispatch({type:`cmDeletionPortal`,name:o.name,on:!t}));let l=W(`span`,`cm-portal-box`);t&&l.append(G(`check`,`icon--sm`));let u=[`${o.connector===``?o.connectorKey:o.connector}`,`#${sr(o.name)}`,i(o.connectorKey)].filter(e=>e!==void 0&&e!==``),d=W(`span`,`cm-portal-text`);d.append(W(`span`,`cm-portal-name`,o.label),W(`span`,`cm-portal-hint`,u.join(` - `))),c.append(l,d);let f=K(`Copy address`,`secondary`,()=>void r.copyAddress(o.name),!0);f.prepend(G(`copy`,`icon--sm`)),f.setAttribute(`aria-label`,`Copy the portal address of ${o.label}`),s.append(c,W(`span`,`cm-portal-state`,t?`Confirmed`:`To confirm`),f),a.append(s)}return a}function ds(e,t,n,r){let i=e.connections.deletion,a=i.plan,o=z(a),s=a.rows.length-o.length,c=`${o.length} connection${o.length===1?``:`s`}`,l=r||`the connected environment`,u=W(`span`,`modal-env`);u.append(`Environment`,ui(l,`connected`));let d=[],f=`Delete ${c} permanently`,p,m=!0,h=`Delete ${c}`;if(i.step===`preview`){let r=W(`section`,`cm-del-summary`);r.append(G(`alert-triangle`));let a=W(`div`,`cm-del-summary-text`);a.append(W(`strong`,``,`${c} will be permanently removed from ${l}`),W(`span`,``,`A connection reference that holds one will show it as missing. This cannot be undone.`)),r.append(a),d.push(r),s>0&&d.push(W(`p`,`cm-del-blocked`,`${s} more ${s===1?`connection is`:`connections are`} blocked and will not be deleted: something still depends on ${s===1?`it`:`them`}, or ${s===1?`it`:`they`} could not be checked.`));let u=W(`section`,`cm-del-block`);u.append(W(`h4`,`cm-del-title`,`Connections to delete ${o.length}`));let f=W(`ul`,`cm-del-list`);for(let e of o){let t=W(`li`,`cm-del-item`);t.append(Z(`shared_${e.connectorKey}`,!1,!0));let n=W(`span`,`cm-del-item-text`);n.append(W(`span`,`cm-del-item-name`,e.label),W(`span`,`cm-del-item-sub`,[e.connector===``?e.connectorKey:e.connector,e.creator,`#${sr(e.name)}`].filter(e=>e!==``).join(` - `))),t.append(n),f.append(t)}u.append(f),d.push(u);let h=W(`section`,`cm-del-block`);h.append(W(`h4`,`cm-del-title`,`Before you delete`));let g=K(i.backupSaved?`Save again`:`Save backup`,`secondary`,()=>void n.saveBackup(),!0);g.prepend(G(`save`,`icon--sm`));let _=o.filter(e=>i.portalChecked.includes(e.name)).length,v=Ko(i.code,i.typedCode),y=o.length>0&&_===o.length,b=K(y?`Clear all`:`Select all`,`secondary`,()=>t.dispatch({type:`cmDeletionPortalAll`,on:!y}),!0);b.prepend(G(y?`x-circle`:`check-circle`,`icon--sm`)),b.title=y?`Remove every confirmation`:`Confirm every connection of the list in one go, once you have looked at each one in the portal`,h.append(ss(1,`Save a backup`,`The records (name, connector, display name, creator name, time, status) go to a file you choose: no secret, no email. It is the only copy.`,i.backupSaved,i.backupSaved?`Saved`:`Recommended`,g,[]),ss(2,`Confirm each one in the Maker portal`,`The tool cannot see flows that are outside any solution. Copy the address, open the connection, look at Flows using this connection and Apps using this connection, then tick it.`,o.length>0&&_===o.length,`${_} of ${o.length}`,o.length>1?b:void 0,o.length>0?[us(i,o,t,n,t=>kr(e.connections.usage.map,t))]:[]),ss(3,`Paste the code to unlock Delete`,`The code changes every time this dialog is opened, so a delete is never one click away.`,v,v?`Unlocked`:`Required`,void 0,o.length>0?[cs(i.code,i.typedCode,t)]:[])),d.push(h);let x=W(`div`,`ack`);x.append(ii(i.ack,`I understand`,()=>t.dispatch({type:`cmDeletionAck`,on:!i.ack})),W(`span`,``,`I understand that ${c} will be permanently deleted from ${l}.`)),p=x,m=o.length===0||!i.ack||!v||!o.every(e=>i.portalChecked.includes(e.name))}else if(i.step===`apply`)f=`Deleting connections`,d.push(ls(i,l));else{f=`Result`;let e=i.results??[],t=ue(e),n=de(t,i.refreshFailed),r=Y(n.tone,n.title,n.lines);r.classList.add(`callout--compact`),d.push(r,mi([{label:`Deleted`,value:String(t.changed),icon:`check-circle`,tone:`success`},{label:`Skipped`,value:String(t.skipped),icon:`alert-triangle`,tone:t.skipped>0?`warning`:`success`},{label:`Failed`,value:String(t.failed),icon:`x-circle`,tone:t.failed>0?`error`:`success`},{label:`Duration`,value:D(Math.max(0,i.now-i.startedAt)),icon:`clock`,tone:`info`}]),J(`Rows`,t.total,ei($r([`Connection`,`Outcome`,`Message`],e,e=>[W(`span`,`cell-strong`,e.label),ma(e.status),e.message])),!1,`list`))}let g=_i({tone:i.step===`result`?`primary`:`error`,icon:`trash`,title:f,subtitle:u,body:d,...p?{footNote:p}:{},confirm:{label:h,icon:`trash`,danger:!0,disabled:m,onConfirm:()=>n.confirmDeletion()},cancelLabel:`Cancel`,onCancel:()=>n.closeDeletion()});g.classList.add(`confirm-overlay`,`removal-overlay`,`cm-deletion`),g.querySelector(`.modal`).classList.add(`confirm-dialog`,`removal-dialog`);let _=g.querySelector(`.modal-actions`);if(i.step===`apply`&&(_.replaceChildren(),g.querySelector(`.modal-close`)?.remove()),i.step===`result`){let e=K(`Save report`,`secondary`,()=>void n.saveReport());e.prepend(G(`save`));let t=K(`Close`,`primary`,()=>n.closeDeletion());t.dataset.autofocus=`true`,_.replaceChildren(e,t)}return g}var fs=1800,ps=2,ms=`http://www.w3.org/2000/svg`,hs=[[4.5,6,2.5],[4.5,18,2.5],[19.5,12,2.5]],gs=[`M7 6.5C12 6.5 13.5 8.5 17.2 10.6`,`M7 17.5C12 17.5 13.5 15.5 17.2 13.4`];function _s(e,t){let n=document.createElementNS(ms,e);for(let[e,r]of Object.entries(t))n.setAttribute(e,r);return n}function vs(){let e=_s(`svg`,{viewBox:`0 0 24 24`,class:`logo-loader-svg`,"aria-hidden":`true`,focusable:`false`});for(let t of gs)e.append(_s(`path`,{d:t,class:`logo-loader-flow`}));return hs.forEach(([t,n,r],i)=>{let a=_s(`circle`,{cx:String(t),cy:String(n),r:String(r),class:`logo-loader-node`});a.setAttribute(`style`,`--n:${i}`),e.append(a)}),e}function ys(){return typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches}var bs=null;function xs(){bs=null}function Ss(e,t=performance.now(),n=ys()){let r=n?fs*ps:fs;bs??=t;let i=t-bs,a=W(`div`,`logo-loader`);a.setAttribute(`role`,`status`),a.setAttribute(`aria-live`,`polite`),a.setAttribute(`aria-busy`,`true`),a.style.setProperty(`--loader-period`,`${r}ms`),a.style.setProperty(`--loader-phase`,`${-(t%r)}ms`),i<200&&(a.classList.add(`logo-loader--new`),a.style.setProperty(`--loader-appear`,`${200-i}ms`));let o=W(`div`,`logo-loader-mark`);return o.append(W(`span`,`logo-loader-halo`),vs()),o.firstElementChild.setAttribute(`aria-hidden`,`true`),a.append(o,W(`p`,`logo-loader-text`,e)),a}function Cs(e,t){let n=W(`div`,`area-switch`);n.setAttribute(`role`,`group`),n.setAttribute(`aria-label`,`Area`);let r=Go(e);for(let[i,a,o]of[[`solutions`,`Solutions`,`stack`],[`connections`,`Connections`,`plug`]]){let s=W(`button`,e.area===i?`area-tab is-active`:`area-tab`);s.type=`button`,e.area===i&&s.setAttribute(`aria-current`,`page`),s.append(G(o,`icon--sm`),a),r&&(s.title=`The tool is still reading: this tab is available when it ends.`),s.addEventListener(`click`,()=>t(i)),n.append(s)}return n}var ws={connected:()=>q(Jn.connected,`success`,`check-circle`),reconnect:()=>q(Jn.reconnect,`warning`,`alert-triangle`),error:()=>q(Jn.error,`error`,`x-circle`),unknown:()=>q(Jn.unknown,`neutral`,`info`)},Ts={app:`layout`,flow:`workflow`,reference:`link`,agent:`bot`,other:`layers`},Es=`These are the connections you can see, without the ones that belong to a flow (they are removed with their flow). Something that you cannot read may still use one of them: No dependency found never means unused.`;function Ds(){let e=W(`span`,`spinner`);return e.setAttribute(`aria-hidden`,`true`),e}function Os(e,t=`info`){let n=W(`p`,`dep-note${t===`warn`?` dep-note--warn`:t===`error`?` dep-note--error`:``}`);return n.append(G(t===`warn`?`alert-triangle`:t===`error`?`x-circle`:`info`,`icon--sm`),W(`span`,``,e)),n}function ks(e){let t=W(`li`,`dep-row`),n=W(`div`,`dep-row-head`),r=W(`span`,`dep-title`);r.append(G(Ts[e.kind],`icon--sm icon--muted`),W(`span`,`dep-name`,e.name));let i=W(`span`,`dep-tags`);e.state!==``&&i.append(q(e.state,e.state===`On`?`success`:e.state===`Suspended`?`warning`:`neutral`,e.state===`Suspended`?`pause`:`power`)),n.append(r,i),t.append(n);let a=[];return e.via!==``&&a.push(`Through the reference ${e.via}`),e.ownerName!==``&&a.push(`Owner: ${e.ownerName}`),e.solutions.length>0&&a.push(`In ${e.solutions.length===1?`solution`:`solutions`}: ${e.solutions.join(`, `)}`),a.length>0&&t.append(W(`div`,`dep-facts`,a.join(` - `))),t}function As(e,t,n,r){let i=W(`div`,`dep-block cm-deps`),a=W(`div`,`dep-summary cm-verdict cm-verdict--${t.verdict}`),o=t.verdict===`in-use`&&Wn(t)?`Only ${t.dependents.length===1?`a connection reference holds`:`connection references hold`} this connection: no flow, app or agent was found using ${t.dependents.length===1?`it`:`them`}.`:t.verdict===`in-use`?`${t.dependents.length} ${t.dependents.length===1?`thing depends`:`things depend`} on this connection.`:t.verdict===`none-found`?`No dependency found.`:`Could not be checked: a source could not be read, so nothing can be said.`;a.append(G(t.verdict===`in-use`?`info`:t.verdict===`none-found`?`check-circle`:`alert-triangle`,`icon--sm`),W(`strong`,``,o)),i.append(a),i.append(W(`p`,`dep-source cm-coverage`,Bn(t.sources))),t.verdict===`none-found`&&i.append(Os(`The Maker portal can list flows that this tool cannot see (the records of the flow service). Before deleting a connection, check "Flows using this connection" in the portal.`,`warn`)),r!==void 0&&(t.verdict===`none-found`||t.verdict===`in-use`)&&i.append(Os(r,`info`)),t.verdict===`none-found`||t.verdict===`in-use`&&i.append(Os(`This is what the tool could see. The Maker portal can list more flows (the records of the flow service, and flows of other users), so its list can be longer than this one: use Copy portal address to compare.`,`info`));for(let e of Un(t)){let t=W(`section`,`dep-group`),n=W(`h5`,`dep-group-title`);n.append(G(Ts[e.kind],`icon--sm icon--muted`),`${e.label} `,W(`span`,`dep-count`,String(e.items.length)));let r=W(`ul`,`dep-list`);for(let t of e.items)r.append(ks(t));t.append(n,r),i.append(t)}let s=t.elsewhere??[];if(s.length>0){let e=W(`section`,`dep-group`),t=W(`h5`,`dep-group-title`);t.append(G(`workflow`,`icon--sm icon--muted`),`Same connector, another connection `,W(`span`,`dep-count`,String(s.length)));let n=W(`ul`,`dep-list`);for(let e of s){let t=W(`li`,`dep-row`),r=W(`div`,`dep-row-head`),i=W(`span`,`dep-title`);i.append(G(`workflow`,`icon--sm icon--muted`),W(`span`,`dep-name`,e.name)),r.append(i),t.append(r,W(`div`,`dep-facts`,e.references.map(e=>`${e.name} holds ${sr(e.connection)}`).join(` - `))),n.append(t)}e.append(t,n),i.append(e,Os(`These flows use the same connector but their connection references hold another connection, so they are not counted as using this one. If the Maker portal lists one of them here, the portal may be showing a permission granted earlier (it can also list flows that no longer exist): open the flow there and see which connection it uses now.`,`info`))}for(let e of Gn(t)){let t=e.state;t.status!==`ok`&&i.append(Os(t.status===`failed`?`Could not read the ${In[e.name]}: ${t.reason}`:`Not scanned: ${In[e.name]} (${t.reason})`,`warn`))}let c=W(`div`,`dep-foot`),l=K(`Check again`,`secondary`,()=>void n.checkAgain(e.name),!0);return l.prepend(G(`refresh`,`icon--sm`)),l.setAttribute(`aria-label`,`Check the dependencies of ${e.displayName||e.name} again`),c.append(l),i.append(c),i}function js(e,t,n){let r=e.connections,i=W(`div`,`detail cm-detail`),a=W(`dl`,`cm-facts`),o=(e,t)=>{t!==``&&a.append(W(`dt`,``,e),W(`dd`,``,t))};o(`Connection id`,t.name),o(`Connector`,t.connectorName),o(`Created by`,t.creator.name),o(`Created`,t.createdTime===``?``:ca(t.createdTime)),o(`Last modified`,t.modifiedTime===``?``:ca(t.modifiedTime)),o(`Status`,t.statusDetail===``?Jn[t.status]:`${Jn[t.status]}: ${t.statusDetail}`),i.append(a);let s=r.deps[t.name],c=W(`div`,`cm-dep-body`);if(s===void 0||s.status===`loading`)c.append(La(`Reading what depends on this connection: apps, connection references, flows and agents...`));else if(s.status===`failed`){c.append(Os(`The dependencies could not be read: ${s.error}`,`error`));let e=K(`Try again`,`secondary`,()=>void n.checkAgain(t.name),!0);e.setAttribute(`aria-label`,`Try again to check the dependencies of ${t.displayName||t.name}`),c.append(e)}else c.append(As(t,s.report,n,Ar(r.usage.map,t.connectorKey,t.connectorName)));if(i.append(J(`What depends on it`,s?.status===`ready`?s.report.dependents.length:void 0,c,!0,`layers`)),!Dn.connectionDelete){let e=W(`div`,`cm-portal`),r=K(`Copy portal address`,`secondary`,()=>void n.copyAddress(t.name),!0);r.prepend(G(`copy`,`icon--sm`)),r.setAttribute(`aria-label`,`Copy the Maker portal address of ${t.displayName||t.name}`),e.append(r,W(`span`,`cm-portal-hint`,`Paste it in a browser to open this connection in the Maker portal. Deleting connections is switched off until the route is verified.`)),i.append(e)}return i}function Ms(e,t,n,r){let i=e.connections,a=i.open.includes(n.name),o=n.displayName||n.name,s=W(`div`,`cm-item${a?` is-open`:``}`),c=W(`div`,`cm-row cm-row--${n.status}`),l=Yr(i.selected.includes(n.name),`Select ${o}`,()=>t.dispatch({type:`cmToggle`,name:n.name}));l.classList.add(`cm-check`),$n(n,i.deps)||(l.disabled=!0,l.title=i.deps[n.name]===void 0?`Check the dependencies first: only a connection with no dependency found can be selected.`:fr(n,i.deps)??`It cannot be selected.`);let u=W(`button`,`icon-btn expand-btn cm-chevron`);u.type=`button`,u.setAttribute(`aria-expanded`,String(a)),u.setAttribute(`aria-label`,`${a?`Hide`:`Show`} details of ${o}`),u.append(G(`chevron-down`)),u.addEventListener(`click`,e=>{e.stopPropagation(),r.toggleOpen(n.name)});let d=W(`div`,`cm-cell cm-cell--who`),f=W(`div`,`cm-names`),p=W(`div`,`cm-sub`);p.append(W(`span`,`cm-connector`,n.connectorName===``?``:n.connectorName),W(`span`,`cm-id`,`#${sr(n.name)}`)),p.title=`${n.connectorName===``?``:`${n.connectorName} - `}${n.name}`,f.append(W(`div`,`conn-name`,o),p),d.append(Z(`shared_${n.connectorKey}`),f);let m=W(`div`,`cm-cell cm-cell--status`),h=ws[n.status]();n.statusDetail!==``&&(h.title=n.statusDetail),m.append(h);let g=ur(i.deps,n.name,n),_=W(`div`,`cm-cell cm-cell--dep`);if(g.text===`Not checked`){let e=W(`span`,`cm-unchecked`,g.text);e.title=`Not checked yet: open the row, or use Check all.`,_.append(e)}else{let e=q(g.text,g.tone===`info`?`info`:g.tone===`success`?`success`:g.tone===`warning`?`warning`:`neutral`,g.text.startsWith(`In use`)?`layers`:g.text.startsWith(`Held by`)?`link`:g.text===`No dependency found`?`check-circle`:g.text===`Checking...`?void 0:`alert-triangle`);g.text===`Checking...`&&e.prepend(Ds()),g.title&&(e.title=g.title),_.append(e)}let v=W(`div`,`cm-cell cm-cell--when`),y=W(`span`,`cell-time`,n.modifiedTime===``?`-`:sa(n.modifiedTime));n.modifiedTime!==``&&(y.title=ca(n.modifiedTime)),v.append(y),n.creator.name!==``&&v.append(W(`span`,`cm-creator`,n.creator.name));let b=W(`div`,`cm-cell cm-cell--select`);b.append(l);let x=W(`div`,`cm-cell cm-cell--link`),S=W(`button`,`icon-btn cm-link-btn`);return S.type=`button`,S.setAttribute(`aria-label`,`Copy the portal address of ${o}`),S.title=`Copy the portal address of this connection, to check it in the Maker portal`,S.append(G(`copy`,`icon--sm`)),S.addEventListener(`click`,()=>void r.copyAddress(n.name)),x.append(S),c.append(b,u,d,m,_,v,x),c.addEventListener(`click`,e=>{e.target.closest(`.check, .expand-btn, .cm-link-btn`)||r.toggleOpen(n.name)}),s.append(c),a&&s.append(js(e,n,r)),s}function Ns(e,t){let n=e.connections,r=t.only?n.list.items.filter(e=>t.only.includes(e.name)):n.list.items,i=lr(r,n.deps,t.step),a=er(r,n.deps),o=r.filter(e=>n.deps[e.name]?.status===`failed`).length,s=W(`section`,`cm-pipe run-panel`);s.setAttribute(`aria-label`,`Check all`);let c=W(`div`,`run-hero`),l=t.step===`connections`&&t.total>0?Math.round(t.done/t.total*100):0,u=W(`div`,`run-ring is-moving`);u.style.setProperty(`--p`,String(l)),u.setAttribute(`role`,`progressbar`),u.setAttribute(`aria-label`,`Progress of Check all`),u.setAttribute(`aria-valuemin`,`0`),u.setAttribute(`aria-valuemax`,`100`),u.setAttribute(`aria-valuenow`,String(l)),u.append(W(`span`,`run-percent`,`${l}%`));let d=Math.max(0,t.now-t.startedAt),f=t.done>0?D(d/t.done*(t.total-t.done)):``,p=W(`div`,`run-titles`),m=W(`div`,`run-headline-row`);m.append(W(`h3`,`run-headline`,`Checking the connections`));let h=t.step===`apps`?`Reading the apps of the environment...`:t.step===`references`?`Reading the connection references...`:`Checked ${t.done} of ${t.total}${f===``?``:` - about ${f} left`}`,g=i.connectors.find(e=>e.state===`active`)??i.connectors.find(e=>e.state===`pending`);if(p.append(m,W(`p`,`run-now`,h)),t.step===`connections`&&g){let e=W(`div`,`cm-now-connector`),t=W(`span`,`cm-now-text`);t.append(W(`b`,``,g.name),W(`span`,``,`${g.done} of ${g.total}`)),e.append(Z(`shared_${g.key}`,!1,!0),t),p.append(e)}p.append(W(`p`,`run-sub`,`Time elapsed ${D(d)}. Nothing is changed: this only reads.`));let _=W(`div`,`run-phases`),v=e=>e===`pending`?`pending`:e;_.append(yi([{label:`Apps`,state:v(i.apps)},{label:`Connection references`,state:v(i.references)},{label:`Connections`,state:t.step===`connections`?`active`:`pending`}]));let y=W(`div`,`run-counters`),b=(e,t,n)=>{let r=W(`span`,`run-count run-count--${e}`);return r.append(W(`b`,``,String(t)),W(`span`,``,n)),r};return y.append(b(`done`,a.inUse,`in use`),b(`skipped`,a.noneFound,`no dependency`),b(`failed`,o,`not read`)),c.append(u,p,_,y),s.append(c),s}function Ps(e,t,n,r){let i=e.connections,a=i.sort.key===r,o=W(`button`,a?`cm-sort is-active`:`cm-sort`);return o.type=`button`,o.setAttribute(`aria-label`,`Sort by ${n}${a?`, ${i.sort.dir===`asc`?`ascending`:`descending`}`:``}`),o.append(n),a&&o.append(G(`chevron-down`,`icon--xs cm-sort-arrow${i.sort.dir===`asc`?` is-asc`:``}`)),o.addEventListener(`click`,()=>t.dispatch({type:`cmSort`,key:r})),o}function Fs(e,t,n,r,i){let a=e.connections,o=W(`div`,`screen cm-screen`),s=a.list.items,c=er(s,a.deps),l=t=>(o.append(Cs(e,r),t),o);if((a.list.status===`idle`||a.list.status===`loading`)&&s.length===0)return l(Ss(a.list.read>0?`Reading the connections... ${a.list.read} read so far`:`Reading the connections of the environment...`));if(a.list.status===`failed`&&s.length===0){let e=W(`div`,`cm-failed`);e.append(Os(a.list.error===``?`The connections could not be read.`:a.list.error,`error`));let t=K(`Try again`,`primary`,()=>void n.refresh());return t.prepend(G(`refresh`,`icon--sm`)),e.append(t),l(e)}o.append(Cs(e,r));let u=ar(nr(s,a.deps,a.filter,a.connector,a.search),a.sort),d={all:s.length,broken:nr(s,a.deps,`broken`,a.connector,a.search).length,none:nr(s,a.deps,`none`,a.connector,a.search).length,inuse:nr(s,a.deps,`inuse`,a.connector,a.search).length},f=W(`div`,`toolbar cm-toolbar`);f.append(ni([`all`,`broken`,`none`,`inuse`].map(e=>({key:e,label:qn[e],count:d[e],icon:{all:`layers`,broken:`alert-triangle`,none:`check-circle`,inuse:`link`}[e]})),a.filter,e=>t.dispatch({type:`cmFilter`,filter:e})),ti(a.search,`Search connections...`,e=>t.dispatch({type:`cmSearch`,text:e})));let p=or(s);p.length>1&&f.append(os(p.map(e=>({...e,count:s.filter(t=>t.connectorKey===e.key).length})),s.length,a.connector,e=>t.dispatch({type:`cmConnector`,key:e})));let m=K(`Refresh`,`secondary`,()=>void n.refresh(),!0);m.prepend(a.list.status===`loading`?Ds():G(`refresh`,`icon--sm`)),a.list.status===`loading`&&m.setAttribute(`aria-busy`,`true`),f.append(m),o.append(f),a.list.status===`failed`&&o.append(Os(`${a.list.error} The list below is what was read before.`,`warn`)),a.list.status===`loading`&&o.append(La(`Reading the connections again... ${a.list.read} read so far`));let h=W(`div`,`cm-actions`),g=a.checkAll,_=a.selected.length,v=K(g?`Checking...`:_>0?`Check selected (${_})`:c.checked>0&&c.checked>=c.total?`Check all again`:`Check all`,`primary`,()=>void n.checkAll(_>0?`selected`:void 0));if(v.prepend(g?Ds():G(`search`,`icon--sm`)),g&&v.setAttribute(`aria-busy`,`true`),v.disabled=s.length===0,v.title=_>0?`Reads again what depends on the ticked connections only: the apps, the connection references, the flows and the agents.`:`Reads what depends on every connection: the apps, the connection references, the flows and the agents, four connections at a time.`,h.append(v),g){let e=K(g.cancelled?`Cancelling...`:`Cancel`,`secondary`,()=>n.cancelCheckAll());e.dataset.allowRunning=`true`,e.disabled=g.cancelled,h.append(e)}let y=u.filter(e=>$n(e,a.deps)).length,b=K(`Select the ones with no dependency found`,`secondary`,()=>t.dispatch({type:`cmSelectEligible`}));if(b.prepend(G(`check-circle`,`icon--sm`)),b.disabled=y===0,b.title=y===0?`Nothing to select yet: run Check all, then the connections with no dependency found can be selected.`:`Ticks the ${y} connection${y===1?``:`s`} shown with no dependency found.`,h.append(b),a.selected.length>0){let e=K(`Clear`,`secondary`,()=>t.dispatch({type:`cmClearSelection`}),!0);h.append(W(`span`,`cm-selected`,`${a.selected.length} selected`),e)}else h.append(W(`span`,`cm-selected`,`None selected`));if(Dn.connectionDelete){let e=K(`Delete...`,`danger`,()=>n.openDeletion());e.prepend(G(`trash`)),e.disabled=a.selected.length===0,h.append(e)}let x=W(`span`,`cm-checked`),S=a.selected.filter(e=>a.deps[e]?.status===`ready`||a.deps[e]?.status===`failed`).length;x.append(_>0?`Selected ${_} - checked ${S} of ${_}`:`Checked ${c.checked} of ${c.total}`);let C=W(`span`,`cm-info`);if(C.tabIndex=0,C.title=Es,C.setAttribute(`role`,`note`),C.setAttribute(`aria-label`,Es),C.append(G(`info`,`icon--sm`)),x.append(C),h.append(x),o.append(h),g&&o.append(Ns(e,g)),u.length===0)o.append(ri(s.length===0?`There are no connections that you can see in the connected environment.`:`No connection matches the filter or the search.`,s.length===0?`plug`:`search`));else{let r=W(`div`,`table-wrap cm-list`);r.setAttribute(`role`,`list`);let i=W(`div`,`cm-head`);i.append(W(`span`),W(`span`),Ps(e,t,`Connection`,`name`),Ps(e,t,`Status`,`status`),W(`span`,`cm-head-plain`,`Dependencies`),Ps(e,t,`Modified`,`modified`),W(`span`)),r.append(i);for(let i of u.slice(0,a.shown)){let a=Ms(e,t,i,n);a.setAttribute(`role`,`listitem`),r.append(a)}if(u.length>a.shown){let e=K(`Show more (${u.length-a.shown} left)`,`secondary`,()=>t.dispatch({type:`cmShowMore`}));e.classList.add(`cm-more`),r.append(e)}o.append(r)}return a.deletion&&o.append(ds(e,t,n,i)),o}function Is(e,t){return t===``||e.toLowerCase().includes(t.toLowerCase())}function Ls(e){let t=W(`span`,`cell-strong name-with-icon`);return t.append(G(`stack`,`icon--sm icon--primary`),e),t}var Rs=[`name`,`flows`,`created`];function zs(e,t,n){n===`connections`?t.connections?.open():e.dispatch({type:`setArea`,area:n})}function Bs(e,t,n){let r=W(`div`,`screen`);n.connections&&r.append(Cs(e,e=>zs(t,n,e)));let i=e.solutions.filter(e=>!e.managed),a=e.solutions.length-i.length;r.append(li(`Solutions`,`Unmanaged solutions of the connected environment. Select one to see its flows and connection references.`,[ci(`Solutions`,String(i.length),`stack`),ci(`Flows`,e.flowTotal===null?`-`:String(e.flowTotal),`workflow`,!0)]));let o=W(`div`,`toolbar`),s=K(`Refresh`,`secondary`,n.refresh,!0);s.prepend(G(`refresh`,`icon--sm`)),s.disabled=e.busy,o.append(ni([{key:`unmanaged`,label:`Unmanaged`,count:i.length,icon:`edit`},{key:`managed`,label:`Managed`,count:a,icon:`lock`,disabled:!0,title:`Managed solutions cannot be changed, so they are not offered.`}],`unmanaged`,()=>void 0),ti(e.solutionFilter,`Search solutions...`,e=>t.dispatch({type:`setSolutionFilter`,filter:e})),oi(`Updating...`,e.busy),s),r.append(o);let c=Hi(i.filter(t=>Is(`${t.name} ${t.uniqueName} ${t.publisher}`,e.solutionFilter)),e.flowCounts,e.solutionSort);if(c.length===0)return e.busy&&e.solutions.length===0?(r.append(Ss(`Reading the solutions...`)),r):(r.append(ri(i.length===0?`There are no unmanaged solutions in the connected environment.`:`No solution matches "${e.solutionFilter}".`,i.length===0?`stack`:`search`)),r);let l=Rs.indexOf(e.solutionSort.key);return r.append(ei($r([`Display name`,`Name`,`Flows`,`Created`,`Version`,`Publisher`],c,t=>{let n=W(`span`,`cell-muted cell-time`,sa(t.createdOn));n.title=ca(t.createdOn);let r=e.flowCounts?.[t.id];return[Ls(t.name),W(`span`,`cell-muted`,t.uniqueName),r===void 0?W(`span`,`cell-muted`,`-`):si(r),n,t.version,W(`span`,`cell-muted`,t.publisher)]},{onOpen:e=>n.selectSolution(e.id),sort:{columns:[0,2,3],active:[0,2,3][l]??2,desc:e.solutionSort.desc,onSort:e=>t.dispatch({type:`sortSolutions`,key:{0:`name`,2:`flows`,3:`created`}[e]})},numeric:[2]}))),r}function Vs(e,t){return{selected:e.selected,onToggle:e=>t.dispatch({type:`toggle`,id:e}),onToggleAll:(e,n)=>t.dispatch(n?{type:`clearSelection`}:{type:`selectAll`,ids:e}),expanded:e.expanded,onExpand:e=>t.dispatch({type:`toggleExpand`,id:e})}}function Hs(e,t){let n=e.snapshot.flows.filter(t=>Is([t.flow.name,t.flow.description,c[t.info.type],t.flow.ownerName,...t.uses.map(e=>e.logicalName)].join(` `),e.filter)),r=n.some(e=>e.flags.length>0),i=ai({columns:r?[`Flow`,`Type`,`State`,`Connections`,`Modified`,`Needs attention`]:[`Flow`,`Type`,`State`,`Connections`,`Modified`],rows:n,id:e=>e.flow.id,label:e=>e.flow.name,cells:e=>{let t=W(`div`,`flow-cell`);if(t.append(W(`div`,`cell-strong`,e.flow.name)),e.flow.description!==``){let n=W(`div`,`cell-sub`,e.flow.description);n.title=e.flow.description,t.append(n)}let n=W(`span`,`cell-muted cell-time`,sa(e.flow.modifiedOn));n.title=ca(e.flow.modifiedOn);let i=[t,Qo(e.info.type),$o(e.flow.stateCode),fa(e),n];return r?[...i,pa(e.flags)]:i},detail:e=>ts(e),...Vs(e,t)});return i.classList.add(`flows-table`),{table:ei(i),count:n.length}}function Us(e,t,n){let r=e.snapshot,i=r.references.filter(t=>Is(`${t.reference.displayName} ${t.reference.logicalName} ${O(t.reference.connectorId).name} ${t.reference.ownerName}`,e.filter)),a=i.some(e=>e.flags.length>0),o=r=>{let i=!e.expanded.includes(r);t.dispatch({type:`toggleExpand`,id:r});let a=e.dependencies[r];i&&(a===void 0||a.status===`failed`)&&n.checkDependencies([r])},s=ai({columns:a?[`Reference`,`Connector`,`Connection`,`Reference owner`,`Used by`,`Needs attention`]:[`Reference`,`Connector`,`Connection`,`Reference owner`,`Used by`],rows:i,id:e=>e.reference.id,label:e=>e.reference.displayName||e.reference.logicalName,cells:t=>{let i=t.reference,s=i.displayName||i.logicalName,c=W(`button`,`used-link${t.flowIds.length===0?` muted`:``}`,t.flowIds.length===0?`No flow`:t.flowIds.length===1?`1 flow`:`${t.flowIds.length} flows`);c.type=`button`,c.setAttribute(`aria-label`,`What uses ${s}`),c.title=t.flowIds.length===0?`No flow of this solution. Click to read everything that uses it in the whole environment.`:`Flows of this solution: ${t.flowIds.map(e=>r.flows.find(t=>t.flow.id===e)?.flow.name??e).join(`, `)}. Click to read everything that uses it in the whole environment.`,c.addEventListener(`click`,t=>{t.stopPropagation(),e.expanded.includes(i.id)||o(i.id)});let l=W(`span`,`cell-muted`,i.ownerName||`Unknown`);l.title=`The owner of the connection reference row, not of the connection behind it.`;let u=[da(i,i.logicalName),ua(i.connectorId,i.customConnectorId!==``),la(i.connectionId,n.connections?()=>void n.connections.openConnection(i.connectionId):void 0),l,c];return a?[...u,pa(t.flags)]:u},detail:t=>ns(t,r.flows,{state:e.dependencies[t.reference.id],onCheck:()=>void n.checkDependencies([t.reference.id])}),...Vs(e,t),onExpand:o});return s.classList.add(`refs-table`),s.querySelectorAll(`th`).forEach(e=>{e.textContent===`Reference owner`&&(e.title=`The owner of the connection reference row in Dataverse. It is not the owner of the connection behind it.`)}),{table:ei(s),count:i.length}}function Ws(e,t,n){let r=e.snapshot,i=!r.solution.managed,a=e.view===`references`,o=e.selected.length,s=a?new Set(r.references.filter(t=>e.selected.includes(t.reference.id)).flatMap(e=>e.flowIds)).size:0,c=W(`section`,`action-strip`),l=W(`div`,`action-strip-text`),u=W(`h3`,`action-title`);u.append(G(a?`link`:`git-branch`),a?`Change the connection of references`:`Re-point flows to another reference`);let d=a?r.references.filter(t=>e.selected.includes(t.reference.id)):[],f=d.filter(e=>e.flowIds.length>0).length,p=d.length>0&&f===d.length,m=i?p?`${d.length===1?`This reference is`:`These references are`} used by flows, so ${d.length===1?`it`:`they`} cannot be removed or deleted. Re-point those flows to another reference first (Flows view, Choose changes), or change the connection here.`:o===0?a?`Select connection references in the table to change their connection.`:`Select flows in the table to re-point them to another reference.`:a?`Choose what to change in the studio, or remove or delete the selected references. Nothing is written until you confirm.`:`Choose what to change in the studio. Nothing is written until you confirm.`:`This solution is managed: it can be read but not changed.`;l.append(u,W(`p`,`action-hint`,m));let h=W(`span`,`action-count`,a?`${o} selected, ${s} flows affected`:`${o} selected`);h.setAttribute(`aria-live`,`polite`);let g=K(`Choose changes...`,`primary`,()=>t.dispatch({type:`openStudio`}));g.prepend(G(`sliders`)),g.disabled=!i||o===0||e.busy;let _=!i||o===0||e.busy,v=K(`Remove from solution...`,`secondary`,n.previewRemove);v.prepend(G(`minus`)),v.disabled=_||p,v.title=p?`Used by flows: re-point those flows first`:`Takes the selected rows out of this solution; they stay in the environment`;let y=K(`Delete...`,`danger`,n.previewDelete);y.prepend(G(`trash`)),y.disabled=_||p,y.title=p?`Used by flows: re-point those flows first`:`Deletes the selected rows from the environment`;let b=Ye(r),x=b.unused+b.groups,S=K(`Clean up...`,`secondary`,()=>t.dispatch({type:`openCleanup`}));S.prepend(G(`layers`)),x>0&&S.append(` `,W(`span`,`segment-count`,String(x))),S.setAttribute(`aria-label`,`Clean up references`),S.disabled=!i||e.busy,S.title=i?x===0?`Nothing to clean up: every reference is used and none is a duplicate`:`${b.unused} unused, ${b.groups} duplicate ${b.groups===1?`group`:`groups`}`:`This solution is managed: it cannot be changed`;let C=W(`div`,`action-buttons`);return C.append(...a?[S,v,y]:[],g),c.append(l,h,C),c}function Gs(e){return e.wizard!==null&&e.wizard.step===`preview`&&e.plan!==null&&(e.plan.kind===`remove`||e.plan.kind===`delete`)}function Ks(e,t,n,r){let i=e.wizard,a=e.snapshot,o=W(`div`,`screen`);return i.step===`preview`&&e.plan?o.append(Fo({plan:e.plan,snapshot:a,wizard:i},{back:()=>t.dispatch({type:`closePlan`}),apply:()=>t.dispatch({type:`openConfirm`}),setLayout:e=>t.dispatch({type:`setLayout`,layout:e}),setTab:e=>t.dispatch({type:`setTab`,tab:e}),toggle:e=>t.dispatch({type:`toggleItem`,id:e}),more:()=>t.dispatch({type:`showMore`})})):i.step===`apply`?o.append(Sa(i,r,e.plan?.rows??[])):i.step===`result`&&o.append(Io({wizard:i,results:e.results??[],solutionName:a.solution.name,environment:r},{saveReport:n.saveReport,back:()=>t.dispatch({type:`dismissResults`}),...e.cleanupFollowUp&&i.operation===`repoint`?{followUp:{label:`Clean up the ${e.cleanupFollowUp.ids.length===1?`duplicate`:`duplicates`}`,run:()=>t.dispatch({type:`followUpCleanup`})}}:{}})),i.confirmOpen&&e.plan&&o.append(Ma({plan:e.plan,snapshot:a,environment:r,ack:e.planAck,backupSaved:e.backupSaved,expanded:e.dialogExpanded,stateAck:e.stateAck,manageState:e.manageState},{confirm:n.confirm,cancel:()=>t.dispatch({type:`closeConfirm`}),saveBackup:n.saveBackup,setAck:e=>t.dispatch({type:`setAck`,on:e}),setExpanded:e=>t.dispatch({type:`setDialogExpanded`,on:e}),setStateAck:e=>t.dispatch({type:`setStateAck`,on:e}),setManageState:n.setManageState})),o}function qs(e,t,n,r){if(e.wizard&&!Gs(e))return Ks(e,t,n,r);let i=e.snapshot,a=i.flows.filter(e=>e.flags.length>0).length+i.references.filter(e=>e.flags.length>0).length,o=Xr(i.solution.name,`${i.flows.length} flows, ${i.references.length} connection references${a>0?`, ${a} need attention`:``}`),s=W(`div`,`toolbar`);s.append(ni([{key:`flows`,label:`Flows`,count:i.flows.length,icon:`workflow`},{key:`references`,label:`Connection references`,count:i.references.length,icon:`plug`}],e.view,e=>t.dispatch({type:`setView`,view:e})),ti(e.filter,`Filter...`,e=>t.dispatch({type:`setFilter`,filter:e})));let c=K(`Refresh`,`secondary`,n.refresh,!0);c.prepend(G(`refresh`,`icon--sm`)),c.disabled=e.busy,s.append(oi(`Updating...`,e.busy),c),o.body.append(s);let l=W(`p`,`hint-line`);l.append(G(`info`,`icon--sm`),`Click a row to see its details. The connection owner and state are not available from the connected environment: the owner shown is the owner of the reference.`),o.body.append(l,Ws(e,t,n));let{table:u,count:d}=e.view===`flows`?Hs(e,t):Us(e,t,n);if(d===0?o.body.append(ri(e.filter===``?e.view===`flows`?`${i.solution.name} has no flows.`:`${i.solution.name} has no connection references.`:`Nothing matches the filter "${e.filter}" in ${i.solution.name}.`,e.filter===``?e.view===`flows`?`workflow`:`plug`:`search`)):o.body.append(u),e.cleanup&&o.root.append(Wo(e,t,n,r)),Gs(e)?o.root.append(Jo({plan:e.plan,snapshot:i,environment:r,ack:e.planAck,backupSaved:e.backupSaved,code:e.confirmCode,typed:e.typedCode,stateAck:e.stateAck},{confirm:n.confirm,cancel:()=>t.dispatch({type:`closePlan`}),saveBackup:n.saveBackup,setAck:e=>t.dispatch({type:`setAck`,on:e}),setTyped:n.setTypedCode,setStateAck:e=>t.dispatch({type:`setStateAck`,on:e})})):!e.cleanup&&e.studio?o.root.append(go(e,t,n,r)):fo(),o.root.classList.add(`screen`),n.connections){let r=W(`div`,`screen`);return r.append(Cs(e,e=>zs(t,n,e)),o.root),r}return o.root}function Js(e,t,n,r){let i=()=>{let i=t.get();e.replaceChildren();let a=document.getElementById(`breadcrumb`);if(a){a.replaceChildren();let e=i.area===`connections`&&n.connections!==void 0;if(a.hidden=i.solutionId===``,e&&i.solutionId!==``){let e=i.solutionId===``?``:i.snapshot?.solution.name??i.solutions.find(e=>e.id===i.solutionId)?.name??``;a.append(...Zr([{label:`Solutions`,onClick:()=>{n.connections.backToSolutions(),n.selectSolution(``)}},...e===``?[]:[{label:e,onClick:()=>n.connections.backToSolutions()}],{label:`Connections`}]).childNodes)}else if(!e&&i.solutionId!==``){let e=i.snapshot?.solution.name??i.solutions.find(e=>e.id===i.solutionId)?.name??``,r=Gs(i)?null:i.wizard,o=r===null||r.step!==`apply`,s=r===null?[{label:e}]:[{label:e,...be(r.step,`leave`)?{onClick:()=>r&&r.step===`result`?t.dispatch({type:`dismissResults`}):t.dispatch({type:`closePlan`})}:{}},...xe(r.step).slice(-1).map(e=>({label:e.label}))];a.append(...Zr([{label:`Solutions`,...o?{onClick:()=>n.selectSolution(``)}:{}},...s]).childNodes)}}if(i.error!==``){let t=W(`div`,`message message--error`);t.setAttribute(`role`,`alert`),t.append(W(`span`,`message-text`,i.error)),e.append(t)}i.area===`connections`&&n.connections?e.append(Fs(i,t,n.connections,e=>zs(t,n,e),r())):i.solutionId===``?e.append(Bs(i,t,n)):i.snapshot?e.append(qs(i,t,n,r())):e.append(i.busy?Ss(`Reading the solution...`):ri(`The solution could not be read.`))},a=``,o=()=>{let e=t.get(),r=e.wizard;return[e.area===`connections`&&n.connections?`connections`:``,e.solutionId,e.snapshot===null?`loading`:e.view,r?`${r.step}:${r.operation}:${r.tab}`:``,Gs(e)?`removal`:``].join(`|`)},s=()=>{let n=o(),r=n===a;a=n;let s=e.closest(`.main-content`),c=s?.scrollTop??0,l=e.querySelector(`.table-wrap`)?.scrollTop??0,u=[...e.querySelectorAll(`.modal-body`)].map(e=>e.scrollTop),d=e.querySelector(`.step-body`)?.scrollTop??0,f=`.cm-del-list, .cm-portal-list`,p=[...e.querySelectorAll(f)].map(e=>[e.className,e.scrollTop]),m=e.querySelectorAll(`.modal-overlay`).length,h=[...e.querySelectorAll(`.studio-pane-body`)].map(e=>e.scrollTop),g=e.querySelector(`.cleanup-content`),_=g?.scrollTop??0,v=g?.dataset.tab??``,y=e.querySelector(`.newref-body`),b=y?.scrollTop??0,x=y?.dataset.step??``,S=document.activeElement,C=S&&e.contains(S)?S.getAttribute(`aria-label`):null,w=C!==null&&typeof S.selectionStart==`number`?S.selectionStart:null,ee=C!==null&&typeof S.selectionEnd==`number`?S.selectionEnd:null;i(),e.querySelector(`.logo-loader`)||xs();let te=Go(t.get());e.classList.toggle(`is-running`,te),te&&e.querySelectorAll(`button`).forEach(e=>{e.dataset.allowRunning!==`true`&&(e.disabled=!0)}),s&&(s.scrollTop=r?c:0);let ne=e.querySelector(`.table-wrap`);ne&&(ne.scrollTop=r?l:0);let T=e.querySelector(`.step-body`);T&&(T.scrollTop=r?d:0),e.querySelectorAll(`.modal-body`).forEach((e,t)=>{e.scrollTop=u[t]??0}),e.querySelectorAll(f).forEach(e=>{e.scrollTop=p.find(([t])=>t===e.className)?.[1]??0}),e.querySelectorAll(`.modal-overlay`).forEach((e,t)=>{t<m&&e.classList.add(`no-anim`)}),e.querySelectorAll(`.studio-pane-body`).forEach((e,t)=>{e.scrollTop=h[t]??0});let re=e.querySelector(`.newref-body`);re&&y&&re.dataset.step===x&&(re.scrollTop=b);let ie=e.querySelector(`.cleanup-content`);ie&&g&&ie.dataset.tab===v&&(ie.scrollTop=_);let E=e.querySelectorAll(`.modal`),ae=E.length>0?E[E.length-1]:null;if(ae&&!ae.contains(document.activeElement)&&C===null&&ae.querySelector(`[data-autofocus]`)?.focus({preventScroll:!0}),C===null)return;let D=[...e.querySelectorAll(`[aria-label]`)].find(e=>e.getAttribute(`aria-label`)===C);if(D&&!D.disabled){D.focus({preventScroll:!0});try{w!==null&&ee!==null&&D.setSelectionRange(w,ee)}catch{}}};t.subscribe(s),s()}var Ys=e=>e===`light`||e===`dark`?e:void 0;function Xs(e){return typeof e==`object`&&e?Ys(e.theme):void 0}async function Zs(e,t=document.documentElement){let n=e=>t.setAttribute(`data-theme`,e);try{e?.events?.on?.((t,r)=>{if(r?.event!==`settings:updated`)return;let i=Xs(r.data);i?n(i):Qs(e,n)})}catch{}await Qs(e,n)}async function Qs(e,t){try{let n=Ys(await e?.utils?.getCurrentTheme?.());n&&t(n)}catch{}}function $s(){Zs(Pn());let e=Nn(),t=document.getElementById(`app-version`);t&&(t.textContent=`v0.1.1`);let n=document.getElementById(`log-dock`);n&&Ai(n,(t,n)=>e.saveFile(t,n));let r=ui(`Connecting...`,`loading`);document.getElementById(`header-right`)?.append(r),e.connectionName().then(e=>e===``?di(r,`No connection`,`error`):di(r,e,`connected`)).catch(()=>di(r,`Connection error`,`error`));let i=document.getElementById(`content`);oa(e=>{i.textContent=e});let a=aa(Xi()),o=Jr(e,a);Js(i,a,o,o.environment),R(`Ready.`,`info`),o.start()}document.addEventListener(`DOMContentLoaded`,$s)})();