@arcgis/portal-components 5.2.0-next.52 → 5.2.0-next.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/BZRUGC5P.js +2 -0
- package/dist/cdn/{AGVSKS3A.js → KH6T7CDO.js} +19 -19
- package/dist/cdn/{XVFCF4AX.js → NADYAODN.js} +34 -34
- package/dist/cdn/index.js +1 -1
- package/dist/components/arcgis-portal-ai-assistant/customElement.js +222 -222
- package/dist/components/arcgis-portal-navigation/customElement.js +180 -180
- package/dist/docs/api.json +1 -1
- package/dist/docs/docs.json +1 -1
- package/dist/docs/web-types.json +1 -1
- package/package.json +5 -5
- package/dist/cdn/OQZDN4G5.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
+
import f from"./7QXIBQV7.js";import{c as We}from"./R6SSAPLB.js";import{b as j,c as oe,d as Le}from"./GYFQDPCN.js";import e from"./F3G5N2UU.js";import d from"./U2QZZSPC.js";import{a as re}from"./XEK22IDA.js";import{d as Me,e as Ne}from"./OBBYT2AV.js";import{a as X}from"./P6P7SKFX.js";import c from"./AWIVXH7M.js";import"./DFTUMKSN.js";import{a as Ce}from"./YVKSTDL6.js";import b from"./CSH3WCYD.js";import{a as R,b as $e,c as K,d as H,e as Q,f as Ae,i as ke}from"./6D3PU4ZT.js";import a from"./DALGPO36.js";import{b as Pe}from"./2GBRZSEC.js";import{a as O}from"./O6QBY4ST.js";import{a as je}from"./OFDH6CTA.js";import"./BUKOHPY6.js";import"./XQJNAQVO.js";import{K as G,L as z,M as _e,N as q,O as ae,S as ye,T as J,h as be,j as p,k as we,m as C,w as F}from"./STZRXY35.js";import"./UZLQALHY.js";export default $arcgis.t(([{formatDate:Ot,substitute:Z,getLocale:Dt},,Gt,{e:L},{c:Se,f:Ie,g:xe,h:Te},{c:ne},,{a:se,c:Ee},{a:Oe,b:De,c:Ge,d:ze,e:Re}])=>{function zt({navigate:e,portal:t,product:i,productInfo:a,productHref:n,messages:r,searchActive:s,showNav:o,projectTitleEditing:l}){let u=s&&i==="Online"&&!o||i!=="Online"&&l&&window.innerWidth<960;if(!i||!t||!r||u)return null;let{name:g,glyph:v}=a||{};return p`<calcite-navigation-logo class="logo fade-in" .heading=${g} .description=${t.name||""} .href=${n} @click=${n?m=>{e({event:m,href:n})}:void 0} .thumbnail=${v}></calcite-navigation-logo>`}var ce={},P={Month:2628e3,Week:604800,Day:86400,Hour:3600,Minute:60,Second:1};function Je(e){if(!e)return null;let t=Math.floor(e/1e3),i=Math.abs(t),a=P.Day*365;switch(!0){case i<P.Minute:return[Math.floor(t/P.Second),"second"];case i<P.Hour:return[Math.floor(t/P.Minute),"minute"];case i<P.Day:return[Math.floor(t/P.Hour),"hour"];case i<P.Week:return[Math.floor(t/P.Day),"day"];case i<P.Month:return[Math.floor(t/P.Week),"week"];case i<a:return[Math.floor(t/P.Month),"month"];default:return[Math.floor(t/a),"year"]}}function Ke(e){return(typeof e=="number"?e:e.getTime?.())-new Date().getTime()}function Qe({locale:e,time:t,t9n:i}){if(!e||!t)return"";let a=Ke(t);ce[e]??=new Intl.RelativeTimeFormat(e,{style:"long"});let n=Je(a);return n?n[1]==="second"?i?.lessThanOneMinute||`< ${ce[e].format(n[0]>0?1:-1,"minutes")}`:ce[e].format(n[0],n[1]):""}var Rt={month:"long",day:"numeric",year:"numeric"},Wt={month:"long",day:"numeric"};function Ft({locale:e,time:t},i){if(!e||!t)return"";let a=new Date(t);return Ot(a,i?Rt:Wt)}async function Ht({portal:e}){if(!e?.user)return{result:[]};let t=`${e.restUrl}/community/users/${e.user.id}/notifications`,{result:i,error:a}=await L(t);return a?{error:a}:{result:i?.notifications}}async function Vt(e,t){if(!e?.user)return{success:!0};let i=t.map(a=>({portal:e,id:a})).map(Xe);return{success:!((await Promise.allSettled(i))?.filter(a=>a.status==="rejected"||!a.value?.success)).length}}async function Xe({portal:e,id:t}){let i=`${e.restUrl}/community/users/${e.user?.id}/notifications/${t}/delete`,{result:a}=await L(i,{method:"post"});return a?.success?{success:!0,id:t}:{success:!1,id:t}}var Ye="notifications-menu";function Bt(e){try{let t=decodeURIComponent(e);return t!==e?t:e}catch{return e}}function Ut(e){switch(e){case"group_join_admin":return"users";case"group_application_accepted":return"register";case"group_join":return"file-user";case"group_application_declined":return"user-risk";case"user_invitation_declined":return"group-x";case"user_invitation_accepted":return"user-plus";case"user_invite":return"envelope";case"user_added_to_group":return"user-plus";case"collaboration_workspace_added":case"collaboration_deleted":case"collaboration_leaving":case"collaboration_join":case"collaboration_participant_workspace_join":case"collaboration_participant_workspace_unjoin":case"collaboration_participant_removed":case"collaboration_peer_participant_removed":case"collaboration_participant_access_changed":return"collaboration";case"collaboration_participant_join":return"collaboration-user";case"collaboration_content_store_disk_limit_reached":return"gauge";case"user_email_bounced":return"speech-bubble-exclamation";case"feature_layer_copy_over_failed":case"feature_layer_one_way_shared_not_two_way":case"feature_view_copy_over_failed":case"webapp_not_copied":case"webapp_not_copied_portal":case"insights_item_not_copied":return"collaboration";case"scheduled_task_disabled":return"date-time";case"portal_certificate_about_to_expire":case"portal_certificate_expired":return"hourglass-expired";case"notebook_runtime_deprecated":return"notebook-server";case"ingress_certificate_about_to_expire":case"ingress_certificate_expired":return"certificate";default:return"bell"}}function qt({notification:e,portal:t,locale:i,t9n:a}){if(e?.received&&e.id){let n={date:Qe({locale:i,time:e.received,t9n:a}),id:e.id,text:"",icon:Ut(e.type)};if(e.type==="webapp_not_copied"&&t.isPortal&&(e.type="webapp_not_copied_portal"),e.data?.taskTitle&&(e.data.taskTitle=Bt(e.data.taskTitle)),e.type==="message_received")n.text=e.data.message||"";else if(a.types[e.type]){let r=R({portal:t,usePortalHostname:!!t.user});e.data.baseUrl=`${r}/home/`,n.text=Z(a.types[e.type],e.data)}if(n.text)return n}return null}async function Fe({portal:e,locale:t,t9n:i}){if(!i)return[];let{result:a,error:n}=await Ht({portal:e});return n&&console.error(n),a?.length?a.map(r=>qt({notification:r,portal:e,t9n:i,locale:t})).filter(r=>r):[]}function Jt({notifications:e,messages:t}){return t?p`<calcite-action class="action" scale=l .text=${t.label} icon=bell .indicator=${!!e?.length} id=${Ye}></calcite-action>`:null}function Y({icon:e,title:t,description:i}){return!t&&!i?null:p`<div class="empty">${e&&p`<svg xmlns=http://www.w3.org/2000/svg width=64 height=64 viewBox="0 0 64 64" fill=none>${we`<path d=${Ce[e]??C} fill=var(--calcite-color-border-input) />`}</svg>`||""}${t&&p`<h3 class="notifications__empty__header">${t}</h3>`||""}${i&&p`<p class="notifications__empty__text">${i}</p>`||""}</div>`}function Kt({notifications:e,deleteNotifications:t,messages:i,navigate:a,portal:n,notificationDeleteProgress:r}){return i?p`<calcite-popover .referenceElement=${Ye} .label=${i.label} auto-close pointer-disabled flip-disabled placement=bottom-end scale=l .heading=${i.label}>${e?.length>0?p`<div class="notifications notifications--full">${typeof r=="number"&&p`<calcite-scrim><calcite-loader type=determinate-value .label=${i.deleting} .value=${r}></calcite-loader></calcite-scrim>`||""}<calcite-list .label=${i.label} interaction-mode=static class="notifications__list" scale=l>${O(e,s=>s.id,s=>p`<calcite-list-item closable @calciteListItemClose=${async()=>await t([s.id])} .messageOverrides=${{close:i.dismissLabel}} .iconStart=${s.icon}><div slot=content class="notification"><div class="notification__message" .innerHTML=${s.text??""} @click=${o=>{let l=o.target,u=l.href;if(l.nodeName==="CALCITE-LINK"&&u){let g=`${R({portal:n,usePortalHostname:!!n.user})}/home/`;a({event:o,href:u,relativePath:u.replace(g,"")})}}}></div><div class="notification__date">${s.date}</div></div></calcite-list-item>`)}</calcite-list></div><calcite-button class="notifications__dismiss" scale=l appearance=transparent @click=${async s=>{let o=s.currentTarget?.parentElement;await t(e?.map(({id:l})=>l)),o.open=!1}}>${i.dismissAllLabel}</calcite-button>`:p`<div class="notifications">${Y({title:i.noNotifications,description:i.noNotificationsDescription,icon:"check"})}</div>`}</calcite-popover>`:null}function Qt(e){return e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function Xt(e,t,i,a){ai(e,JSON.stringify(t),i)}function Yt(e){return ti(e,!0)}function Zt(e){try{window.localStorage.removeItem(e)}catch{}}function ei(e){try{window.sessionStorage.removeItem(e)}catch{}}function ti(e,t){let i=ii(e);return i&&t?JSON.parse(i):i}function ii(e){let t=document.cookie,i=new RegExp(`(?:^|; )${Qt(e)}=([^;]*)`,"u"),a=t.match(i);return a?decodeURIComponent(a[1]):""}function ai(e,t,i){i=i||{};let a=i?.expires;if(typeof a=="number"){let r=new Date,s=a*24*60*60*1e3;r.setTime(Date.now()+s),a=r,i.expires=r}typeof a!="string"&&a?.toUTCString&&(i.expires=a.toUTCString());let n=`${e}=${encodeURIComponent(t)}`;for(let r of Object.keys(i)){n+=`; ${r}`;let s=i[r];s!==!0&&(n+=`=${s}`)}document.cookie=n}async function ni(e){let t=`owner:"${e.isPortal?"esri":"esri_config"}" AND title:"AppSwitcher Config" AND type:"Application Configuration"`,i=`${e.restUrl}/search`;return await L(i,{query:{num:1,start:0,sortField:"title",sortOrder:"asc",q:t}})}async function ri(e){let t={appSwitcher:{apps:[]}};if(!e?.id||!e.user)return t;let{result:i}=await ni(e),a=i?.results?.[0];if(!a)return t;let n=a.id;return(await ne(e,n)).result}async function si(e,t,i){if(!t||!e?.length)return{result:null};let a=`${i.restUrl}/search`;return await L(a,{query:{num:100,q:`id:(${e.map(n=>`"${n.itemId}"`).join(" OR ")})`}})}async function oi(e){let t=`${e.restUrl}/search`,i={num:10,start:0,sortField:"title",sortOrder:"asc",q:'owner:"esri" AND title:"BlockedApps Config" AND type: "Application Configuration"'},{result:a}=await L(t,{query:i}),n=a?.results?.[0]?.id;return n?(await ne(e,n))?.result?.blockedApps||[]:[]}function ci(e,t){let i=e?.toLowerCase()||"",a=`${t.title||""} ${t.label||""}`;return!i||a.toLowerCase().includes(i)}function li(){if(Yt("APSW-query")?.expires>new Date().setHours(new Date().getHours()))return!0;let e={expires:new Date().setHours(new Date().getHours()+5)};return Xt("APSW-query",e,{path:"/",domain:window.location.hostname,sameSite:"Strict"}),!1}function pi(e,t){let{landingPage:i}=t||{};return{image:"arcgis-online.png",label:"ArcGIS Online",title:"ArcGIS Online",url:`${R({portal:e})}${i?.url?i.url:se(e.user)?"organization.html":"index.html"}`}}function He(e){let t=["api-for-python","appstudio","arcade","arcgis-earth","arcgis-enterprise","arcgis-experience-builder","arcgis-geoanalytics","arcgis-hub","arcgis-online","arcgis-pro","arcgis-urban","blank","business-analyst","city-engine","collector","community-analyst","configurable-apps","dashboards-beta","dashboards-classic","data-pipelines","deeplearningstudio","demographics","drone2map","esri-events","essential-apps","excalibur","explorer","field-apps","fieldmaps-beta","fieldmaps-ea","fieldmaps","generic-app","geobim","geoplanner","grid-view-9","indoor","indoors","insights","instant-apps","ips","knowledge-studio","living-atlas","location-platform","map-maker","map-viewer-beta","map-viewer-classic","map-viewer","maps-adobe-cloud","maps-for-office","maps-for-power-bi","maps-for-sharepoint","marketplace","mission","monitor","navigator","notebook","office-apps","open-data","operations-dashboard","ortho-maker","pro-extension","quick-capture","redistricting","runtime","scene-viewer","sites","solutions","story-maps","streetmap-premium","survey123","track-viewer","user-type-extension-online","user-type-extension","vector-tile-style-editor","velocity","web-app-builder","web-editor","web-mapping","workflow-manager-beta","workflow-manager","workforce"].find(i=>e?.includes(i)&&V(`${i}.png`)===e);return t?V(`${t}.avif`):e}function di(e,t){let i=e?.blockedApps||[],a=[];return!i.length&&!e.blockBetaApps||!t?.length?[]:(e.blockBetaApps&&t.forEach(n=>{n.isBeta&&!i.includes(n.clientid)&&i.push(n.clientid)}),i.forEach(n=>{let r=t.find(s=>s.clientid===n);r&&a.push(r)}),a)}function x(e,t){return t&&t[e.toLowerCase()]?.valid||!1}function ui(e,t){return e?.portalProperties&&!e.portalProperties?.openData?.enabled?!1:x("HubforArcGIS",t)}function hi(e,t){if(!e)return!1;let i=["portal:publisher:publishFeeds","portal:publisher:publishRealTimeAnalytics","portal:publisher:publishBigDataAnalytics"],a=(e?.privileges||[]).some(r=>i.includes(r)),n=x("velocity",t);return a&&n}function mi(e){return x("HubforArcGIS",e)}function gi(e,t){return!(e.isPortal&&e.portalProperties?.newMapViewerEnabled===!1)&&x("arcgisWebApps",t)}function fi(e){return!!e.helperServices?.rasterAnalytics&&!!e.helperServices.orthoMapping}function vi(e,t,i){let a=i&&(!e.isPortal||!!e.sourceJSON?.supportsHostedNotebooks),n=!!t?.privileges?.length&&t.privileges.some(r=>r==="premium:publisher:createNotebooks");return a&&n}function bi(e,t){return!!e.helperServices?.locationTracking&&t}function wi(e,t,i,a){let n=e?.user;return{"Open Data":{hasAccess:()=>ui(e,a)},AppStudio:{hasAccess:()=>x("arcgisWebApps",a)},"ArcGIS Velocity":{hasAccess:()=>e.isPortal||hi(n,a)},"ArcGIS Hub":{hasAccess:()=>x("HubforArcGIS",a)},"ArcGIS Enterprise Sites":{hasAccess:()=>mi(a)},"ArcGIS QuickCapture Web Designer":{hasAccess:()=>x("arcgisWebApps",a)},"ArcGIS Dashboards":{hasAccess:()=>x("dashboards",a)},"Map Viewer":{hasAccess:()=>gi(e,a)},"Map Viewer Classic":{hasAccess:()=>x("arcgisWebApps",a)},"Operations Dashboard for ArcGIS":{hasAccess:()=>x("opsdashboard",a)},"ArcGIS Dashboards Classic":{hasAccess:()=>x("opsdashboard",a)},"Ortho Maker":{hasAccess:()=>fi(e)},Notebook:{hasAccess:()=>vi(e,n,t)},"Scene Viewer":{hasAccess:()=>x("arcgisWebApps",a)},"Story Maps":{hasAccess:()=>x("arcgisWebApps",a)},Survey123:{hasAccess:()=>x("survey123",a)},"Track Viewer":{hasAccess:()=>bi(e,i)},"Instant Apps":{hasAccess:()=>x("arcgisWebApps",a)},"ArcGIS Maps for Adobe Creative Cloud":{hasAccess:()=>x("arcgisWebApps",a)&&!e.isPortal}}}function _i(e){let t={opsdashboard:1,arcgisWebApps:1,Workforce:1,geoplanner:1,webappbuilder:1,HubforArcGIS:1,appstudio:1,survey123:1,storymaps:1,mapsForOffice:1,mapsForO365:1,mapsForSharePoint:1,mapsForCreativeCloud:1,indoorsweb:1,indoorskiosk:1,indoorsspaceplanner:1,locationplatformWebApps:1,communityanalyst_2:1};return e.isPortal&&(t={...t,arcgisonline:1,arcgisUrban:1,arcgisinstantapps:1}),t}function pe(e){return e.sourceJSON?.subscriptionInfo?.options?.includes("Developer")}function V(e){return J(`assets/portal-navigation/apps/${e||""}`)}function Ze(e,t,i){return e.icon?`${t.restUrl}/portals/self/resources/${e.icon}?token=${i}`:`${t.restUrl}/content/items/${e.itemId}/resources/${e.image||e.properties?.appSwitcher?.image}?token=${i}`}function W(e,t,i){if(e.image?e.image=V(e.image):e.placeHolderIcon=`${V()}svg-app-icon.svg`,e.url?.startsWith("../")){let a=i.urlKey?`${i.urlKey}.${i.customBaseUrl}`:i.portalHostname;e.url=`${window.location.protocol}//${a}${e.url.substring(2,e.url.length)}`}return delete e.isLicensed,delete e.privileges,e.itemId=t,e}function et(){return`${V()}svg-app-circle.svg`}function yi(e,t,i){let a=e.properties?.appSwitcher?.image||e.icon;return{abbr:e.properties?.appSwitcher?.abbr||e.abbreviation,itemId:e.itemId,canAccess:!0,webMappingApp:!0,image:a?Ze(e,t,i):void 0,label:e.title||e.label,url:e.url,placeHolderIcon:e.placeHolderIcon||et()}}function $i(e,t,i){return e.appSwitcher?.image||e.icon?e.image=Ze(e,t,i):e.placeHolderIcon=et(),e.abbr=e.appSwitcher?.abbr||e.abbreviation,delete e.abbreviation,delete e.appSwitcher,delete e.approvedApp,delete e.webMappingApp,e}function Ve(e,t){e.forEach(i=>{i.uid==="Map Viewer Beta"&&(i.uid="Map Viewer"),t.isPortal&&(i.uid==="Operations Dashboard for ArcGIS"?i.uid="ArcGIS Dashboards Classic":i.uid==="Workforce for ArcGIS"&&(i.uid="ArcGIS Workforce"))})}async function Ai({userApps:e,servers:t,portal:i,licenses:a,blockedApps:n,provisionedListings:r,orgCapabilities:s,trackViewerEnabled:o,notebookServerEnabled:l,willQueryForItems:u,approvedApps:g}){let v={},m={},$=wi(i,l,o,a),k=_i(i),A=[],S=e.length;for(let d=0;d<S;d++){let c=e[d],b=c.itemId||c.title,I=!0,T=!c.serverFunction||t?.some(f=>{let M=(f.serverFunction?.split(",")||[]).includes(c.serverFunction);return M&&c.serverFunction==="Velocity"&&(c.url=f.url),M}),h=n?.some(f=>c.itemId&&c.itemId===f.itemid||c.title&&c.title===f.title);if(v[b]=1,m[b]=c,h||pe(i)&&!c.showInLocationPlatform||i.sourceJSON?.portalDeploymentType==="ArcGISEnterpriseOnKubernetes"&&c.supportsKubernetes===!1)continue;let y=c.title;if($[y]&&!$[y]?.hasAccess())continue;let w=i.sourceJSON?.subscriptionInfo;if(c.subscriptionType){w?.type===c.subscriptionType&&(m[b].canAccess=!0,A.push(W(c,b,i)));continue}if(c.orgCapabilities){s?.length&&s.some(f=>c.orgCapabilities?.includes(f.id))&&(m[b].canAccess=!0,A.push(W(c,b,i)));continue}if(!c.privileges?.length&&!c.isLicensed&&T&&(c.label!=="ArcGIS Location Platform"||pe(i))){m[b].canAccess=!0,A.push(W(c,b,i));continue}if(i.user?.sourceJSON?.userLicenseTypeId?.toLowerCase()==="storytellerut"&&c.label?.toLowerCase()==="storymaps"){m[b].canAccess=!0,A.push(W(c,b,i));continue}if(c.privileges?.length&&i.user?.privileges){for(let f=0;f<c.privileges.length;f++)if(!i.user.privileges.includes(c.privileges[f])){I=!1;break}if(!c.isLicensed&&I&&T){m[b].canAccess=!0,A.push(W(c,b,i));continue}}if(c.isLicensed&&I&&T){for(let f=0;f<r.length;f++)if(b===r[f].itemId||b===r[f].title){m[b].canAccess=!0,A.push(W(c,b,i));break}}}let _=await Se(i);return r.forEach(d=>{if(d.type==="Web Mapping Application"&&!k[d.clientId]&&!v[d.itemId]&&d.url&&d.title&&!v[d.title]&&!d.typeKeywords.includes("hideFromAppSwitcher")){let c=yi(d,i,_);m[d.itemId]=c,A.push(c)}}),{apps:[...g.map(d=>{let c={...d.appProperties,itemId:d.itemId,webMappingApp:!0,approvedApp:!0,canAccess:!u};return m[d.itemId]=c,$i(c,i,_)}),...A],appDictionary:m}}function le(e,t){return e.filter(i=>!t?.some(a=>i.itemId&&i.itemId===a.itemid||i.title&&i.title===a.title))}function Be({apps:e,app:t,appDictionary:i,newAppDictionary:a,portal:n}){let r=Object.keys(i).map(s=>i[s]).filter(s=>s.itemId===t.uid||s.title===t.uid).shift();return r&&!i[t.uid]&&(t.uid=r.itemId||r.title||""),r?.hasBeenPopulated||(r?((t.hasChanged||r.hasChanged||!r.canAccess&&!r.ignoreNoAccess)&&se(n.user)&&(i[t.uid].hasChanged=!0,i[t.uid].ignoreNoAccess=t.ignoreNoAccess),t.isNew&&(i[t.uid].isNew=!0),delete a[t.uid]):(r=t,r.canAccess=!1,r.itemId=t.uid,i[t.uid]=r),i[t.uid].hasBeenPopulated=!0,e.push(r)),e}async function ki({portal:e,trackViewerEnabled:t,notebookServerEnabled:i}){if(!e?.id||!e.user)return{apps:[],hiddenApps:{}};let a=li(),[n,r,s,o,l,u,g]=await Promise.all([ri(e),Te(e),Ie(e),Oe(e),De(e),Re(e),oi(e)]),v=e.isPortal?await ze(e):null,m=s?.result?.properties,$=n?.appSwitcher?.apps||[];e.isPortal||($=$.filter(h=>h.title!=="Map Viewer Classic"||e.sourceJSON.created<new Date("February 26 2025")),$.unshift(pi(e,m)));let k=o?.result?.approvedApps?.filter(h=>!h.hideForNonPrivilegedMember)||[],A={};r?.forEach(h=>{let y=h.clientId?.toLowerCase();y&&(A[y]={valid:!0,itemId:h.itemId,clientId:h.clientId})}),l?.forEach(h=>{let y=h.id?.toLowerCase();y&&(A[y]={valid:!0,clientId:h.id})});let S=di(u,g),{apps:_,appDictionary:d}=await Ai({userApps:$,servers:v,portal:e,blockedApps:S,provisionedListings:r,orgCapabilities:l,licenses:A,trackViewerEnabled:t,notebookServerEnabled:i,willQueryForItems:a,approvedApps:k});m?.appLauncher&&(m?.appLauncher.primary&&Ve(m?.appLauncher.primary,e),m?.appLauncher.secondary&&Ve(m?.appLauncher.secondary,e));let c=[],b=[];if(!m?.appLauncher?.primary||!m?.appLauncher.secondary)c=_.slice().sort((h,y)=>(h.label||"")<(y.label||"")?-1:1),c=le(c,S),b=[];else{let{result:h}=await si(k,a,e);h?.results?.length&&h.results.forEach(w=>{let f=d[w.id];f.canAccess=!0,f.hasChanged=f.url!==w.url?!!w.url:!1});let y={...d};m?.appLauncher?.primary?.forEach(w=>{w.label==="Map Viewer"&&(w.uid="Map Viewer")}),c=m?.appLauncher.primary.reduce((w,f)=>Be({apps:w,app:f,appDictionary:d,newAppDictionary:y,portal:e}),[])||[],b=m?.appLauncher.secondary.reduce((w,f)=>Be({apps:w,app:f,appDictionary:d,newAppDictionary:y,portal:e}),[])||[],c=le(c,S),b=le(b,S),pe(e)&&(c=c.filter(w=>w.canAccess),b=b.filter(w=>w.canAccess));for(let w of Object.keys(y))y[w].canAccess&&(y[w].isNew=!0,d[w]=y[w],c.push(y[w]))}let I=[...c,...b],T=b.reduce((h,y)=>(y.itemId&&(h[y.itemId]=!0),h),{});return{apps:I,hiddenApps:T,signInSettings:u,licenses:A,userProperties:m}}function Si(e,t){return!e?.itemId||!t?!1:t[e.itemId]}async function Ii({apps:e,hiddenApps:t,userProperties:i,portal:a}){let n=e.reduce((s,o)=>{let l=t[o.itemId];return s[l?"secondary":"primary"].push({label:o.label,uid:o.itemId||o.title}),s},{primary:[],secondary:[]}),r={...i||{},appLauncher:n};return await xe(r,a)}function tt({app:e}){if(!e)return null;if(!e.canAccess)return p`<span class="list-item__logo list-item__logo-empty"></span>`;let t=!e.image&&e.abbr;return p`${t&&p`<span class="list-item__logo">${e.placeHolderIcon&&p`<img src=${He(e.placeHolderIcon)??C} class="list-item__logo-bg" alt>`||""}<span style=${ae({fontSize:e.fontSize||"20px"})} class="list-item__abbr">${e.abbr}</span></span>`||""}${e.image&&p`<img src=${He(e.image)??C} class="list-item__logo" alt>`||""}${e.isNew&&p`<span class=${q({"list-item__indicator":!0})}></span>`||""}`}function xi({app:e,hiddenApps:t,messages:i,toggleAppVisibility:a}){if(!e||!i)return null;let n=Si(e,t),{title:r,itemId:s,label:o}=e;return p`<calcite-list-item .label=${r||o} class=${q(n?"app--hidden":"")}><span slot=content-start>${tt({app:e})}</span><calcite-action .text=${n?i.show:i.hide} .icon=${n?"view-hide":"view-visible"} slot=actions-end @click=${()=>s&&a(s,!n)}></calcite-action></calcite-list-item>`}function Ti({app:e,messages:t}){if(!e||!t)return null;let{title:i,itemId:a,label:n,url:r,isNew:s}=e,o=t?.descriptions?.[i]||t?.descriptions?.[n];return p`<li class="list-item" id=${a??C}><a class="list-item__link" href=${r??C}>${p`<span class="list-item__container">${tt({app:e})}<span class="list-item__title">${i||n}</span>${s&&p`<calcite-chip scale=s class="list-item__chip" icon=asterisk-small .label=${t.new}>${t.new}</calcite-chip>`||""}</span>`}</a>${o&&p`<calcite-tooltip .referenceElement=${a} placement=trailing>${o}</calcite-tooltip>`||""}</li>`}function Pi({apps:e,appsLoading:t,appsSearchTerm:i,hiddenApps:a,messages:n,handleAppsSearch:r,handleAppReorder:s,handleAppSave:o,handleAppHide:l,handleAppCancel:u,handleAppEdit:g,editingApplications:v,portal:m}){if(!e||!n)return null;let $=i?.length>0,k=(e||[]).filter(_=>_.itemId&&(!a?.[_.itemId]||$)&&ci(i,_)),A=$?n.noAppResults.replace("${term}",i):n.noAppsAvailable,S=$?j(m)?n.noAppsDescriptionPublic:n.noAppResultsDescriptionOrg:n.noAppsAvailable;return v?p`<div class="list__header"><calcite-button appearance=outline width=half @click=${()=>{u()}}>${n.cancel}</calcite-button><calcite-button width=half @click=${()=>{o()}}>${n.applyChanges}</calcite-button></div><calcite-list .label=${n.allMyApplications} drag-enabled @calciteListDragEnd=${_=>{let{newIndex:d,oldIndex:c}=_.detail;s({newIndex:d,oldIndex:c})}} .loading=${t}>${O(e,_=>_.itemId,_=>xi({app:_,hiddenApps:a,messages:n,toggleAppVisibility:(d,c)=>{l({app:d,hidden:c})}}))}</calcite-list>`:p`<div class="list__header"><calcite-input type=search icon .placeholder=${n.searchMyApps} scale=m class="list__search" @calciteInputInput=${_=>{r(_.currentTarget.value)}}></calcite-input><calcite-button appearance=transparent kind=neutral icon-start=reorder-cards .label=${n.reorder} @click=${()=>g()}></calcite-button></div>${k?.length>0?p`<ul class="list">${O(k,_=>_.itemId,_=>Ti({app:_,messages:n}))}</ul>`:Y({title:A,description:S,icon:i?"search":"apps"})}`}var Ue="portalAppClientId",me={GeoanalyticsEngine:"geoanalyticsengine",GeoanalyticsFabric:"geoanalyticsfabric",IndoorsOnline:"indoorsonline"};function ge(e){return me.GeoanalyticsEngine===e}function fe(e){return me.GeoanalyticsFabric===e}function it(e){return me.IndoorsOnline===e}function ve(e){return["Location Platform","GeoAnalytics Fabric","GeoAnalytics Engine","Online","Enterprise"].includes(e)}function ji({portal:e,messages:t,licenses:i,clientId:a,signInSettings:n}){if(!t||!e)return[];let r=e.sourceJSON?.subscriptionInfo,s=Ei({messages:t,portal:e});if(!e.user)return s;if(!e||!s||e?.user&&!i&&!j(e))return[];let o=Oi({portal:e,licenses:i,subscriptionInfo:r});return Li({messages:t,portal:e,clientId:a,signInSettings:n,navLinkDictionary:o})}function Ci(e){let{id:t,access:i,isPortal:a}=e;return!t&&!i&&!a}function Mi(e,t){let i=new URL(e),a=t||window.location.pathname;return i.pathname===a}function at({portal:e,clientId:t,signInSettings:i}){let a=e.user,n=it(t),r=!!i?.blockedApps?.includes("arcgisnotebooks"),{gallery:s="all",groups:o="all",map:l="all",notebook:u="notebookCreators",scene:g="all"}=e.portalProperties?.topNav||{},v=["home"];if(!a){if(!e.portalProperties?.topNav){let $=["gallery","map","scene","groups"],k=e.isPortal?["help"]:[];return[...v,...$,...k]}return[...v,...s==="all"?["gallery"]:[],...l==="all"?["map"]:[],...g==="all"?["scene"]:[],...o==="all"?["groups"]:[],...e.isPortal?["help"]:[]]}let m=a.orgId===e.id;return!e.portalProperties?.topNav&&j(e)?v=["ArcGIS","overview","pricing","map","scene","groups","myContent"]:v=[...v,...(s==="all"||s==="members"&&m)&&!n?["gallery"]:[],...(l==="all"||l==="members"&&m||l==="mapCreators"&&oe(a))&&!n?["map"]:[],...(g==="all"||g==="members"&&m||g==="sceneCreators"&&oe(a))&&!n?["scene"]:[],...!r&&(!e.isPortal||e.sourceJSON.supportsHostedNotebooks)&&(u==="members"&&m||u==="notebookCreators"&&Le(a))&&!n?["notebook"]:[],...(o==="all"||o==="members"&&m)&&!n?["groups"]:[],...m&&!n?["myContent","organization"]:[]],v}function N(e){return`${$e({portal:e})}/`}function Ni({keys:e,navLinkDictionary:t,messages:i}){let a=[];return e.forEach(n=>{let r=t[n];if(r&&(!("show"in r)||r.show)){let{href:s,newTab:o,icon:l,relativePath:u}=r;a.push({label:i[n],href:s,newTab:o,relativePath:u,icon:l})}}),a}function Ei({messages:e,portal:t}){if(!e||!t)return[];let i=N(t),a={overview:{label:e.overview,href:`${i}../features/features.html`,icon:"information"},pricing:{label:e.pricing,href:`${i}../features/plans/pricing.html`,icon:"credit-card"},map:{label:e.map,href:`${i}apps/mapviewer/index.html`,icon:"map"},scene:{label:e.scene,href:`${i}webscene/viewer.html`,icon:"globe"},help:{label:e.help,href:Q(t),newTab:!0,icon:"headset"},home:{label:e.home,href:`${i}index.html`,relativePath:"index.html",icon:"home"},gallery:{label:e.gallery,href:`${i}gallery.html`,relativePath:"gallery.html",icon:"gallery"},groups:{label:e.groups,href:`${i}groups.html`,relativePath:"groups.html",icon:"group"}};return(Ci(t)?["overview","pricing","map","scene","help"]:at({portal:t})).map(n=>a[n])}function Li({messages:e,portal:t,clientId:i,signInSettings:a,navLinkDictionary:n}){let r=ge(i),s=at({portal:t,clientId:i,signInSettings:a}),o=`${N(t)}geoanalytics${r?"engine":"fabric"}.html`;return r||fe(i)?[{href:`${o}#subscription`,label:e.subscription},...r?[{href:`${o}#downloads`,label:e.downloads}]:[],{href:`${o}#credentials`,label:e.developerCredentials},{href:`${o}#account`,label:e.account}]:Ni({keys:s,messages:e,navLinkDictionary:n})}function Oi({portal:e,licenses:t,subscriptionInfo:i}){let a=e.user,n=N(e),r=i?.options?.includes("Developer"),s=x("arcgiswebapps",t)||r&&x("locationplatformwebapps",t)||j(e);return{pricing:{href:`${n}../features/plans/pricing.html`},overview:{href:`${n}../features/features.html`},ArcGIS:{href:`${n}${j(e)?"index.html":"../features/features.html"}`,show:j(e)||!a},groups:{href:`${n}groups.html`,relativePath:"groups.html",icon:"group"},myContent:{href:`${n}content.html`,relativePath:"content.html",icon:"files"},map:{show:s,href:`${n}/apps/mapviewer/index.html`,icon:"map"},help:{href:Q(e),newTab:!0},gallery:{show:!!e.id&&!r,href:`${n}gallery.html`,relativePath:"gallery.html",icon:"gallery"},home:{show:!j(e)&&!r,href:`${n}index.html`,relativePath:"index.html",icon:"home"},scene:{show:s,href:`${n}webscene/viewer.html`,icon:"globe"},notebook:{show:ke(e),href:`${n}notebook/notebookhome.html`,relativePath:"notebook/notebookhome.html",icon:"notebook"},organization:{show:!j(e),href:`${n}organization.html`,relativePath:"organization.html",icon:"organization"},features:{show:j(e)&&!e.isPortal,href:`${n}../features/features.html`,icon:"information"}}}function Di({portal:e,item:t,messages:i,navigate:a,locale:n}){if(!t||!i||!t.modified)return null;let r=t.modified,s={lessThanOneMinute:i.lessThanOneMinute},o=Je(Ke(r)),l=o?.[1]==="year"||o?.[1]==="month"?Ft({locale:n,time:r},o?.[1]==="year"):Qe({locale:n,time:r,t9n:s}),u=`item.html?id=${t.id}`,g=`${N(e)}${u}}`;return X(t.id,p`<li class="list-item"><a class="list-item__link" href=${g??C} @click=${v=>{a({event:v,href:g,relativePath:u})}}>${p`<span class="list-item__container"><span class="list-item__logo list-item__logo--item-type"><arcgis-portal-item-type .item=${t} .user=${e.user} hide-text></arcgis-portal-item-type></span><span class="list-item__content"><span class="list-item__title list-item__title--regular">${t.title}</span><span class="list-item__subtitle">${Z(i.lastUpdated,{date:l})}</span></span></span>`}</a></li>`)}function Gi({locale:e,navigate:t,portal:i,open:a,apps:n,appsLoading:r,hiddenApps:s,appsSearchTerm:o,handlePlatformClose:l,handleAppsSearch:u,handleAppReorder:g,handleAppSave:v,handleAppHide:m,handleAppCancel:$,handleAppEdit:k,handleItemSearch:A,editingApplications:S,recentContent:_,recentContentLoading:d,recentContentSearchTerm:c,product:b,productInfo:I,links:T,messages:h}){if(!b||!i||!h)return null;let{name:y,icon:w}=I||{};return p`<calcite-sheet class="platform" .label=${h.label} position=inline-start display-mode=overlay id=example-sheet .open=${a} @calciteSheetClose=${l}><calcite-panel class="platform__panel"><div slot=header-content class="platform__header"><img src=${w??C} class="platform__header-image"><div class="platform__header-text"><h2 class="platform__title">${y}</h2><p class="platform__subtitle">${i.name}</p></div><calcite-action icon=x text="Close menu" scale=l @click=${l}></calcite-action></div><div class="platform__container"><div class="platform__tiles">${T.filter(({icon:f})=>f).map(({label:f,href:M,icon:ee,relativePath:B})=>p`<calcite-tile .icon=${ee} .description=${f} .href=${M} alignment=center scale=s @keydown=${E=>{(E.key==="Enter"||E.key===" ")&&t({event:E,href:M,relativePath:B})}} @click=${E=>{t({event:E,href:M,relativePath:B})}}></calcite-tile>`)}</div>${i?.user&&!j(i)&&p`<calcite-tabs layout=center class="platform__tabs"><calcite-tab-nav slot=title-group><calcite-tab-title selected>${h.myApps}</calcite-tab-title><calcite-tab-title>${h.recentContent}</calcite-tab-title></calcite-tab-nav><calcite-tab selected class="platform__tab">${r&&p`<calcite-scrim loading></calcite-scrim>`||""}${Pi({apps:n,appsLoading:r,appsSearchTerm:o,hiddenApps:s,messages:h,handleAppsSearch:u,handleAppReorder:g,handleAppSave:v,handleAppHide:m,handleAppCancel:$,handleAppEdit:k,editingApplications:S,portal:i})}</calcite-tab><calcite-tab class="platform__tab"><div class="list__header"><calcite-input type=search icon .placeholder=${h.searchRecentContent} scale=m class="list__search" @calciteInputInput=${f=>A(f.target.value)}></calcite-input></div>${d&&!r&&p`<calcite-scrim loading></calcite-scrim>`||""}<div class="list__container">${_?.length>0||d?p`<ul class="list">${O(_,f=>f.id,f=>Di({portal:i,messages:h,navigate:t,item:f,locale:e}))}</ul>`:c?.length?Y({title:Z(h.noAppResults,{term:c}),description:h.recentContentNoResultsDescription,icon:"search"}):Y({title:h.noContent,description:h.noContentDescription,icon:"clock"})}</div></calcite-tab></calcite-tabs>`||""}</div></calcite-panel></calcite-sheet>`}var de=["new","open","rename","save","saveCopy","share","copyLink","embed","details"];async function zi(e){return await Promise.resolve({status:"success"})}function ue(e){return de.includes(e.id)}function Ri(e){return(e||[])?.toSorted((t,i)=>{let a=ue(t),n=ue(i);return a&&!n?-1:n&&!a?1:n&&a?de.indexOf(t.id)-de.indexOf(i.id):-1})}function Wi(e,t){let i={new:[],save:[],share:[],details:[],custom:[]};if(!t||!e?.length)return i;let a={new:{text:t.new,group:"new"},open:{text:t.open,group:"new"},rename:{text:t.rename,group:"save"},save:{text:t.save,group:"save"},saveCopy:{text:t.saveAsCopy,group:"save"},share:{text:t.manageSharing,group:"share"},copyLink:{text:t.copyLink,group:"share"},embed:{text:t.embed,group:"share"},details:{text:t.itemDetails,group:"details",external:!0}},n=Ri(e),r=[];return n.forEach(s=>{if(!ue(s)){r.push(s);return}let{text:o,external:l,group:u}=a[s.id];i[u].push({text:o,external:l,...s})}),r.forEach(s=>{let o=s.group||"custom";i[o].push(s)}),i}function Fi({navigate:e,portal:t,menuItem:i,messages:a,portalItem:n,openProjectTitleEdit:r,projectMenuClick:s}){if(!t||!a||!i||i.id==="details"&&!n)return null;let{external:o,id:l,text:u}=i,g=`${N(t)}item.html?id=${n?.id}`;return X(`${l}${u}`,p`<calcite-dropdown-item .iconEnd=${o?"launch":void 0} .href=${l==="details"?g:i.href} .target=${o?"_blank":void 0} @calciteDropdownItemSelect=${v=>{if(l==="rename"){r?.();return}l==="details"&&e({event:v,href:g}),s?.({type:l})}}>${u}${l==="save"&&p`<calcite-icon icon=bullet-point-large class="project__indicator" scale=s></calcite-icon>`||""}</calcite-dropdown-item>`)}function Hi({navigate:e,portal:t,projectTitle:i,editedProjectTitle:a,handleProjectTitleSave:n,handleProjectTitleEdit:r,handleProjectTitleCancel:s,openProjectTitleEdit:o,portalItem:l,projectTitleEditing:u,projectTitleSaving:g,projectTitleErrorMessage:v,projectMenuIcon:m,projectMenuSaveIndicator:$,projectMenuClick:k,projectMenuOptions:A,projectTitleInputRef:S,projectButtonRef:_,messages:d}){if(!t||!d||!A?.length)return null;let c=Wi(A,d),b=!!v;return u?p`<form class="rename" @submit=${async I=>{I.preventDefault(),await n?.(a)}} @keydown=${I=>{I.key==="Escape"&&s?.()}}><calcite-input id=project-title-input type=text scale=l class="rename__input" .label=${d.title} .value=${a} .status=${b?"invalid":"idle"} @calciteInputInput=${I=>r?.(I.target.value)} ${z(S)}></calcite-input>${b&&p`<calcite-popover open .label=${d.error} .referenceElement=${S?.value||"project-title-input"} pointer-disabled placement=bottom-start><calcite-notice kind=danger open><div slot=message>${v}</div></calcite-notice></calcite-popover>`||""}<calcite-action .disabled=${g} icon=check scale=l .text=${d?.saveRename} active class="rename__action" type=submit .loading=${g}></calcite-action><calcite-action .disabled=${g} icon=x scale=l .text=${d?.cancelRename} class="rename__action" @click=${()=>s?.()}></calcite-action></form>`:p`<calcite-dropdown width=m class="fade-in"><calcite-button slot=trigger .iconStart=${m} icon-end=chevron-down scale=m class="project" appearance=transparent kind=neutral ${z(_)}><span class="project__text">${i}${$&&p`<calcite-icon scale=s icon=bullet-point-large class="project__indicator"></calcite-icon>`||""}</span></calcite-button>${O(Object.entries(c).filter(([I,T])=>T.length),([I,T])=>I,([I,T])=>p`<calcite-dropdown-group selection-mode=none>${T.map(h=>Fi({menuItem:h,navigate:e,portal:t,messages:d,portalItem:l,openProjectTitleEdit:o,projectMenuClick:k}))}</calcite-dropdown-group>`)}</calcite-dropdown>`}function Vi(e){return["Location Platform","Online","Enterprise"].includes(e)}function nt({portal:e,searchType:t,searchTerm:i}){let a=e?.sourceJSON?.vectorSearchEnabled?`&mode=${t}`:"";return`search.html?q=${i}${a}`}function Bi({portal:e,item:t,messages:i,navigate:a}){if(!t||!i)return null;let n=Z(i.by,{itemType:Ee(t),owner:t.owner}),r=`item.html?id=${t.id}`,s=`${N(e)}${r}`;return X(t.id,p`<li class="list-item"><a class="list-item__link" href=${s??C} @click=${o=>a({event:o,href:s,relativePath:r})}>${p`<span class="list-item__container"><span class="list-item__logo list-item__logo--item-type"><arcgis-portal-item-type .item=${t} .user=${e.user} hide-text></arcgis-portal-item-type></span><span class="list-item__content"><span class="list-item__title list-item__title--regular list-item__title--large">${t.title}</span><span class="list-item__subtitle list-item__subtitle--large">${n}</span></span></span>`}</a></li>`)}function Ui({portal:e,suggestions:t,messages:i,navigate:a,searchType:n,searchTerm:r}){if(!i||!e||!r)return null;if(!t)return p`<div><calcite-loader scale=l .label=${i.loadingResults}></calcite-loader></div>`;let s=nt({portal:e,searchType:n,searchTerm:r}),o=`${N(e)}${s}`;return p`<ul class="list">${t.map(l=>Bi({messages:i,portal:e,item:l,navigate:a}))}</ul><div class="suggestions__footer"><calcite-button icon-end=arrow-right scale=l appearance=outline class="suggestions__footer__button" kind=neutral round .href=${o} @click=${l=>{a({href:o,event:l,relativePath:s})}}>${i.viewAll}</calcite-button></div>`}function qi({portal:e,messages:t,searchType:i,handleSearchTypeChange:a}){if(!t||!e?.sourceJSON?.vectorSearchEnabled)return null;let n=i==="keyword",r=t.searchType;return p`<calcite-chip .label=${r.label} .icon=${n?"text":"effects"} id=search-type-toggle appearance=solid kind=neutral><span>${n?r.keywordTitle:r.semanticTitle}</span><calcite-icon icon=chevron-down scale=s class="suggestions__search-type__icon" aria-hidden=true></calcite-icon></calcite-chip><calcite-popover pointer-disabled .label=${t.searchType.label} reference-element=search-type-toggle placement=bottom-end class="suggestions__search-type"><div class="esri-header-search-type-popover-contents"><calcite-list .label=${t.searchType.label} interaction-mode=interactive display-mode=flat scale=m selection-mode=none><calcite-list-item @calciteListItemSelect=${()=>a("keyword")} icon-start=text value=keyword .label=${r.keywordTitle} .description=${r.keywordDescription}></calcite-list-item><calcite-list-item @calciteListItemSelect=${()=>a("vector")} icon-start=effects value=semantic .label=${r.semanticTitle} .description=${r.semanticDescription}></calcite-list-item></calcite-list></div></calcite-popover>`}function Ji({currentPathname:e,navigate:t,product:i,portal:a,messages:n,searchActive:r,searchType:s,searchTerm:o,suggestions:l,searchInputRef:u,searchActionRef:g,searchPopoverRef:v,handleSearch:m,handleToggleSearch:$,handleSearchTypeChange:k}){if(!Vi(i)||!n||!a||e?.includes("search.html"))return null;let A=nt({portal:a,searchTerm:o,searchType:s});return r?p`<div class="search" id=search-reference-element><calcite-input type=search scale=l icon=search class="search__input" @calciteInputInput=${S=>m(S.target.value)} @keydown=${S=>{S.key==="Enter"&&(t({href:A,event:S}),S.defaultPrevented||(window.location.href=A)),S.key==="Escape"&&$(!1)}} ${z(u)}></calcite-input><calcite-action icon=x scale=l .text=${n?.close} active class="search__action" @click=${()=>$(!1)}></calcite-action><calcite-popover .label=${n.suggestions} reference-element=search-reference-element .open=${r&&!!o} pointer-disabled placement=bottom-start trigger-disabled .focusTrapOptions=${{initialFocus:!1}} ${z(v)}><div class="suggestions__header"><h3 class="suggestions__title">${n.topResults}</h3>${qi({portal:a,messages:n,searchType:s,handleSearchTypeChange:k})}</div><div class="suggestions__results">${Ui({portal:a,suggestions:l,navigate:t,messages:n,searchType:s,searchTerm:o})}</div></calcite-popover></div>`:p`<calcite-action icon=search scale=l text=search class="search__action fade-in" @click=${()=>$(!0)} ${z(g)}></calcite-action>`}function Ki({signIn:e,messages:t}){return p`<calcite-menu slot=user .label=${t?.account||""} class="border-start fade-in"><calcite-menu-item .label=${t?.signIn||""} text-enabled .text=${t?.signIn||""} @calciteMenuItemSelect=${()=>e()}></calcite-menu-item></calcite-menu>`}function Qi({navigate:e,portal:t,product:i,links:a,messages:n,currentPathname:r,searchActive:s}){return!i||!t||!n||!ve(i)||!a||s?null:p`<calcite-menu slot=content-start .label=${n.label} class="site-nav fade-in">${O(a,({href:o})=>o,({label:o,href:l,relativePath:u})=>p`<calcite-menu-item .text=${o} text-enabled .label=${o} .href=${l} .active=${Mi(l,r)} @click=${g=>e({event:g,href:l,relativePath:u})}></calcite-menu-item>`)}</calcite-menu>`}function Xi({userLinks:e,messages:t,navigate:i,openAccountSwitcher:a,portal:n,signOut:r,textDisabled:s}){let o=n?.user;return!o||!e||!t||e?.account?.options.length<1&&e?.resources?.options.length<1?null:p`<div slot=user class="user fade-in"><calcite-navigation-user id=navigation-user full-name=${o?.fullName??C} .username=${o?.username} .thumbnail=${o.thumbnailUrl||void 0} .userId=${o?.id} .textDisabled=${s}></calcite-navigation-user><calcite-dropdown width=m reference-element=navigation-user>${s&&p`<div class="user__top"><arcgis-portal-user-avatar .user=${o} .portal=${n} scale=l class="user__avatar"></arcgis-portal-user-avatar><div class="user__top__text"><h2 class="user__top__full">${o.fullName}</h2><p class="user__top__username">${o.username}</p></div></div>`||""}${Object.values(e).filter(l=>l.options.length).map(({title:l,options:u})=>p`<calcite-dropdown-group selection-mode=none .groupTitle=${l}>${u.map(({icon:g,label:v,href:m,relativePath:$})=>p`<calcite-dropdown-item .iconStart=${g} .href=${m} @keydown=${k=>{(k.key==="Enter"||k.key===" ")&&i({event:k,href:m,relativePath:$})}} @click=${k=>{i({event:k,href:m,relativePath:$})}}>${v}</calcite-dropdown-item>`)}</calcite-dropdown-group>`)}<calcite-dropdown-group selection-mode=none><calcite-dropdown-item icon-start=sign-out @calciteDropdownItemSelect=${()=>r()}>${t.signOut}</calcite-dropdown-item>${a&&p`<calcite-dropdown-item icon-start=users @calciteDropdownItemSelect=${l=>{let u=Me(l.target,"calcite-dropdown");u&&(u.open=!1),a()}}>${t.switchAccounts}</calcite-dropdown-item>`||""}</calcite-dropdown-group></calcite-dropdown></div>`}var rt={community:"https://community.esri.com/plugins/common/feature/oauth2sso_v2/sso_login_redirect?referer=https%3A%2F%2Fcommunity.esri.com%2F",myEsri:"https://my.esri.com"};function Yi({messages:e,userLinks:t}){let i={account:{title:e.account,options:[]},resources:{title:e.resources,options:[]}};return t.forEach(a=>{i[a.group].options.push(a)}),i}function Zi({portal:e,messages:t,clientId:i}){if(!e?.user||!t)return{account:{title:t?.account,options:[]},resources:{title:t?.account,options:[]}};let a=ia(e),n=ea({navLinkDictionary:a,messages:t,clientId:i});return Yi({userLinks:n,messages:t})}function ea({navLinkDictionary:e,messages:t,clientId:i}){let a=["myProfile","mySettings","myEsri","training","trialDownload","communityForums","arcgisBlog","help"];return(ge(i)||fe(i))&&(a=["mySettings","arcgisBlog","help"]),it(i)&&(a=[]),ta(a,t,e)}function ta(e,t,i){let a=[];return e.forEach(n=>{let r=i[n];if(r&&(!("show"in r)||r.show)){let{href:s,newTab:o,icon:l,group:u,relativePath:g}=r;a.push({label:t[n],group:u,href:s,newTab:o,relativePath:g,icon:l})}}),a}function ia(e){let t=N(e),i=aa(e),a=`user.html${window.location.pathname.includes("home/user.html")?"?nav=1":""}`;return{myProfile:{href:`${t}${a}`,relativePath:a,group:"account",icon:"user"},mySettings:{href:`${t}${a}#settings`,relativePath:`${a}#settings`,group:"account",icon:"gear"},help:{group:"resources",icon:"question",href:Q(e),newTab:!0},communityForums:{show:i,group:"resources",icon:"speech-bubbles",href:rt.community,newTab:!0},myEsri:{show:i,group:"account",icon:"globe",href:ra(e),newTab:!0},arcgisBlog:{show:i,group:"resources",icon:"article",href:"https://www.esri.com/arcgis-blog/products/arcgis-online",newTab:!0},training:{show:i,group:"resources",icon:"education",href:na(e),newTab:!0},trialDownload:{group:"resources",icon:"download-to",show:oa(e),href:`${t}/home/user.html${window.location.pathname.includes("home/user.html")?"?nav=1&tab=licenses":"?tab=licenses"}#settings`}}}function aa(e){return!e.isPortal&&e?.user?.sourceJSON?.userType==="both"}function na(e){return st(e,`${window.location.protocol}//www.esri.com/training/arcgis-online-training`)}function ra(e){return st(e,rt.myEsri)}function st(e,t){let i=K(e),a=sa(e),n=`https://accounts${a?a==="dev"?"-dev":"-stg":""}.esri.com/`,r=`&authBaseUrl=${H(i.replace("/sharing/rest/",""),e)}`,s=`${n}LoginHandler/switchuser?`,o=`username=${e?.user?.username??""}&redirect_uri=${t}${r}`;return`${s}${o}`}function sa(e){let t=e.portalHostname;return t?.includes("dev")?"dev":t?.includes("qa")?"qa":""}function oa(e){return!e?.isPortal&&["Trial","Trial Press"].includes(e?.sourceJSON.subscriptionInfo?.type)}function ca(e){switch(e){case"360 VR":return{name:"360 VR",fileName:"arcgis-360-vr",icon:"arcgis-360-vr"};case"Business Analyst":return{name:"ArcGIS Business Analyst",fileName:"arcgis-business-analyst",icon:"business-analyst"};case"Dashboards":return{name:"ArcGIS Dashboards",fileName:"arcgis-dashboards",icon:"operations-dashboard"};case"Data Pipelines":return{name:"ArcGIS Data Pipelines",fileName:"arcgis-data-pipelines",icon:"data-pipelines"};case"Deep Learning Studio":return{name:"Deep Learning Studio",fileName:"arcgis-deep-learning-studio",icon:"deeplearningstudio"};case"Enterprise":return{name:"ArcGIS Enterprise",fileName:"arcgis-enterprise",icon:"arcgis-enterprise"};case"Excalibur":return{name:"ArcGIS Excalibur",fileName:"arcgis-excalibur",icon:"excalibur"};case"Experience Builder":return{name:"ArcGIS Experience Builder",fileName:"arcgis-experience-builder",icon:"arcgis-experience-builder"};case"Field Maps":return{name:"Field Maps Designer",fileName:"arcgis-field-maps",icon:"fieldmaps"};case"Field Maps Designer EA":return{name:"Field Maps Designer (EA)",fileName:"arcgis-field-maps-designer-ea",icon:"fieldmaps"};case"GeoAnalytics Engine":case"GeoAnalytics Fabric":return{name:e,fileName:"arcgis-geoanalytics-engine",icon:"arcgis-geoanalytics"};case"GeoBIM":return{name:"ArcGIS GeoBIM",fileName:"arcgis-geobim",icon:"geobim"};case"Hub":return{name:"ArcGIS Hub",fileName:"arcgis-hub",icon:"arcgis-hub"};case"Instant Apps":return{name:"Instant Apps",fileName:"arcgis-instant-apps",icon:"instant-apps"};case"Knowledge":return{name:"ArcGIS Knowledge Studio",fileName:"arcgis-knowledge",icon:"knowledge-studio"};case"Location Platform":return{name:"Location Platform",fileName:"arcgis-location-platform",icon:"location-platform"};case"Map Viewer":return{name:"Map Viewer",fileName:"map-viewer",icon:"map-viewer"};case"Mission":return{name:"ArcGIS Mission Manager",fileName:"arcgis-mission",icon:"mission"};case"Monitor":return{name:"ArcGIS Monitor",fileName:"arcgis-monitor",icon:"monitor"};case"Notebooks":return{name:"ArcGIS Notebooks",fileName:"arcgis-notebooks",icon:"notebook"};case"Online":return{name:"ArcGIS Online",fileName:"arcgis-online",icon:"arcgis-online"};case"Ortho Maker":return{name:"Ortho Maker",fileName:"arcgis-ortho-maker",icon:"ortho-maker"};case"QuickCapture":return{name:"ArcGIS QuickCapture",fileName:"arcgis-quickcapture",icon:"quick-capture"};case"Reality Studio":return{name:"ArcGIS Reality Studio",fileName:"arcgis-reality-studio",icon:"arcgis-reality-studio"};case"Scene Viewer":return{name:"Scene Viewer",fileName:"sceneviewer",icon:"scene-viewer"};case"Solutions":return{name:"ArcGIS Solutions",fileName:"arcgis-solutions",icon:"solutions"};case"StoryMaps":return{name:"ArcGIS StoryMaps",fileName:"arcgis-storymaps",icon:"story-maps"};case"Survey123":return{name:"ArcGIS Survey123",fileName:"arcgis-survey123",icon:"survey123"};case"Tracker":return{name:"Track Viewer",fileName:"arcgis-tracker",icon:"track-viewer"};case"Urban":return{name:"ArcGIS Urban",fileName:"arcgis-urban",icon:"arcgis-urban"};case"Vector Tile Style Editor":return{name:"Vector Tile Style Editor",fileName:"vector-tile-style-editor",icon:"vector-tile-style-editor"};case"Velocity":return{name:"ArcGIS Velocity",fileName:"arcgis-velocity",icon:"velocity"};case"Web Editor":return{name:"Web Editor",fileName:"arcgis-web-editor",icon:"web-editor"};case"Workflow Manager":return{name:"ArcGIS Workflow Manager",fileName:"arcgis-workflow-manager",icon:"workflow-manager"};case"Workforce":return{name:"ArcGIS Workforce",fileName:"arcgis-workforce",icon:"workforce"};default:return{name:"ArcGIS Online",fileName:"arcgis-online",icon:"arcgis-online"}}}function la({product:e,portal:t,clientId:i}){return e!=="Online"?e:t?.sourceJSON?.subscriptionInfo?.options?.includes("Developer")?"Location Platform":fe(i)?"GeoAnalytics Fabric":ge(i)?"GeoAnalytics Engine":t?.isPortal?"Enterprise":"Online"}function pa(e){let t=la(e),{name:i,fileName:a,icon:n}=ca(t);return{name:i,glyph:J(`assets/portal-navigation/product-logos/${a}-glyph-32.svg`),icon:J(`assets/portal-navigation/apps/${n}.avif`)}}function da(){let e=Dt();["item.html","group.html"].some(t=>window.location.href.includes(t))?window.location.href=`./signin.html?locale=${e}&useLandingPage=false&returnUrl=${encodeURIComponent(window.location.href)}`:window.location.href=`./signin.html?locale=${e}&useLandingPage=true`}function ua({portal:e,clientId:t}){let i=R({portal:e});if(e?.isPortal){let a=e.access==="private"?H("signin.html",e):e.allSSL||window.location.protocol==="https:"?H("./index.html",e):`${i}/index.html`;ma(e,a)}else window.location.href=`${i}/pages/Account/manage_accounts.html#client_id=${t}&signout=true`}function ha(){Zt(Ue),ei(Ue)}function ma(e,t=window.location.href){let i=window.location.href.startsWith("http://"),a=Ae(e);Gt.destroyCredentials(),ha();let n=new URL(H(`${K(e)}oauth2/signout`,e)),{searchParams:r}=n;r.append("client_id","arcgisonline"),r.append("redirect_uri",t),a&&i&&(e.isPortal||e.user?.sourceJSON.provider==="enterprise")&&r.append("token",a),window.location.href=n.href}function D(e,t){if(!e)return 0;let i=Ne({text:e,font:`${t==="s"?".875rem":"1rem"} 'Avenir Next'`});return Math.ceil(i)}function ga({portal:e,product:t,projectTitle:i,links:a,messages:n,productInfo:r}){if(!t||!e)return;let s=e.user,o=ve(t)&&a?.length?24+a.reduce((g,v)=>g+16+D(v.label)+16,0):0,l=40+D(i)+32+16+16+12,u=s?Math.max(D(s?.username,"s"),D(s?.fullName)):D(n?.signIn);return{actions:192,project:i?l:0,product:64+Math.max(D(r?.name),D(e.name,"s"))+16,nav:o,user:64+u+16}}function fa({measurements:e,screenWidth:t}){let{actions:i,nav:a,product:n,project:r,user:s}=e,o=64,l=t-i-o>a,u=t-i-(l?a:0)-r-o>n,g=t-a-r-i-n<s;return{nav:l,product:u,user:g?"avatar":"full"}}var ot=' -type:"Code Attachment" -type:"Featured Items" -type:"Symbol Set" -type:"Color Set" -type:"Windows Viewer Add In" -type:"Windows Viewer Configuration" -type:"Map Area" -typekeywords:"MapAreaPackage" -type:"Indoors Map Configuration" -typekeywords:"SMX"';async function qe({portal:e,searchTerm:t}){if(!e?.user)return[];try{return(await e.queryItems({...t?{query:t}:{},filter:`owner:${e.user.username}${ot}`,num:20,sortField:"modified",sortOrder:"desc"})).results}catch{return[]}}async function va({portal:e,searchTerm:t}){if(!e?.user)return[];let i=We((t||"").substring(0,409)),a=`${e?.id?`accountid:"${e.id}"`:""}${ot}`,n=`${K(e)}search/suggest`;return(await L(n,{query:{suggest:i,filters:a,searchFields:"title",f:"json"}}))?.result?.results||[]}var ba=be`:host{display:block}.wrapper{background:var(--calcite-color-foreground-1);border-bottom:1px solid var(--calcite-color-border-3)}.navigation{width:100%;min-width:0;min-height:4rem;display:flex;align-items:stretch;max-width:var(--arcgis-portal-navigation-max-width);margin-inline:auto}.navigation--loading .fade-in{opacity:0}.fade-in{opacity:1;transition:opacity ease-in-out .15s}.content-end{margin-inline-start:auto;display:flex;align-items:center}.content-end[hidden]{display:none}.action{height:100%;--calcite-internal-action-spacing: 1.25rem}.border-start{border-inline-start:1px solid var(--calcite-color-border-3)}.platform{--calcite-sheet-scrim-background: var(--calcite-color-transparent-scrim);--calcite-sheet-width: 24rem}.platform__container{display:flex;flex-direction:column;max-height:100%}.platform__header{display:flex;align-items:center}.platform__header-image{width:48px;height:48px;margin-inline-end:1rem}.platform__header-text{flex:1 1 auto;line-height:1.375}.platform__title{margin:0;padding:0;color:var(--calcite-color-text-1);font-size:var(--calcite-font-size--1);font-weight:var(--calcite-font-weight-medium)}.platform__subtitle{margin:0;padding:0;font-size:var(--calcite-font-size--2);color:var(--calcite-color-text-2)}.platform__panel{border-inline-end:1px solid var(--calcite-color-border-3);--calcite-panel-background-color: var(--calcite-color-foreground-1)}.platform__tiles{margin:.75rem .75rem 1.5rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));grid-gap:.5rem}.platform__tabs{min-height:0;flex:1 1 auto;--calcite-tab-content-space-y: 0}.platform__tab{position:relative}.list{list-style:none;margin:0;padding:0}.list__container{position:relative}.list__header{display:flex;align-items:center;padding:.5rem .75rem;border-bottom:1px solid var(--calcite-color-border-3);background-color:var(--calcite-color-foreground-1);position:sticky;top:0;z-index:701}.list__search{flex:1 1 auto;--calcite-color-border-input: var(--calcite-color-foreground-1)}.list-item__link{display:block;box-sizing:border-box;width:100%;padding-inline-start:.75rem;background-color:var(--calcite-color-foreground-1);outline-color:transparent;text-decoration:none;outline-offset:0;transition:color var(--calcite-animation-timing) ease-in-out,background-color var(--calcite-animation-timing) ease-in-out,outline-color var(--calcite-internal-animation-timing-fast) ease-in-out,outline-offset var(--calcite-internal-animation-timing-fast) ease-in-out}.list-item__link:hover{background-color:var(--calcite-color-transparent-hover)}.list-item__link:focus{outline:var(--calcite-border-width-md) solid var(--calcite-color-focus);outline-offset:-2px}.list-item__container{box-sizing:border-box;width:100%;padding-block:.5rem;padding-inline-start:0;padding-inline-end:.5rem;border-bottom:1px solid var(--calcite-color-border-3);display:flex;align-items:center;position:relative;pointer-events:none}.list-item__content{display:flex;flex-direction:column;justify-content:center;min-width:0}.list-item__logo{width:48px;height:48px;flex:0 0 auto;box-sizing:border-box;margin-inline-end:.5rem;justify-content:center;align-items:center;position:relative;display:flex}.list-item__logo-bg{position:absolute}.list-item__indicator{position:absolute;width:.5rem;height:.5rem;border-radius:50%;background-color:var(--calcite-color-status-success);border:2px solid var(--calcite-color-foreground-1);z-index:50;top:.25rem;inset-inline-start:-.25rem}.list-item__abbr{color:#fff;font-weight:700;position:relative}.list-item__logo-empty{border:2px dashed var(--calcite-color-border-3);border-radius:8px}.list-item__logo--item-type{background-color:var(--calcite-color-background);display:flex;justify-content:center;align-items:center}.list-item__title{display:block;font-size:var(--calcite-font-size--1);color:var(--calcite-color-text-1);font-weight:500;word-wrap:break-word}.list-item__title--regular{font-weight:400;padding-top:.25rem}.list-item__title--large{font-size:var(--calcite-font-size-0);line-height:1}.list-item__subtitle{display:block;font-size:var(--calcite-font-size--2);color:var(--calcite-color-text-3);font-weight:500;padding-top:.25rem;padding-bottom:.25rem}.list-item__subtitle--large{font-size:var(--calcite-font-size--1);font-weight:400;padding:0}.list-item__chip{margin-inline-start:auto;--calcite-chip-background-color: var(--calcite-color-foreground-current)}.app--hidden{--calcite-list-background-color: var(--calcite-color-background)}.app--hidden .list-item__logo{opacity:.4}.logo{border-inline-end:1px solid var(--calcite-color-border-3)}.site-nav{margin-inline-start:1.5rem}.project{border-inline-end:1px solid var(--calcite-color-border-3)}.project__indicator{margin-inline-start:1rem;--calcite-ui-icon-color: var(--calcite-color-status-danger);float:inline-end}.project__text{display:flex;font-size:1rem}.rename{width:100%;min-width:0;display:flex;flex:1 1 0;align-items:center;margin-inline-start:.5rem}.rename__action{margin-inline-end:.5rem;display:flex;align-items:center}.rename__input{margin-inline-end:.5rem;display:block;width:100%}.search{width:100%;min-width:0;display:flex;flex:1 1 0;align-items:center;margin-inline-start:.5rem}.search__action{margin-inline-end:.5rem;display:flex;align-items:center}.search__input{margin-inline-end:.5rem;display:block;width:100%}.suggestions__header{display:flex;align-items:center;width:var(--calcite-popover-max-size-x);box-sizing:border-box;padding:.75rem 1rem;border-bottom:1px solid var(--calcite-color-border-3)}.suggestions__title{padding:0;margin:0;font-weight:500;color:var(--calcite-color-text-1);font-size:var(--calcite-font-size-1);flex:1 1 0}.suggestions__search-type{--calcite-popover-max-size-x: 320px}.suggestions__search-type__icon{vertical-align:-.2rem}.suggestions__footer{display:flex;align-items:center;justify-content:center;padding:1rem}.notifications{width:min(24rem,80vw)}.notifications--full:after{content:"";display:block;border-top:1px solid var(--calcite-color-border-3);margin-left:1rem}.notifications__list{max-height:min(18rem,80vh);overflow:auto}.notifications--empty{padding:2rem}.empty{padding:1rem;text-align:center;color:var(--calcite-color-text-3);--calcite-icon-color: var(--calcite-color-status-success-hover)}.empty__header{margin:0;padding:.75rem 0 0;color:var(--calcite-color-text-1);font-weight:500;font-size:var(--calcite-font-size-1)}.empty__text{margin:0;padding:0;color:var(--calcite-color-text-3);font-weight:400;font-size:var(--calcite-font-size-0)}.notification{display:flex;flex-direction:column;padding:.5rem}.notification__message{color:var(--calcite-color-text-1);font-size:var(--calcite-font-size-0);--calcite-color-brand-underline: transparent}.notification__date{color:var(--calcite-color-text-3);font-size:var(--calcite-font-size-0)}.notifications__dismiss{margin-inline-start:auto;margin-inline-end:1rem;margin-block:.5rem}.user{display:flex;--calcite-dropdown-item-text-color: var(--calcite-color-text-3);--calcite-dropdown-group-title-text-color: var(--calcite-color-text-2)}.user__top{display:flex;padding:.75rem;border-bottom:1px solid var(--calcite-color-border-3)}.user__top__avatar{flex:0 0 auto}.user__top__text{box-sizing:border-box;word-wrap:break-word;flex:1 1 0;min-width:0;padding-inline-start:1rem;line-height:1.375}.user__top__full{font-size:1rem;font-weight:medium;color:var(--calcite-colot-text-1);padding:0;margin:0}.user__top__username{font-size:1rem;color:var(--calcite-colot-text-2);padding:0;margin:0}`;function wa({messages:e,portal:t,showNav:i,openPlatformMenu:a}){return!e||i&&!t?.user?null:p`<calcite-action .label=${e.applicationMenu} text="app switcher" icon=app-launcher scale=l class="action" @click=${a}></calcite-action>`}var he=class extends _e{constructor(){super(...arguments),this.messages=je({blocking:!0}),this.refreshNotifications=async()=>{let{portal:t,messages:i}=this;this.notifications=await Fe({portal:t,locale:i._t9nLocale,t9n:i.notifications})},this.deleteNotifications=async t=>{let{portal:i}=this;if(t?.length<20)await Vt(i,t);else{let a=0;for await(let n of t)await Xe({id:n,portal:i}),this.notificationDeleteProgress=Math.ceil(a++/t.length*100)}this.notificationDeleteProgress=void 0,this.refreshNotifications()},this.navigate=t=>{this.arcgisNavigate.emit(t),this.platformMenuOpen=!1,this.searchActive=!1},this.openPlatformMenu=()=>{this.platformMenuOpen=!0,this.searchActive=!1},this.projectMenuClick=t=>{this.arcgisNavigationProjectMenuClick.emit(t)},this.openProjectTitleEdit=()=>{this.projectTitleEditing=!0,this.editedProjectTitle=this.projectTitle,requestAnimationFrame(()=>{this.projectTitleInputRef?.value?.setFocus()})},this.closeProjectTitleEdit=()=>{this.projectTitleEditing=!1,this.projectTitleErrorMessage=void 0,requestAnimationFrame(()=>{this.projectButtonRef?.value?.setFocus()})},this.handleProjectTitleSave=async t=>{this.projectTitleSaving=!0;let i=await(this.projectTitleSave||zi)(t);if(this.projectTitleSaving=!1,i.status==="success"){this.closeProjectTitleEdit();return}i.message&&(this.projectTitleErrorMessage=i.message)},this.handleProjectTitleEdit=t=>{this.editedProjectTitle=t},this.handleProjectTitleCancel=()=>{this.editedProjectTitle=this.projectTitle,this.closeProjectTitleEdit()},this.signOut=()=>{let{portal:t,clientId:i}=this;ua({portal:t,clientId:i}),this.arcgisNavigationSignOut.emit()},this.signIn=()=>{this.arcgisNavigationSignIn.emit(),da()},this.openAccountSwitcher=()=>{this.accountSwitcherOpen=!0},this.handlePlatformClose=()=>{this.platformMenuOpen=!1,this.handleAppCancel()},this.handleAppSave=async()=>{let{hiddenApps:t,sortedApps:i,userProperties:a,portal:n}=this;this.apps=[...i],this.editingApplications=!1,this.appsLoading=!0;let{result:r}=await Ii({apps:i,hiddenApps:t,userProperties:a,portal:n});r?.success&&(this.previousAppState={apps:i,hiddenApps:t}),await Pe(1e3),this.appsLoading=!1},this.handleAppCancel=()=>{this.previousAppState&&(this.apps=this.previousAppState.apps,this.hiddenApps=this.previousAppState.hiddenApps),this.editingApplications=!1},this.handleAppHide=({app:t,hidden:i})=>{!this.hiddenApps||!t||(this.hiddenApps={...this.hiddenApps||{},[t]:i})},this.handleAppReorder=({oldIndex:t,newIndex:i})=>{let a=[...this.sortedApps],n=a[t];a.splice(t,1),a.splice(i,0,n),this.sortedApps=a},this.handleItemSearch=t=>{this.recentContentLoading=!0,this.recentContentSearchTerm=t,this.debouncedItemSearch(t)},this.debouncedItemSearch=re(async t=>{this.recentContent=await qe({portal:this.portal,searchTerm:t}),this.recentContentLoading=!1},1e3),this.debouncedSuggest=re(async t=>{this.suggestions=await va({portal:this.portal,searchTerm:t})},1e3),this.handleSearch=t=>{this.searchTerm=t,this.suggestions=void 0,this.debouncedSuggest(t)},this.sizeSearchPopover=()=>{let t=this.searchInput?.value,i=this.searchPopover?.value;if(!t||!i)return;let a=t.offsetWidth>480?`${t.offsetWidth}px`:"80vw";i.style?.setProperty?.("--calcite-popover-max-size-x",a)},this.handleToggleSearch=t=>{this.searchActive=t,this.searchTerm="",this.suggestions=void 0,requestAnimationFrame(()=>{if(t){this.searchInput?.value?.setFocus(),this.sizeSearchPopover();return}this.searchAction?.value?.setFocus()})},this.handleSearchTypeChange=t=>{this.searchType=t},this.searchInput=G(),this.searchAction=G(),this.searchPopover=G(),this.projectTitleInputRef=G(),this.projectButtonRef=G(),this.links=[],this.notifications=[],this.apps=[],this.hiddenApps={},this.sortedApps=[],this.appsSearchTerm="",this.appsLoading=!0,this.editingApplications=!1,this.recentContent=[],this.recentContentSearchTerm="",this.recentContentLoading=!0,this.platformMenuOpen=!1,this.accountSwitcherOpen=!1,this.projectTitleEditing=!1,this.projectTitleSaving=!1,this.screenWidth=window.innerWidth,this.searchActive=!1,this.searchTerm="",this.searchType="keyword",this.projectMenuOptions=[],this.currentPathname=window.location.pathname,this.arcgisNavigate=F(),this.arcgisNavigationProjectMenuClick=F(),this.arcgisNavigationSignIn=F(),this.arcgisNavigationSignOut=F()}static{this.properties={infoBanner:16,links:16,userLinks:16,notifications:16,apps:16,hiddenApps:16,sortedApps:16,previousAppState:16,appsSearchTerm:16,appsLoading:16,editingApplications:16,recentContent:16,recentContentSearchTerm:16,recentContentLoading:16,platformMenuOpen:16,accountSwitcherOpen:16,editedProjectTitle:16,projectTitleEditing:16,projectTitleSaving:16,projectTitleErrorMessage:16,productInfo:16,notificationDeleteProgress:16,measurements:16,screenWidth:16,showProduct:16,showNav:16,showUser:16,searchActive:16,searchTerm:16,suggestions:16,searchType:16,portal:0,portalItem:0,product:1,productHref:1,projectTitle:1,projectTitleSave:0,projectMenuIcon:1,projectMenuSaveIndicator:5,projectMenuOptions:0,disableTrackViewer:5,disableNotebookServer:5,clientId:1,currentPathname:1,maxWidth:9}}static{this.styles=ba}#e;async loaded(){let{portal:t,messages:i,clientId:a,product:n}=this;this.calculateMeasurements(),this.productInfo=pa({product:n,clientId:a,portal:t}),this.userLinks=Zi({portal:t,messages:i.user,clientId:a}),this.notifications=await Fe({portal:t,locale:i._t9nLocale,t9n:i.notifications}),this.recentContent=await qe({portal:t}),this.recentContentLoading=!1;let{apps:r,hiddenApps:s,signInSettings:o,licenses:l,userProperties:u}=await ki({portal:t,trackViewerEnabled:!this.disableTrackViewer,notebookServerEnabled:!this.disableNotebookServer}),g=await Ge(t);this.infoBanner=g?.informationalBanner,this.userProperties=u,this.apps=r,this.hiddenApps=s,this.sortedApps=r,this.previousAppState={apps:r,hiddenApps:s},this.appsLoading=!1,this.links=ji({portal:t,messages:i.links,licenses:l,clientId:a,signInSettings:o}),this.calculateMeasurements()}connectedCallback(){super.connectedCallback(),!(typeof ResizeObserver>"u")&&(this.#e=new ResizeObserver(()=>{requestAnimationFrame(()=>{this.screenWidth=window.innerWidth,this.updateBreakpoints(),this.sizeSearchPopover()})}))}firstUpdated(){this.el&&this.#e&&(this.#e.observe(this.el),this.screenWidth=window.innerWidth)}disconnectedCallback(){this.#e?.disconnect(),this.#e=void 0,super.disconnectedCallback()}calculateMeasurements(){let{links:t,messages:i,portal:a,product:n,productInfo:r,projectTitle:s}=this;if(a){let o=ga({portal:a,product:n,productInfo:r,links:t,messages:i.user,projectTitle:s});this.measurements=o,this.updateBreakpoints()}}updateBreakpoints(){let{measurements:t,maxWidth:i}=this;if(t){let a=i?Math.min(this.screenWidth,i):this.screenWidth,n=fa({measurements:t,screenWidth:a});this.showProduct=n.product,this.showNav=n.nav,this.showUser=n.user}}render(){let{accountSwitcherOpen:t,apps:i,appsLoading:a,appsSearchTerm:n,currentPathname:r,handleAppCancel:s,handleAppHide:o,handleAppReorder:l,handleAppSave:u,handleItemSearch:g,handlePlatformClose:v,handleSearch:m,handleToggleSearch:$,handleSearchTypeChange:k,hiddenApps:A,infoBanner:S,links:_,messages:d,navigate:c,notifications:b,notificationDeleteProgress:I,openAccountSwitcher:T,portal:h,portalItem:y,product:w,productInfo:f,productHref:M,projectTitle:ee,editedProjectTitle:B,handleProjectTitleSave:E,handleProjectTitleEdit:ct,handleProjectTitleCancel:lt,openProjectTitleEdit:pt,openPlatformMenu:dt,platformMenuOpen:ut,projectTitleEditing:te,projectTitleSaving:ht,projectTitleErrorMessage:mt,projectMenuIcon:gt,projectMenuSaveIndicator:ft,projectMenuClick:vt,projectMenuOptions:bt,projectTitleInputRef:wt,projectButtonRef:_t,recentContent:yt,recentContentSearchTerm:$t,recentContentLoading:At,userLinks:kt,searchActive:U,searchTerm:St,searchType:It,searchInput:xt,searchAction:Tt,searchPopover:Pt,showNav:ie,showProduct:jt,showUser:Ct,suggestions:Mt}=this,Nt=h?.user,Et=ve(w)&&!_?.length||!this.measurements;return p`<div class="wrapper" style=${ae({"--arcgis-portal-navigation-max-width":this.maxWidth?`${this.maxWidth}px`:"100%"})}><arcgis-portal-info-banner .config=${S}></arcgis-portal-info-banner>${h?.isPortal&&y?.loaded&&p`<arcgis-portal-classification-banner .portalItem=${y}></arcgis-portal-classification-banner>`||""}<header class=${q({navigation:!0,"navigation--loading":Et})}>${wa({messages:d?.platform,portal:h,showNav:ie,openPlatformMenu:dt})}${jt&&zt({navigate:c,portal:h,product:w,productInfo:f,productHref:M,messages:d?.logo,showNav:ie,searchActive:U,projectTitleEditing:te})||""}${Hi({navigate:c,portal:h,portalItem:y,messages:d?.project,projectTitle:ee,editedProjectTitle:B,handleProjectTitleSave:E,handleProjectTitleEdit:ct,openProjectTitleEdit:pt,projectTitleErrorMessage:mt,handleProjectTitleCancel:lt,projectTitleEditing:te,projectTitleSaving:ht,projectMenuIcon:gt,projectMenuSaveIndicator:ft,projectMenuClick:vt,projectMenuOptions:bt,projectTitleInputRef:wt,projectButtonRef:_t})}${ie&&Qi({searchActive:U,navigate:c,portal:h,product:w,messages:d?.links,links:_,currentPathname:r})||""}<div slot=content-end class="content-end fade-in" .hidden=${te||U}><slot name=content-end></slot></div>${Ji({currentPathname:r,navigate:c,portal:h,product:w,messages:d?.search,searchActive:U,searchType:It,searchTerm:St,suggestions:Mt,handleSearch:m,handleToggleSearch:$,handleSearchTypeChange:k,searchInputRef:xt,searchActionRef:Tt,searchPopoverRef:Pt})}${Nt?p`<div class="border-start fade-in">${Jt({notifications:b,messages:d?.notifications})}${Kt({notifications:b,navigate:c,portal:h,deleteNotifications:this.deleteNotifications,messages:d?.notifications,notificationDeleteProgress:I})}</div>${Xi({portal:h,userLinks:kt,openAccountSwitcher:h?.isPortal?void 0:T,signOut:this.signOut,messages:d?.user,textDisabled:Ct==="avatar",navigate:c})}`:Ki({messages:d.user,signIn:this.signIn})}</header>${Gi({locale:d._t9nLocale,navigate:c,portal:h,product:w,productInfo:f,messages:d?.platform,apps:i,appsLoading:a,hiddenApps:A,appsSearchTerm:n,editingApplications:this.editingApplications,open:ut,links:_,recentContent:yt,recentContentSearchTerm:$t,recentContentLoading:At,handlePlatformClose:v,handleAppReorder:l,handleAppEdit:()=>this.editingApplications=!0,handleAppsSearch:Lt=>this.appsSearchTerm=Lt,handleAppSave:u,handleAppCancel:s,handleAppHide:o,handleItemSearch:g})}${t&&p`<arcgis-portal-account-switcher .portal=${h} .baseUrl=${R({portal:h})}></arcgis-portal-account-switcher>`||""}</div>`}};ye("arcgis-portal-navigation",he);return he},"intl","portal/Portal","identity/IdentityManager",a,b,c,d,e,f)
|
|
@@ -360,12 +360,7 @@ _example: "Discover and add all the relationships originating at 'Entity E' to t
|
|
|
360
360
|
_example: "Show me all entities with a name similar to 'Smith' and add them to the link chart"_
|
|
361
361
|
_example: "Find reports in my graph that have a title similar to 'Quarterly Earnings'"_
|
|
362
362
|
_example: "Find John Smith and all people he has made phone calls to in the last year"_
|
|
363
|
-
_example: "What is the average age of all people who work for Esri?"_`;var It=ps;var Ae=oe;var _s=()=>Oa(),qa=async(t,e)=>await ve(t,e),Ba=async({modelTier:t="default",temperature:e=0,config:r}={})=>await al({modelTier:t,temperature:e,config:r});var ym=t=>{let{portal:e,user:r}=t??{};return!!t&&!!e&&!!r};function jr(t){if(!ym(t))throw new Error("Invalid context: PortalAssistantContext with portal and user is required.")}var Vx
|
|
364
|
-
|
|
365
|
-
${n.map(p=>`- **@${p}**`).join(`
|
|
366
|
-
`)}
|
|
367
|
-
|
|
368
|
-
Do you want to continue?`,{hitlResponse:s}=e?.configurable??{};if(s?.agentId!==dm||s.id!==pm){let p={agentId:dm,id:pm,kind:"booleanChoice",message:o,metadata:{action:"addMembers",groupId:r,members:[...n]}};throw new ws(p)}if(s.payload!==!0)return{status:"success",outputMessage:"Okay, I cancelled adding members to the group."};await Ae({text:`Adding members ${Vx(n)}...`,agentName:"group-creation"},e);let a=e?.configurable?.context;jr(a);let{result:i,error:u}=await cu(a.portal,r,n);if(u||!i)return{status:"success",outputMessage:"I could not add members to that group. Please confirm group access and user accounts, then try again."};let{addedUsernames:l,notAddedUsers:c}=i;try{let p=(await It({promptText:Zx,schema:Hx,modelTier:"fast",inputVariables:{addedMembers:l.join(", "),notAddedMembers:JSON.stringify(c.map(d=>({username:d.username,reason:d.error.message})))}})).successMessage;if(p)return{status:"success",outputMessage:p}}catch(p){console.error("Error generating add-members success message:",p)}return{}},Zx=`
|
|
363
|
+
_example: "What is the average age of all people who work for Esri?"_`;var It=ps;var Ae=oe;var _s=()=>Oa(),qa=async(t,e)=>await ve(t,e),Ba=async({modelTier:t="default",temperature:e=0,config:r}={})=>await al({modelTier:t,temperature:e,config:r});var ym=t=>{let{portal:e,user:r}=t??{};return!!t&&!!e&&!!r};function jr(t){if(!ym(t))throw new Error("Invalid context: PortalAssistantContext with portal and user is required.")}var Vx=`
|
|
369
364
|
Write a concise, friendly success message for adding members to a group.
|
|
370
365
|
|
|
371
366
|
Rules:
|
|
@@ -380,7 +375,12 @@ Added members:
|
|
|
380
375
|
|
|
381
376
|
Not added members:
|
|
382
377
|
{notAddedMembers}
|
|
383
|
-
`,
|
|
378
|
+
`,Hx=t=>t.map(e=>`"${e}"`).join(", "),Jx=m.object({successMessage:m.string().default("")}),dm="portal-group-creation",pm="approveAddMembers",Zx=async(t,e)=>{if(t.intentParams.intent!=="addMembers")return{status:"success",outputMessage:"Use @mention usernames for the members you want to add."};let r=t.agentExecutionContext.sharedState.createdGroupId?.value;if(!r)return{status:"success",outputMessage:"Create a group first, then add members using @mention usernames."};let n=t.intentParams.memberInfo.memberIdentifiers.map(p=>p.trim()).filter(Boolean);if(!n.length)return{status:"success",outputMessage:"Use @mention usernames for the members you want to add."};let o=`The following member(s) will be added to the newly created group:
|
|
379
|
+
|
|
380
|
+
${n.map(p=>`- **@${p}**`).join(`
|
|
381
|
+
`)}
|
|
382
|
+
|
|
383
|
+
Do you want to continue?`,{hitlResponse:s}=e?.configurable??{};if(s?.agentId!==dm||s.id!==pm){let p={agentId:dm,id:pm,kind:"booleanChoice",message:o,metadata:{action:"addMembers",groupId:r,members:[...n]}};throw new ws(p)}if(s.payload!==!0)return{status:"success",outputMessage:"Okay, I cancelled adding members to the group."};await Ae({text:`Adding members ${Hx(n)}...`,agentName:"group-creation"},e);let a=e?.configurable?.context;jr(a);let{result:i,error:u}=await cu(a.portal,r,n);if(u||!i)return{status:"success",outputMessage:"I could not add members to that group. Please confirm group access and user accounts, then try again."};let{addedUsernames:l,notAddedUsers:c}=i;try{let p=(await It({promptText:Vx,schema:Jx,modelTier:"fast",inputVariables:{addedMembers:l.join(", "),notAddedMembers:JSON.stringify(c.map(d=>({username:d.username,reason:d.error.message})))}})).successMessage;if(p)return{status:"success",outputMessage:p}}catch(p){console.error("Error generating add-members success message:",p)}return{}},Qx=`
|
|
384
384
|
Write a concise, friendly success message after creating a portal group.
|
|
385
385
|
|
|
386
386
|
Rules:
|
|
@@ -391,7 +391,7 @@ Rules:
|
|
|
391
391
|
|
|
392
392
|
Group title:
|
|
393
393
|
{groupTitle}
|
|
394
|
-
`,
|
|
394
|
+
`,Yx=`
|
|
395
395
|
Write a concise, friendly failure message after an attempt to create a portal group.
|
|
396
396
|
|
|
397
397
|
Rules:
|
|
@@ -406,7 +406,7 @@ Group title:
|
|
|
406
406
|
|
|
407
407
|
Failure reason:
|
|
408
408
|
{failureReason}
|
|
409
|
-
`,
|
|
409
|
+
`,mm="portal-group-creation",fm="approveCreateGroup",Xx=m.object({successMessage:m.string().default("")}),eA=m.object({failureMessage:m.string().default("")}),tA=async(t,e)=>{if(t.intentParams.intent!=="create")return{status:"success",outputMessage:"Tell me the group title you want to use."};let r=t.intentParams.title.trim();if(!r)return{status:"success",outputMessage:"What title would you like for the new group?"};let n=`A group with the title **${r}** will be created. Do you want to continue?`,{hitlResponse:o}=e?.configurable;if(o?.agentId!==mm||o.id!==fm){let l={agentId:mm,id:fm,kind:"booleanChoice",message:n,metadata:{action:"createGroup",title:r,access:"private"}};throw new ws(l)}if(o.payload!==!0)return{status:"success",outputMessage:`Okay, I cancelled creating **${r}**.`};await Ae({text:`Creating group "${r}"...`,agentName:"group-creation"},e);let s=e?.configurable?.context;jr(s);let{result:a,error:i}=await uu(s.portal,{title:r,access:"private"});if(i||!a){let l=i?.message?.trim()||"No additional details were provided.";try{let c=(await It({promptText:Yx,schema:eA,modelTier:"fast",inputVariables:{groupTitle:r,failureReason:l}})).failureMessage.trim();if(c)return{status:"success",outputMessage:c}}catch(c){console.error("Error generating create-group failure message:",c)}return{status:"success",outputMessage:"I could not create that group. Please confirm your permissions and try again with the group title."}}let u=a.id;try{let l=(await It({promptText:Qx,schema:Xx,modelTier:"fast",inputVariables:{groupTitle:r}})).successMessage.trim();if(l)return{status:"success",outputMessage:l,sharedStatePatch:{createdGroupId:{value:u}},createdGroupId:u}}catch(l){console.error("Error generating create-group success message:",l)}return{}},Lr=t=>{for(let e=t.length-1;e>=0;e-=1){let r=t[e];if(r.type!=="human")continue;let n=r.content;if(typeof n=="string")return n;if(Array.isArray(n))return n.map(o=>typeof o=="string"?o:"text"in o&&typeof o.text=="string"?o.text:"").join(" ").trim()}return""},rA=`
|
|
410
410
|
You classify whether a user is asking to create a new ArcGIS Portal group or add members to an existing group.
|
|
411
411
|
|
|
412
412
|
Rules:
|
|
@@ -432,7 +432,7 @@ Examples:
|
|
|
432
432
|
|
|
433
433
|
User message:
|
|
434
434
|
{userMessage}
|
|
435
|
-
`,sA=m.enum(["portal-content","portal-content-favorites","portal-content-group","portal-content-living-atlas","portal-content-organization","portal-gallery","portal-groups","portal-groups-featured","portal-groups-my","portal-groups-organization","portal-map-viewer","portal-notebooks","portal-scene-viewer","portal-settings-security"]),aA=m.object({destinationType:sA}),iA=m.union([aA,m.object({destinationType:m.literal("portal-item"),itemId:m.string().trim().min(1)}),m.object({destinationType:m.literal("portal-group"),groupId:m.string().trim().min(1)})]),_m="portal-navigation",vl=async(t,e)=>{let r=e?.configurable?.context;!ym(r)||!r.navigationTargetMap?.[t.destinationType]||await qa({type:_m,data:{...t}},e)},lA=async(t,e)=>{let r=t.createdGroupId??t.agentExecutionContext.sharedState.createdGroupId?.value;return r?(await Ae({text:"Preparing navigation...",agentName:"group-creation"},e),await vl({destinationType:"portal-group",groupId:r},e),{}):{}},hm=(t,e)=>e??t,wm=M.Root({..._s(),intentParams:M({reducer:hm,default:()=>({intent:"clarify"})}),createdGroupId:M({reducer:hm,default:()=>""})}),uA=()=>new _e(wm).addNode("detectGroupCreationIntent",
|
|
435
|
+
`,nA=m.object({intent:m.enum(["clarify","create","addMembers"]).default("clarify"),title:m.string().default(""),memberIdentifiers:m.array(m.string()).default([]),clarifyMessage:m.string().default("")}),oA=async(t,e)=>{await Ae({text:"Thinking about groups...",agentName:"group-creation"},e);let r=Lr(t.agentExecutionContext.messages).trim(),n=await It({promptText:rA,schema:nA,modelTier:"default",inputVariables:{userMessage:r}}),o=n.title.trim(),s=n.memberIdentifiers.filter(Boolean),a=n.clarifyMessage.trim(),i=n.intent==="create"&&!!o,u=n.intent==="addMembers"&&s.length>0;return{intentParams:i?{intent:"create",title:o}:u?{intent:"addMembers",memberInfo:{memberIdentifiers:s}}:{intent:"clarify"},status:"success",outputMessage:!i&&!u?a:""}},sA=m.enum(["portal-content","portal-content-favorites","portal-content-group","portal-content-living-atlas","portal-content-organization","portal-gallery","portal-groups","portal-groups-featured","portal-groups-my","portal-groups-organization","portal-map-viewer","portal-notebooks","portal-scene-viewer","portal-settings-security"]),aA=m.object({destinationType:sA}),iA=m.union([aA,m.object({destinationType:m.literal("portal-item"),itemId:m.string().trim().min(1)}),m.object({destinationType:m.literal("portal-group"),groupId:m.string().trim().min(1)})]),_m="portal-navigation",vl=async(t,e)=>{let r=e?.configurable?.context;!ym(r)||!r.navigationTargetMap?.[t.destinationType]||await qa({type:_m,data:{...t}},e)},lA=async(t,e)=>{let r=t.createdGroupId??t.agentExecutionContext.sharedState.createdGroupId?.value;return r?(await Ae({text:"Preparing navigation...",agentName:"group-creation"},e),await vl({destinationType:"portal-group",groupId:r},e),{}):{}},hm=(t,e)=>e??t,wm=M.Root({..._s(),intentParams:M({reducer:hm,default:()=>({intent:"clarify"})}),createdGroupId:M({reducer:hm,default:()=>""})}),uA=()=>new _e(wm).addNode("detectGroupCreationIntent",oA).addNode("createPortalGroup",tA).addNode("addMembersToPortalGroup",Zx).addNode("suggestCreatedGroupNavigation",lA).addEdge(ge,"detectGroupCreationIntent").addConditionalEdges("detectGroupCreationIntent",t=>{switch(t.intentParams.intent){case"create":return"createPortalGroup";case"addMembers":return"addMembersToPortalGroup";default:return L}}).addEdge("createPortalGroup","suggestCreatedGroupNavigation").addEdge("addMembersToPortalGroup","suggestCreatedGroupNavigation").addEdge("suggestCreatedGroupNavigation",L),cA=String.raw`- **portal-group-creation** - Portal group creation assistant:
|
|
436
436
|
- creates a new ArcGIS Portal group for the signed-in user
|
|
437
437
|
- adds users to the newly created group using @mention usernames
|
|
438
438
|
`,dA={id:"portal-group-creation",name:"Portal Group Creation",description:cA,createGraph:uA,workspace:wm},bm="portalDocAssistantMemory",pA=()=>({conversationId:""}),mA=t=>{let e=t?.[bm]?.value;if(!e||typeof e!="object")return pA();let r=e;return{conversationId:typeof r.conversationId=="string"?r.conversationId:""}},fA=t=>({[bm]:{value:t}});async function hA({portal:t,question:e,persona:r,previousConversationId:n,signal:o,skillId:s}){s??="doc_ai_assistant";let a=await gA({portal:t,skillId:s,message:e,options:{context:{kind:"DocAIAssistantRequest",filters:{persona:{persona:r}}},previousConversationId:n,signal:o}});return{reply:yA(a,s),conversationId:a[0]?.conversationId??""}}async function gA({portal:t,skillId:e,message:r,options:n}){let o=`${t.helperServices.aiAssistantServices.url}/skills/${e}/chat`,s={"Content-Type":"application/json",token:Wx.findCredential(t.url)?.token??""},a=await cm(o,{method:"post",body:JSON.stringify({message:r,context:n.context,conversationId:n.previousConversationId}),headers:s,signal:n.signal});if(a.httpStatus!==200)throw new Error(`Doc assistant chat failed (${a.httpStatus})`,{cause:a.data});let i=a.data,u=[i],{conversationId:l,inquiryId:c}=i,p=async(d,g)=>{if(!g)return;await Ml(1e3);let y=await cm(o,{method:"post",body:JSON.stringify({conversationId:l,inquiryId:c,ackSequenceNumber:d}),headers:s,signal:n.signal});if(y.httpStatus!==200)throw new Error(`Doc assistant poll failed (${y.httpStatus})`,{cause:y.data});let w=y.data;u.push(w),await p(w.sequenceNumber,w.hasMore)};return i.hasMore&&await p(i.sequenceNumber,i.hasMore),u}function yA(t,e){switch(e){case"doc_chat":return t.find(r=>r.message!=null)?.message??"";case"doc_ai_assistant":for(let r=t.length-1;r>=0;r-=1){let n=t[r];if(n.context?.kind==="DocAIAssistantContext"){let o=n.context.results?.[0]?.reply;if(o)return o}}return"";default:return To(e)}}var _A=async(t,e)=>{await Ae({text:"Asking documentation assistant...",agentName:"doc-assistant"},e);let r=Lr(t.agentExecutionContext.messages).trim();if(!r)return{status:"success",outputMessage:"Please share your question and I can help with ArcGIS and Portal documentation."};let n=e?.configurable?.context;jr(n);let o=mA(t.agentExecutionContext.sharedState),{reply:s,conversationId:a}=await hA({portal:n.portal,question:r,previousConversationId:o.conversationId||void 0,skillId:"doc_ai_assistant",persona:"developers"});return{status:"success",outputMessage:s.trim()||"I could not retrieve a response from the documentation assistant.",sharedStatePatch:fA({conversationId:a||o.conversationId})}},xm=j(async({groupTitle:t},e)=>{let r=t.trim();if(!r)return null;let n=e?.configurable?.context;jr(n);try{return(await lu(n.portal,{query:`title:${r}`,num:1}))?.results[0]?.id||null}catch(o){return console.error("Error searching for portal group by title:",o),null}},{name:"resolvePortalGroupIdByTitle",description:"Resolves an ArcGIS Portal group title to the best-match group id. Use this when a user references a group by title instead of an explicit group id.",schema:m.object({groupTitle:m.string().describe("The portal group title to resolve to a group id.")})}),Am=j(async({itemTitle:t},e)=>{let r=t.trim();if(!r)return null;let n=e?.configurable?.context;jr(n);let{result:o,error:s}=await du(n.portal,r,{num:1});return s&&console.error("Error searching for portal item by title:",s),o?.results[0]?.id||null},{name:"resolvePortalItemIdByTitle",description:'Resolves an ArcGIS Portal item title to the best-match item id. Use this when a user references an item by title (including hash mentions like #title or #"title with spaces") instead of an explicit item id.',schema:m.object({itemTitle:m.string().describe("The portal item title to resolve to an item id.")})}),Im={"portal-content":{description:"The main content page of the portal.",hints:["My content","Content"],scope:"root"},"portal-content-favorites":{description:"The My favorites view under Content in the portal.",hints:["My favorites","Favorites","Content favorites"],scope:"collection"},"portal-content-group":{description:"The My groups view under Content in the portal.",hints:["Content my groups","My groups content","Group content"],scope:"collection"},"portal-content-living-atlas":{description:"The Living Atlas view under Content in the portal.",hints:["Living Atlas","Content Living Atlas"],scope:"collection"},"portal-content-organization":{description:"The My organization view under Content in the portal.",hints:["My organization content","Organization content","Content organization"],scope:"collection"},"portal-gallery":{description:"The gallery page of the portal.",hints:["Gallery","Featured content","Maps and apps"],scope:"collection"},"portal-group":{description:"A specific group page in the portal.",hints:["Group","group page"],scope:"entity"},"portal-groups":{description:"The groups listing page of the portal.",hints:["My groups","Groups"],scope:"collection"},"portal-groups-featured":{description:"The Featured groups view under Groups in the portal.",hints:["Featured groups","Groups featured"],scope:"collection"},"portal-groups-my":{description:"The My groups view under Groups in the portal.",hints:["My groups","Groups my"],scope:"collection"},"portal-groups-organization":{description:"The My organization's groups view under Groups in the portal.",hints:["Organization's groups","My organization's groups","Groups organization"],scope:"collection"},"portal-item":{description:"A specific item page in the portal.",hints:["Item","item page"],scope:"entity"},"portal-map-viewer":{description:"The Map Viewer app of the portal.",hints:["Map Viewer","Map","Open map"],scope:"entity"},"portal-notebooks":{description:"The Notebooks home page of the portal.",hints:["Notebooks","Notebook home","My notebooks"],scope:"collection"},"portal-scene-viewer":{description:"The Scene Viewer app of the portal.",hints:["Scene Viewer","Scene","3D scene"],scope:"entity"},"portal-settings-security":{description:"The Organization > Settings > Security page of the portal.",hints:["Organization settings","Security","Organization > Settings > Security"],scope:"entity"}},wA=Rl(Im),bA=Object.entries(Im).map(([t,{description:e,hints:r,scope:n}])=>` - ${t}: ${e} (scope: ${n}; hints: ${r.join(", ")})`).join(`
|
|
@@ -468,14 +468,14 @@ Assistant response:
|
|
|
468
468
|
`,gm=m.object({shouldSuggestNavigation:m.boolean().default(!1),destinationType:m.enum(["none",...wA]).default("none"),itemId:m.string().default(""),groupId:m.string().default(""),confidence:m.number().min(0).max(1).default(0)}),AA=async(t,e)=>{await Ae({text:"Extracting navigation intent...",agentName:"doc-assistant"},e);let r=t.outputMessage.trim();if(!r)return{};let n=Lr(t.agentExecutionContext.messages).trim(),o=await Gr.fromTemplate(xA).format({question:n,response:r}),s=await Jr({model:await Ba({modelTier:"default"}),tools:[Am,xm],systemPrompt:o,responseFormat:gm,checkpointer:!0}).invoke({messages:t.agentExecutionContext.messages},e),a=gm.parse(s.structuredResponse??{});if(!a.shouldSuggestNavigation||a.destinationType==="none")return{};let i=IA(a);return i?(await vl(i,e),{}):{}};function IA({destinationType:t,itemId:e,groupId:r}){switch(t){case"portal-content":case"portal-content-favorites":case"portal-content-group":case"portal-content-living-atlas":case"portal-content-organization":case"portal-gallery":case"portal-groups":case"portal-groups-featured":case"portal-groups-my":case"portal-groups-organization":case"portal-map-viewer":case"portal-notebooks":case"portal-scene-viewer":case"portal-settings-security":return{destinationType:t};case"portal-item":return e?{destinationType:"portal-item",itemId:e}:null;case"portal-group":return r?{destinationType:"portal-group",groupId:r}:null;case"none":return null;default:return To(t)}}var vm=M.Root({..._s()}),vA=()=>new _e(vm).addNode("answerDocQuestion",_A).addNode("extractNavigationIntent",AA).addEdge(ge,"answerDocQuestion").addEdge("answerDocQuestion","extractNavigationIntent").addEdge("extractNavigationIntent",L),TA=String.raw`- **portal-doc-assistant** - General ArcGIS documentation and Portal help assistant:
|
|
469
469
|
- answers general ArcGIS, Portal, Enterprise, and JavaScript SDK questions
|
|
470
470
|
- acts as a fallback when specialized agents are not applicable
|
|
471
|
-
`,SA={id:"portal-doc-assistant",name:"Portal Doc Assistant",description:TA,createGraph:vA,workspace:vm},Tm=`
|
|
471
|
+
`,SA={id:"portal-doc-assistant",name:"Portal Doc Assistant",description:TA,createGraph:vA,workspace:vm},kA=()=>({latestGroupId:null,memory:{}}),Ka=t=>{let e=t?.agentExecutionContext.sharedState.portalGroupSummaryMemory?.value;return e?{latestGroupId:e.latestGroupId,memory:e.memory}:kA()},Tm=`
|
|
472
472
|
Shared markdown formatting rules:
|
|
473
473
|
- Use clear markdown headings (##) to separate sections.
|
|
474
474
|
- Use concise bullet points for lists of facts, counts, or signals.
|
|
475
475
|
- Emphasize key metrics with bold labels (for example: **Recent items:** 4).
|
|
476
476
|
- Keep wording direct and analytical; avoid filler language but make sure the language is friendly.
|
|
477
477
|
- Do not include raw internal IDs unless explicitly requested.
|
|
478
|
-
`,
|
|
478
|
+
`,CA=`
|
|
479
479
|
You answer follow-up questions about ArcGIS group analytics.
|
|
480
480
|
|
|
481
481
|
${Tm}
|
|
@@ -500,7 +500,7 @@ Group full context:
|
|
|
500
500
|
|
|
501
501
|
Question:
|
|
502
502
|
{question}
|
|
503
|
-
`,
|
|
503
|
+
`,EA=async(t,e)=>{await Ae({text:"Answering group follow-up...",agentName:"group-analytics"},e);let r=Ka(t),n=t.groupSummaryGroupId??r.latestGroupId,o=n?r.memory[n]:void 0,s=t.groupSummaryQuestion||Lr(t.agentExecutionContext.messages);return o?{status:"success",outputMessage:(await It({promptText:CA,schema:PA,modelTier:"default",inputVariables:{summary:o.summary,question:s,fullContext:JSON.stringify(o.fullContext)}})).answer}:{status:"success",outputMessage:"I do not have group analytics context yet. Ask me to analyze a group first with analyze group <group id>."}},PA=m.object({answer:m.string(),isRelevant:m.boolean()}),OA=`
|
|
504
504
|
Classify the user's request for ArcGIS Portal group analytics.
|
|
505
505
|
|
|
506
506
|
Rules:
|
|
@@ -529,7 +529,7 @@ hasAnalyticsContext:
|
|
|
529
529
|
|
|
530
530
|
User message:
|
|
531
531
|
{userMessage}
|
|
532
|
-
|
|
532
|
+
`,MA=async(t,e)=>{await Ae({text:"Analyzing group-analytics intent...",agentName:"group-analytics"},e);let r=Lr(t.agentExecutionContext.messages),n=!!Ka(t).latestGroupId,o=await Gr.fromTemplate(OA).format({userMessage:r,hasAnalyticsContext:String(n)}),s=await Jr({model:await Ba({modelTier:"fast"}),tools:[xm],systemPrompt:o,responseFormat:RA,checkpointer:!0}).invoke({messages:t.agentExecutionContext.messages},e),{intent:a,groupId:i,question:u}=s.structuredResponse,l=a==="summarize"&&!i,c=a==="followUp"&&!(u??"").trim(),p=a==="clarify"||l||c;return{groupSummaryIntent:p?"clarify":a,groupSummaryGroupId:i||null,groupSummaryQuestion:u||"",status:"success",outputMessage:p?"Please clarify with a group id or title":""}},RA=m.object({intent:m.enum(["summarize","followUp","navigation","clarify"]),groupId:m.string().default(""),question:m.string().default("")}),$A=async(t,e)=>{let r=Ka(t),n=t.groupSummaryGroupId??r.latestGroupId;return await Ae({text:"Preparing navigation...",agentName:"group-analytics"},e),await vl(n?{destinationType:"portal-group",groupId:n}:{destinationType:"portal-groups"},e),{status:"success"}};function Sm({timestamp:t,now:e,windowMs:r}){return t?e-t<=r:!1}var NA=720*60*60*1e3;function zA(t){let e=mu(t);return{id:t.id??"",title:t.title??"",description:t.description??"",snippet:t.snippet??"",access:t.access??null,owner:t.owner??"",tags:t.tags??[],created:t.created?.getTime(),modified:t.modified?.getTime(),isInvitationOnly:t.isInvitationOnly,sourceSignals:{capabilities:fu(t),membershipAccess:hu(t),isOpenData:gu(t),isDistributedCollaborationGroup:yu(t),orgId:e.orgId,hiddenMembers:e.hiddenMembers,isViewOnly:e.isViewOnly,isReadOnly:e.isReadOnly,leavingDisallowed:e.leavingDisallowed}}}async function jA(t){let e={owner:t.owner??"",admins:[],users:[]};try{return await t.fetchMembers()}catch(r){return console.warn("Unable to fetch group members for analytics context",r),e}}function LA(t){return t.map(e=>({id:e.id??"",title:e.title??"Untitled",type:e.type??"Unknown",owner:e.owner??"",created:e.created?.getTime(),modified:e.modified?.getTime()}))}function DA(t,e){return t.filter(r=>r.modified?Sm({timestamp:r.modified,now:e,windowMs:NA}):!1)}function FA(t){let e=new Map;for(let r of t)e.set(r.type,(e.get(r.type)??0)+1);return[...e.entries()].sort((r,n)=>n[1]-r[1]||r[0].localeCompare(n[0])).slice(0,6).map(([r,n])=>({type:r,count:n}))}async function UA(t){let e=await t.queryItems({num:20,sortField:"modified",sortOrder:"desc"}),r=LA(e.results),n=Date.now();return{total:e.total,topItems:r,recentlyModifiedItems:DA(r,n),topItemTypes:FA(r)}}async function qA(t,e){if(!e)return{error:{code:"missingGroupId",message:"Group id is required."}};try{let r=(await t.queryGroups({query:`id:${e}`,num:1})).results[0];if(!r)return{error:{code:"groupNotFound",message:`No group found for id: ${e}`}};let n=zA(r),o=await jA(r),s=await UA(r);return{result:{group:n,members:o,items:s}}}catch(r){return console.error("Error fetching portal group analytics context:",r),{error:{code:"unhandledError"}}}}var BA=`
|
|
533
533
|
You summarize ArcGIS Portal groups based on structured context and deterministic activity signals.
|
|
534
534
|
|
|
535
535
|
${Tm}
|
|
@@ -568,11 +568,11 @@ Group context:
|
|
|
568
568
|
|
|
569
569
|
Deterministic signals:
|
|
570
570
|
{deterministicSignals}
|
|
571
|
-
`,xl=(t,e)=>e??t,km=M.Root({..._s(),groupSummaryIntent:M({reducer:xl,default:()=>"clarify"}),groupSummaryGroupId:M({reducer:xl,default:()=>null}),groupSummaryQuestion:M({reducer:xl,default:()=>""})}),VA=()=>new _e(km).addNode("detectGroupSummaryIntent",
|
|
571
|
+
`,KA=2160*60*60*1e3,GA=async(t,e)=>{let r=t.groupSummaryGroupId;if(!r)return{status:"success",outputMessage:'Please clarify with analyze group <group id>, analyze group $<title>, or analyze group $"<title with spaces>".'};await Ae({text:`Analyzing group ${r}...`,agentName:"group-analytics"},e);let n=e?.configurable?.context;jr(n);let{result:o,error:s}=await qA(n.portal,r);if(s||!o)return await Ae({text:"Failed to fetch group context",agentName:"group-analytics"},e),{status:"success",outputMessage:"Unable to retrieve group context for analytics."};let{group:a,items:i}=o,u=Date.now(),l=a.modified,c=l?Sm({timestamp:l,now:u,windowMs:KA}):!1,p=i.recentlyModifiedItems.length,d=p>0,g=c||d,y=await It({promptText:BA,schema:WA,modelTier:"default",inputVariables:{context:JSON.stringify(o),deterministicSignals:JSON.stringify({isGroupActive:g,isGroupRecentlyModified:c,hasRecentlyAddedOrUpdatedContent:d,recentItemCount:p})}}),{followUpQuestions:w,summary:_}=y,f=Ka(t),A={latestGroupId:r,memory:{...f.memory,[r]:{summary:_,followUpQuestions:w,fullContext:o}}};return w.length&&await qa({type:"suggested-prompts",data:{prompts:w}},e),{status:"success",outputMessage:_,sharedStatePatch:{portalGroupSummaryMemory:{value:A}}}},WA=m.object({summary:m.string(),followUpQuestions:m.array(m.string()).default([])}),xl=(t,e)=>e??t,km=M.Root({..._s(),groupSummaryIntent:M({reducer:xl,default:()=>"clarify"}),groupSummaryGroupId:M({reducer:xl,default:()=>null}),groupSummaryQuestion:M({reducer:xl,default:()=>""})}),VA=()=>new _e(km).addNode("detectGroupSummaryIntent",MA).addNode("summarizePortalGroup",GA).addNode("answerGroupSummaryFollowUp",EA).addNode("suggestGroupSummaryNavigation",$A).addEdge(ge,"detectGroupSummaryIntent").addConditionalEdges("detectGroupSummaryIntent",t=>t.groupSummaryIntent==="summarize"?"summarizePortalGroup":t.groupSummaryIntent==="followUp"?"answerGroupSummaryFollowUp":t.groupSummaryIntent==="navigation"?"suggestGroupSummaryNavigation":L).addEdge("summarizePortalGroup",L).addEdge("answerGroupSummaryFollowUp",L).addEdge("suggestGroupSummaryNavigation",L),HA=String.raw`- **portal-group-analytics** - Portal group analytics assistant:
|
|
572
572
|
- summarizes ArcGIS portal groups from group context and sourceJSON details
|
|
573
573
|
- answers follow-up questions grounded in the summarized group
|
|
574
574
|
- suggests navigation to groups when relevant
|
|
575
|
-
`,JA={id:"portal-group-analytics",name:"Portal Group Analytics",description:HA,createGraph:VA,workspace:km},ZA=()=>({latestItemId:null,memory:{}}),Tl=t=>{let e=t?.agentExecutionContext.sharedState.portalItemAnalyticsSummaryMemory?.value;return e?{latestItemId:e.latestItemId,memory:e.memory}:ZA()},QA=m.object({intent:m.enum(["summarize","followUp","clarify"]),itemId:m.string().default(""),question:m.string().default("")}),YA=m.object({summary:m.string(),followUpQuestions:m.array(m.string()).default([])}),XA=m.object({answer:m.string(),isRelevant:m.boolean()}),eI
|
|
575
|
+
`,JA={id:"portal-group-analytics",name:"Portal Group Analytics",description:HA,createGraph:VA,workspace:km},ZA=()=>({latestItemId:null,memory:{}}),Tl=t=>{let e=t?.agentExecutionContext.sharedState.portalItemAnalyticsSummaryMemory?.value;return e?{latestItemId:e.latestItemId,memory:e.memory}:ZA()},QA=m.object({intent:m.enum(["summarize","followUp","clarify"]),itemId:m.string().default(""),question:m.string().default("")}),YA=m.object({summary:m.string(),followUpQuestions:m.array(m.string()).default([])}),XA=m.object({answer:m.string(),isRelevant:m.boolean()}),eI=`
|
|
576
576
|
You answer follow-up questions about an ArcGIS item.
|
|
577
577
|
|
|
578
578
|
Ground your answer in the provided item context.
|
|
@@ -592,7 +592,7 @@ Item full context
|
|
|
592
592
|
|
|
593
593
|
Question:
|
|
594
594
|
{question}
|
|
595
|
-
`,
|
|
595
|
+
`,tI=async(t,e)=>{await Ae({text:"Answering follow-up...",agentName:"analytics"},e);let r=Tl(t),n=t.analyticsItemId??r.latestItemId,o=n?r.memory[n]:void 0,s=t.analyticsQuestion||Lr(t.agentExecutionContext.messages);return o?{status:"success",outputMessage:(await It({promptText:eI,schema:XA,modelTier:"default",inputVariables:{summary:o.summary,question:s,fullContext:JSON.stringify(o.fullContext)}})).answer}:{status:"success",outputMessage:"I don't have enough information yet. Please ask me to summarize the item first using summarize item <item id>."}},rI=`
|
|
596
596
|
Classify the user analytics request.
|
|
597
597
|
|
|
598
598
|
Rules:
|
|
@@ -622,7 +622,7 @@ hasSummaryContext:
|
|
|
622
622
|
|
|
623
623
|
User message:
|
|
624
624
|
{userMessage}
|
|
625
|
-
`,
|
|
625
|
+
`,nI=async(t,e)=>{await Ae({text:"Analyzing intent...",agentName:"analytics"},e);let r=Lr(t.agentExecutionContext.messages),n=!!Tl(t).latestItemId,o=await Gr.fromTemplate(rI).format({userMessage:r,hasSummaryContext:String(n)}),s=await Jr({model:await Ba({modelTier:"fast"}),tools:[Am],systemPrompt:o,responseFormat:QA,checkpointer:!0}).invoke({messages:t.agentExecutionContext.messages},e),{intent:a,itemId:i,question:u}=s.structuredResponse,l=a==="clarify"||a==="summarize"&&!i||a==="followUp"&&!u;return{agentExecutionContext:{...t.agentExecutionContext},analyticsIntent:l?"clarify":a,analyticsItemId:i||null,analyticsQuestion:u||"",status:"success",outputMessage:l?'Please clarify with summarize item <item id>, summarize item #<title>, or summarize item #"<title with spaces>".':""}},oI=`
|
|
626
626
|
You are a item summary tool for ArcGIS. Your job is to summarize an item's info based on the provided context.
|
|
627
627
|
Summary rules:
|
|
628
628
|
- The summary should be concise markdown, make sure to format the output nicely so it's easy to read.
|
|
@@ -637,7 +637,7 @@ Do not include internal identifiers.
|
|
|
637
637
|
If the user asks for a detailed summary, you may expand the response up to 300 words.
|
|
638
638
|
Item context:
|
|
639
639
|
{context}
|
|
640
|
-
`,Al=(t,e)=>e??t,Cm=M.Root({..._s(),analyticsIntent:M({reducer:Al,default:()=>"clarify"}),analyticsItemId:M({reducer:Al,default:()=>null}),analyticsQuestion:M({reducer:Al,default:()=>""})}),aI=()=>new _e(Cm).addNode("detectAnalyticsIntent",
|
|
640
|
+
`,sI=async(t,e)=>{let r=t.analyticsItemId;if(!r)return{status:"success",outputMessage:'Please clarify with summarize item <item id>, summarize item #<title>, or summarize item #"<title with spaces>".'};await Ae({text:`Summarizing item ${r}...`,agentName:"analytics"},e);let n=e?.configurable?.context;jr(n);let{portal:o,user:s}=n,{result:a,error:i}=await pu(s,o,r);if(i||!a)return await Ae({text:"Failed to get item context for summarization",agentName:"analytics"},e),{status:"success",outputMessage:"Unable to retrieve item context for summarization."};let{context:u}=a,l=await It({promptText:oI,schema:YA,modelTier:"default",inputVariables:{context:JSON.stringify(u)}}),{followUpQuestions:c,summary:p}=l,d=Tl(t),g={latestItemId:r,memory:{...d.memory,[r]:{summary:p,followUpQuestions:c,fullContext:u}}};return c.length&&await qa({type:"suggested-prompts",data:{prompts:c}},e),{status:"success",outputMessage:p,sharedStatePatch:{portalItemAnalyticsSummaryMemory:{value:g}}}},Al=(t,e)=>e??t,Cm=M.Root({..._s(),analyticsIntent:M({reducer:Al,default:()=>"clarify"}),analyticsItemId:M({reducer:Al,default:()=>null}),analyticsQuestion:M({reducer:Al,default:()=>""})}),aI=()=>new _e(Cm).addNode("detectAnalyticsIntent",nI).addNode("summarizePortalItem",sI).addNode("answerAnalyticsFollowUp",tI).addEdge(ge,"detectAnalyticsIntent").addConditionalEdges("detectAnalyticsIntent",t=>t.analyticsIntent==="summarize"?"summarizePortalItem":t.analyticsIntent==="followUp"?"answerAnalyticsFollowUp":L).addEdge("summarizePortalItem",L).addEdge("answerAnalyticsFollowUp",L),iI=String.raw`- **portal-item-analytics** - Portal item analytics assistant:
|
|
641
641
|
- answers questions about one specific ArcGIS portal item when item context is present
|
|
642
642
|
- summarizes item details, metadata, and context grounded in that item
|
|
643
643
|
- suggests follow-up prompts grounded in the same item
|