@ahpd/web 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +3 -2
  2. package/dist/app/assets/{AudioPage-BCuwTLKN.js → AudioPage-DAAck9ph.js} +1 -1
  3. package/dist/app/assets/{Composer-Crdqrcjj.js → Composer-Dp_Z0bXp.js} +1 -1
  4. package/dist/app/assets/{DataTable-D9RxuuR3.js → DataTable-8woVlU4S.js} +1 -1
  5. package/dist/app/assets/{Details-BhWMrDPk.js → Details-ByJkvhJN.js} +1 -1
  6. package/dist/app/assets/{DiffPage-D8wjIu2g.js → DiffPage-Ck21x0bd.js} +1 -1
  7. package/dist/app/assets/{Edit-B12zsW3c.js → Edit-rv9ZDDDu.js} +1 -1
  8. package/dist/app/assets/{Explorer-C2wZaZN2.js → Explorer-CDm6vvt6.js} +1 -1
  9. package/dist/app/assets/{Explorer-DLH41MqT.js → Explorer-CNz5U5q-.js} +1 -1
  10. package/dist/app/assets/{Explorer-CViecqG_.js → Explorer-DS_lqr3R.js} +1 -1
  11. package/dist/app/assets/{Explorer-z4mktaMi.js → Explorer-DoNVPZ-C.js} +1 -1
  12. package/dist/app/assets/{Explorer-BR0vyz4x.js → Explorer-VoN5CYd5.js} +1 -1
  13. package/dist/app/assets/{FilePage-CErxqbDp.js → FilePage-CAUDXIh9.js} +3 -3
  14. package/dist/app/assets/{Filter-DohSRUkD.js → Filter-D1FpBH5R.js} +1 -1
  15. package/dist/app/assets/{ImagePage-B-n1btEA.js → ImagePage-cy_jkGi1.js} +1 -1
  16. package/dist/app/assets/{Info-BbyvhG4Q.js → Info-DqnamTeq.js} +1 -1
  17. package/dist/app/assets/{LocaleToggle-CETgRIRf.js → LocaleToggle-B91QrqGs.js} +1 -1
  18. package/dist/app/assets/{LogPage-C_h99NtQ.js → LogPage-CKm7_URt.js} +1 -1
  19. package/dist/app/assets/{LoginForm-p7rsv-LJ.js → LoginForm-rBz-5JFG.js} +1 -1
  20. package/dist/app/assets/{MarkdownPage-Cv5UyfVY.js → MarkdownPage-DgalhN_B.js} +1 -1
  21. package/dist/app/assets/{New-D0REy_20.js → New-D6QCCHrx.js} +1 -1
  22. package/dist/app/assets/{Page-TDRLt015.js → Page-CnfUTsQD.js} +1 -1
  23. package/dist/app/assets/{Page-B3UbQqyT.js → Page-DGp_WebG.js} +1 -1
  24. package/dist/app/assets/{Page-cKDPN7cD.js → Page-Dqf45zd4.js} +1 -1
  25. package/dist/app/assets/{Pagination-v2fHA8Hf.js → Pagination-fEfxXCWD.js} +1 -1
  26. package/dist/app/assets/{PortaLock-ieoqUizB.js → PortaLock-BFpTWuKB.js} +2 -2
  27. package/dist/app/assets/{Settings-BP67xLx9.js → Settings-ALaVSuhU.js} +1 -1
  28. package/dist/app/assets/{SigillumGate-DNRuVdn4.js → SigillumGate-Bq_GLDvI.js} +1 -1
  29. package/dist/app/assets/{SingleLayout-D0y3xoJg.js → SingleLayout-BzRi_cEY.js} +1 -1
  30. package/dist/app/assets/SpatialLayout-Cote5YNZ.js +1 -0
  31. package/dist/app/assets/SplitLayout-CK5SuMF1.js +1 -0
  32. package/dist/app/assets/StackLayout-BUdng0sD.js +1 -0
  33. package/dist/app/assets/Start-D5KBqSwf.js +1 -0
  34. package/dist/app/assets/Start-Dtuu25RL.css +1 -0
  35. package/dist/app/assets/TabLayout-ByKrZ0yM.js +1 -0
  36. package/dist/app/assets/TabPanelLayout-B4DWG6Zm.js +1 -0
  37. package/dist/app/assets/{TerminalPage-BaFThhYG.js → TerminalPage-CDtmKMSK.js} +1 -1
  38. package/dist/app/assets/{ThemeModeToggle-D1kTZNm_.js → ThemeModeToggle-C0j9D4s0.js} +1 -1
  39. package/dist/app/assets/{ThemePicker-BIFeJU_m.js → ThemePicker-DEUED0NH.js} +1 -1
  40. package/dist/app/assets/{Tree-BqFzA5wp.js → Tree-fxC7yDSR.js} +1 -1
  41. package/dist/app/assets/{VideoPage-DbVVXi0p.js → VideoPage-Cz7g_2E1.js} +1 -1
  42. package/dist/app/assets/{actions-BmFc5yoR.js → actions-BzJiPQuh.js} +1 -1
  43. package/dist/app/assets/{changeset-BgSW341C.js → changeset-eZAmDe3s.js} +1 -1
  44. package/dist/app/assets/{channel-8aIcEm3f.js → channel-UD2KGCy_.js} +1 -1
  45. package/dist/app/assets/{clicks-B3stbczh.js → clicks-DIh3kBLi.js} +1 -1
  46. package/dist/app/assets/{composer-commands-AmOY6XGO.js → composer-commands-B8AF8OGi.js} +1 -1
  47. package/dist/app/assets/data-hUAVersf.js +2 -0
  48. package/dist/app/assets/{dist-D9412h7o.js → dist-B4E-6SqB.js} +1 -1
  49. package/dist/app/assets/{dist-B9NMd4es.js → dist-BdNRSgzN.js} +1 -1
  50. package/dist/app/assets/{dist-CEr2uR4w.js → dist-BwHJSc3S.js} +1 -1
  51. package/dist/app/assets/{dist-DYPX2Ybv.js → dist-DUFzb_Eu.js} +1 -1
  52. package/dist/app/assets/{dist-drsoOe-s.js → dist-DX2Uz40S.js} +1 -1
  53. package/dist/app/assets/{dist-BnQxBrCW.js → dist-Db_OB0lX.js} +1 -1
  54. package/dist/app/assets/{dist-CYq92lOO.js → dist-uvIW_qsj.js} +1 -1
  55. package/dist/app/assets/folder-path-CTpCmycG.js +1 -0
  56. package/dist/app/assets/index-B1VQ36Tb.css +1 -0
  57. package/dist/app/assets/index-yhQX4tVS.js +14 -0
  58. package/dist/app/assets/{media-C3ferCB3.js → media-Coozt7AL.js} +1 -1
  59. package/dist/app/assets/{notify-CJo-T9e2.js → notify-BQ9fSOfy.js} +1 -1
  60. package/dist/app/assets/sessions-8PScJEDe.js +2 -0
  61. package/dist/app/assets/{terminal-BMZxY-St.js → terminal-BPj7jGw5.js} +1 -1
  62. package/dist/app/assets/{text-B601jRcP.js → text-BdULOY8N.js} +1 -1
  63. package/dist/app/index.html +8 -8
  64. package/dist/embed/index.d.ts +5 -0
  65. package/package.json +2 -2
  66. package/dist/app/assets/SpatialLayout-CKZCVibM.js +0 -1
  67. package/dist/app/assets/SplitLayout-7EOWfDlZ.js +0 -1
  68. package/dist/app/assets/StackLayout-1wBXKLKy.js +0 -1
  69. package/dist/app/assets/TabLayout-ClrRSvj1.js +0 -1
  70. package/dist/app/assets/TabPanelLayout-YGvLy1cR.js +0 -1
  71. package/dist/app/assets/data-CBWyZN_H.js +0 -2
  72. package/dist/app/assets/folder-path-CmVXGhKI.js +0 -1
  73. package/dist/app/assets/index-BQcTkW2q.css +0 -1
  74. package/dist/app/assets/index-DBKNxflN.js +0 -14
  75. package/dist/app/assets/sessions-BcRKb9k7.js +0 -2
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{M as n,T as r}from"./data-CBWyZN_H.js";import{t as i}from"./Spinner-B-iOhBZq.js";import{t as a}from"./Alert-CHZkhmDE.js";import{n as o}from"./index-DBKNxflN.js";import{t as s}from"./text-B601jRcP.js";var c=t(),l=e(),u=67108864,d=e=>`${(e/1024/1024).toFixed(1)} MB`;function f(e){let[t,i]=(0,c.useState)(null);return(0,c.useEffect)(()=>{if(e===void 0)return;let t=!0,a;return i(null),(async()=>{let t=await n(e);return t!==void 0&&t>67108864?{size:t}:(a=URL.createObjectURL(await r(e,o(e))),{url:a})})().then(e=>{t&&i(e)}).catch(e=>{t&&i({error:e instanceof Error?e.message:String(e)})}),()=>{t=!1,a!==void 0&&URL.revokeObjectURL(a)}},[e]),t}function p({uri:e,children:t}){let n=f(e);if(e===void 0)return(0,l.jsx)(a,{tone:`warning`,message:`No file was named.`});let r=(0,l.jsx)(s,{uri:e});return n===null?(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsx)(i,{label:`Reading the file`})]}):`error`in n?(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsx)(a,{tone:`danger`,title:`Not readable`,message:n.error})]}):`size`in n?(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsxs)(`p`,{className:`web-note web-media__note`,children:[`This file is `,d(n.size),`. Files over `,d(u),` are not shown.`]})]}):(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsx)(`div`,{className:`web-file__body web-media`,children:t(n.url)})]})}export{f as n,p as t};
1
+ import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{M as n,T as r}from"./data-hUAVersf.js";import{t as i}from"./Spinner-B-iOhBZq.js";import{t as a}from"./Alert-CHZkhmDE.js";import{n as o}from"./index-yhQX4tVS.js";import{t as s}from"./text-BdULOY8N.js";var c=t(),l=e(),u=67108864,d=e=>`${(e/1024/1024).toFixed(1)} MB`;function f(e){let[t,i]=(0,c.useState)(null);return(0,c.useEffect)(()=>{if(e===void 0)return;let t=!0,a;return i(null),(async()=>{let t=await n(e);return t!==void 0&&t>67108864?{size:t}:(a=URL.createObjectURL(await r(e,o(e))),{url:a})})().then(e=>{t&&i(e)}).catch(e=>{t&&i({error:e instanceof Error?e.message:String(e)})}),()=>{t=!1,a!==void 0&&URL.revokeObjectURL(a)}},[e]),t}function p({uri:e,children:t}){let n=f(e);if(e===void 0)return(0,l.jsx)(a,{tone:`warning`,message:`No file was named.`});let r=(0,l.jsx)(s,{uri:e});return n===null?(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsx)(i,{label:`Reading the file`})]}):`error`in n?(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsx)(a,{tone:`danger`,title:`Not readable`,message:n.error})]}):`size`in n?(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsxs)(`p`,{className:`web-note web-media__note`,children:[`This file is `,d(n.size),`. Files over `,d(u),` are not shown.`]})]}):(0,l.jsxs)(`div`,{className:`web-file`,children:[r,(0,l.jsx)(`div`,{className:`web-file__body web-media`,children:t(n.url)})]})}export{f as n,p as t};
@@ -1 +1 @@
1
- import{n as e,t}from"./jsx-runtime-BguD1OXD.js";import{t as n}from"./react-CybPckBe.js";import{t as r,u as i}from"./useStore-BQkzWMs-.js";import{n as a}from"./ScenaProvider-6A3TJumQ.js";import{t as o}from"./Button-_R1oktDz.js";import{o as s}from"./data-CBWyZN_H.js";import{t as c}from"./emojis-7RT6GvLa.js";import{t as l}from"./ActionList-aOUHK9Z9.js";import{a as u,d,o as f,r as p}from"./terminal-BMZxY-St.js";var m=e((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function i(){}var a={d:{f:i,r:function(){throw Error(r(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},o=Symbol.for(`react.portal`),s=Symbol.for(`react.recoverable`),c=Symbol.for(`react.optimistic_key`);function l(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:r===c?c:``+r,children:e,containerInfo:t,implementation:n}}var u=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function d(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,e.browser=function(e){return{$$typeof:s,_reason:e}},e.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(r(299));return l(e,t,null,n)},e.flushSync=function(e){var t=u.T,n=a.p;try{if(u.T=null,a.p=2,e)return e()}finally{u.T=t,a.p=n,a.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=d(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`){if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=d(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}}else t??a.d.M(e)}},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=d(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`){if(t){var n=d(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}else a.d.m(e)}},e.requestFormReset=function(e){a.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return u.H.useFormState(e,t,n)},e.useFormStatus=function(){return u.H.useHostTransitionStatus()},e.version=`19.3.0`})),h=e(((e,t)=>{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=8e3,_=`$/notify/list`,ee=`$/notify/count`,v=`$/notify/history`;function y(e){return[e.source??``,e.type,e.title,e.description??``].join(` `)}function b(e){let t=new Map,n=new Map,r=new Set,i=[],a=[],o=0;function s(t){i=t,e.set(_,[...i]),e.set(ee,i.length)}function c(t){a=[t,...a.filter(e=>e.id!==t.id)].slice(0,100),e.set(v,[...a])}function l(e){for(let n of t.values())if((n.handles===void 0||n.handles(e))&&n.available())try{n.present(e)}catch{}}function u(e){let t=n.get(e);t!==void 0&&(clearTimeout(t),n.delete(e))}function d(e){u(e.id),!(e.dismissAuto===!1||r.has(e.id))&&n.set(e.id,setTimeout(()=>{n.delete(e.id),f(e.id)},e.dismissTime??2e3))}function f(e){if(u(e),r.delete(e),i.some(t=>t.id===e)){s(i.filter(t=>t.id!==e));for(let n of t.values())n.retract?.(e)}}return{publish(e){let t=e.id===void 0?i.find(t=>y(t)===y(e)):i.find(t=>t.id===e.id);if(t!==void 0){let n={...t,...e,id:t.id,count:t.count+1,at:new Date().toISOString()};return s([n,...i.filter(e=>e.id!==t.id)]),c(n),l(n),d(n),n.id}o+=1;let n={...e,id:e.id??`n${o}`,at:new Date().toISOString(),count:1};return s([n,...i]),c(n),l(n),d(n),n.id},dismiss:f,hold(e){r.add(e),u(e)},release(e){if(!r.delete(e))return;let t=i.find(t=>t.id===e);t!==void 0&&d(t)},update(e,t){let n=i.find(t=>t.id===e);if(n===void 0)return;let r={...n,...t,id:e};s(i.map(t=>t.id===e?r:t)),c(r),l(r),d(r)},list:()=>[...i],history:()=>[...a],forget(){a=[],e.set(v,[])},channels:{register(e){return t.set(e.id,e),{dispose:()=>void t.delete(e.id)}}}}}var x;function te(e){return x??=b(e),x}function ne(){x=void 0}function S(){if(x===void 0)throw Error(`Notifications were read before initNotifications ran.`);return x}function C(e){if(x===void 0)return!1;try{return e(x),!0}catch{return!1}}var w=`$/notify/confirm`,T=`$/notify/confirmStyle`,E=`modal`,D,O=0,k=null;function re(e,t){D=e,e.get(`$/notify/confirmStyle`)===void 0&&e.set(T,t)}function ie(){M(!1),D=void 0}function A(){return D?.get(`$/notify/confirmStyle`)??`modal`}function ae(e){D?.set(T,e)}function j(e){return D===void 0||A()===`native`?Promise.resolve(window.confirm(e.body===void 0?e.title:`${e.title}\n\n${e.body}`)):(M(!1),O+=1,D.set(w,{id:O,title:e.title,...e.body===void 0?{}:{body:e.body},confirmLabel:e.confirmLabel??`Confirm`,cancelLabel:e.cancelLabel??`Cancel`,tone:e.tone??`default`}),new Promise(e=>{k=e}))}function M(e){let t=k;k=null,D?.set(w,null),t?.(e)}var N=new Set([`attention`,`action.finished`,`connection.lost`]),P=6e4;function F(){return typeof window<`u`&&`Notification`in window}function I(){return F()&&window.Notification.permission==="default"}function L(){return F()&&window.Notification.permission===`granted`}async function R(){return F()?window.Notification.requestPermission():`denied`}function z(){let e=typeof document>`u`||document.hasFocus()?null:Date.now(),t=new Map,n=()=>{e??=Date.now()},r=()=>{e=null;for(let e of t.values())e.close();t.clear()};return window.addEventListener(`blur`,n),window.addEventListener(`focus`,r),{id:`browser`,handles:e=>N.has(e.type)&&e.alert!==void 0,available:()=>L()?document.visibilityState===`hidden`||e!==null&&Date.now()-e>=P:!1,present:e=>{let n=e.alert;if(n===void 0)return;let r=new window.Notification(n.title,{...n.body===void 0?{}:{body:n.body},tag:e.source??e.id});r.onclick=()=>{window.focus(),r.close()},t.set(e.id,r)},retract:e=>{t.get(e)?.close(),t.delete(e)},dispose:()=>{window.removeEventListener(`blur`,n),window.removeEventListener(`focus`,r);for(let e of t.values())e.close();t.clear()}}}var B=n(),V=t();function H(){let e=r(w),t=(0,B.useRef)(null),n=e?.id;return(0,B.useEffect)(()=>{if(n===void 0)return;t.current?.focus();let e=e=>{e.key===`Escape`&&(e.stopPropagation(),M(!1))};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[n]),e==null?null:(0,V.jsx)(`div`,{className:`web-confirm`,onClick:()=>M(!1),children:(0,V.jsxs)(`div`,{ref:t,tabIndex:-1,className:`web-confirm__card`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":`web-confirm-title`,...e.body===void 0?{}:{"aria-describedby":`web-confirm-body`},onClick:e=>e.stopPropagation(),children:[(0,V.jsx)(`h2`,{id:`web-confirm-title`,className:`web-confirm__title`,children:e.title}),e.body===void 0?null:(0,V.jsx)(`p`,{id:`web-confirm-body`,className:`web-confirm__body`,children:e.body}),(0,V.jsxs)(`div`,{className:`web-confirm__buttons`,children:[(0,V.jsx)(o,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>M(!1),children:e.cancelLabel}),(0,V.jsx)(o,{type:`button`,size:`sm`,variant:e.tone===`danger`?`danger`:`primary`,onClick:()=>M(!0),children:e.confirmLabel})]})]})})}var U={info:c.info,success:c.check,warning:c.warning,danger:c.error},W=4;function G({animation:e=`slide-up`}){let t=r(`$/notify/list`)??[],[n,i]=(0,B.useState)(!1);if(t.length===0)return null;let a=n?t:t.slice(0,W),o=t.length-a.length;return(0,V.jsxs)(`div`,{className:`web-toasts`,role:`region`,"aria-label":`Notifications`,children:[o>0?(0,V.jsx)(`button`,{type:`button`,className:`web-toast__more`,onClick:()=>i(!0),children:`${o} more`}):null,[...a].reverse().map(t=>(0,V.jsx)(K,{notification:t,animation:t.animation??e},t.id))]})}function K({notification:e,animation:t}){let n=a(),[r,i]=(0,B.useState)(!1),s=e.id,l=()=>S().dismiss(s);(0,B.useEffect)(()=>{if(!r)return;let e=S();return e.hold(s),()=>e.release(s)},[s,r]);let u=()=>S().hold(s),d=()=>{r||S().release(s)},f=e=>{n.commands.execute(e.command,e.args),e.dismisses!==!1&&l()};return(0,V.jsxs)(`div`,{className:`web-toast`,"data-tone":e.tone,"data-animation":t,role:e.dismissAuto===!1?`alert`:`status`,onMouseEnter:u,onMouseLeave:d,onFocus:u,onBlur:d,children:[(0,V.jsxs)(`div`,{className:`web-toast__head`,children:[(0,V.jsx)(`span`,{className:`web-toast__icon`,"aria-hidden":`true`,children:e.icon??U[e.tone]}),(0,V.jsx)(`span`,{className:`web-toast__title`,children:e.title}),e.count>1?(0,V.jsx)(`span`,{className:`web-toast__count`,title:`Raised ${e.count} times`,children:`\u{D7}${e.count}`}):null,(0,V.jsx)(`button`,{type:`button`,className:`web-toast__close`,"aria-label":`Dismiss`,onClick:l,children:c.close})]}),e.description===void 0?null:(0,V.jsx)(`p`,{className:`web-toast__body`,children:e.description}),e.detail===void 0?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:`web-toast__link`,onClick:()=>i(!r),children:r?`Hide details`:`Show details`}),r?(0,V.jsx)(`pre`,{className:`web-toast__detail`,children:e.detail}):null]}),e.actions===void 0||e.actions.length===0?null:(0,V.jsx)(`div`,{className:`web-toast__actions`,children:e.actions.map(e=>(0,V.jsx)(o,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>f(e),children:e.label},e.command))})]})}var q=h(),J=c.terminal;function Y(e,t){let n=f(e.claim,t);return n.kind===`you`?`Yours`:n.kind===`session`?`Held by a session`:`Held by another client`}function oe(e,t){if(!u(e))return Y(e,t);let n=p(e);return`${Y(e,t)}, exited${n===null?``:` with ${n}`}`}function se(e,t){let n=e.store.get(s),r=t.trim().toLowerCase();return(n?.terminals??[]).filter(e=>r===``||`terminal ${d(e)}`.toLowerCase().includes(r)).map(t=>({title:`Terminal: ${d(t)}`,description:oe(t,n?.clientId??null),icon:J,group:`Terminals`,onSelect:n=>{n.closeMenu(),e.commands.execute(`ahp.openTerminal`,{uri:t.resource})}}))}var X=`$/ahp/palette/open`,Z=`ahp:palette`;function Q(){return r(`$/ahp/palette/open`)===!0?(0,q.createPortal)((0,V.jsx)(ce,{}),document.body):null}function ce(){let e=a(),[t,n]=(0,B.useState)(``),i=(0,B.useRef)(null),o=()=>e.store.set(X,!1),c=(0,B.useMemo)(()=>({pushList:()=>void 0,replaceList:()=>void 0,openInline:()=>void 0,openPopover:()=>void 0,back:()=>void 0,closeMenu:o,keepOpen:()=>void 0,insertAtCursor:()=>void 0,replaceActiveToken:()=>void 0,query:``}),[]),u=r(s),d=(0,B.useMemo)(()=>({query:{slot:Z,q:t},extraItems:se(e,t)}),[e,t,u]);return(0,V.jsx)(`div`,{className:`web-palette`,onMouseDown:e=>{e.target===e.currentTarget&&o()},children:(0,V.jsxs)(`div`,{className:`web-palette__box`,role:`dialog`,"aria-label":`Command palette`,onClick:e=>{e.target.closest(`.oo-action-list__row`)!==null&&o()},children:[(0,V.jsx)(`input`,{className:`web-field web-palette__input`,autoFocus:!0,value:t,placeholder:`Type a command or a terminal`,"aria-label":`Command`,onChange:e=>n(e.currentTarget.value),onKeyDown:e=>{if(e.key===`Escape`){e.preventDefault(),o();return}i.current?.handleKey(e)===!0&&e.key===`Enter`&&o()}}),(0,V.jsx)(l,{spec:d,hostCtx:c,manageKeys:!1,ref:i})]})})}function $(e){return{...e.description===void 0?{}:{description:e.description},...e.actions===void 0?{}:{actions:e.actions},...e.source===void 0?{}:{source:e.source},...e.dismissAuto===void 0?{}:{dismissAuto:e.dismissAuto}}}function le(e,t={}){C(n=>{n.publish({type:`action.done`,tone:`success`,icon:t.icon??c.check,title:e,...$(t)})})}function ue(e,t={}){C(n=>{n.publish({type:`attention`,tone:`warning`,icon:t.icon??c.warning,title:e,dismissTime:g,...$(t)})})}function de(e,t,n={}){let r=t instanceof Error?t.message:String(t),i=t instanceof Error?t.stack:void 0;C(t=>{t.publish({type:`action.failed`,tone:`danger`,icon:n.icon??c.warning,title:e,dismissTime:8e3,...$({...n,description:r}),...i===void 0?{}:{detail:i}})})||console.error(e,t)}function fe(e){let t=te(e.store);re(e.store,E);let n=z();return i({dispose:()=>{n.dispose(),ie(),ne()}},e.components.register({component:`Notifications.Toaster`,category:`chrome`,renderer:{kind:`react`,load:async()=>({default:G})}}),e.components.register({component:`Notifications.Confirm`,category:`chrome`,renderer:{kind:`react`,load:async()=>({default:H})}}),t.channels.register({id:`toast`,available:()=>!0,present:()=>void 0}),t.channels.register(n),e.surfaces.mount({surface:`overlay`,key:`notifications:toaster`,resource:{component:`Notifications.Toaster`}}),e.surfaces.mount({surface:`overlay`,key:`notifications:confirm`,resource:{component:`Notifications.Confirm`}}),e.commands.register({id:`notifications.enableAlerts`,title:`Notify me when this tab is in the background`,category:`Notifications`,slots:[Z],run:async()=>{if(L()){t.publish({type:`default`,tone:`success`,title:`Background notifications are already on`});return}if(!I()){t.publish({type:`default`,tone:`warning`,title:`Background notifications are blocked`,description:`The browser will not ask again. Turn them on in the site settings beside the address bar.`,dismissTime:g});return}let e=await R();t.publish({type:`default`,tone:e===`granted`?`success`:`warning`,title:e===`granted`?`Background notifications are on`:`Background notifications were not allowed`})}}),e.commands.register({id:`notifications.confirmStyle`,title:()=>A()===`native`?`Ask in the page's own dialog`:`Ask in the browser's dialog`,category:`Notifications`,slots:[Z],run:()=>ae(A()===`native`?`modal`:`native`)}),e.commands.register({id:`notifications.dismissAll`,title:`Dismiss all notifications`,category:`Notifications`,slots:[Z],run:()=>{for(let e of t.list())t.dismiss(e.id)}}))}export{X as a,J as c,g as d,h as f,ue as i,j as l,le as n,Z as o,de as r,Q as s,fe as t,C as u};
1
+ import{n as e,t}from"./jsx-runtime-BguD1OXD.js";import{t as n}from"./react-CybPckBe.js";import{t as r,u as i}from"./useStore-BQkzWMs-.js";import{n as a}from"./ScenaProvider-6A3TJumQ.js";import{t as o}from"./Button-_R1oktDz.js";import{o as s}from"./data-hUAVersf.js";import{t as c}from"./emojis-7RT6GvLa.js";import{t as l}from"./ActionList-aOUHK9Z9.js";import{a as u,d,o as f,r as p}from"./terminal-BPj7jGw5.js";var m=e((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function i(){}var a={d:{f:i,r:function(){throw Error(r(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},o=Symbol.for(`react.portal`),s=Symbol.for(`react.recoverable`),c=Symbol.for(`react.optimistic_key`);function l(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:r===c?c:``+r,children:e,containerInfo:t,implementation:n}}var u=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function d(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,e.browser=function(e){return{$$typeof:s,_reason:e}},e.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(r(299));return l(e,t,null,n)},e.flushSync=function(e){var t=u.T,n=a.p;try{if(u.T=null,a.p=2,e)return e()}finally{u.T=t,a.p=n,a.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=d(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`){if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=d(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}}else t??a.d.M(e)}},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=d(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`){if(t){var n=d(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}else a.d.m(e)}},e.requestFormReset=function(e){a.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return u.H.useFormState(e,t,n)},e.useFormStatus=function(){return u.H.useHostTransitionStatus()},e.version=`19.3.0`})),h=e(((e,t)=>{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=8e3,_=`$/notify/list`,ee=`$/notify/count`,v=`$/notify/history`;function y(e){return[e.source??``,e.type,e.title,e.description??``].join(` `)}function b(e){let t=new Map,n=new Map,r=new Set,i=[],a=[],o=0;function s(t){i=t,e.set(_,[...i]),e.set(ee,i.length)}function c(t){a=[t,...a.filter(e=>e.id!==t.id)].slice(0,100),e.set(v,[...a])}function l(e){for(let n of t.values())if((n.handles===void 0||n.handles(e))&&n.available())try{n.present(e)}catch{}}function u(e){let t=n.get(e);t!==void 0&&(clearTimeout(t),n.delete(e))}function d(e){u(e.id),!(e.dismissAuto===!1||r.has(e.id))&&n.set(e.id,setTimeout(()=>{n.delete(e.id),f(e.id)},e.dismissTime??2e3))}function f(e){if(u(e),r.delete(e),i.some(t=>t.id===e)){s(i.filter(t=>t.id!==e));for(let n of t.values())n.retract?.(e)}}return{publish(e){let t=e.id===void 0?i.find(t=>y(t)===y(e)):i.find(t=>t.id===e.id);if(t!==void 0){let n={...t,...e,id:t.id,count:t.count+1,at:new Date().toISOString()};return s([n,...i.filter(e=>e.id!==t.id)]),c(n),l(n),d(n),n.id}o+=1;let n={...e,id:e.id??`n${o}`,at:new Date().toISOString(),count:1};return s([n,...i]),c(n),l(n),d(n),n.id},dismiss:f,hold(e){r.add(e),u(e)},release(e){if(!r.delete(e))return;let t=i.find(t=>t.id===e);t!==void 0&&d(t)},update(e,t){let n=i.find(t=>t.id===e);if(n===void 0)return;let r={...n,...t,id:e};s(i.map(t=>t.id===e?r:t)),c(r),l(r),d(r)},list:()=>[...i],history:()=>[...a],forget(){a=[],e.set(v,[])},channels:{register(e){return t.set(e.id,e),{dispose:()=>void t.delete(e.id)}}}}}var x;function te(e){return x??=b(e),x}function ne(){x=void 0}function S(){if(x===void 0)throw Error(`Notifications were read before initNotifications ran.`);return x}function C(e){if(x===void 0)return!1;try{return e(x),!0}catch{return!1}}var w=`$/notify/confirm`,T=`$/notify/confirmStyle`,E=`modal`,D,O=0,k=null;function re(e,t){D=e,e.get(`$/notify/confirmStyle`)===void 0&&e.set(T,t)}function ie(){M(!1),D=void 0}function A(){return D?.get(`$/notify/confirmStyle`)??`modal`}function ae(e){D?.set(T,e)}function j(e){return D===void 0||A()===`native`?Promise.resolve(window.confirm(e.body===void 0?e.title:`${e.title}\n\n${e.body}`)):(M(!1),O+=1,D.set(w,{id:O,title:e.title,...e.body===void 0?{}:{body:e.body},confirmLabel:e.confirmLabel??`Confirm`,cancelLabel:e.cancelLabel??`Cancel`,tone:e.tone??`default`}),new Promise(e=>{k=e}))}function M(e){let t=k;k=null,D?.set(w,null),t?.(e)}var N=new Set([`attention`,`action.finished`,`connection.lost`]),P=6e4;function F(){return typeof window<`u`&&`Notification`in window}function I(){return F()&&window.Notification.permission==="default"}function L(){return F()&&window.Notification.permission===`granted`}async function R(){return F()?window.Notification.requestPermission():`denied`}function z(){let e=typeof document>`u`||document.hasFocus()?null:Date.now(),t=new Map,n=()=>{e??=Date.now()},r=()=>{e=null;for(let e of t.values())e.close();t.clear()};return window.addEventListener(`blur`,n),window.addEventListener(`focus`,r),{id:`browser`,handles:e=>N.has(e.type)&&e.alert!==void 0,available:()=>L()?document.visibilityState===`hidden`||e!==null&&Date.now()-e>=P:!1,present:e=>{let n=e.alert;if(n===void 0)return;let r=new window.Notification(n.title,{...n.body===void 0?{}:{body:n.body},tag:e.source??e.id});r.onclick=()=>{window.focus(),r.close()},t.set(e.id,r)},retract:e=>{t.get(e)?.close(),t.delete(e)},dispose:()=>{window.removeEventListener(`blur`,n),window.removeEventListener(`focus`,r);for(let e of t.values())e.close();t.clear()}}}var B=n(),V=t();function H(){let e=r(w),t=(0,B.useRef)(null),n=e?.id;return(0,B.useEffect)(()=>{if(n===void 0)return;t.current?.focus();let e=e=>{e.key===`Escape`&&(e.stopPropagation(),M(!1))};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[n]),e==null?null:(0,V.jsx)(`div`,{className:`web-confirm`,onClick:()=>M(!1),children:(0,V.jsxs)(`div`,{ref:t,tabIndex:-1,className:`web-confirm__card`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":`web-confirm-title`,...e.body===void 0?{}:{"aria-describedby":`web-confirm-body`},onClick:e=>e.stopPropagation(),children:[(0,V.jsx)(`h2`,{id:`web-confirm-title`,className:`web-confirm__title`,children:e.title}),e.body===void 0?null:(0,V.jsx)(`p`,{id:`web-confirm-body`,className:`web-confirm__body`,children:e.body}),(0,V.jsxs)(`div`,{className:`web-confirm__buttons`,children:[(0,V.jsx)(o,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>M(!1),children:e.cancelLabel}),(0,V.jsx)(o,{type:`button`,size:`sm`,variant:e.tone===`danger`?`danger`:`primary`,onClick:()=>M(!0),children:e.confirmLabel})]})]})})}var U={info:c.info,success:c.check,warning:c.warning,danger:c.error},W=4;function G({animation:e=`slide-up`}){let t=r(`$/notify/list`)??[],[n,i]=(0,B.useState)(!1);if(t.length===0)return null;let a=n?t:t.slice(0,W),o=t.length-a.length;return(0,V.jsxs)(`div`,{className:`web-toasts`,role:`region`,"aria-label":`Notifications`,children:[o>0?(0,V.jsx)(`button`,{type:`button`,className:`web-toast__more`,onClick:()=>i(!0),children:`${o} more`}):null,[...a].reverse().map(t=>(0,V.jsx)(K,{notification:t,animation:t.animation??e},t.id))]})}function K({notification:e,animation:t}){let n=a(),[r,i]=(0,B.useState)(!1),s=e.id,l=()=>S().dismiss(s);(0,B.useEffect)(()=>{if(!r)return;let e=S();return e.hold(s),()=>e.release(s)},[s,r]);let u=()=>S().hold(s),d=()=>{r||S().release(s)},f=e=>{n.commands.execute(e.command,e.args),e.dismisses!==!1&&l()};return(0,V.jsxs)(`div`,{className:`web-toast`,"data-tone":e.tone,"data-animation":t,role:e.dismissAuto===!1?`alert`:`status`,onMouseEnter:u,onMouseLeave:d,onFocus:u,onBlur:d,children:[(0,V.jsxs)(`div`,{className:`web-toast__head`,children:[(0,V.jsx)(`span`,{className:`web-toast__icon`,"aria-hidden":`true`,children:e.icon??U[e.tone]}),(0,V.jsx)(`span`,{className:`web-toast__title`,children:e.title}),e.count>1?(0,V.jsx)(`span`,{className:`web-toast__count`,title:`Raised ${e.count} times`,children:`\u{D7}${e.count}`}):null,(0,V.jsx)(`button`,{type:`button`,className:`web-toast__close`,"aria-label":`Dismiss`,onClick:l,children:c.close})]}),e.description===void 0?null:(0,V.jsx)(`p`,{className:`web-toast__body`,children:e.description}),e.detail===void 0?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:`web-toast__link`,onClick:()=>i(!r),children:r?`Hide details`:`Show details`}),r?(0,V.jsx)(`pre`,{className:`web-toast__detail`,children:e.detail}):null]}),e.actions===void 0||e.actions.length===0?null:(0,V.jsx)(`div`,{className:`web-toast__actions`,children:e.actions.map(e=>(0,V.jsx)(o,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>f(e),children:e.label},e.command))})]})}var q=h(),J=c.terminal;function Y(e,t){let n=f(e.claim,t);return n.kind===`you`?`Yours`:n.kind===`session`?`Held by a session`:`Held by another client`}function oe(e,t){if(!u(e))return Y(e,t);let n=p(e);return`${Y(e,t)}, exited${n===null?``:` with ${n}`}`}function se(e,t){let n=e.store.get(s),r=t.trim().toLowerCase();return(n?.terminals??[]).filter(e=>r===``||`terminal ${d(e)}`.toLowerCase().includes(r)).map(t=>({title:`Terminal: ${d(t)}`,description:oe(t,n?.clientId??null),icon:J,group:`Terminals`,onSelect:n=>{n.closeMenu(),e.commands.execute(`ahp.openTerminal`,{uri:t.resource})}}))}var X=`$/ahp/palette/open`,Z=`ahp:palette`;function Q(){return r(`$/ahp/palette/open`)===!0?(0,q.createPortal)((0,V.jsx)(ce,{}),document.body):null}function ce(){let e=a(),[t,n]=(0,B.useState)(``),i=(0,B.useRef)(null),o=()=>e.store.set(X,!1),c=(0,B.useMemo)(()=>({pushList:()=>void 0,replaceList:()=>void 0,openInline:()=>void 0,openPopover:()=>void 0,back:()=>void 0,closeMenu:o,keepOpen:()=>void 0,insertAtCursor:()=>void 0,replaceActiveToken:()=>void 0,query:``}),[]),u=r(s),d=(0,B.useMemo)(()=>({query:{slot:Z,q:t},extraItems:se(e,t)}),[e,t,u]);return(0,V.jsx)(`div`,{className:`web-palette`,onMouseDown:e=>{e.target===e.currentTarget&&o()},children:(0,V.jsxs)(`div`,{className:`web-palette__box`,role:`dialog`,"aria-label":`Command palette`,onClick:e=>{e.target.closest(`.oo-action-list__row`)!==null&&o()},children:[(0,V.jsx)(`input`,{className:`web-field web-palette__input`,autoFocus:!0,value:t,placeholder:`Type a command or a terminal`,"aria-label":`Command`,onChange:e=>n(e.currentTarget.value),onKeyDown:e=>{if(e.key===`Escape`){e.preventDefault(),o();return}i.current?.handleKey(e)===!0&&e.key===`Enter`&&o()}}),(0,V.jsx)(l,{spec:d,hostCtx:c,manageKeys:!1,ref:i})]})})}function $(e){return{...e.description===void 0?{}:{description:e.description},...e.actions===void 0?{}:{actions:e.actions},...e.source===void 0?{}:{source:e.source},...e.dismissAuto===void 0?{}:{dismissAuto:e.dismissAuto}}}function le(e,t={}){C(n=>{n.publish({type:`action.done`,tone:`success`,icon:t.icon??c.check,title:e,...$(t)})})}function ue(e,t={}){C(n=>{n.publish({type:`attention`,tone:`warning`,icon:t.icon??c.warning,title:e,dismissTime:g,...$(t)})})}function de(e,t,n={}){let r=t instanceof Error?t.message:String(t),i=t instanceof Error?t.stack:void 0;C(t=>{t.publish({type:`action.failed`,tone:`danger`,icon:n.icon??c.warning,title:e,dismissTime:8e3,...$({...n,description:r}),...i===void 0?{}:{detail:i}})})||console.error(e,t)}function fe(e){let t=te(e.store);re(e.store,E);let n=z();return i({dispose:()=>{n.dispose(),ie(),ne()}},e.components.register({component:`Notifications.Toaster`,category:`chrome`,renderer:{kind:`react`,load:async()=>({default:G})}}),e.components.register({component:`Notifications.Confirm`,category:`chrome`,renderer:{kind:`react`,load:async()=>({default:H})}}),t.channels.register({id:`toast`,available:()=>!0,present:()=>void 0}),t.channels.register(n),e.surfaces.mount({surface:`overlay`,key:`notifications:toaster`,resource:{component:`Notifications.Toaster`}}),e.surfaces.mount({surface:`overlay`,key:`notifications:confirm`,resource:{component:`Notifications.Confirm`}}),e.commands.register({id:`notifications.enableAlerts`,title:`Notify me when this tab is in the background`,category:`Notifications`,slots:[Z],run:async()=>{if(L()){t.publish({type:`default`,tone:`success`,title:`Background notifications are already on`});return}if(!I()){t.publish({type:`default`,tone:`warning`,title:`Background notifications are blocked`,description:`The browser will not ask again. Turn them on in the site settings beside the address bar.`,dismissTime:g});return}let e=await R();t.publish({type:`default`,tone:e===`granted`?`success`:`warning`,title:e===`granted`?`Background notifications are on`:`Background notifications were not allowed`})}}),e.commands.register({id:`notifications.confirmStyle`,title:()=>A()===`native`?`Ask in the page's own dialog`:`Ask in the browser's dialog`,category:`Notifications`,slots:[Z],run:()=>ae(A()===`native`?`modal`:`native`)}),e.commands.register({id:`notifications.dismissAll`,title:`Dismiss all notifications`,category:`Notifications`,slots:[Z],run:()=>{for(let e of t.list())t.dismiss(e.id)}}))}export{X as a,J as c,g as d,h as f,ue as i,j as l,le as n,Z as o,de as r,Q as s,fe as t,C as u};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Explorer-DoNVPZ-C.js","./jsx-runtime-BguD1OXD.js","./react-CybPckBe.js","./notify-BQ9fSOfy.js","./useStore-BQkzWMs-.js","./ScenaProvider-6A3TJumQ.js","./mount-context-DZgEFVFG.js","./Button-_R1oktDz.js","./styles-yrzHRgom.js","./_utils-DZVsX11M.js","./Button-CRZ1_3KW.css","./data-hUAVersf.js","./emojis-7RT6GvLa.js","./ActionList-aOUHK9Z9.js","./colors-BieSUSt7.js","./ActionList-Bawu-Lja.css","./terminal-BPj7jGw5.js","./words-T8-D0K4W.js","./Spinner-B-iOhBZq.js","./Spinner-B56wMtzv.css","./Alert-CHZkhmDE.js","./Icon-CIQ7doud.js","./Icon-BFMW_Ijn.css","./Alert-D6FTUHBY.css","./state-KGSq646f.js","./ExplorerList-DfesRs43.js","./ContextMenu-BV1gdog0.js","./Page-CnfUTsQD.js","./Badge-BDEW5PFb.js","./Badge-B_GtDNjv.css","./Markdown-_Awuh7Ku.js","./Markdown-D4ts0B_q.css","./Composer-Dp_Z0bXp.js","./composer-commands-B8AF8OGi.js","./drag-ruzgQUFW.js","./Text-MPtQvYE-.js","./Text-D2KlerVw.css","./turn-BoF7W1h6.js","./CopyButton-DWmFc5fw.js","./clicks-DIh3kBLi.js","./channel-UD2KGCy_.js","./New-D6QCCHrx.js","./useCloseGuard-B4qJKmaF.js","./folder-path-CTpCmycG.js","./words-CyqfIDyJ.js","./Start-D5KBqSwf.js","./index-yhQX4tVS.js","./surface-presentation-CT86pw6J.js","./registry-iidw4F1W.js","./preload-helper-BaNbYf_w.js","./sigillum-Bev0l9LS.js","./TextField-DnSHrmJM.js","./_field-parts-BuPjFCuf.js","./_field-parts-DannIEUW.css","./_field-parts-CfQcSJYh.css","./DateTimeInput-x1XGuNl0.css","./state-DRVsnGrf.js","./viewers-MssMDn0e.js","./index-B1VQ36Tb.css","./Start-Dtuu25RL.css","./Details-ByJkvhJN.js"])))=>i.map(i=>d[i]);
2
+ import{d as e,o as t,u as n}from"./notify-BQ9fSOfy.js";import{u as r}from"./useStore-BQkzWMs-.js";import{n as i,t as a}from"./surface-presentation-CT86pw6J.js";import{t as o}from"./preload-helper-BaNbYf_w.js";import{N as s,c,q as l}from"./data-hUAVersf.js";import{t as u}from"./emojis-7RT6GvLa.js";import{c as d}from"./composer-commands-B8AF8OGi.js";import{t as f}from"./state-KGSq646f.js";var p={"sidebar:left":{xsmall:`sheet`,small:`floating`},"sidebar:right":{xsmall:`floating`,small:`floating`},activitybar:{xsmall:`bar`}},m=e=>`session-alert:${e}`;function h(e,t){return e===void 0||e===t?null:t===`input`?`needs-you`:e!==`running`&&e!==`input`?null:t===`idle`?`finished`:t===`error`?`failed`:null}function g(t,n){let r=t.title===``?`Untitled`:t.title,i=[{label:`Open`,command:`ahp.openSession`,args:{resource:t.resource}}],a={id:m(t.resource),source:m(t.resource),actions:i};return n===`needs-you`?{...a,type:`attention`,tone:`warning`,icon:u.warning,title:`${r} needs you`,dismissAuto:!1,alert:{title:r,body:`Needs you`}}:n===`failed`?{...a,type:`action.finished`,tone:`danger`,icon:u.warning,title:`${r} failed`,dismissTime:e,alert:{title:r,body:`Failed`}}:{...a,type:`action.finished`,tone:`success`,icon:u.check,title:`${r} finished`,dismissTime:e,alert:{title:r,body:`Finished`}}}function _(e,t){return e.store.get(`$/ahp/activeSession`)===t&&document.visibilityState===`visible`&&document.hasFocus()}function v(e){let t=null;return e.store.subscribe(c,()=>{let r=e.store.get(c);if(r===void 0)return;let i=new Map(r.map(e=>[e.resource,l(e.status)])),a=t;if(t=i,a!==null)for(let t of r){let r=i.get(t.resource),o=a.get(t.resource);o===`input`&&r!==`input`&&n(e=>e.dismiss(m(t.resource)));let s=h(o,r);s===null||_(e,t.resource)||n(e=>e.publish(g(t,s)))}})}var y=`$/modus/class`,b=`ahp:sessions`;function x(e,t,n=`sidebar:left`){if(!a(i(n,t,p)))return;let r=e.layout.get().surfaces[n];r?.visible!==!1&&e.layout.setSurface(n,{...r,visible:!1})}function S(e){return r(d(e),v(e),e.components.register({component:`SessionExplorer`,category:`page`,renderer:{kind:`react`,load:()=>o(()=>import(`./Explorer-DoNVPZ-C.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]),import.meta.url)}}),e.components.register({component:`SessionPage`,category:`page`,props:{icon:u.sessions},renderer:{kind:`react`,load:()=>o(()=>import(`./Page-CnfUTsQD.js`),__vite__mapDeps([27,1,2,4,5,6,7,8,9,10,11,17,12,28,14,29,18,19,30,31,20,21,22,23,32,3,13,15,16,33,34,35,36,24,37,38,39,40]),import.meta.url)}}),e.components.register({component:`NewSessionPage`,category:`page`,props:{icon:u.sessions},renderer:{kind:`react`,load:()=>o(()=>import(`./New-D6QCCHrx.js`),__vite__mapDeps([41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,42,17,20,21,22,23,32,33,34,35,36,43,44,37]),import.meta.url)}}),e.components.register({component:`StartPage`,category:`page`,renderer:{kind:`react`,load:()=>o(()=>import(`./Start-D5KBqSwf.js`),__vite__mapDeps([45,1,5,2,7,8,9,10,46,3,4,6,11,12,13,14,15,16,47,48,49,50,17,51,52,53,54,55,56,43,57,58,59]),import.meta.url)}}),e.surfaces.setEmpty(`main`,{component:`StartPage`}),e.components.register({component:`SessionDetails`,category:`page`,renderer:{kind:`react`,load:()=>o(()=>import(`./Details-ByJkvhJN.js`),__vite__mapDeps([60,1,2,4,5,6,11,17,16,24,37,40]),import.meta.url)}}),e.commands.register({id:`ahp.showSessions`,title:`Show sessions`,category:`Sessions`,slots:[t],run:e=>e.commands.execute(`sidebar.activate`,{section:b})}),e.commands.register({id:`ahp.newSession`,title:`New session`,category:`Sessions`,slots:[t],run:(e,t)=>{let n=t?.provider;n!==void 0&&e.scena.surfaces.close(`session:new`),e.surfaces.open({surface:`main`,key:`session:new`,resource:{component:`NewSessionPage`,...n===void 0?{}:{provider:n}},props:{title:`New session`}}),x(e.scena,e.store.get(y)??`large`)}}),e.commands.register({id:`ahp.openSession`,title:`Open session`,run:(e,t)=>{let n=t?.resource;n!==void 0&&(e.store.set(f,n),e.surfaces.open({surface:`main`,key:`session:${n}`,resource:{component:`SessionPage`,resource:n},props:{title:{path:s(n)}}}),x(e.scena,e.store.get(y)??`large`),x(e.scena,e.store.get(y)??`large`,`sidebar:right`))}}),e.surfaces.mount({surface:`sidebar:right`,key:`session:details`,resource:{component:`SessionDetails`},props:{title:`Session`}}),e.surfaces.mount({surface:`sidebar:left`,key:`sessions:explorer`,when:`$/layout/surfaces/sidebar:left/section == "${b}"`,resource:{component:`SessionExplorer`}}))}export{p as i,x as n,S as r,b as t};
@@ -1 +1 @@
1
- import{rt as e}from"./data-CBWyZN_H.js";function t(e){return typeof e==`object`&&e?e:{}}function n(e){return typeof e==`string`&&e!==``?e:null}function r(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function i(e){return e.type===`command`?typeof e.output==`string`?e.output:``:typeof e.value==`string`?e.value:``}function a(e){let t=``;for(let n of e)t+=i(n);return t}function o(e){let i=t(e),a=t(i.lifecycle),o=r(a.exitCode);return{...i,title:n(i.title)??``,content:Array.isArray(i.content)?i.content:[],lifecycle:n(a.status)===`exited`?{status:`exited`,...o===null?{}:{exitCode:o}}:{status:`running`},claim:c(i.claim)?i.claim:l(``)}}function s(t,n){return e(o(t),n)}function c(e){let r=n(t(e).kind);return r===`client`||r===`session`}function l(e){return{kind:`client`,clientId:e}}function u(e,r){let i=t(e);return i.kind===`session`?{kind:`session`,session:n(i.session)??``}:i.kind===`client`&&r!==null&&i.clientId===r?{kind:`you`}:{kind:`another`}}function d(e){return t(e.lifecycle).status===`exited`}function f(e){return r(t(e.lifecycle).exitCode)}var p=0;function m(){return p+=1,`ahp-terminal:/${Date.now().toString(36)}-${p.toString(36)}`}function h(e,t){return t.startsWith(e)?{reset:!1,text:t.slice(e.length)}:{reset:!0,text:t}}function g(e){return e.title!==void 0&&e.title!==``?e.title:`Terminal`}function _(e,t){if(e===void 0)return!1;let n=t.replace(/\/+$/,``);return e.replace(/\/+$/,``)===n||e.startsWith(`${n}/`)}export{d as a,a as c,g as d,s as i,m as l,h as n,u as o,f as r,_ as s,l as t,o as u};
1
+ import{rt as e}from"./data-hUAVersf.js";function t(e){return typeof e==`object`&&e?e:{}}function n(e){return typeof e==`string`&&e!==``?e:null}function r(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function i(e){return e.type===`command`?typeof e.output==`string`?e.output:``:typeof e.value==`string`?e.value:``}function a(e){let t=``;for(let n of e)t+=i(n);return t}function o(e){let i=t(e),a=t(i.lifecycle),o=r(a.exitCode);return{...i,title:n(i.title)??``,content:Array.isArray(i.content)?i.content:[],lifecycle:n(a.status)===`exited`?{status:`exited`,...o===null?{}:{exitCode:o}}:{status:`running`},claim:c(i.claim)?i.claim:l(``)}}function s(t,n){return e(o(t),n)}function c(e){let r=n(t(e).kind);return r===`client`||r===`session`}function l(e){return{kind:`client`,clientId:e}}function u(e,r){let i=t(e);return i.kind===`session`?{kind:`session`,session:n(i.session)??``}:i.kind===`client`&&r!==null&&i.clientId===r?{kind:`you`}:{kind:`another`}}function d(e){return t(e.lifecycle).status===`exited`}function f(e){return r(t(e.lifecycle).exitCode)}var p=0;function m(){return p+=1,`ahp-terminal:/${Date.now().toString(36)}-${p.toString(36)}`}function h(e,t){return t.startsWith(e)?{reset:!1,text:t.slice(e.length)}:{reset:!0,text:t}}function g(e){return e.title!==void 0&&e.title!==``?e.title:`Terminal`}function _(e,t){if(e===void 0)return!1;let n=t.replace(/\/+$/,``);return e.replace(/\/+$/,``)===n||e.startsWith(`${n}/`)}export{d as a,a as c,g as d,s as i,m as l,h as n,u as o,f as r,_ as s,l as t,o as u};
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{D as n}from"./data-CBWyZN_H.js";import{n as r}from"./words-T8-D0K4W.js";import{t as i}from"./CopyButton-DWmFc5fw.js";var a=t(),o=e();function s(e){let[t,r]=(0,a.useState)(null);return(0,a.useEffect)(()=>{if(e===void 0)return;let t=!0;return r(null),n(e).then(e=>{t&&r({text:e.text})}).catch(e=>{t&&r({error:e instanceof Error?e.message:String(e)})}),()=>{t=!1}},[e]),t}function c({uri:e,dirty:t=!1}){let n=r(e);return(0,o.jsxs)(`div`,{className:`web-file__head`,children:[(0,o.jsx)(`code`,{children:n}),t?(0,o.jsx)(`span`,{className:`web-file__dirty`,title:`Not saved`,children:`Edited`}):null,(0,o.jsx)(i,{text:n,label:`Copy path`})]})}export{s as n,c as t};
1
+ import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{D as n}from"./data-hUAVersf.js";import{n as r}from"./words-T8-D0K4W.js";import{t as i}from"./CopyButton-DWmFc5fw.js";var a=t(),o=e();function s(e){let[t,r]=(0,a.useState)(null);return(0,a.useEffect)(()=>{if(e===void 0)return;let t=!0;return r(null),n(e).then(e=>{t&&r({text:e.text})}).catch(e=>{t&&r({error:e instanceof Error?e.message:String(e)})}),()=>{t=!1}},[e]),t}function c({uri:e,dirty:t=!1}){let n=r(e);return(0,o.jsxs)(`div`,{className:`web-file__head`,children:[(0,o.jsx)(`code`,{children:n}),t?(0,o.jsx)(`span`,{className:`web-file__dirty`,title:`Not saved`,children:`Edited`}):null,(0,o.jsx)(i,{text:n,label:`Copy path`})]})}export{s as n,c as t};
@@ -6,7 +6,7 @@
6
6
  <link rel="icon" type="image/svg+xml" href="./ahpw.svg" />
7
7
  <title>ahpw</title>
8
8
  <style>:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--boot-bg:#fff;--boot-muted:#6b7280}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--boot-bg:#020617;--boot-muted:#94a3b8}}html,body{background:var(--boot-bg);height:100%;margin:0}.boot-loading{background:var(--boot-bg);opacity:0;justify-content:center;align-items:center;animation:.35s ease-out .25s forwards boot-in;display:flex;position:fixed;inset:0}.boot-mark{display:block;overflow:visible}.boot-echo{transform-box:view-box;transform-origin:32px 32px;opacity:0;animation:1.5s cubic-bezier(.25,.6,.3,1) infinite boot-echo}.boot-echo--second{animation-delay:.5s}.boot-echo--third{animation-delay:1s}@keyframes boot-echo{0%{opacity:.6;transform:scale(1)}75%{opacity:0}to{opacity:0;transform:scale(1.95)}}@keyframes boot-in{to{opacity:1}}.boot-noscript{color:var(--boot-muted);text-align:center;padding:40px 20px;font:14px/1.5 system-ui,sans-serif}@media (prefers-reduced-motion:reduce){.boot-loading{opacity:1;animation:none}.boot-echo{animation:none}}</style>
9
- <script type="module" crossorigin src="./assets/index-DBKNxflN.js"></script>
9
+ <script type="module" crossorigin src="./assets/index-yhQX4tVS.js"></script>
10
10
  <link rel="modulepreload" crossorigin href="./assets/jsx-runtime-BguD1OXD.js">
11
11
  <link rel="modulepreload" crossorigin href="./assets/react-CybPckBe.js">
12
12
  <link rel="modulepreload" crossorigin href="./assets/ScenaProvider-6A3TJumQ.js">
@@ -15,31 +15,31 @@
15
15
  <link rel="modulepreload" crossorigin href="./assets/styles-yrzHRgom.js">
16
16
  <link rel="modulepreload" crossorigin href="./assets/_utils-DZVsX11M.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/Button-_R1oktDz.js">
18
- <link rel="modulepreload" crossorigin href="./assets/data-CBWyZN_H.js">
18
+ <link rel="modulepreload" crossorigin href="./assets/data-hUAVersf.js">
19
19
  <link rel="modulepreload" crossorigin href="./assets/emojis-7RT6GvLa.js">
20
20
  <link rel="modulepreload" crossorigin href="./assets/colors-BieSUSt7.js">
21
21
  <link rel="modulepreload" crossorigin href="./assets/ActionList-aOUHK9Z9.js">
22
- <link rel="modulepreload" crossorigin href="./assets/terminal-BMZxY-St.js">
23
- <link rel="modulepreload" crossorigin href="./assets/notify-CJo-T9e2.js">
22
+ <link rel="modulepreload" crossorigin href="./assets/terminal-BPj7jGw5.js">
23
+ <link rel="modulepreload" crossorigin href="./assets/notify-BQ9fSOfy.js">
24
24
  <link rel="modulepreload" crossorigin href="./assets/surface-presentation-CT86pw6J.js">
25
25
  <link rel="modulepreload" crossorigin href="./assets/registry-iidw4F1W.js">
26
26
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-BaNbYf_w.js">
27
27
  <link rel="modulepreload" crossorigin href="./assets/sigillum-Bev0l9LS.js">
28
28
  <link rel="modulepreload" crossorigin href="./assets/words-T8-D0K4W.js">
29
- <link rel="modulepreload" crossorigin href="./assets/composer-commands-AmOY6XGO.js">
29
+ <link rel="modulepreload" crossorigin href="./assets/composer-commands-B8AF8OGi.js">
30
30
  <link rel="modulepreload" crossorigin href="./assets/state-KGSq646f.js">
31
- <link rel="modulepreload" crossorigin href="./assets/sessions-BcRKb9k7.js">
31
+ <link rel="modulepreload" crossorigin href="./assets/sessions-8PScJEDe.js">
32
32
  <link rel="modulepreload" crossorigin href="./assets/_field-parts-BuPjFCuf.js">
33
33
  <link rel="modulepreload" crossorigin href="./assets/TextField-DnSHrmJM.js">
34
34
  <link rel="modulepreload" crossorigin href="./assets/state-DRVsnGrf.js">
35
- <link rel="modulepreload" crossorigin href="./assets/folder-path-CmVXGhKI.js">
35
+ <link rel="modulepreload" crossorigin href="./assets/folder-path-CTpCmycG.js">
36
36
  <link rel="modulepreload" crossorigin href="./assets/viewers-MssMDn0e.js">
37
37
  <link rel="stylesheet" crossorigin href="./assets/Button-CRZ1_3KW.css">
38
38
  <link rel="stylesheet" crossorigin href="./assets/ActionList-Bawu-Lja.css">
39
39
  <link rel="stylesheet" crossorigin href="./assets/_field-parts-DannIEUW.css">
40
40
  <link rel="stylesheet" crossorigin href="./assets/_field-parts-CfQcSJYh.css">
41
41
  <link rel="stylesheet" crossorigin href="./assets/DateTimeInput-x1XGuNl0.css">
42
- <link rel="stylesheet" crossorigin href="./assets/index-BQcTkW2q.css">
42
+ <link rel="stylesheet" crossorigin href="./assets/index-B1VQ36Tb.css">
43
43
  </head>
44
44
  <body>
45
45
  <div id="root">
@@ -33,6 +33,11 @@ export interface EmbedWindow {
33
33
  export interface Embedder {
34
34
  /** The host this page shows. */
35
35
  host(): Promise<EmbedHost>;
36
+ /**
37
+ * The address of the host this page shows, known before ahpw runs. Every host
38
+ * shares the embedder's origin, so ahpw keeps a host's own pages under it.
39
+ */
40
+ readonly hostUrl: string;
36
41
  /** The token of the host this page shows, or null for a host with none. */
37
42
  token(): Promise<string | null>;
38
43
  /** Every host the embedder knows. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ahpd/web",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "description": "A web UI for an AHP server, as an ahpd plugin or on its own with ahpw serve",
6
6
  "keywords": [
@@ -79,7 +79,7 @@
79
79
  "@codemirror/view": "^6.43.14",
80
80
  "@lezer/highlight": "^1.2.5",
81
81
  "@microsoft/agent-host-protocol": "^1.0.0",
82
- "@softov/scena": "^0.5.4",
82
+ "@softov/scena": "^0.5.5",
83
83
  "@types/node": "^22.10.2",
84
84
  "@types/react": "^19.2.18",
85
85
  "@types/react-dom": "^19.2.3",
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{t as n}from"./colors-BieSUSt7.js";import{n as r}from"./ScenaProvider-6A3TJumQ.js";import{t as i}from"./ContextMenu-BV1gdog0.js";import{r as a}from"./Icon-CIQ7doud.js";import{r as o}from"./MountTitle-Bx_Vo8tF.js";var s=t(),c=e();function l({className:e,style:t,direction:n=`row`,align:r,justify:i,gap:a,children:o}){let s={...t};return r!==void 0&&(s.alignItems=r),i!==void 0&&(s.justifyContent=i),a!==void 0&&(s.gap=a),(0,c.jsx)(`div`,{className:[`oo-toolbar`,e].filter(Boolean).join(` `),"data-direction":n,style:s,children:o})}var u=(0,s.createContext)(null);function d(){let e=(0,s.useContext)(u);if(!e)throw Error(`useCampus() must be used inside <CampusView>`);return e}var f=(0,s.createContext)(1);function p(){return(0,s.useContext)(f)}var m={n:`ns-resize`,s:`ns-resize`,e:`ew-resize`,w:`ew-resize`,ne:`nesw-resize`,sw:`nesw-resize`,nw:`nwse-resize`,se:`nwse-resize`},h={w:80,h:60};function g(e,t,n,r,i,a){let o=t.x,s=t.y,c=t.w,l=t.h;return e.includes(`w`)&&(o=t.x+n,c=t.w-n),e.includes(`e`)&&(c=t.w+n),e.includes(`n`)&&(s=t.y+r,l=t.h-r),e.includes(`s`)&&(l=t.h+r),c<i.w&&(e.includes(`w`)&&(o=t.x+(t.w-i.w)),c=i.w),l<i.h&&(e.includes(`n`)&&(s=t.y+(t.h-i.h)),l=i.h),isFinite(a)&&(o<-a&&(e.includes(`w`)&&(c=t.x+t.w- -a),o=-a),s<-a&&(e.includes(`n`)&&(l=t.y+t.h- -a),s=-a),o+c>a&&(c=a-o),s+l>a&&(l=a-s)),{x:o,y:s,w:c,h:l}}function _(e,t,n,r){let i=e.x+t,a=e.y+n;return isFinite(r)&&(i=Math.max(-r,Math.min(r-e.w,i)),a=Math.max(-r,Math.min(r-e.h,a))),{...e,x:i,y:a}}function v({bounds:e,onCommit:t,minSize:n=h,resizable:r=!0,movable:i=!0,dragHandle:a=`[data-campus-drag]`,selected:o=!1,zIndex:l,children:u,onPointerDownCapture:f,onClick:m,onContextMenu:v,className:b,style:x,bodyStyle:S}){let{viewportRef:C,maxDepth:w}=d(),T=p(),[E,D]=(0,s.useState)(null),O=(0,s.useRef)(null),k=(0,s.useRef)(null),A=(0,s.useRef)(null);(0,s.useEffect)(()=>{D(null)},[e.x,e.y,e.w,e.h]);function j(){A.current&&=(D(A.current),null),k.current=null}function M(t,n){n.preventDefault(),n.stopPropagation(),n.currentTarget.setPointerCapture(n.pointerId),O.current={mode:t,startX:n.clientX,startY:n.clientY,start:E??e}}function N(e){if(!i)return;let t=e.target;t&&t.closest(a)&&M(`move`,e)}function P(e){let t=O.current;if(!t)return;let r=C.current.scale*T||1,i=(e.clientX-t.startX)/r,a=(e.clientY-t.startY)/r,o=t.mode===`move`?_(t.start,i,a,w):g(t.mode,t.start,i,a,n,w);A.current=o,k.current===null&&(k.current=requestAnimationFrame(j))}function F(n){if(!O.current)return;k.current!==null&&(cancelAnimationFrame(k.current),j()),n.currentTarget.releasePointerCapture(n.pointerId);let r=A.current??E??e;A.current=null,O.current=null,t(r)}let I=E??e,L={position:`absolute`,left:I.x,top:I.y,width:I.w,height:I.h,display:`flex`,flexDirection:`column`,overflow:`hidden`,zIndex:l??(o?10:1),background:`var(--oo-color-canvas)`,border:`1px solid ${o?`var(--oo-color-accent)`:`var(--oo-color-border)`}`,borderRadius:`var(--oo-radius-sm)`,boxShadow:o?`var(--oo-shadow-lg)`:`var(--oo-shadow-md)`,...x};return(0,c.jsxs)(`div`,{className:[`oo-campus-nodus`,b].filter(Boolean).join(` `),"data-selected":o,style:L,onPointerDownCapture:f,onPointerDown:N,onPointerMove:P,onPointerUp:F,onClick:m,onContextMenu:v,children:[(0,c.jsx)(`div`,{style:{flex:1,minHeight:0,display:`flex`,flexDirection:`column`,overflow:`hidden`,...S},children:u}),r?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(y,{mode:`n`,startDrag:M,onPointerMove:P,endDrag:F}),(0,c.jsx)(y,{mode:`s`,startDrag:M,onPointerMove:P,endDrag:F}),(0,c.jsx)(y,{mode:`e`,startDrag:M,onPointerMove:P,endDrag:F}),(0,c.jsx)(y,{mode:`w`,startDrag:M,onPointerMove:P,endDrag:F}),(0,c.jsx)(y,{mode:`nw`,startDrag:M,onPointerMove:P,endDrag:F}),(0,c.jsx)(y,{mode:`ne`,startDrag:M,onPointerMove:P,endDrag:F}),(0,c.jsx)(y,{mode:`sw`,startDrag:M,onPointerMove:P,endDrag:F}),(0,c.jsx)(y,{mode:`se`,startDrag:M,onPointerMove:P,endDrag:F})]}):null]})}function y({mode:e,startDrag:t,onPointerMove:n,endDrag:r}){let i=e.length===2,a;if(i)a={position:`absolute`,width:12,height:12,cursor:m[e],touchAction:`none`,zIndex:1,...e.includes(`n`)?{top:-6}:{bottom:-6},...e.includes(`w`)?{left:-6}:{right:-6}};else{let t=e===`n`||e===`s`;a={position:`absolute`,cursor:m[e],touchAction:`none`,zIndex:1,...t?{left:12,right:12,height:6,...e===`n`?{top:-3}:{bottom:-3}}:{top:12,bottom:12,width:6,...e===`w`?{left:-3}:{right:-3}}}}return(0,c.jsx)(`div`,{className:`oo-campus-nodus-resize oo-campus-nodus-resize--${e}`,onPointerDown:n=>t(e,n),onPointerMove:n,onPointerUp:r,style:a})}function b({zoom:e=1,pan:t,zIndex:n,className:r,style:i,children:a}){let o=t?.x??0,s=t?.y??0,l=o!==0||s!==0||e!==1?`translate(${o}px, ${s}px) scale(${e})`:void 0;return(0,c.jsx)(f.Provider,{value:e,children:(0,c.jsx)(`div`,{className:[`oo-campus-stratum`,r].filter(Boolean).join(` `),style:{position:`absolute`,left:0,top:0,width:0,height:0,transformOrigin:`0 0`,transform:l,zIndex:n,...i},children:a})})}function x({className:e,style:t,children:n}){return n==null||n===!1?null:(0,c.jsx)(`div`,{className:[`oo-campus-velum`,e].filter(Boolean).join(` `),style:{position:`absolute`,inset:0,pointerEvents:`none`,zIndex:30,...t},children:n})}var S=.1,C=4,w=1.1,T=9,E=.95,D=40,O=140;function k(e,t,n){return Math.max(t,Math.min(n,e))}function A(e){return`translate(${e.panX}px, ${e.panY}px) scale(${e.scale})`}function j(e,t,n,r,i){let a=k(e.scale,r,i);if(!isFinite(n))return{...e,scale:a};let{panX:o,panY:s}=e,c=n*a,l=n*a;return o=2*c>=t.w?k(o,t.w-c,c):t.w/2,s=2*l>=t.h?k(s,t.h-l,l):t.h/2,{scale:a,panX:o,panY:s}}function M({viewport:e,onViewportChange:t,maxDepth:n=1/0,minScale:r=S,maxScale:i=C,zoomStep:a=w,showGrid:o=!0,onBackgroundClick:l,onBackgroundContextMenu:d,nodes:f,nodeTypes:p,nodeLayers:m,defaultLayer:h,onNodeCommit:g,onNodeSelect:_,onNodeContextMenu:v,className:y,style:D,children:M,ref:F}){let I=(0,s.useRef)(null),L=(0,s.useRef)(null),R=(0,s.useRef)(a),ee=(0,s.useRef)(r),z=(0,s.useRef)(i),B=(0,s.useRef)(Q),[V,H]=(0,s.useState)({w:0,h:0});(0,s.useEffect)(()=>{let e=I.current;if(!e)return;function t(){let t=e.getBoundingClientRect();H({w:t.width,h:t.height})}t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let U=(0,s.useRef)(e),W=(0,s.useRef)(new Set),G=(0,s.useCallback)(e=>(W.current.add(e),()=>{W.current.delete(e)}),[]);function K(){W.current.forEach(e=>e())}function q(e){let t=L.current;t&&(t.style.transform=A(e))}let te=(0,s.useRef)(t);te.current=t;let J=(0,s.useRef)(null);function ne(){J.current!==null&&window.clearTimeout(J.current),J.current=window.setTimeout(()=>{J.current=null,te.current(U.current)},O)}(0,s.useEffect)(()=>()=>{J.current!==null&&window.clearTimeout(J.current)},[]),(0,s.useEffect)(()=>{let t=U.current;(e.scale!==t.scale||e.panX!==t.panX||e.panY!==t.panY)&&(U.current=e,q(e),K())},[e]);let Y=(0,s.useRef)(null),X=(0,s.useRef)(null);function Z(e){let t=j(e,V,n,r,i);U.current=t,q(t),K(),ne()}function Q(e){Y.current=e,X.current===null&&(X.current=requestAnimationFrame(()=>{X.current=null;let e=Y.current;Y.current=null,e&&Z(e)}))}(0,s.useEffect)(()=>{R.current=a,ee.current=r,z.current=i,B.current=Q}),(0,s.useEffect)(()=>{let e=I.current;if(!e)return;function t(t){if(!e)return;let n=e.getBoundingClientRect(),r=U.current;if(t.ctrlKey||t.metaKey){t.preventDefault();let e=t.clientX-n.left,i=t.clientY-n.top,a=t.deltaY<0?R.current:1/R.current,o=k(r.scale*a,ee.current,z.current),s=(e-r.panX)/r.scale,c=(i-r.panY)/r.scale;B.current({scale:o,panX:e-s*o,panY:i-c*o})}else{t.preventDefault();let e=-(t.shiftKey?t.deltaY:t.deltaX),n=-(t.shiftKey?0:t.deltaY);B.current({scale:r.scale,panX:r.panX+e,panY:r.panY+n})}}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);let $=(0,s.useRef)(null);function re(e){return e===I.current||e===L.current}function ie(e){if(!re(e.target))return;e.currentTarget.setPointerCapture(e.pointerId);let t=U.current;$.current={startX:e.clientX,startY:e.clientY,startPanX:t.panX,startPanY:t.panY,moved:!1}}function ae(e){let t=$.current;if(!t)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;!t.moved&&n*n+r*r<T||(!t.moved&&I.current&&(I.current.style.cursor=`grabbing`),t.moved=!0,Q({scale:U.current.scale,panX:t.startPanX+n,panY:t.startPanY+r}))}function oe(e){let t=$.current;t&&(e.currentTarget.releasePointerCapture(e.pointerId),$.current=null,I.current&&(I.current.style.cursor=``),t.moved||l?.())}function se(e){re(e.target)&&d?.(e)}(0,s.useImperativeHandle)(F,()=>({fitToView(e){let t=V;if(t.w===0||t.h===0)return;let a=e??(isFinite(n)?{x:-n,y:-n,w:2*n,h:2*n}:{x:0,y:0,w:0,h:0});if(a.w<=0||a.h<=0)return;let o=k(Math.min(t.w/a.w,t.h/a.h)*E,r,i),s=a.x+a.w/2,c=a.y+a.h/2;Z({scale:o,panX:t.w/2-s*o,panY:t.h/2-c*o})},centerOn(e,t){let n=V,r=U.current;n.w!==0&&n.h!==0&&Z({scale:r.scale,panX:n.w/2-e*r.scale,panY:n.h/2-t*r.scale})},resetViewport(){Z({scale:1,panX:0,panY:0})},zoomBy(e){ce(U.current.scale*e)},zoomToScale(e){ce(e)}}),[V,n,r,i]);function ce(e){let t=V;if(t.w===0||t.h===0)return;let n=U.current,a=k(e,r,i);if(a===n.scale)return;let o=t.w/2,s=t.h/2,c=(o-n.panX)/n.scale,l=(s-n.panY)/n.scale;Z({scale:a,panX:o-c*a,panY:s-l*a})}let le=(0,s.useMemo)(()=>{let e=Object.entries(m??{}).map(([e,t])=>({name:e,config:t})).sort((e,t)=>e.config.index-t.config.index),t=h??e[0]?.name??`default`,n=new Map;for(let e of f??[]){let r=e.layer&&m?.[e.layer]?e.layer:t,i=n.get(r);i?i.push(e):n.set(r,[e])}let r=[],i=new Set;for(let{name:t,config:a}of e)r.push({name:t,config:a,nodes:n.get(t)??[]}),i.add(t);for(let[e,t]of n)i.has(e)||r.push({name:e,config:{index:r.length},nodes:t});return r},[f,m,h]),ue=(0,s.useMemo)(()=>({viewportRef:U,subscribeViewport:G,container:V,maxDepth:n}),[G,V,n]);return(0,c.jsx)(u.Provider,{value:ue,children:(0,c.jsxs)(`div`,{ref:I,className:[`oo-campus`,y].filter(Boolean).join(` `),onPointerDown:ie,onPointerMove:ae,onPointerUp:oe,onContextMenu:se,style:{position:`relative`,width:`100%`,height:`100%`,overflow:`hidden`,background:`var(--oo-color-surface)`,touchAction:`none`,cursor:`default`,...D},children:[o?(0,c.jsx)(P,{}):null,(0,c.jsx)(`div`,{ref:L,className:`oo-campus-world`,style:{position:`absolute`,left:0,top:0,width:0,height:0,transform:A(U.current),transformOrigin:`0 0`},children:le.map(e=>(0,c.jsx)(b,{zoom:e.config.zoom,pan:e.config.pan,zIndex:e.config.index,children:e.nodes.map(e=>{let t=p?.[e.type];return t?(0,c.jsx)(N,{node:e,onCommit:g,onSelect:_,onContextMenu:v,children:(0,c.jsx)(t,{id:e.id,selected:!!e.selected,data:e.data})},e.id):null})},e.name))}),(0,c.jsx)(x,{children:M})]})})}function N({node:e,onCommit:t,onSelect:n,onContextMenu:r,children:i}){return(0,c.jsx)(v,{bounds:e.bounds,selected:e.selected,resizable:e.resizable,movable:e.movable,onCommit:n=>t?.(e.id,n),onPointerDownCapture:()=>{e.selected||n?.(e.id)},onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),n?.(e.id),r?.(e.id,t)},children:i})}function P(){let{viewportRef:e,subscribeViewport:t}=d(),{panX:n,panY:r,scale:i}=(0,s.useSyncExternalStore)(t,()=>e.current),a=D*i,o=a<6?0:a>200?.04:Math.min(.12,a/200);if(o<=0)return null;let l=(n%a+a)%a,u=(r%a+a)%a,f=`rgba(128, 128, 128, ${o})`;return(0,c.jsx)(`div`,{className:`oo-campus-grid`,"aria-hidden":!0,style:{position:`absolute`,inset:0,pointerEvents:`none`,backgroundImage:`linear-gradient(to right, ${f} 1px, transparent 1px),linear-gradient(to bottom, ${f} 1px, transparent 1px)`,backgroundSize:`${a}px ${a}px, ${a}px ${a}px`,backgroundPosition:`${l}px ${u}px, ${l}px ${u}px`}})}var F=160,I=110,L=12,R={bottom:12,right:12};function ee({nodes:e,onJumpTo:t,width:r=F,height:i=I,padding:a=L,anchor:o=R,className:l,style:u}){let{viewportRef:f,subscribeViewport:p,container:m}=d(),h=(0,s.useSyncExternalStore)(p,()=>f.current);if(m.w===0||m.h===0)return null;let g=1/0,_=1/0,v=-1/0,y=-1/0;for(let t of e)g=Math.min(g,t.bounds.x),_=Math.min(_,t.bounds.y),v=Math.max(v,t.bounds.x+t.bounds.w),y=Math.max(y,t.bounds.y+t.bounds.h);let b=-h.panX/h.scale,x=-h.panY/h.scale,S=b+m.w/h.scale,C=x+m.h/h.scale;isFinite(g)?(g=Math.min(g,b),_=Math.min(_,x),v=Math.max(v,S),y=Math.max(y,C)):(g=b,_=x,v=S,y=C);let w=Math.max(1,v-g),T=Math.max(1,y-_),E=r-a*2,D=i-a*2,O=Math.min(E/w,D/T);function k(e,t){return[a+(e-g)*O,a+(t-_)*O]}function A(e){let n=e.currentTarget.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top;t((r-a)/O+g,(i-a)/O+_)}let[j,M]=k(b,x),N=(S-b)*O,P=(C-x)*O;return(0,c.jsxs)(`div`,{className:[`oo-campus-mappa`,l].filter(Boolean).join(` `),onClick:A,onPointerDown:e=>e.stopPropagation(),style:{position:`absolute`,...o,width:r,height:i,pointerEvents:`auto`,background:`rgba(20, 20, 24, 0.75)`,backdropFilter:`blur(6px)`,WebkitBackdropFilter:`blur(6px)`,borderRadius:`var(--oo-radius-sm, 4px)`,boxShadow:`0 6px 20px rgba(0, 0, 0, 0.32)`,cursor:`crosshair`,zIndex:40,overflow:`hidden`,...u},children:[e.map(e=>{let[t,r]=k(e.bounds.x,e.bounds.y),i=Math.max(2,e.bounds.w*O),a=Math.max(2,e.bounds.h*O);return(0,c.jsx)(`div`,{title:e.id,style:{position:`absolute`,left:t,top:r,width:i,height:a,background:n(e.color,.85),border:e.selected?`1px solid rgba(255, 255, 255, 0.9)`:`1px solid rgba(255, 255, 255, 0.18)`,borderRadius:2,boxSizing:`border-box`}},e.id)}),(0,c.jsx)(`div`,{style:{position:`absolute`,left:j,top:M,width:N,height:P,border:`1px solid rgba(255, 255, 255, 0.9)`,background:`rgba(255, 255, 255, 0.06)`,pointerEvents:`none`,boxSizing:`border-box`}})]})}function z({selected:e,data:t}){let{mount:n,renderMount:i,onClose:s}=t,l=r().components.get(n.component.component)?.props,u=o(n,n.key),d=n.props?.icon??l?.icon,f=n.props?.color??l?.color;return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(`div`,{className:`oo-spatial-card__header`,"data-campus-drag":!0,"data-color":f,style:{padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,borderBottom:`1px solid var(--oo-color-border)`,fontSize:`var(--oo-font-size-xs)`,color:e?`inherit`:`var(--oo-color-muted)`,background:e?`var(--oo-color-active)`:`var(--oo-color-surface)`,display:`flex`,justifyContent:`space-between`,alignItems:`center`,cursor:`grab`,userSelect:`none`,touchAction:`none`,flex:`0 0 auto`},children:[(0,c.jsxs)(`span`,{title:u,style:{display:`inline-flex`,alignItems:`center`,gap:6,minWidth:0},children:[d?(0,c.jsx)(`span`,{className:`oo-spatial-card__icon`,"aria-hidden":!0,children:d}):null,(0,c.jsx)(`span`,{className:`oo-spatial-card__title`,style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:u})]}),(0,c.jsx)(`span`,{onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),s()},title:`Close`,style:{cursor:`pointer`},children:a.closePanel})]}),(0,c.jsx)(`div`,{className:`oo-spatial-card__body`,style:{flex:1,overflow:`auto`,minHeight:0},children:i(n)})]})}var B=960,V=768,H=36,U=40,W=16,G=8e3;function K(e,t,n){if(n===`grid`&&t>0){let n=Math.max(1,Math.floor(Math.sqrt(t))),r=e%n,i=Math.floor(e/n);return{x:W+r*976,y:W+i*784,w:B,h:V}}return{x:U+e*H,y:U+e*H,w:B,h:V}}var q={scale:1,panX:0,panY:0},te={},J=1.1,ne={card:z},Y=`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"], [role="combobox"], [role="listbox"], [role="menu"], [role="dialog"], [role="alertdialog"]`;function X({surface:e,mounts:t,state:n,setState:a,renderMount:o,onClose:u,onActivate:d}){let f=r(),[p,m]=(0,s.useState)(null),[h,g]=(0,s.useState)(null),_=n.spatial?.arrangement??`cascade`,v=n.spatial?.bounds??te,y=n.spatial?.selectedKey,b=n.spatial?.viewport??q,x=(0,s.useRef)({arrangement:_,bounds:v,selectedKey:y,viewport:b});x.current={arrangement:_,bounds:v,selectedKey:y,viewport:b};function S(e){let t={...x.current,...e};x.current=t,a({spatial:t})}function C(e){S({viewport:e})}let w=(0,s.useMemo)(()=>{let e={};return t.forEach((n,r)=>{_===`manual`?e[n.key]=v[n.key]??K(r,t.length,`cascade`):e[n.key]=K(r,t.length,_)}),e},[t,_,v]);function T(e){if(e===`manual`){let e={};for(let n of t)e[n.key]=w[n.key];S({arrangement:`manual`,bounds:e})}else S({arrangement:e,bounds:{}})}function E(e,n){if(x.current.arrangement!==`manual`){let r={};for(let e of t)r[e.key]=w[e.key];r[e]=n,S({arrangement:`manual`,bounds:r,selectedKey:e});return}S({bounds:{...x.current.bounds,[e]:n},selectedKey:e})}let D=(0,s.useRef)(void 0);function O(e){x.current.selectedKey!==e&&(S({selectedKey:e}),D.current=e,e&&d(e))}let k=(0,s.useRef)(null);function A(){if(t.length===0){k.current?.fitToView();return}let e=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of t){let t=w[a.key];t&&(e=Math.min(e,t.x),n=Math.min(n,t.y),r=Math.max(r,t.x+t.w),i=Math.max(i,t.y+t.h))}isFinite(e)&&k.current?.fitToView({x:e,y:n,w:r-e,h:i-n})}function j(){let e=y;if(!e)return;let t=w[e];t&&k.current?.centerOn(t.x+t.w/2,t.y+t.h/2)}function N(e){let t=w[e];t&&k.current?.centerOn(t.x+t.w/2,t.y+t.h/2)}function P(e){let n=t.findIndex(t=>t.key===e);n<0||E(e,K(n,t.length,`cascade`))}let F=(0,s.useRef)({fitToView:A,resetViewport:()=>k.current?.resetViewport(),centerOnSelected:j,setArrangement:T,centerOnCard:N,resetBoundsForCard:P});F.current={fitToView:A,resetViewport:()=>k.current?.resetViewport(),centerOnSelected:j,setArrangement:T,centerOnCard:N,resetBoundsForCard:P};let I=n.activeContainerKey,L=I!==void 0&&t.some(e=>e.key===I);(0,s.useEffect)(()=>{if(I!==void 0&&L){if(D.current===I){D.current=void 0;return}x.current.selectedKey!==I&&S({selectedKey:I}),F.current.centerOnCard(I)}},[I,L]);let R=(0,s.useRef)(null),z=(0,s.useRef)(u);z.current=u,(0,s.useEffect)(()=>{function e(e){if(e.key!==`Escape`||e.defaultPrevented||e.repeat||e.ctrlKey||e.altKey||e.metaKey||e.shiftKey)return;let t=x.current.selectedKey;if(t===void 0)return;let n=e.target instanceof Element?e.target:null;(n===null||n===document.body||R.current?.contains(n))&&(n?.closest(Y)||(e.preventDefault(),z.current(t)))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,s.useEffect)(()=>{let e=[f.commands.register({id:`surface.fitToView`,title:`Fit to view`,description:`Frame all cards`,icon:`⛶`,color:`blue`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{F.current.fitToView(),e.host?.closeMenu()}}),f.commands.register({id:`surface.resetZoom`,title:`Reset zoom`,icon:`↺`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{F.current.resetViewport(),e.host?.closeMenu()}}),f.commands.register({id:`surface.centerSelected`,title:`Center on selected`,icon:`◎`,color:`teal`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/hasSelection == true`,run:e=>{F.current.centerOnSelected(),e.host?.closeMenu()}}),f.commands.register({id:`surface.setArrangement.cascade`,title:`Arrange: Cascade`,icon:`▤`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "cascade"`,run:e=>{F.current.setArrangement(`cascade`),e.host?.closeMenu()}}),f.commands.register({id:`surface.setArrangement.grid`,title:`Arrange: Grid`,icon:`▦`,color:`violet`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "grid"`,run:e=>{F.current.setArrangement(`grid`),e.host?.closeMenu()}}),f.commands.register({id:`surface.setArrangement.manual`,title:`Arrange: Manual`,icon:`✥`,slots:[`surface:context`],when:`$/surface/layoutId == "spatial" && $/surface/arrangement != "manual"`,run:e=>{F.current.setArrangement(`manual`),e.host?.closeMenu()}}),f.commands.register({id:`card.centerOn`,title:`Center on this card`,icon:`◎`,color:`teal`,slots:[`card:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{let t=e.store.get(`$/tab/key`);t&&(F.current.centerOnCard(t),e.host?.closeMenu())}}),f.commands.register({id:`card.resetBounds`,title:`Reset bounds`,description:`Recompute size + position`,icon:`↺`,slots:[`card:context`],when:`$/surface/layoutId == "spatial"`,run:e=>{let t=e.store.get(`$/tab/key`);t&&(F.current.resetBoundsForCard(t),e.host?.closeMenu())}})];return()=>{for(let t of e)t.dispose()}},[f]);let B=(0,s.useMemo)(()=>t.map(e=>({id:e.key,type:`card`,bounds:w[e.key],selected:e.key===y,data:{mount:e,renderMount:o,onClose:()=>u(e.key)}})),[t,w,y,o,u]),V=t.flatMap(e=>{let t=w[e.key];if(!t)return[];let n=f.components.get(e.component.component)?.opens?.color;return[{id:e.key,bounds:t,color:n,selected:e.key===y}]});function H(e){e.preventDefault(),m({x:e.clientX,y:e.clientY})}return t.length===0?(0,c.jsx)(`div`,{style:{padding:24,color:`var(--oo-color-muted)`},children:`Nothing open.`}):(0,c.jsxs)(`div`,{ref:R,className:`oo-layout oo-layout--spatial`,style:{display:`flex`,flexDirection:`column`,height:`100%`},children:[(0,c.jsxs)(l,{className:`oo-spatial-toolbar`,children:[(0,c.jsxs)(`label`,{style:{display:`flex`,gap:6,alignItems:`center`},children:[(0,c.jsx)(`span`,{style:{color:`var(--oo-color-muted)`},children:`arrange:`}),(0,c.jsxs)(`select`,{value:_,onChange:e=>T(e.target.value),children:[(0,c.jsx)(`option`,{value:`cascade`,children:`cascade`}),(0,c.jsx)(`option`,{value:`grid`,children:`grid`}),(0,c.jsx)(`option`,{value:`manual`,children:`manual`})]})]}),(0,c.jsx)(`button`,{type:`button`,onClick:()=>k.current?.zoomBy(1/J),title:`Zoom out`,"aria-label":`Zoom out`,children:`−`}),(0,c.jsx)($,{value:b.scale,onCommit:e=>k.current?.zoomToScale(e)}),(0,c.jsx)(`button`,{type:`button`,onClick:()=>k.current?.zoomBy(J),title:`Zoom in`,"aria-label":`Zoom in`,children:`+`}),(0,c.jsx)(`button`,{type:`button`,onClick:A,title:`Fit all cards to viewport`,children:`Fit`}),(0,c.jsx)(`button`,{type:`button`,onClick:()=>k.current?.resetViewport(),title:`Reset zoom + pan`,children:`Reset`}),(0,c.jsxs)(`span`,{style:{color:`var(--oo-color-muted)`,fontSize:`var(--oo-font-size-xs)`},children:[`drag header to move · drag edges to resize · ctrl+wheel zooms · drag empty area to pan · first drag locks to `,(0,c.jsx)(`em`,{children:`manual`})]})]}),(0,c.jsx)(`div`,{style:{flex:1,minHeight:0,position:`relative`},children:(0,c.jsx)(M,{ref:k,viewport:b,onViewportChange:C,maxDepth:G,nodes:B,nodeTypes:ne,onNodeCommit:(e,t)=>E(e,t),onNodeSelect:e=>O(e),onNodeContextMenu:(e,t)=>g({x:t.clientX,y:t.clientY,key:e}),onBackgroundClick:()=>O(void 0),onBackgroundContextMenu:H,children:(0,c.jsx)(ee,{nodes:V,onJumpTo:(e,t)=>k.current?.centerOn(e,t)})})}),y?(0,c.jsx)(Z,{mount:t.find(e=>e.key===y),selectedKey:y,onCenter:()=>N(y),onReset:()=>P(y),onClose:()=>u(y),onDeselect:()=>O(void 0)}):null,p?(0,c.jsx)(i,{x:p.x,y:p.y,onClose:()=>m(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:{"$/surface/name":e,"$/surface/layoutId":`spatial`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/surface/arrangement":_,"$/surface/hasSelection":!!y}}):null,h?(0,c.jsx)(i,{x:h.x,y:h.y,onClose:()=>g(null),spec:{query:{slot:`card:context`},footerHints:!0},context:{"$/surface/name":e,"$/surface/layoutId":`spatial`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/surface/arrangement":_,"$/tab/key":h.key,"$/tab/index":t.findIndex(e=>e.key===h.key),"$/tab/canSplit":!1,"$/tab/canMove":!1,"$/tab/isActive":h.key===y,"$/tab/isPinned":!1,"$/group/tabCount":t.length}}):null]})}function Z({mount:e,selectedKey:t,onCenter:n,onReset:r,onClose:i,onDeselect:a}){let s=o(e,t);return(0,c.jsxs)(`div`,{className:`oo-spatial-footer`,role:`toolbar`,"aria-label":`Selected card actions`,style:{position:`absolute`,bottom:16,left:`50%`,transform:`translateX(-50%)`,display:`flex`,alignItems:`center`,gap:4,padding:`6px 8px`,background:`rgba(20, 20, 24, 0.78)`,backdropFilter:`blur(8px)`,WebkitBackdropFilter:`blur(8px)`,borderRadius:9999,color:`#fff`,fontSize:`var(--oo-font-size-xs)`,boxShadow:`0 6px 20px rgba(0, 0, 0, 0.32)`,pointerEvents:`auto`,zIndex:50},onPointerDown:e=>e.stopPropagation(),children:[(0,c.jsx)(`span`,{style:{padding:`0 8px`,color:`rgba(255, 255, 255, 0.8)`,maxWidth:220,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},title:s,children:s}),(0,c.jsx)(Q,{icon:`◎`,label:`Center on this card`,onClick:n}),(0,c.jsx)(Q,{icon:`↺`,label:`Reset bounds`,onClick:r}),(0,c.jsx)(Q,{icon:`✕`,label:`Close`,onClick:i,variant:`danger`}),(0,c.jsx)(Q,{icon:`⊗`,label:`Deselect`,onClick:a})]})}function Q({icon:e,label:t,onClick:n,variant:r}){return(0,c.jsx)(`button`,{type:`button`,onClick:n,title:t,"aria-label":t,style:{width:28,height:28,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,border:`none`,borderRadius:`50%`,background:`rgba(255, 255, 255, 0.08)`,color:r===`danger`?`rgb(255, 130, 130)`:`#fff`,cursor:`pointer`,font:`inherit`,lineHeight:1},onMouseEnter:e=>{e.currentTarget.style.background=`rgba(255, 255, 255, 0.18)`},onMouseLeave:e=>{e.currentTarget.style.background=`rgba(255, 255, 255, 0.08)`},children:e})}function $({value:e,onCommit:t}){let n=Math.round(e*100),[r,i]=(0,s.useState)(`${n}`),[a,o]=(0,s.useState)(!1);!a&&r!==`${n}`&&i(`${n}`);function l(){let e=parseInt(r,10);Number.isFinite(e)&&e>0?t(e/100):i(`${n}`),o(!1)}return(0,c.jsx)(`input`,{type:`text`,inputMode:`numeric`,value:a?r:`${n}%`,onFocus:e=>{o(!0),i(`${n}`),requestAnimationFrame(()=>e.target.select?.())},onChange:e=>i(e.target.value.replace(/[^\d]/g,``)),onBlur:l,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.target.blur()):e.key===`Escape`&&(e.preventDefault(),i(`${n}`),o(!1),e.target.blur())},title:`Zoom percent`,"aria-label":`Zoom percent`,style:{width:56,textAlign:`center`,font:`inherit`,padding:`2px 4px`,border:`1px solid var(--oo-color-border)`,borderRadius:`var(--oo-radius-sm, 4px)`,background:`var(--oo-color-canvas)`,color:`inherit`}})}export{X as SpatialLayout};
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{n}from"./ScenaProvider-6A3TJumQ.js";import{t as r}from"./ContextMenu-BV1gdog0.js";import{r as i}from"./Icon-CIQ7doud.js";import{t as a}from"./Divisor-hrrJK3bw.js";import{t as o}from"./MountTitle-Bx_Vo8tF.js";var s=e(),c=t(),l=.05,u=`application/x-scena-split-index`;function d({surface:e,mounts:t,state:d,setState:p,renderMount:m,onClose:h,onReorder:g}){let _=n(),v=(0,c.useRef)(null),y=d.split?.order??[],b=new Set(y),x=y.map(e=>t.find(t=>t.key===e)).filter(e=>!!e),S=t.filter(e=>!b.has(e.key)),C=[...x,...S],w=C.length>0?1/C.length:1,T=(()=>{let e=d.split?.ratios;return e&&e.length===C.length?e:C.map(()=>w)})();function E(e,t){let n=t;if(C.length<2)return;let r=T.slice(0,n).reduce((e,t)=>e+t,0),i=(T[n]??0)+(T[n+1]??0);if(i<=0)return;let a=f(e-r,l,i-l),o=i-a;o<l&&(o=l,a=i-o);let s=[...T];s[n]=a,s[n+1]=o,p({split:{order:d.split?.order,ratios:s,collapsed:d.split?.collapsed}})}let[D,O]=(0,c.useState)(null),[k,A]=(0,c.useState)(null),[j,M]=(0,c.useState)(null);function N(e,t,n){e.preventDefault(),e.stopPropagation(),A({x:e.clientX,y:e.clientY,key:t,idx:n})}function P(e){e.target===e.currentTarget&&(e.preventDefault(),M({x:e.clientX,y:e.clientY}))}let F={"$/surface/name":e,"$/surface/layoutId":`split`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/tab/canSplit":!1,"$/tab/canMove":!1,"$/group/canClose":!1,"$/group/canMaximize":!1};function I(e,t){e.dataTransfer.setData(u,String(t)),e.dataTransfer.effectAllowed=`move`}function L(e,t){e.dataTransfer.types.includes(u)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,O(t))}function R(){O(null)}function z(e,t){if(!e.dataTransfer.types.includes(u))return;e.preventDefault();let n=Number(e.dataTransfer.getData(u));O(null),Number.isFinite(n)&&n!==t&&g(n,t)}return C.length===0?(0,s.jsx)(`div`,{style:{padding:24,color:`var(--oo-color-muted)`},children:`Nothing open.`}):(0,s.jsxs)(`div`,{ref:v,className:`oo-layout oo-layout--split`,style:{display:`flex`,flexDirection:`row`,height:`100%`,minHeight:0},onContextMenu:P,children:[C.map((e,t)=>{let n=_.components.get(e.component.component)?.props,r=e.props?.color??n?.color;return(0,s.jsxs)(c.Fragment,{children:[(0,s.jsxs)(`div`,{"data-pane-index":t,"data-drag-over":D===t,"data-color":r,className:`oo-split-pane`,style:{flex:T[t]??w,minWidth:0,overflow:`hidden`,display:`flex`,flexDirection:`column`},children:[(0,s.jsxs)(`div`,{className:`oo-split-pane-header`,draggable:!0,onDragStart:e=>I(e,t),onDragOver:e=>L(e,t),onDragLeave:R,onDrop:e=>z(e,t),onContextMenu:n=>N(n,e.key,t),style:{flex:`0 0 auto`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,background:`var(--oo-color-surface)`,borderBottom:`1px solid var(--oo-color-border)`,fontSize:`var(--oo-font-size-xs)`,color:`var(--oo-color-muted)`,cursor:`grab`,userSelect:`none`},children:[(0,s.jsx)(o,{mount:e,fallback:e.key,iconClassName:`oo-split-pane-header__icon`,titleClassName:`oo-split-pane-header__title`}),(0,s.jsx)(`span`,{onClick:t=>{t.stopPropagation(),h(e.key)},title:`Close`,style:{cursor:`pointer`},children:i.closePanel})]}),(0,s.jsx)(`div`,{style:{flex:1,overflow:`auto`,minHeight:0},children:m(e)})]}),t<C.length-1?(0,s.jsx)(a,{id:t,direction:`row`,containerRef:v,onCommit:E}):null]},e.key)}),k?(0,s.jsx)(r,{x:k.x,y:k.y,onClose:()=>A(null),spec:{query:{slot:`tab:context`},footerHints:!0},context:{...F,"$/tab/key":k.key,"$/tab/index":k.idx,"$/tab/isActive":!0,"$/tab/isPinned":!1,"$/group/tabCount":t.length}}):null,j?(0,s.jsx)(r,{x:j.x,y:j.y,onClose:()=>M(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:F}):null]})}function f(e,t,n){return Math.max(t,Math.min(n,e))}export{d as SplitLayout};
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{n}from"./ScenaProvider-6A3TJumQ.js";import{t as r}from"./ContextMenu-BV1gdog0.js";import{r as i}from"./Icon-CIQ7doud.js";import{n as a,t as o}from"./MountTitle-Bx_Vo8tF.js";var s=e(),c=t();function l({mounts:e,state:t,setState:o,title:l,icon:u,color:d}){let f=n(),p=t.split?.order??[],m=new Set(p),h=p.map(t=>e.find(e=>e.key===t)).filter(e=>!!e),g=e.filter(e=>!m.has(e.key)),_=[...h,...g],v=new Set(t.stack?.hidden??[]),[y,b]=(0,c.useState)(null);function x(e){o({stack:{...t.stack,hidden:[...e]}})}function S(e){let t=new Set(v);t.has(e)?t.delete(e):t.add(e),x(t)}function C(e){e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();b({x:t.right,y:t.bottom+2})}return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(`div`,{className:`oo-stack-container-header`,"data-color":d,style:{flex:`0 0 auto`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,background:`var(--oo-color-surface)`,borderBottom:`1px solid var(--oo-color-border)`,fontSize:`var(--oo-font-size-xs)`,textTransform:`uppercase`,letterSpacing:`0.06em`,color:`var(--oo-color-muted)`,userSelect:`none`,minWidth:0,minHeight:32},children:[(0,s.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:6},children:[u?(0,s.jsx)(`span`,{className:`oo-stack-container-header__icon`,"aria-hidden":!0,children:u}):null,(0,s.jsx)(`span`,{className:`oo-stack-container-header__title`,children:l})]}),(0,s.jsx)(`button`,{type:`button`,className:`oo-stack-container-header__overflow`,title:`Toggle panes`,"aria-label":`Toggle panes`,onClick:C,style:{background:`transparent`,border:`none`,color:`var(--oo-color-muted)`,cursor:`pointer`,font:`inherit`,padding:`0 4px`},children:i.moreHoriz})]}),y?(0,s.jsx)(r,{x:y.x,y:y.y,onClose:()=>b(null),spec:{footerHints:!0,items:_.map(e=>{let t=f.components.get(e.component.component)?.props,n=!v.has(e.key);return{title:a(f,e),icon:e.props?.icon??t?.icon,color:e.props?.color??t?.color,active:n,onSelect:t=>{S(e.key),t.closeMenu()}}})}}):null]})}var u=`application/x-scena-stack-index`;function d({surface:e,mounts:t,state:a,setState:d,renderMount:f,onClose:p,onReorder:m}){let h=n(),g=a.split?.order??[],_=new Set(g),v=g.map(e=>t.find(t=>t.key===e)).filter(e=>!!e),y=t.filter(e=>!_.has(e.key)),b=[...v,...y],x=new Set(a.stack?.hidden??[]),S=b.filter(e=>!x.has(e.key)),C=a.stack?.container,w=new Set(a.split?.collapsed??[]),[T,E]=(0,c.useState)(null);function D(e){let t=new Set(w);t.has(e)?t.delete(e):t.add(e),d({split:{order:a.split?.order,ratios:a.split?.ratios,collapsed:[...t]}})}function O(e,t){e.dataTransfer.setData(u,String(t)),e.dataTransfer.effectAllowed=`move`}function k(e,t){e.dataTransfer.types.includes(u)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,E(t))}function A(){E(null)}function j(e,t){if(!e.dataTransfer.types.includes(u))return;e.preventDefault();let n=Number(e.dataTransfer.getData(u));E(null),Number.isFinite(n)&&n!==t&&m(n,t)}let[M,N]=(0,c.useState)(null),[P,F]=(0,c.useState)(null);function I(e,t,n){e.preventDefault(),e.stopPropagation(),N({x:e.clientX,y:e.clientY,key:t,idx:n})}function L(e){e.target===e.currentTarget&&(e.preventDefault(),F({x:e.clientX,y:e.clientY}))}let R={"$/surface/name":e,"$/surface/layoutId":`stack`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0,"$/tab/canSplit":!1,"$/tab/canMove":t.length>1,"$/group/canClose":!1,"$/group/canMaximize":!1};return(0,s.jsxs)(`div`,{className:`oo-layout oo-layout--stack`,style:{display:`flex`,flexDirection:`column`,height:`100%`,minHeight:0},onContextMenu:L,children:[(0,s.jsx)(l,{title:C?.title??`Details`,icon:C?.icon,color:C?.color,mounts:t,state:a,setState:d}),S.map((e,t)=>{let n=w.has(e.key),r=h.components.get(e.component.component)?.props,a=e.props?.color??r?.color;return(0,s.jsxs)(`div`,{className:`oo-stack-section`,"data-collapsed":n,"data-drag-over":T===t,"data-color":a,style:{flex:n?`0 0 auto`:1,minHeight:0,display:`flex`,flexDirection:`column`,borderBottom:`1px solid var(--oo-color-border)`},children:[(0,s.jsxs)(`div`,{className:`oo-stack-header`,draggable:!0,onDragStart:e=>O(e,t),onDragOver:e=>k(e,t),onDragLeave:A,onDrop:e=>j(e,t),onClick:()=>D(e.key),onContextMenu:n=>I(n,e.key,t),style:{cursor:`grab`,padding:`var(--oo-spacing-xs) var(--oo-spacing-sm)`,background:`var(--oo-color-surface)`,fontSize:`var(--oo-font-size-xs)`,textTransform:`uppercase`,color:`var(--oo-color-muted)`,display:`flex`,justifyContent:`space-between`,alignItems:`center`,userSelect:`none`},children:[(0,s.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:6},children:[(0,s.jsx)(`span`,{"aria-hidden":!0,children:n?`▶`:`▼`}),(0,s.jsx)(o,{mount:e,fallback:e.key,iconClassName:`oo-stack-section__icon`,titleClassName:`oo-stack-section__title`})]}),(0,s.jsx)(`span`,{onClick:t=>{t.stopPropagation(),p(e.key)},title:`Close`,style:{cursor:`pointer`},children:i.closePanel})]}),n?null:(0,s.jsx)(`div`,{style:{flex:1,overflow:`auto`,minHeight:0},children:f(e)})]},e.key)}),M?(0,s.jsx)(r,{x:M.x,y:M.y,onClose:()=>N(null),spec:{query:{slot:`tab:context`},footerHints:!0},context:{...R,"$/tab/key":M.key,"$/tab/index":M.idx,"$/tab/isActive":!0,"$/tab/isPinned":!1,"$/group/tabCount":t.length}}):null,P?(0,s.jsx)(r,{x:P.x,y:P.y,onClose:()=>F(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:R}):null]})}export{d as StackLayout};
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{n}from"./ScenaProvider-6A3TJumQ.js";import{t as r}from"./ContextMenu-BV1gdog0.js";import{r as i}from"./Icon-CIQ7doud.js";import{TabTitle as a}from"./TabPanelLayout-YGvLy1cR.js";var o=e(),s=t(),c=`application/x-scena-tab-index`;function l({surface:e,mounts:t,state:l,renderMount:u,onActivate:d,onClose:f,onReorder:p}){let m=n(),h=l.split?.order??[],g=new Set(h),_=h.map(e=>t.find(t=>t.key===e)).filter(e=>!!e),v=t.filter(e=>!g.has(e.key)),y=[..._,...v],b=y.find(e=>e.key===l.activeContainerKey)??y[y.length-1],x=new Set(l.split?.pinned??[]),S=b?m.commands.list({slot:`view/title`,enabled:!0}):[],C=b?.component.component,w={"$/surface/name":e,"$/tab/key":b?.key,"$/tab/component":typeof C==`string`?C:void 0},T=m.commands.list({slot:`surface/title`}).filter(e=>e.when===void 0||m.when.evaluate(e.when,w)),E=t=>{m.store.set(`$/surface/name`,e),m.store.set(`$/tab/key`,b?.key),m.commands.execute(t)},[D,O]=(0,s.useState)(null),[k,A]=(0,s.useState)(null),[j,M]=(0,s.useState)(null),[N,P]=(0,s.useState)(null),F=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=F.current;if(!e)return;function t(t){t.deltaY!==0&&(t.preventDefault(),e.scrollLeft+=t.deltaY)}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);function I(e,t,n){e.preventDefault(),e.stopPropagation(),A({x:e.clientX,y:e.clientY,tabKey:t,tabIdx:n})}function L(e){let t=e.currentTarget.getBoundingClientRect();M({x:t.right,y:t.bottom+2})}function R(e){e.target===e.currentTarget&&(e.preventDefault(),P({x:e.clientX,y:e.clientY}))}function z(e,t){e.dataTransfer.setData(c,String(t)),e.dataTransfer.effectAllowed=`move`}function B(e,t){e.dataTransfer.types.includes(c)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,O(t))}function V(){O(null)}function H(e,t){if(!e.dataTransfer.types.includes(c))return;e.preventDefault();let n=Number(e.dataTransfer.getData(c));O(null),Number.isFinite(n)&&n!==t&&p(n,t)}let U={"$/tab/canSplit":!1,"$/tab/canMove":!1,"$/group/canClose":!1,"$/group/canMaximize":!1,"$/surface/name":e,"$/surface/layoutId":`tab`,"$/surface/mountCount":t.length,"$/surface/closedHistory":0},W=k?y.find(e=>e.key===k.tabKey):void 0,G=W?m.mountMenus.collect(`tab:context`,W):void 0;return(0,o.jsxs)(`div`,{className:`oo-layout oo-layout--tab`,style:{display:`flex`,flexDirection:`column`,height:`100%`},children:[(0,o.jsxs)(`div`,{className:`tab-bar`,children:[(0,o.jsx)(`div`,{className:`tab-bar__strip`,ref:F,children:y.map((t,n)=>{let r=x.has(t.key);return(0,o.jsx)(a,{resourceKey:t.key,m:t,idx:n,isPinned:r,isActive:t===b,dragOverTab:D,onDragStart:e=>z(e,n),onDragOver:e=>B(e,n),onDragLeave:V,onDrop:e=>H(e,n),onClick:()=>d(t.key),onContextMenu:e=>I(e,t.key,n),onClose:e=>{e.stopPropagation(),f(t.key)},onUnpin:n=>{n.stopPropagation(),m.store.set(`$/tab/key`,t.key),m.store.set(`$/surface/name`,e),m.commands.execute(`tab.unpin`)}},t.key)})}),(0,o.jsxs)(`div`,{className:`tab-bar__extras`,children:[S.map((e,t)=>{let n=typeof e.title==`function`?e.title():e.title;return(0,o.jsxs)(`button`,{onClick:()=>m.commands.execute(e.id),title:String(n),children:[e.icon?`${e.icon} `:``,String(n)]},t)}),T.map(e=>{let t=String(typeof e.title==`function`?e.title():e.title);return(0,o.jsx)(`button`,{onClick:()=>E(e.id),title:t,"aria-label":t,children:e.icon??t},e.id)}),(0,o.jsx)(`button`,{className:`tab-bar__more`,title:`Group actions`,"aria-label":`Group actions`,onClick:L,children:i.moreHoriz})]})]}),(0,o.jsx)(`div`,{style:{flex:1,minHeight:0,position:`relative`},onContextMenu:R,children:y.length===0?(0,o.jsx)(`div`,{style:{padding:24,color:`var(--oo-color-muted)`},children:`Nothing open.`}):y.map(e=>(0,o.jsx)(`div`,{className:`oo-layout__mount`,"data-active":e===b||void 0,style:{height:`100%`,overflow:`auto`,display:e===b?`block`:`none`},children:u(e)},e.key))}),k?(0,o.jsx)(r,{x:k.x,y:k.y,onClose:()=>A(null),spec:{query:{slot:`tab:context`},extraItems:G,footerHints:!0},context:{...U,"$/tab/key":k.tabKey,"$/tab/index":k.tabIdx,"$/tab/isActive":k.tabKey===b?.key,"$/tab/isPinned":x.has(k.tabKey),"$/group/tabCount":y.length}}):null,j?(0,o.jsx)(r,{x:j.x,y:j.y,onClose:()=>M(null),spec:{query:{slot:`tab-group:context`},footerHints:!0},context:{...U,"$/group/tabCount":y.length}}):null,N?(0,o.jsx)(r,{x:N.x,y:N.y,onClose:()=>P(null),spec:{query:{slot:`surface:context`},footerHints:!0},context:U}):null]})}export{l as TabLayout};
@@ -1 +0,0 @@
1
- import{t as e}from"./jsx-runtime-BguD1OXD.js";import{t}from"./react-CybPckBe.js";import{n}from"./colors-BieSUSt7.js";import{n as r}from"./ScenaProvider-6A3TJumQ.js";import{t as i}from"./ContextMenu-BV1gdog0.js";import{r as a}from"./Icon-CIQ7doud.js";import{t as o}from"./Divisor-hrrJK3bw.js";import{t as s}from"./useStoreLabel-BuZT1So6.js";var c=e(),l=t(),u=`application/x-scena-tab-panel`,d=.2,f=.05;function p(){return`g_${Math.random().toString(36).slice(2,10)}`}function m(e,t){return{kind:`leaf`,id:p(),tabs:e,activeKey:t}}function h(e,t){if(e.kind===`leaf`){for(let n of e.tabs)t.add(n);return}h(e.first,t),h(e.second,t)}function g(e,t){if(e.kind===`leaf`){t.push(e);return}g(e.first,t),g(e.second,t)}function _(e,t){if(e.kind===`leaf`){let n=e.tabs.filter(e=>t.has(e)),r=e.activeKey&&t.has(e.activeKey)?e.activeKey:n[0];return{...e,tabs:n,activeKey:r}}return{...e,first:_(e.first,t),second:_(e.second,t)}}function v(e,t){if(e.kind===`leaf`)return t(e);let n=v(e.first,t),r=v(e.second,t);return n&&r?{...e,first:n,second:r}:n??r}function y(e,t,n){return e.kind===`leaf`?e.id===t?n:e:{...e,first:y(e.first,t,n),second:y(e.second,t,n)}}function b(e,t,n){return e.kind===`leaf`?e:t(e)?{...e,...n}:{...e,first:b(e.first,t,n),second:b(e.second,t,n)}}function x(e,t){if(e.kind===`leaf`){if(t.has(e.id)){let n=p();return t.add(n),{...e,id:n}}return t.add(e.id),e}return{...e,first:x(e.first,t),second:x(e.second,t)}}function S(e,t,n){let r=new Set(t),i=e?x(_(e,r),new Set):m([...t],n),a=new Set;h(i,a);let o=t.filter(e=>!a.has(e));if(o.length>0){let e=[];g(i,e);let t=n&&e.find(e=>e.tabs.includes(n))||e.find(e=>e.tabs.length>0)||e[0];if(t){let e=n&&o.includes(n)?n:o[o.length-1];i=y(i,t.id,{...t,tabs:[...t.tabs,...o],activeKey:e})}}if(n){let e=v(i,e=>e.tabs.includes(n)&&e.activeKey!==n?{...e,activeKey:n}:e);e&&(i=e)}return{tree:i}}function C(e,t){return e===t?!0:!e||!t||e.kind!==t.kind?!1:e.kind===`leaf`&&t.kind===`leaf`?e.id===t.id&&e.activeKey===t.activeKey&&e.tabs.length===t.tabs.length&&e.tabs.every((e,n)=>e===t.tabs[n]):e.kind===`split`&&t.kind===`split`&&e.direction===t.direction&&(e.ratio??.5)===(t.ratio??.5)&&C(e.first,t.first)&&C(e.second,t.second)}function w({leaf:e,ctx:t}){let n=r(),o=e.activeKey??e.tabs[0],[s,f]=(0,l.useState)(null),[p,m]=(0,l.useState)(null),h=(0,l.useRef)(null),g=(0,l.useRef)(null);(0,l.useEffect)(()=>{let e=g.current;if(!e)return;function t(t){t.deltaY!==0&&(t.preventDefault(),e.scrollLeft+=t.deltaY)}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]),(0,l.useEffect)(()=>{let e=()=>{m(null),f(null)};return window.addEventListener(`dragend`,e),window.addEventListener(`drop`,e),()=>{window.removeEventListener(`dragend`,e),window.removeEventListener(`drop`,e)}},[]);function _(n){let r=v(t.tree,t=>t.id===e.id?{...t,activeKey:n}:t);r&&t.commit(r),t.onActivate(n)}function y(t,n){let r={sourceLeafId:e.id,tabKey:n};t.dataTransfer.setData(u,JSON.stringify(r)),t.dataTransfer.effectAllowed=`move`}function b(e,t){e.dataTransfer.types.includes(u)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,f(t))}function x(){f(null)}function S(n,r){if(!n.dataTransfer.types.includes(u))return;n.preventDefault(),f(null);let i=E(n);i&&O(t,i,e.id,r)}function C(e){let t=h.current;if(!t)return null;let n=t.getBoundingClientRect();if(n.width<=0||n.height<=0)return null;let r=(e.clientX-n.left)/n.width,i=(e.clientY-n.top)/n.height;return i<d?`top`:i>.8?`bottom`:r<d?`left`:r>.8?`right`:`center`}function w(e){e.dataTransfer.types.includes(u)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,m(C(e)))}function D(e){let t=e.relatedTarget;(!t||!e.currentTarget.contains(t))&&m(null)}function A(n){if(!n.dataTransfer.types.includes(u))return;n.preventDefault();let r=C(n);m(null);let i=E(n);i&&r&&(r===`center`?O(t,i,e.id,e.tabs.length):k(t,i,e.id,r))}let[j,M]=(0,l.useState)(null);function N(e){e.stopPropagation();let t=e.currentTarget.getBoundingClientRect();M({x:t.right-4,y:t.bottom+2})}function F(){M(null)}let[I,L]=(0,l.useState)(null);function R(e,t,n){e.preventDefault(),L({x:e.clientX,y:e.clientY,tabKey:t,tabIdx:n})}function z(){L(null)}let B=I?t.mounts.find(e=>e.key===I.tabKey):void 0,V=B?n.mountMenus.collect(`tab:context`,B):void 0;return(0,c.jsxs)(`div`,{className:`oo-tab-panel-group`,"data-leaf-id":e.id,style:{flex:1,minWidth:0,minHeight:0,display:`flex`,flexDirection:`column`,overflow:`hidden`},children:[(0,c.jsxs)(`div`,{className:`tab-bar`,children:[(0,c.jsx)(`div`,{className:`tab-bar__strip`,ref:g,children:e.tabs.map((e,r)=>{let i=t.mounts.find(t=>t.key===e);return(0,c.jsx)(P,{resourceKey:e,idx:r,m:i,isActive:e===o,isPinned:t.pinned.has(e),dragOverTab:s,onDragStart:t=>y(t,e),onDragOver:e=>b(e,r),onDragLeave:x,onDrop:e=>S(e,r),onClick:()=>_(e),onContextMenu:t=>R(t,e,r),onClose:()=>t.onClose(e),onUnpin:r=>{r.stopPropagation(),n.store.set(`$/tab/key`,e),n.store.set(`$/surface/name`,t.surface),n.commands.execute(`tab.unpin`)}},e)})}),(0,c.jsx)(`div`,{className:`tab-bar__extras`,children:(0,c.jsx)(`button`,{className:`tab-bar__more`,title:`Group actions`,"aria-label":`Group actions`,onClick:N,children:a.moreHoriz})})]}),(0,c.jsxs)(`div`,{ref:h,onDragOver:w,onDragLeave:D,onDrop:A,style:{flex:1,minHeight:0,position:`relative`,overflow:`auto`},children:[e.tabs.length===0?(0,c.jsx)(`div`,{style:{padding:24,color:`var(--oo-color-muted)`},children:`Empty group. Drag a tab here.`}):e.tabs.map(e=>{let n=t.mounts.find(t=>t.key===e);return n?(0,c.jsx)(`div`,{className:`oo-layout__mount`,"data-active":e===o||void 0,style:{position:`absolute`,inset:0,overflow:`auto`,display:e===o?`block`:`none`},children:t.renderMount(n)},e):null}),p?(0,c.jsx)(T,{zone:p}):null]}),j?(0,c.jsx)(i,{x:j.x,y:j.y,onClose:F,spec:{query:{slot:`tab-group:context`},footerHints:!0},context:{"$/surface/name":t.surface,"$/surface/layoutId":`tab-panel`,"$/surface/mountCount":t.mounts.length,"$/surface/closedHistory":0,"$/group/key":e.id,"$/group/tabCount":e.tabs.length,"$/group/canClose":!0,"$/group/canMaximize":!1,"$/tab/canSplit":!0,"$/tab/canMove":t.leafCount>1}}):null,I?(0,c.jsx)(i,{x:I.x,y:I.y,onClose:z,spec:{query:{slot:`tab:context`},extraItems:V,footerHints:!0},context:{"$/surface/name":t.surface,"$/surface/layoutId":`tab-panel`,"$/surface/mountCount":t.mounts.length,"$/surface/closedHistory":0,"$/group/key":e.id,"$/group/tabCount":e.tabs.length,"$/group/canClose":!0,"$/tab/key":I.tabKey,"$/tab/index":I.tabIdx,"$/tab/leafId":e.id,"$/tab/isActive":I.tabKey===o,"$/tab/isPinned":t.pinned.has(I.tabKey),"$/tab/canSplit":!0,"$/tab/canMove":t.leafCount>1}}):null]})}function T({zone:e}){let t={position:`absolute`,pointerEvents:`none`,background:`rgba(59,130,246,0.12)`,border:`2px solid rgba(59,130,246,0.6)`,boxSizing:`border-box`,zIndex:5,transition:`all 80ms ease-out`},n=(()=>{switch(e){case`center`:return{...t,inset:0};case`top`:return{...t,top:0,left:0,right:0,height:`50%`};case`bottom`:return{...t,bottom:0,left:0,right:0,height:`50%`};case`left`:return{...t,top:0,bottom:0,left:0,width:`50%`};case`right`:return{...t,top:0,bottom:0,right:0,width:`50%`}}})();return(0,c.jsx)(`div`,{className:`oo-tab-panel-drop-preview`,style:n})}function E(e){let t=e.dataTransfer.getData(u);if(!t)return null;try{let e=JSON.parse(t);return typeof e.sourceLeafId!=`string`||typeof e.tabKey!=`string`?null:e}catch{return null}}function D(e,t){return v(e,e=>{if(!e.tabs.includes(t))return e;let n=e.tabs.filter(e=>e!==t);return n.length===0?null:{...e,tabs:n,activeKey:e.activeKey===t?n[0]:e.activeKey}})}function O(e,t,n,r){if(t.sourceLeafId===n){let i=v(e.tree,e=>{if(e.id!==n)return e;let i=e.tabs.indexOf(t.tabKey);if(i===-1)return e;let a=[...e.tabs];a.splice(i,1);let o=i<r?r-1:r;return a.splice(o,0,t.tabKey),{...e,tabs:a,activeKey:t.tabKey}});i&&e.commit(i),e.onActivate(t.tabKey);return}let i=D(e.tree,t.tabKey);if(!i)return;let a=v(i,e=>{if(e.id!==n)return e;let i=[...e.tabs],a=Math.max(0,Math.min(r,i.length));return i.splice(a,0,t.tabKey),{...e,tabs:i,activeKey:t.tabKey}});a&&e.commit(a),e.onActivate(t.tabKey)}function k(e,t,n,r){let i=e.tree,a=A(i,t.sourceLeafId);if(a&&a.id===n&&a.tabs.length===1||(i=D(i,t.tabKey),!i))return;let o=A(i,n);if(!o)return;let s=m([t.tabKey],t.tabKey),c=y(i,n,{kind:`split`,direction:r===`left`||r===`right`?`row`:`column`,ratio:.5,first:r===`left`||r===`top`?s:o,second:r===`left`||r===`top`?o:s});e.commit(c),e.onActivate(t.tabKey)}function A(e,t){return e.kind===`leaf`?e.id===t?e:null:A(e.first,t)||A(e.second,t)}function j({node:e,ctx:t}){return e.kind===`leaf`?(0,c.jsx)(w,{leaf:e,ctx:t}):(0,c.jsx)(M,{node:e,ctx:t})}function M({node:e,ctx:t}){let n=(0,l.useRef)(null),r=e.ratio??.5;function i(n){let r=b(t.tree,t=>t===e,{ratio:n});t.commit(r)}let a=e.direction===`row`;return(0,c.jsxs)(`div`,{ref:n,className:`oo-tab-panel-split`,"data-direction":e.direction,style:{display:`flex`,flexDirection:a?`row`:`column`,flex:1,minWidth:0,minHeight:0},children:[(0,c.jsx)(`div`,{style:{flex:r,minWidth:0,minHeight:0,display:`flex`},children:(0,c.jsx)(j,{node:e.first,ctx:t})}),(0,c.jsx)(o,{direction:e.direction===`row`?`row`:`col`,containerRef:n,min:f,max:.95,onCommit:i}),(0,c.jsx)(`div`,{style:{flex:1-r,minWidth:0,minHeight:0,display:`flex`},children:(0,c.jsx)(j,{node:e.second,ctx:t})})]})}function N({surface:e,mounts:t,state:n,setState:r,renderMount:i,onActivate:a,onClose:o}){let s=t.map(e=>e.key),{tree:u}=S(n.tabPanel?.tree,s,n.activeContainerKey);(0,l.useEffect)(()=>{C(n.tabPanel?.tree,u)||r({tabPanel:{tree:u}})});let d=[];g(u,d);let f={surface:e,mounts:t,renderMount:i,onActivate:a,onClose:o,tree:u,commit:e=>r({tabPanel:{tree:e}}),leafCount:d.length,pinned:new Set(n.split?.pinned??[])};return(0,c.jsx)(`div`,{className:`oo-layout oo-layout--tab-panel`,style:{display:`flex`,height:`100%`,minHeight:0},children:(0,c.jsx)(j,{node:u,ctx:f})})}function P({m:e,resourceKey:t,isActive:i,dragOverTab:o,idx:l,onDragStart:u,onDragOver:d,onDragLeave:f,onDrop:p,onClick:m,onContextMenu:h,onClose:g,onUnpin:_,isPinned:v}){let y=r(),b=e?y.components.get(e.component.component)?.props:void 0,x=s(e?.props?.title??b?.title,``,e?.dataContext)||t,S=e?.props?.icon??b?.icon,C=e?.props?.color??b?.color;return(0,c.jsxs)(`div`,{className:`tab-bar__tab`,"data-active":i,"data-drag-over":o===l?`true`:void 0,"data-color":C,"data-pinned":v||void 0,draggable:!0,onDragStart:u,onDragOver:d,onDragLeave:f,onDrop:p,onClick:m,onContextMenu:h,title:x,style:{...C?{"--tab-color":n(C)}:{}},children:[S?(0,c.jsx)(`span`,{className:`tab__icon`,"aria-hidden":!0,children:S}):null,(0,c.jsx)(`span`,{className:`tab__label`,children:x}),v?(0,c.jsx)(`span`,{className:`pin`,onClick:e=>{e.stopPropagation(),_(e)},title:`Unpin`,children:a.pin}):(0,c.jsx)(`span`,{className:`close`,onClick:e=>{e.stopPropagation(),g(e)},title:`Close`,children:a.closePanel})]})}export{N as TabPanelLayout,P as TabTitle};
@@ -1,2 +0,0 @@
1
- import{t as e}from"./react-CybPckBe.js";var t=class{buffer=[];base=0;cursors=new Set;closed=!1;bufferLimit;constructor(e=4096){this.bufferLimit=e}get isClosed(){return this.closed}get hasReaders(){return this.cursors.size>0}publish(e){if(this.closed)return;if(this.buffer.push(e),this.buffer.length>this.bufferLimit){let e=this.buffer.length-this.bufferLimit;this.buffer.splice(0,e),this.base+=e;for(let e of this.cursors)e.position<this.base&&(e.position=this.base)}let t=this.base+this.buffer.length-1;for(let e of this.cursors)if(e.waiter&&e.position<=t){let t=e.position-this.base,n=this.buffer[t];e.position+=1;let r=e.waiter;e.waiter=null,r.resolve({value:n,done:!1})}this.trim()}close(){if(!this.closed){this.closed=!0;for(let e of this.cursors)if(e.waiter&&e.position-this.base>=this.buffer.length){let t=e.waiter;e.waiter=null,t.resolve({value:void 0,done:!0})}}}reader(){let e={position:this.base+this.buffer.length,waiter:null,detached:this.closed};this.closed||this.cursors.add(e);let t=this,n=()=>{e.detached||(e.detached=!0,t.cursors.delete(e),t.trim())};return{[Symbol.asyncIterator](){return this},next(){if(e.detached)return Promise.resolve({value:void 0,done:!0});let n=e.position-t.base;if(n>=0&&n<t.buffer.length){let r=t.buffer[n];return e.position+=1,t.trim(),Promise.resolve({value:r,done:!1})}return t.closed?Promise.resolve({value:void 0,done:!0}):new Promise(t=>{e.waiter={resolve:t}})},return(){return n(),Promise.resolve({value:void 0,done:!0})}}}[Symbol.asyncIterator](){return this.reader()}trim(){if(this.cursors.size===0){let e=this.buffer.length;e>0&&(this.buffer=[],this.base+=e);return}let e=1/0;for(let t of this.cursors)t.position<e&&(e=t.position);let t=e-this.base;t>0&&(this.buffer.splice(0,t),this.base+=t)}},n=class extends Error{constructor(e,t){super(e,t),this.name=`AhpClientError`}},r=class extends n{code;data;constructor(e,t,n){super(`RPC error ${e}: ${t}`),this.name=`RpcError`,this.code=e,this.data=n}},i=class extends n{method;timeoutMs;constructor(e,t){super(`Request "${e}" timed out after ${t}ms`),this.name=`RpcTimeoutError`,this.method=e,this.timeoutMs=t}},a=class extends n{kind;constructor(e,t,n){super(t,n),this.name=`TransportError`,this.kind=e}},o=class extends n{constructor(e=`client shut down`){super(e),this.name=`ClientClosedError`}};function s(e,t){let n=Math.max(1,Math.floor(t));switch(e.kind){case`immediate`:return 0;case`constant`:return Math.max(0,e.delayMs);case`exponential`:{let t=Math.max(1,e.multiplier),r=n-1,i=e.initialMs*t**+r;return Math.min(Math.max(0,i),e.maxMs)}}}function c(e,t,n){let r=s(e.backoff,t);if(e.jitter<=0||r===0)return r;let i=Math.min(1,Math.max(0,e.jitter)),a=1+(Math.min(1,Math.max(0,n))*2-1)*i;return Math.max(0,r*a)}function l(e,t){return e.maxAttempts!==null&&t>e.maxAttempts}function u(){return{backoff:{kind:`exponential`,initialMs:250,maxMs:3e4,multiplier:2},jitter:.25,maxAttempts:null,resetOnSuccess:!0}}function d(){return u()}var ee=`ahp-root://`;function f(e){return{id:e.id,label:e.label,clientId:e.clientId??null,initialSubscriptions:e.initialSubscriptions?[...e.initialSubscriptions]:[ee],clientConfig:e.clientConfig??{},transportFactory:e.transportFactory,reconnectPolicy:e.reconnectPolicy??d()}}function te(e,t){return{hostId:e,channel:t.channel,event:t.event}}var p=class extends n{constructor(e,t){super(e,t),this.name=`HostMultiError`}},m=class extends p{hostId;constructor(e){super(`no host registered with id "${e}"`),this.name=`UnknownHostError`,this.hostId=e}},h=class extends p{hostId;constructor(e){super(`a host with id "${e}" is already registered`),this.name=`DuplicateHostError`,this.hostId=e}},ne=class extends p{hostId;handleGeneration;currentGeneration;constructor(e,t,n){super(`host "${e}" reconnected (generation ${t} -> ${n}); request a fresh client handle`),this.name=`HostReconnectedError`,this.hostId=e,this.handleGeneration=t,this.currentGeneration=n}},g=class extends p{hostId;constructor(e){super(`host "${e}" runtime is no longer active`),this.name=`HostShutDownError`,this.hostId=e}},re=class extends p{hostId;constructor(e){super(`host "${e}" is not currently connected`),this.name=`HostNotConnectedError`,this.hostId=e}},ie=class extends p{hostId;constructor(e,t,n){super(`client id store error for host "${e}": ${t}`,n),this.name=`ClientIdStoreError`,this.hostId=e}};function ae(){let e=globalThis.crypto;if(e&&typeof e.randomUUID==`function`)return e.randomUUID();let t=new Uint8Array(16);if(e&&typeof e.getRandomValues==`function`)e.getRandomValues(t);else for(let e=0;e<16;e++)t[e]=Math.floor(Math.random()*256);t[6]=t[6]&15|64,t[8]=t[8]&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}var oe=class{hostId;generation;source;client;constructor(e,t,n){this.source=e,this.hostId=e.hostId,this.generation=t,this.client=n}checkAlive(){if(this.source.shutdownReason!==null)throw new g(this.hostId);if(this.source.generation!==this.generation)throw new ne(this.hostId,this.generation,this.source.generation)}dispatch(e,t,n){return this.checkAlive(),this.client.dispatch(e,t,n)}async request(e,t){return this.checkAlive(),this.client.request(e,t)}rawClient(){return this.checkAlive(),this.client}},se;(function(e){e.Replay=`replay`,e.Snapshot=`snapshot`})(se||={});var ce;(function(e){e.Base64=`base64`,e.Utf8=`utf-8`})(ce||={});var le;(function(e){e.Truncate=`truncate`,e.Append=`append`,e.Insert=`insert`})(le||={});var ue;(function(e){e.File=`file`,e.Directory=`directory`,e.Symlink=`symlink`})(ue||={});var _;(function(e){e.RootAgentsChanged=`root/agentsChanged`,e.RootActiveSessionsChanged=`root/activeSessionsChanged`,e.SessionReady=`session/ready`,e.SessionCreationFailed=`session/creationFailed`,e.SessionChatAdded=`session/chatAdded`,e.SessionChatRemoved=`session/chatRemoved`,e.SessionChatUpdated=`session/chatUpdated`,e.SessionChatsReordered=`session/chatsReordered`,e.SessionDefaultChatChanged=`session/defaultChatChanged`,e.ChatTurnStarted=`chat/turnStarted`,e.ChatDelta=`chat/delta`,e.ChatResponsePart=`chat/responsePart`,e.ChatToolCallStart=`chat/toolCallStart`,e.ChatToolCallDelta=`chat/toolCallDelta`,e.ChatToolCallReady=`chat/toolCallReady`,e.ChatToolCallConfirmed=`chat/toolCallConfirmed`,e.ChatToolCallComplete=`chat/toolCallComplete`,e.ChatToolCallResultConfirmed=`chat/toolCallResultConfirmed`,e.ChatToolCallContentChanged=`chat/toolCallContentChanged`,e.ChatToolCallAuthRequired=`chat/toolCallAuthRequired`,e.ChatToolCallAuthResolved=`chat/toolCallAuthResolved`,e.ChatTurnComplete=`chat/turnComplete`,e.ChatTurnCancelled=`chat/turnCancelled`,e.ChatError=`chat/error`,e.ChatTurnResume=`chat/turnResume`,e.ChatActivityChanged=`chat/activityChanged`,e.ChatBackgroundWorkSet=`chat/backgroundWorkSet`,e.ChatBackgroundWorkRemoved=`chat/backgroundWorkRemoved`,e.ChatMovableChanged=`chat/movableChanged`,e.ChatChangesetsChanged=`chat/changesetsChanged`,e.ChatCanvasesChanged=`chat/canvasesChanged`,e.CanvasStateChanged=`canvas/stateChanged`,e.ChatWorkingDirectorySet=`chat/workingDirectorySet`,e.ChatWorkingDirectoryRemoved=`chat/workingDirectoryRemoved`,e.SessionTitleChanged=`session/titleChanged`,e.ChatUsage=`chat/usage`,e.ChatReasoning=`chat/reasoning`,e.SessionServerToolsChanged=`session/serverToolsChanged`,e.SessionActiveClientSet=`session/activeClientSet`,e.SessionActiveClientRemoved=`session/activeClientRemoved`,e.SessionWorkingDirectorySet=`session/workingDirectorySet`,e.SessionWorkingDirectoryRemoved=`session/workingDirectoryRemoved`,e.SessionWorkingDirectoryReplaced=`session/workingDirectoryReplaced`,e.SessionInputNeededSet=`session/inputNeededSet`,e.SessionInputNeededRemoved=`session/inputNeededRemoved`,e.ChatPendingMessageSet=`chat/pendingMessageSet`,e.ChatPendingMessageRemoved=`chat/pendingMessageRemoved`,e.ChatQueuedMessagesReordered=`chat/queuedMessagesReordered`,e.ChatDraftChanged=`chat/draftChanged`,e.ChatIsReadChanged=`chat/isReadChanged`,e.ChatIsArchivedChanged=`chat/isArchivedChanged`,e.ChatInputRequested=`chat/inputRequested`,e.ChatInputAnswerChanged=`chat/inputAnswerChanged`,e.ChatInputCompleted=`chat/inputCompleted`,e.SessionCustomizationsChanged=`session/customizationsChanged`,e.SessionCustomizationToggled=`session/customizationToggled`,e.SessionCustomizationUpdated=`session/customizationUpdated`,e.SessionCustomizationRemoved=`session/customizationRemoved`,e.SessionMcpServerStateChanged=`session/mcpServerStateChanged`,e.SessionMcpServerStartRequested=`session/mcpServerStartRequested`,e.SessionMcpServerStopRequested=`session/mcpServerStopRequested`,e.SessionMcpServerBackgroundRequested=`session/mcpServerBackgroundRequested`,e.ChatTruncated=`chat/truncated`,e.ChatTurnsLoaded=`chat/turnsLoaded`,e.SessionIsReadChanged=`session/isReadChanged`,e.SessionIsArchivedChanged=`session/isArchivedChanged`,e.SessionActivityChanged=`session/activityChanged`,e.SessionChangesetsChanged=`session/changesetsChanged`,e.SessionConfigChanged=`session/configChanged`,e.SessionMetaChanged=`session/metaChanged`,e.ChangesetStatusChanged=`changeset/statusChanged`,e.ChangesetFileSet=`changeset/fileSet`,e.ChangesetFileRemoved=`changeset/fileRemoved`,e.ChangesetFilesReviewChanged=`changeset/filesReviewChanged`,e.ChangesetContentChanged=`changeset/contentChanged`,e.ChangesetOperationsChanged=`changeset/operationsChanged`,e.ChangesetOperationStatusChanged=`changeset/operationStatusChanged`,e.ChangesetCleared=`changeset/cleared`,e.AnnotationsSet=`annotations/set`,e.AnnotationsUpdated=`annotations/updated`,e.AnnotationsRemoved=`annotations/removed`,e.AnnotationsEntrySet=`annotations/entrySet`,e.AnnotationsEntryRemoved=`annotations/entryRemoved`,e.RootTerminalsChanged=`root/terminalsChanged`,e.RootConfigChanged=`root/configChanged`,e.TerminalData=`terminal/data`,e.TerminalInput=`terminal/input`,e.TerminalResized=`terminal/resized`,e.TerminalClaimed=`terminal/claimed`,e.TerminalTitleChanged=`terminal/titleChanged`,e.TerminalCwdChanged=`terminal/cwdChanged`,e.TerminalExited=`terminal/exited`,e.TerminalCleared=`terminal/cleared`,e.TerminalCommandDetectionAvailable=`terminal/commandDetectionAvailable`,e.TerminalCommandExecuted=`terminal/commandExecuted`,e.TerminalCommandFinished=`terminal/commandFinished`,e.ResourceWatchChanged=`resourceWatch/changed`,e.AutomationCreateRequested=`automation/createRequested`,e.AutomationUpdateRequested=`automation/updateRequested`,e.AutomationSet=`automation/set`,e.AutomationRemoved=`automation/removed`,e.AutomationRunLifecycleChanged=`automationRun/lifecycleChanged`,e.AutomationRunSessionSet=`automationRun/sessionSet`,e.AutomationRunSessionRemoved=`automationRun/sessionRemoved`,e.AutomationRunPrimarySessionChanged=`automationRun/primarySessionChanged`,e.AutomationRunCancelRequested=`automationRun/cancelRequested`})(_||={});var de=`1.0.0`,fe=Object.freeze([`1.0.0`,`0.9.0`]);_.RootAgentsChanged,_.RootActiveSessionsChanged,_.SessionReady,_.SessionCreationFailed,_.SessionChatAdded,_.SessionChatRemoved,_.SessionChatUpdated,_.SessionChatsReordered,_.SessionDefaultChatChanged,_.SessionTitleChanged,_.SessionServerToolsChanged,_.SessionActiveClientSet,_.SessionActiveClientRemoved,_.SessionWorkingDirectorySet,_.SessionWorkingDirectoryRemoved,_.SessionWorkingDirectoryReplaced,_.SessionInputNeededSet,_.SessionInputNeededRemoved,_.SessionCustomizationsChanged,_.SessionCustomizationToggled,_.SessionCustomizationUpdated,_.SessionCustomizationRemoved,_.SessionMcpServerStateChanged,_.SessionMcpServerStartRequested,_.SessionMcpServerStopRequested,_.SessionMcpServerBackgroundRequested,_.SessionIsReadChanged,_.SessionIsArchivedChanged,_.SessionActivityChanged,_.SessionChangesetsChanged,_.SessionConfigChanged,_.SessionMetaChanged,_.ChatTurnStarted,_.ChatDelta,_.ChatResponsePart,_.ChatToolCallStart,_.ChatToolCallDelta,_.ChatToolCallReady,_.ChatToolCallConfirmed,_.ChatToolCallComplete,_.ChatToolCallResultConfirmed,_.ChatToolCallContentChanged,_.ChatToolCallAuthRequired,_.ChatToolCallAuthResolved,_.ChatTurnComplete,_.ChatTurnCancelled,_.ChatError,_.ChatTurnResume,_.ChatActivityChanged,_.ChatBackgroundWorkSet,_.ChatBackgroundWorkRemoved,_.ChatMovableChanged,_.ChatChangesetsChanged,_.ChatCanvasesChanged,_.CanvasStateChanged,_.ChatWorkingDirectorySet,_.ChatWorkingDirectoryRemoved,_.ChatUsage,_.ChatReasoning,_.ChatPendingMessageSet,_.ChatPendingMessageRemoved,_.ChatQueuedMessagesReordered,_.ChatDraftChanged,_.ChatIsReadChanged,_.ChatIsArchivedChanged,_.ChatInputRequested,_.ChatInputAnswerChanged,_.ChatInputCompleted,_.ChatTruncated,_.ChatTurnsLoaded,_.ChangesetStatusChanged,_.ChangesetFileSet,_.ChangesetFileRemoved,_.ChangesetFilesReviewChanged,_.ChangesetContentChanged,_.ChangesetOperationsChanged,_.ChangesetOperationStatusChanged,_.ChangesetCleared,_.AnnotationsSet,_.AnnotationsUpdated,_.AnnotationsRemoved,_.AnnotationsEntrySet,_.AnnotationsEntryRemoved,_.RootTerminalsChanged,_.RootConfigChanged,_.TerminalData,_.TerminalInput,_.TerminalResized,_.TerminalClaimed,_.TerminalTitleChanged,_.TerminalCwdChanged,_.TerminalExited,_.TerminalCleared,_.TerminalCommandDetectionAvailable,_.TerminalCommandExecuted,_.TerminalCommandFinished,_.ResourceWatchChanged,_.AutomationCreateRequested,_.AutomationUpdateRequested,_.AutomationSet,_.AutomationRemoved,_.AutomationRunLifecycleChanged,_.AutomationRunSessionSet,_.AutomationRunSessionRemoved,_.AutomationRunPrimarySessionChanged,_.AutomationRunCancelRequested;var pe={ParseError:-32700,InvalidRequest:-32600,MethodNotFound:-32601,InvalidParams:-32602,InternalError:-32603},me={SessionNotFound:-32001,ProviderNotFound:-32002,SessionAlreadyExists:-32003,TurnInProgress:-32004,UnsupportedProtocolVersion:-32005,AuthRequired:-32007,NotFound:-32008,PermissionDenied:-32009,AlreadyExists:-32010,Conflict:-32011};function he(e){return JSON.stringify(e)}function ge(e){try{return JSON.parse(e)}catch(e){throw new a(`protocol`,`invalid JSON: ${e.message}`,{cause:e})}}var _e=3e4,ve=4096;function v(){}var ye=class{uri;inner;constructor(e,t){this.uri=e,this.inner=t}next(){return this.inner.next()}return(){return this.inner.return?this.inner.return():Promise.resolve({value:void 0,done:!0})}[Symbol.asyncIterator](){return this}async close(){await this.return()}};function be(e){return(async(t,n)=>{let i=e[t];if(!i)throw new r(pe.MethodNotFound,`no handler for server method "${t}"`);return i(n)})}var xe=class{transport;requestTimeoutMs;subscriptionBuffer;pending=new Map;subscriptions=new Map;allEvents=new t;stateQueue=new t;nextRequestId=1;nextClientSeq=1;state={status:`idle`};receiveLoop=null;serverRequestHandler=null;constructor(e,t={}){this.transport=e;let n=t.requestTimeoutMs??_e;this.requestTimeoutMs=n>0?n:0;let r=t.subscriptionBuffer??ve;this.subscriptionBuffer=r>=1?Math.floor(r):1}get connectionState(){return this.state}stateChanges(){return this.stateQueue.reader()}events(){return this.allEvents.reader()}setServerRequestHandler(e){this.serverRequestHandler=e}setResourceRequestHandlers(e){this.setServerRequestHandler(e?be(e):null)}connect(){this.receiveLoop||=(this.setState({status:`connected`}),this.driveTransport())}async shutdown(){if(this.state.status!==`closing`&&this.state.status!==`closed`){this.setState({status:`closing`}),this.tearDown({type:`shutdown`});try{await this.transport.close()}catch{}if(this.receiveLoop)try{await this.receiveLoop}catch{}}}async initialize(e){let t={channel:`ahp-root://`,clientId:e.clientId,protocolVersions:[...e.protocolVersions],...e.initialSubscriptions&&e.initialSubscriptions.length>0?{initialSubscriptions:[...e.initialSubscriptions]}:{},...e.locale===void 0?{}:{locale:e.locale}};return this.request(`initialize`,t)}async reconnect(e){let t={channel:`ahp-root://`,clientId:e.clientId,lastSeenServerSeq:e.lastSeenServerSeq,subscriptions:[...e.subscriptions]};return this.request(`reconnect`,t)}async subscribe(e,t={}){let n=this.attachSubscription(e);try{let r={channel:e,...t.delivery?{delivery:t.delivery}:{},...t.view?{view:t.view}:{}};return{result:await this.request(`subscribe`,r),subscription:n}}catch(e){throw await n.close(),e}}attachSubscription(e){this.assertOpen();let n=this.subscriptions.get(e);return n||(n=new t(this.subscriptionBuffer),this.subscriptions.set(e,n)),new ye(e,n.reader())}async unsubscribe(e){if(this.isClosed())return;let t=this.subscriptions.get(e);t&&(this.subscriptions.delete(e),t.close());let n={channel:e};return this.notify(`unsubscribe`,n),Promise.resolve()}dispatch(e,t,n){this.assertOpen();let r=n??this.nextClientSeq;(n===void 0||r+1>this.nextClientSeq)&&(this.nextClientSeq=r+1);let i={channel:e,clientSeq:r,action:t};return this.notify(`dispatchAction`,i),{clientSeq:r}}async ping(){await this.request(`ping`,{channel:`ahp-root://`})}async resourceRead(e){return this.request(`resourceRead`,{...e,channel:`ahp-root://`})}async resourceWrite(e){return this.request(`resourceWrite`,{...e,channel:`ahp-root://`})}async resourceList(e){return this.request(`resourceList`,{...e,channel:`ahp-root://`})}async resourceCopy(e){return this.request(`resourceCopy`,{...e,channel:`ahp-root://`})}async resourceDelete(e){return this.request(`resourceDelete`,{...e,channel:`ahp-root://`})}async resourceMove(e){return this.request(`resourceMove`,{...e,channel:`ahp-root://`})}async resourceResolve(e){return this.request(`resourceResolve`,{...e,channel:`ahp-root://`})}async resourceMkdir(e){return this.request(`resourceMkdir`,{...e,channel:`ahp-root://`})}async resourceRequest(e){return this.request(`resourceRequest`,{...e,channel:`ahp-root://`})}async createResourceWatch(e){return this.request(`createResourceWatch`,{...e,channel:`ahp-root://`})}async completions(e){return this.request(`completions`,e)}async sessionConfigCompletions(e){return this.request(`sessionConfigCompletions`,{...e,channel:`ahp-root://`})}async request(e,t){this.assertOpen();let n=this.nextRequestId++,r={jsonrpc:`2.0`,id:n,method:e,params:t};return new Promise((t,a)=>{let o={resolve:e=>t(e),reject:a,method:e,timer:null};this.pending.set(n,o),this.requestTimeoutMs>0&&(o.timer=setTimeout(()=>{this.pending.delete(n)&&a(new i(e,this.requestTimeoutMs))},this.requestTimeoutMs)),this.sendMessage(r).catch(e=>{this.pending.delete(n)&&(o.timer&&clearTimeout(o.timer),a(e))})})}notify(e,t){this.assertOpen();let n={jsonrpc:`2.0`,method:e,params:t};this.sendMessage(n).catch(v)}isClosed(){return this.state.status===`closing`||this.state.status===`closed`}assertOpen(){if(this.isClosed())throw new o}async sendMessage(e){try{await this.transport.send(e)}catch(e){let t=e instanceof a?e:new a(`io`,`transport send failed: ${e.message}`,{cause:e});throw this.tearDown({type:`transport`,error:t}),t}}setState(e){this.state=e,this.stateQueue.publish(e)}tearDown(e){if(this.state.status===`closed`)return;this.setState({status:`closed`,reason:e});let t=e.type===`shutdown`?new o:e.error;for(let[e,n]of this.pending){n.timer&&clearTimeout(n.timer);try{n.reject(t)}catch{}this.pending.delete(e)}for(let e of this.subscriptions.values())e.close();this.subscriptions.clear(),this.allEvents.close(),this.stateQueue.close()}async driveTransport(){try{for(;this.state.status===`connected`;){let e=await this.transport.recv();if(e===null){this.tearDown({type:`transport`,error:new a(`closed`,`transport closed`)});return}this.handleFrame(e)}}catch(e){let t=e instanceof a?e:new a(`io`,`transport recv failed: ${e.message}`,{cause:e});this.tearDown({type:`transport`,error:t})}}handleFrame(e){let t;try{switch(e.kind){case`parsed`:t=e.message;break;case`text`:t=ge(e.text);break;case`binary`:t=ge(new TextDecoder(`utf-8`).decode(e.data))}}catch(e){console.warn(`AhpClient: malformed inbound frame: ${e.message}`);return}this.dispatchInbound(t)}dispatchInbound(e){if(`id`in e&&`result`in e){let t=e,n=this.pending.get(t.id);n&&(this.pending.delete(t.id),n.timer&&clearTimeout(n.timer),n.resolve(t.result));return}if(`id`in e&&`error`in e){let t=e,n=this.pending.get(t.id);n&&(this.pending.delete(t.id),n.timer&&clearTimeout(n.timer),n.reject(new r(t.error.code,t.error.message,t.error.data)));return}if(`id`in e&&`method`in e){this.handleServerRequest(e);return}if(`method`in e){this.handleNotification(e);return}}async handleServerRequest(e){if(this.serverRequestHandler){try{let t=this.serverRequestHandler,n=await t(e.method,e.params),r={jsonrpc:`2.0`,id:e.id,result:n};this.sendMessage(r).catch(v)}catch(t){let n=t instanceof r?t.code:pe.InternalError,i=t instanceof Error?t.message:String(t),a=t instanceof r?t.data:void 0,o={jsonrpc:`2.0`,id:e.id,error:a===void 0?{code:n,message:i}:{code:n,message:i,data:a}};this.sendMessage(o).catch(v)}return}let t={jsonrpc:`2.0`,id:e.id,error:{code:pe.MethodNotFound,message:`no handler for server method "${e.method}"`}};this.sendMessage(t).catch(v)}handleNotification(e){switch((e.params??{}).channel,e.method){case`action`:{let t=e.params;this.fanOut(t.channel,{type:`action`,params:t});break}case`root/sessionAdded`:{let t=e.params;this.fanOut(t.channel,{type:`sessionAdded`,params:t});break}case`root/sessionRemoved`:{let t=e.params;this.fanOut(t.channel,{type:`sessionRemoved`,params:t});break}case`root/sessionSummaryChanged`:{let t=e.params;this.fanOut(t.channel,{type:`sessionSummaryChanged`,params:t});break}case`auth/required`:{let t=e.params;this.fanOut(t.channel,{type:`authRequired`,params:t});break}}}fanOut(e,t){let n=this.subscriptions.get(e);n&&n.publish(t),this.allEvents.publish({channel:e,event:t})}};_.RootAgentsChanged,_.RootActiveSessionsChanged,_.RootTerminalsChanged,_.RootConfigChanged,_.SessionReady,_.SessionCreationFailed,_.SessionChatAdded,_.SessionChatRemoved,_.SessionChatUpdated,_.SessionChatsReordered,_.SessionDefaultChatChanged,_.SessionTitleChanged,_.SessionServerToolsChanged,_.SessionActiveClientSet,_.SessionActiveClientRemoved,_.SessionWorkingDirectorySet,_.SessionWorkingDirectoryRemoved,_.SessionWorkingDirectoryReplaced,_.SessionInputNeededSet,_.SessionInputNeededRemoved,_.SessionCustomizationsChanged,_.SessionCustomizationToggled,_.SessionCustomizationUpdated,_.SessionCustomizationRemoved,_.SessionMcpServerStateChanged,_.SessionMcpServerStartRequested,_.SessionMcpServerStopRequested,_.SessionMcpServerBackgroundRequested,_.SessionIsReadChanged,_.SessionIsArchivedChanged,_.SessionActivityChanged,_.SessionChangesetsChanged,_.SessionConfigChanged,_.SessionMetaChanged,_.ChatTurnStarted,_.ChatDelta,_.ChatResponsePart,_.ChatToolCallStart,_.ChatToolCallDelta,_.ChatToolCallReady,_.ChatToolCallConfirmed,_.ChatToolCallComplete,_.ChatToolCallResultConfirmed,_.ChatToolCallContentChanged,_.ChatToolCallAuthRequired,_.ChatToolCallAuthResolved,_.ChatTurnComplete,_.ChatTurnCancelled,_.ChatError,_.ChatTurnResume,_.ChatActivityChanged,_.ChatBackgroundWorkSet,_.ChatBackgroundWorkRemoved,_.ChatMovableChanged,_.ChatChangesetsChanged,_.ChatCanvasesChanged,_.CanvasStateChanged,_.ChatWorkingDirectorySet,_.ChatWorkingDirectoryRemoved,_.ChatUsage,_.ChatReasoning,_.ChatPendingMessageSet,_.ChatPendingMessageRemoved,_.ChatQueuedMessagesReordered,_.ChatDraftChanged,_.ChatIsReadChanged,_.ChatIsArchivedChanged,_.ChatInputRequested,_.ChatInputAnswerChanged,_.ChatInputCompleted,_.ChatTruncated,_.ChatTurnsLoaded,_.ChangesetStatusChanged,_.ChangesetFileSet,_.ChangesetFileRemoved,_.ChangesetFilesReviewChanged,_.ChangesetContentChanged,_.ChangesetOperationsChanged,_.ChangesetOperationStatusChanged,_.ChangesetCleared,_.AnnotationsSet,_.AnnotationsUpdated,_.AnnotationsRemoved,_.AnnotationsEntrySet,_.AnnotationsEntryRemoved,_.TerminalData,_.TerminalInput,_.TerminalResized,_.TerminalClaimed,_.TerminalTitleChanged,_.TerminalCwdChanged,_.TerminalExited,_.TerminalCleared,_.TerminalCommandDetectionAvailable,_.TerminalCommandExecuted,_.TerminalCommandFinished,_.ResourceWatchChanged,_.AutomationCreateRequested,_.AutomationUpdateRequested,_.AutomationSet,_.AutomationRemoved,_.AutomationRunLifecycleChanged,_.AutomationRunSessionSet,_.AutomationRunSessionRemoved,_.AutomationRunPrimarySessionChanged,_.AutomationRunCancelRequested;function y(e,t){let n=`Unhandled action type: ${JSON.stringify(e)}`;(t??console.warn)(n)}function Se(e,t,n){switch(t.type){case _.RootAgentsChanged:return{...e,agents:t.agents};case _.RootActiveSessionsChanged:return{...e,activeSessions:t.activeSessions};case _.RootTerminalsChanged:return{...e,terminals:t.terminals};case _.RootConfigChanged:return e.config?{...e,config:{...e.config,values:t.replace?{...t.config}:{...e.config.values,...t.config}}}:e;default:return y(t,n),e}}function Ce(e,t){return{id:e.id,label:e.label,clientId:t,state:{status:`disconnected`},lastError:null,lastConnectedAt:null,protocolVersion:null,serverSeq:0,defaultDirectory:null,automations:null,rootState:{agents:[]},subscriptions:[...e.initialSubscriptions],completionTriggerCharacters:[],sessionSummaries:new Map,generation:0,currentClient:null,shutdownReason:null}}function we(e){return{id:e.id,label:e.label,clientId:e.clientId,state:e.state,lastError:e.lastError,lastConnectedAt:e.lastConnectedAt,protocolVersion:e.protocolVersion,serverSeq:e.serverSeq,defaultDirectory:e.defaultDirectory,automations:e.automations,agents:[...e.rootState.agents],activeSessions:e.rootState.activeSessions??null,terminals:e.rootState.terminals?[...e.rootState.terminals]:null,subscriptions:[...e.subscriptions],completionTriggerCharacters:[...e.completionTriggerCharacters],sessionSummaries:Array.from(e.sessionSummaries.values()),generation:e.generation}}var b=Symbol(`aborted`);function x(e,t){return e.then(void 0,()=>void 0),t.aborted?Promise.resolve(b):new Promise((n,r)=>{let i=()=>{t.removeEventListener(`abort`,i),n(b)};t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})})}function Te(e,...t){return e<=0?Promise.resolve(!0):t.some(e=>e.aborted)?Promise.resolve(!1):new Promise(n=>{let r=[],i=setTimeout(()=>{for(let e of r)e();n(!0)},e);for(let e of t){let t=()=>{clearTimeout(i);for(let e of r)e();n(!1)};e.addEventListener(`abort`,t,{once:!0}),r.push(()=>e.removeEventListener(`abort`,t))}})}function Ee(...e){return e.some(e=>e.aborted)?Promise.resolve():new Promise(t=>{let n=[];for(let r of e){let e=()=>{for(let e of n)e();t()};r.addEventListener(`abort`,e,{once:!0}),n.push(()=>r.removeEventListener(`abort`,e))}})}function De(...e){let t=new AbortController;if(e.some(e=>e.aborted))return t.abort(),{signal:t.signal,dispose:()=>void 0};let n=[],r=()=>{for(let e of n)e();n.length=0,t.abort()};for(let t of e)t.addEventListener(`abort`,r,{once:!0}),n.push(()=>t.removeEventListener(`abort`,r));return{signal:t.signal,dispose:()=>{for(let e of n)e();n.length=0}}}var Oe={agents:[]},ke=class{config;shared;handleSource;fanOut;hostEvents;shutdownController=new AbortController;manualReconnectController=new AbortController;supervisorPromise=null;reconnectAck=null;constructor(e,t,n,r){this.config=e,this.fanOut=n,this.hostEvents=r,this.shared=Ce(e,t),this.handleSource={hostId:this.shared.id,generation:this.shared.generation,currentClient:this.shared.currentClient,shutdownReason:this.shared.shutdownReason}}start(){this.supervisorPromise===null&&(this.hostEvents.publish({type:`added`,hostId:this.shared.id}),this.supervisorPromise=this.runSupervisor().catch(e=>{console.error(`HostRuntime[${this.shared.id}] supervisor crashed:`,e)}))}async reconnect(){if(this.shared.shutdownReason!==null)return;let e=this.reconnectAck??this.makeReconnectAck();this.reconnectAck=e,this.manualReconnectController.abort(),await e.promise}async shutdown(e=`removed`){if(this.shared.shutdownReason!==null){this.supervisorPromise&&await this.supervisorPromise;return}this.shared.shutdownReason=e,this.handleSource.shutdownReason=e,this.shutdownController.abort(),this.reconnectAck?.resolve(),this.supervisorPromise&&await this.supervisorPromise}async subscribe(e){if(this.shared.shutdownReason!==null)throw new g(this.shared.id);let t=this.shared.currentClient;if(!t)throw this.trackSubscription(e),new re(this.shared.id);let{result:n}=await t.subscribe(e);return this.trackSubscription(e),n}async unsubscribe(e){if(this.shared.shutdownReason!==null){this.untrackSubscription(e);return}let t=this.shared.currentClient;this.untrackSubscription(e),t&&await t.unsubscribe(e)}dispatch(e,t,n){if(this.shared.shutdownReason!==null)throw new g(this.shared.id);let r=this.shared.currentClient;if(!r)throw new re(this.shared.id);return r.dispatch(e,t,n)}async runSupervisor(){let e=this.config.reconnectPolicy,t=0;for(;this.shared.shutdownReason===null;){t+=1,this.transitionTo(t===1?{status:`connecting`}:{status:`reconnecting`,attempt:t-1},null);let n=this.reconnectAck;this.reconnectAck=null,n?.resolve();let r=null;try{r=await this.connectOnce()}catch(e){if(this.shared.shutdownReason!==null)break;if(this.manualReconnectController.signal.aborted){this.resetManualReconnectController(),t=0;continue}let n=Ae(e);this.shared.lastError=n,console.warn(`HostRuntime[${this.shared.id}] connect attempt ${t} failed:`,n)}if(r===null){if(this.shared.shutdownReason!==null)break;if(l(e,t)){let e=this.shared.lastError??Error(`connect failed`);if(this.transitionTo({status:`failed`,error:e},e),!await this.waitForManualReconnectOrShutdown())break;this.resetManualReconnectController(),t=0;continue}if(!await Te(c(e,t,Math.random()),this.shutdownController.signal,this.manualReconnectController.signal)){if(this.shared.shutdownReason!==null)break;this.resetManualReconnectController(),t=0}continue}e.resetOnSuccess&&(t=0);let i=await this.runConnection(r.events);if(await this.tearDownClient(),i===`shutdown`)break;if(i===`manualReconnect`){this.resetManualReconnectController(),t=0;continue}}this.handleSource.currentClient=null,this.handleSource.generation=this.shared.generation}async connectOnce(){let e=this.shutdownController.signal,t=this.manualReconnectController.signal,n=De(e,t),i=n.signal;try{let e=await x(this.config.transportFactory(this.shared.id,i),i);if(e===b)throw Error(`connect aborted`);let t=new xe(e,this.config.clientConfig);t.connect();let n=t.events(),a=!1;try{let e={serverSeq:this.shared.serverSeq,subscriptions:[...this.shared.subscriptions]},o=e.serverSeq>0&&e.subscriptions.length>0,s=null,c=null,l=e.serverSeq,u=null,d=null,f=this.shared.automations,te=[];if(o)try{let n=await x(t.reconnect({clientId:this.shared.clientId,lastSeenServerSeq:e.serverSeq,subscriptions:e.subscriptions}),i);if(n===b)throw Error(`reconnect aborted`);s=n}catch(n){if(this.shared.shutdownReason!==null||i.aborted||!(n instanceof r))throw n;let a=await x(t.initialize({clientId:this.shared.clientId,protocolVersions:[de],initialSubscriptions:e.subscriptions}),i);if(a===b)throw Error(`initialize aborted`);c=a.snapshots,l=a.serverSeq,u=a.protocolVersion,d=a.defaultDirectory??null,f=a.automations??null,te=a.completionTriggerCharacters??[]}else{let n=await x(t.initialize({clientId:this.shared.clientId,protocolVersions:[de],initialSubscriptions:e.subscriptions}),i);if(n===b)throw Error(`initialize aborted`);c=n.snapshots,l=n.serverSeq,u=n.protocolVersion,d=n.defaultDirectory??null,f=n.automations??null,te=n.completionTriggerCharacters??[]}let p=null;try{let e=await x(t.request(`listSessions`,{channel:ee}),i);e!==b&&(p=e)}catch{}if(i.aborted)throw Error(`connect aborted`);let m=null,h=[],ne=null;if(s!==null){if(s.type===se.Replay){for(let e of s.actions)h.push(e);if(s.missing.length>0){let e=new Set(s.missing);m=this.shared.subscriptions.filter(t=>!e.has(t))}}else{let t=new Set(s.snapshots.map(e=>e.resource)),n=new Set(e.subscriptions);ne=this.shared.subscriptions.filter(e=>t.has(e)||!n.has(e));for(let e of s.snapshots)e.fromSeq>l&&(l=e.fromSeq),e.resource===`ahp-root://`&&(this.shared.rootState=e.state??Oe)}}if(this.shared.generation+=1,this.shared.currentClient=t,this.shared.lastConnectedAt=Date.now(),this.shared.lastError=null,this.shared.serverSeq<l&&(this.shared.serverSeq=l),c!==null){let e=c.find(e=>e.resource===ee);e&&(this.shared.rootState=e.state??Oe),u&&(this.shared.protocolVersion=u),this.shared.defaultDirectory=d,this.shared.automations=f,this.shared.completionTriggerCharacters=[...te]}if(p!==null){this.shared.sessionSummaries.clear();for(let e of p.items)this.shared.sessionSummaries.set(e.resource,e)}m===null?ne!==null&&(this.shared.subscriptions=ne):this.shared.subscriptions=m,this.handleSource.generation=this.shared.generation,this.handleSource.currentClient=t;for(let e of h)this.applyEnvelopeLocally(e),this.fanOut.publish({hostId:this.shared.id,channel:e.channel,event:{type:`action`,params:e}});return this.transitionTo({status:`connected`},null),this.hostEvents.publish({type:`connected`,hostId:this.shared.id,generation:this.shared.generation}),a=!0,{client:t,events:n}}finally{if(!a)try{await t.shutdown()}catch{}}}finally{n.dispose()}}async runConnection(e){let t=this.shutdownController.signal,n=this.manualReconnectController.signal;for(;;){if(t.aborted)return`shutdown`;if(n.aborted)return`manualReconnect`;let r=e.next(),i=Ee(t,n),a=await Promise.race([r.then(e=>({kind:`event`,value:e})),i.then(()=>({kind:`aborted`}))]);if(a.kind===`aborted`)return t.aborted?`shutdown`:`manualReconnect`;let o=a.value;if(o.done)return`disconnected`;this.handleEvent(o.value)}}async waitForManualReconnectOrShutdown(){return await Ee(this.shutdownController.signal,this.manualReconnectController.signal),!this.shutdownController.signal.aborted}async tearDownClient(){let e=this.shared.currentClient;if(this.shared.currentClient=null,this.handleSource.currentClient=null,e)try{await e.shutdown()}catch{}}handleEvent(e){switch(e.event.type){case`action`:this.applyEnvelopeLocally(e.event.params);break;case`sessionAdded`:{let t=e.event.params.summary;this.shared.sessionSummaries.set(t.resource,t);break}case`sessionRemoved`:this.shared.sessionSummaries.delete(e.event.params.session);break;case`sessionSummaryChanged`:je(this.shared.sessionSummaries,e.event.params)}this.fanOut.publish(te(this.shared.id,e))}applyEnvelopeLocally(e){e.serverSeq>this.shared.serverSeq&&(this.shared.serverSeq=e.serverSeq),e.channel===`ahp-root://`&&(this.shared.rootState=Se(this.shared.rootState,e.action))}trackSubscription(e){this.shared.subscriptions.includes(e)||this.shared.subscriptions.push(e)}untrackSubscription(e){this.shared.subscriptions=this.shared.subscriptions.filter(t=>t!==e)}transitionTo(e,t){this.shared.state=e,t!==null&&(this.shared.lastError=t),this.hostEvents.publish({type:`stateChanged`,hostId:this.shared.id,state:e,lastError:t??this.shared.lastError})}resetManualReconnectController(){this.manualReconnectController=new AbortController}makeReconnectAck(){let e;return{promise:new Promise(t=>{e=t}),resolve:e}}};function Ae(e){return e instanceof Error?e:Error(String(e))}function je(e,t){let n=e.get(t.session);if(!n)return;let r={...n},i=t.changes;i.title!==void 0&&(r.title=i.title),i.status!==void 0&&(r.status=i.status),i.activity!==void 0&&(r.activity=i.activity),i.origin!==void 0&&(r.origin=i.origin),i.modifiedAt!==void 0&&(r.modifiedAt=i.modifiedAt),i.project!==void 0&&(r.project=i.project),i.workingDirectories!==void 0&&(r.workingDirectories=i.workingDirectories),i._meta!==void 0&&(r._meta=i._meta),i.chats!==void 0&&(r.chats=i.chats),e.set(t.session,r)}var Me=class{inner=new Map;load(e){return Promise.resolve(this.inner.get(e)??null)}store(e,t){return this.inner.set(e,t),Promise.resolve()}},Ne=1024,Pe=class e{hosts=new Map;pendingHostIds=new Set;fanOut;hostEventsQueue;clientIdStore;shutdownController=new AbortController;shutDown=!1;constructor(e={}){this.clientIdStore=e.clientIdStore??new Me;let n=e.eventBuffer??Ne;this.fanOut=new t(n),this.hostEventsQueue=new t(n)}static async single(t,n={}){let r=new e(n);return{multi:r,host:await r.addHost(t)}}async addHost(e){this.assertOpen();let t=e.id;if(this.hosts.has(t)||this.pendingHostIds.has(t))throw new h(t);this.pendingHostIds.add(t);try{let n=f(e),r=await this.resolveClientId(t,n.clientId);if(this.assertOpen(),this.hosts.has(t))throw new h(t);let i=new ke(n,r,this.fanOut,this.hostEventsQueue);return this.hosts.set(t,i),i.start(),we(i.shared)}finally{this.pendingHostIds.delete(t)}}async removeHost(e){let t=this.hosts.get(e);if(!t)throw new m(e);this.hosts.delete(e),await t.shutdown(`removed`),this.hostEventsQueue.publish({type:`removed`,hostId:e})}async reconnectHost(e){let t=this.hosts.get(e);if(!t)throw new m(e);await t.reconnect()}async reconnectAllUnavailable(){let e=[];for(let[t,n]of this.hosts){let r=n.shared.state.status;r!==`connected`&&r!==`connecting`&&e.push({id:t,runtime:n})}if(e.length===0)return new Map;let t=new Map;return await Promise.all(e.map(async({id:e,runtime:n})=>{try{await n.reconnect()}catch(n){t.set(e,n instanceof Error?n:Error(String(n)))}})),t}host(e){let t=this.hosts.get(e);return t?we(t.shared):void 0}hostsSnapshot(){return Array.from(this.hosts.values(),e=>we(e.shared))}client(e){let t=this.hosts.get(e);if(!t)return;let n=t.shared.currentClient;if(n)return new oe(t.handleSource,t.shared.generation,n)}async subscribe(e,t){let n=this.hosts.get(e);if(!n)throw new m(e);return n.subscribe(t)}async unsubscribe(e,t){let n=this.hosts.get(e);if(!n)throw new m(e);await n.unsubscribe(t)}dispatch(e,t,n,r){let i=this.hosts.get(e);if(!i)throw new m(e);return i.dispatch(t,n,r)}events(){return this.fanOut.reader()}hostEvents(){return this.hostEventsQueue.reader()}aggregatedSessions(){let e=[];for(let t of this.hosts.values()){let{id:n,label:r,sessionSummaries:i}=t.shared;for(let t of i.values())e.push({hostId:n,hostLabel:r,summary:t})}return e.sort((e,t)=>e.summary.modifiedAt<t.summary.modifiedAt?1:e.summary.modifiedAt>t.summary.modifiedAt?-1:0),e}aggregatedAgents(){let e=[];for(let t of this.hosts.values()){let{id:n,label:r,rootState:i}=t.shared;for(let t of i.agents)e.push({hostId:n,hostLabel:r,agent:t})}return e}async shutdown(){if(this.shutDown)return;this.shutDown=!0,this.shutdownController.abort();let e=Array.from(this.hosts.values());this.hosts.clear(),await Promise.all(e.map(e=>e.shutdown(`shutdown`))),this.fanOut.close(),this.hostEventsQueue.close()}assertOpen(){if(this.shutDown)throw new g(`<multi-host client>`)}async resolveClientId(e,t){let n=this.shutdownController.signal;if(t!==null){try{await this.clientIdStore.store(e,t,n)}catch(t){throw new ie(e,t.message??String(t),{cause:t})}return t}let r;try{r=await this.clientIdStore.load(e,n)}catch(t){throw new ie(e,t.message??String(t),{cause:t})}let i=r??ae();try{await this.clientIdStore.store(e,i,n)}catch(t){throw new ie(e,t.message??String(t),{cause:t})}return i}},Fe;(function(e){e.Computing=`computing`,e.Recomputing=`recomputing`,e.Ready=`ready`,e.Error=`error`})(Fe||={});var Ie;(function(e){e.Idle=`idle`,e.Running=`running`,e.Error=`error`,e.Disabled=`disabled`})(Ie||={});var Le;(function(e){e.Changeset=`changeset`,e.Resource=`resource`,e.Range=`range`})(Le||={});function Re(e,t,n){switch(t.type){case _.ChangesetStatusChanged:{if(t.status===Fe.Error)return{...e,status:t.status,error:t.error};let{error:n,...r}=e;return{...r,status:t.status}}case _.ChangesetFileSet:{let n=e.files.findIndex(e=>e.id===t.file.id);if(n<0)return{...e,files:[...e.files,t.file]};let r=[...e.files];return r[n]=t.file,{...e,files:r}}case _.ChangesetFileRemoved:{let n=e.files.findIndex(e=>e.id===t.fileId);if(n<0)return e;let r=[...e.files];return r.splice(n,1),{...e,files:r}}case _.ChangesetFilesReviewChanged:{let n=!1,r=new Set(t.files),i=e.files.map(e=>!r.has(e.id)||e.reviewed===t.reviewed?e:(n=!0,{...e,reviewed:t.reviewed}));return n?{...e,files:i}:e}case _.ChangesetContentChanged:return t.operations===void 0?{...e,files:t.files}:{...e,files:t.files,operations:t.operations};case _.ChangesetOperationsChanged:if(t.operations===void 0){let{operations:t,...n}=e;return n}return{...e,operations:t.operations};case _.ChangesetOperationStatusChanged:{if(e.operations===void 0)return e;let n=e.operations.findIndex(e=>e.id===t.operationId);if(n<0)return e;let r=e.operations[n],i;if(t.status===Ie.Error)i={...r,status:t.status,error:t.error};else{let{error:e,...n}=r;i={...n,status:t.status}}let a=[...e.operations];return a[n]=i,{...e,operations:a}}case _.ChangesetCleared:return e.files.length===0?e:{...e,files:[]};default:return y(t,n),e}}var ze;(function(e){e.Creating=`creating`,e.Ready=`ready`,e.Failed=`failed`})(ze||={});var S;(function(e){e[e.Idle=1]=`Idle`,e[e.Error=2]=`Error`,e[e.InProgress=8]=`InProgress`,e[e.InputNeeded=24]=`InputNeeded`,e[e.IsRead=32]=`IsRead`,e[e.IsArchived=64]=`IsArchived`})(S||={});var Be;(function(e){e.Automation=`automation`})(Be||={});var Ve;(function(e){e.ChatInput=`chatInput`,e.ToolConfirmation=`toolConfirmation`,e.ToolClientExecution=`toolClientExecution`,e.ToolAuthentication=`toolAuthentication`})(Ve||={});var C;(function(e){e.Plugin=`plugin`,e.Directory=`directory`,e.Agent=`agent`,e.Skill=`skill`,e.Prompt=`prompt`,e.Rule=`rule`,e.Hook=`hook`,e.McpServer=`mcpServer`})(C||={});var He;(function(e){e.Global=`global`,e.Workspace=`workspace`,e.Session=`session`})(He||={});var Ue;(function(e){e.Loading=`loading`,e.Loaded=`loaded`,e.Degraded=`degraded`,e.Error=`error`})(Ue||={});var w;(function(e){e.Starting=`starting`,e.Ready=`ready`,e.AuthRequired=`authRequired`,e.Error=`error`,e.Stopped=`stopped`})(w||={});var We;(function(e){e.Required=`required`,e.Expired=`expired`,e.InsufficientScope=`insufficientScope`})(We||={});function Ge(e,t,n){return n?e|t:e&~t}function Ke(e){return e.kind!==Ve.ToolClientExecution}function qe(e,t){return t.some(Ke)?e&-32|S.InputNeeded:e&~(S.InputNeeded&~S.InProgress)}function T(e,t,n){let r=e.customizations;if(!r)return e;let i=r.findIndex(e=>e.id===t);if(i>=0){let t=r[i];if(t.type!==C.McpServer)return e;let a=r.slice();return a[i]=n(t),{...e,customizations:a}}let a=!1,o=r.map(e=>{if(e.type===C.McpServer)return e;let r=e.children;if(!r)return e;let i=r.findIndex(e=>e.id===t);if(i<0)return e;let o=r[i];if(o.type!==C.McpServer)return e;a=!0;let s=r.slice();return s[i]=n(o),{...e,children:s}});return a?{...e,customizations:o}:e}function Je(e,t){switch(e.type){case C.Plugin:case C.McpServer:{if(t.length>0)return{...e,enablement:[...t]};let{enablement:n,...r}=e;return r}default:return{...e,enabled:t[0]?.enabled??!0}}}function Ye(e,t,n){switch(t.type){case _.SessionReady:return{...e,lifecycle:ze.Ready};case _.SessionCreationFailed:return{...e,lifecycle:ze.Failed,creationError:t.error};case _.SessionChatAdded:{let n=e.chats,r=n.findIndex(e=>e.resource===t.summary.resource);if(r<0)return{...e,chats:[...n,t.summary]};let i=n.slice();return i[r]=t.summary,{...e,chats:i}}case _.SessionChatRemoved:{let n=e.chats,r=n.findIndex(e=>e.resource===t.chat);if(r<0)return e;let i=n.slice();i.splice(r,1);let a={...e,chats:i};return e.defaultChat===t.chat&&delete a.defaultChat,a}case _.SessionChatUpdated:{let n=e.chats,r=n.findIndex(e=>e.resource===t.chat);if(r<0)return e;let{resource:i,...a}=t.changes,o=n.slice();return o[r]={...n[r],...a},{...e,chats:o}}case _.SessionChatsReordered:{let n=e.chats;if(t.chats.length!==n.length||new Set(t.chats).size!==n.length)return e;let r=new Map(n.map(e=>[e.resource,e])),i=[];for(let n of t.chats){let t=r.get(n);if(!t)return e;i.push(t)}return i.every((e,t)=>e===n[t])?e:{...e,chats:i}}case _.SessionDefaultChatChanged:return{...e,defaultChat:t.defaultChat};case _.SessionTitleChanged:return{...e,title:t.title};case _.SessionIsReadChanged:return{...e,status:Ge(e.status,S.IsRead,t.isRead)};case _.SessionIsArchivedChanged:return{...e,status:Ge(e.status,S.IsArchived,t.isArchived)};case _.SessionActivityChanged:return{...e,activity:t.activity};case _.SessionChangesetsChanged:{let{changesets:n,...r}=e;return t.changesets?{...r,changesets:t.changesets}:r}case _.SessionConfigChanged:return e.config?{...e,config:{...e.config,values:t.replace?{...t.config}:{...e.config.values,...t.config}}}:e;case _.SessionMetaChanged:return{...e,_meta:t._meta};case _.SessionServerToolsChanged:return{...e,serverTools:t.tools};case _.SessionActiveClientSet:{let n=e.activeClients,r=n.findIndex(e=>e.clientId===t.activeClient.clientId);if(r<0)return{...e,activeClients:[...n,t.activeClient]};let i=n.slice();return i[r]=t.activeClient,{...e,activeClients:i}}case _.SessionActiveClientRemoved:{let n=e.activeClients,r=n.findIndex(e=>e.clientId===t.clientId);if(r<0)return e;let i=n.slice();return i.splice(r,1),{...e,activeClients:i}}case _.SessionWorkingDirectorySet:{let n=e.workingDirectories??[];return n.includes(t.directory)?e:{...e,workingDirectories:[...n,t.directory]}}case _.SessionWorkingDirectoryRemoved:{let n=e.workingDirectories;if(!n)return e;let r=n.indexOf(t.directory);if(r<0)return e;let i=n.slice();return i.splice(r,1),{...e,workingDirectories:i}}case _.SessionWorkingDirectoryReplaced:{let n=e.workingDirectories;if(!n)return e;let r=n.indexOf(t.directory);if(r<0)return e;let i=n.indexOf(t.replacement);return i>=0&&i<r?{...e,workingDirectories:n.filter((e,t)=>t!==r)}:{...e,workingDirectories:n.map((e,n)=>n===r?t.replacement:e).filter((e,n)=>n===r||e!==t.replacement)}}case _.SessionInputNeededSet:{let n=e.inputNeeded??[],r=n.findIndex(e=>e.id===t.request.id),i=r<0?[...n,t.request]:n.slice();return r>=0&&(i[r]=t.request),{...e,inputNeeded:i,status:qe(e.status,i)}}case _.SessionInputNeededRemoved:{let n=e.inputNeeded;if(!n)return e;let r=n.findIndex(e=>e.id===t.id);if(r<0)return e;let i=n.slice();i.splice(r,1);let a={...e,status:qe(e.status,i)};return i.length>0?a.inputNeeded=i:delete a.inputNeeded,a}case _.SessionCustomizationsChanged:return{...e,customizations:t.customizations};case _.SessionCustomizationToggled:{let n=e.customizations;if(!n)return e;let r=n.findIndex(e=>e.id===t.id);if(r>=0){let i=n.slice();return i[r]=Je(n[r],t.enablement),{...e,customizations:i}}for(let r=0;r<n.length;r++){let i=n[r];if(i.type===C.McpServer)continue;let a=i.children;if(!a)continue;let o=a.findIndex(e=>e.id===t.id);if(o<0)continue;let s=a.slice();s[o]=Je(a[o],t.enablement);let c=n.slice();return c[r]={...i,children:s},{...e,customizations:c}}return e}case _.SessionCustomizationUpdated:{let n=e.customizations??[],r=n.findIndex(e=>e.id===t.customization.id);if(r<0)return{...e,customizations:[...n,t.customization]};let i=[...n];return i[r]=t.customization,{...e,customizations:i}}case _.SessionCustomizationRemoved:{let n=e.customizations;if(!n)return e;let r=n.findIndex(e=>e.id===t.id);if(r>=0){let t=n.slice();return t.splice(r,1),{...e,customizations:t}}let i=!1,a=n.map(e=>{if(e.type===C.McpServer)return e;let n=e.children;if(!n)return e;let r=n.findIndex(e=>e.id===t.id);if(r<0)return e;i=!0;let a=n.slice();return a.splice(r,1),{...e,children:a}});return i?{...e,customizations:a}:e}case _.SessionMcpServerStateChanged:return T(e,t.id,e=>({...e,state:t.state,channel:t.channel}));case _.SessionMcpServerStartRequested:return T(e,t.id,e=>({...e,state:{kind:w.Starting},channel:void 0}));case _.SessionMcpServerBackgroundRequested:return T(e,t.id,e=>e.state.kind===w.Starting&&e.state.blocking?{...e,state:{...e.state,blocking:!1}}:e);case _.SessionMcpServerStopRequested:return T(e,t.id,e=>({...e,state:{kind:w.Stopped},channel:void 0}));default:return y(t,n),e}}var Xe;(function(e){e.Running=`running`,e.Exited=`exited`})(Xe||={});var Ze;(function(e){e.Client=`client`,e.Session=`session`})(Ze||={});function Qe(e,t,n){switch(t.type){case _.TerminalData:{let n=[...e.content],r=n.length>0?n[n.length-1]:void 0;return r&&r.type===`command`&&!r.isComplete?n[n.length-1]={...r,output:r.output+t.data}:r&&r.type===`unclassified`?n[n.length-1]={...r,value:r.value+t.data}:n.push({type:`unclassified`,value:t.data}),{...e,content:n}}case _.TerminalInput:return e;case _.TerminalResized:return{...e,cols:t.cols,rows:t.rows};case _.TerminalClaimed:return{...e,claim:t.claim};case _.TerminalTitleChanged:return{...e,title:t.title};case _.TerminalCwdChanged:return{...e,cwd:t.cwd};case _.TerminalExited:return{...e,lifecycle:{status:Xe.Exited,exitCode:t.exitCode}};case _.TerminalCleared:return{...e,content:[]};case _.TerminalCommandDetectionAvailable:return{...e,supportsCommandDetection:!0};case _.TerminalCommandExecuted:{let n={type:`command`,commandId:t.commandId,commandLine:t.commandLine,output:``,timestamp:t.timestamp,isComplete:!1};return{...e,content:[...e.content,n],supportsCommandDetection:!0}}case _.TerminalCommandFinished:{let n=e.content.map(e=>e.type===`command`&&e.commandId===t.commandId?{...e,isComplete:!0,exitCode:t.exitCode,durationMs:t.durationMs}:e);return{...e,content:n}}default:return y(t,n),e}}function $e(e,t,n){switch(t.type){case _.AutomationCreateRequested:case _.AutomationUpdateRequested:return e;case _.AutomationSet:{let n=e.entries.findIndex(e=>e.resource===t.automation.resource);if(n<0)return{...e,entries:[...e.entries,t.automation]};let r=e.entries.slice();return r[n]=t.automation,{...e,entries:r}}case _.AutomationRemoved:{let n=e.entries.findIndex(e=>e.resource===t.resource);if(n<0)return e;let r=e.entries.slice();return r.splice(n,1),{...e,entries:r}}default:return y(t,n),e}}var et=class e{socket;inbox=[];waiters=[];closeInfo=null;error=null;closed=!1;static connect(t,n={}){return new Promise((r,i)=>{let o=globalThis.WebSocket;if(!o){i(new a(`io`,`global WebSocket is not available; install or polyfill it`));return}let s;try{s=n.protocols===void 0?new o(t):new o(t,n.protocols)}catch(e){i(new a(`io`,`failed to construct WebSocket: ${e.message}`,{cause:e}));return}let c=()=>{s.removeEventListener(`open`,l),s.removeEventListener(`error`,u),s.removeEventListener(`close`,d)},l=()=>{c(),r(new e(s))},u=()=>{c(),i(new a(`io`,`websocket failed to open`))},d=e=>{c(),i(new a(`closed`,`websocket closed before open (code=${e.code})`))};s.addEventListener(`open`,l),s.addEventListener(`error`,u),s.addEventListener(`close`,d)})}static fromSocket(t){if(t.readyState!==t.OPEN)throw new a(`io`,`socket is not OPEN`);return new e(t)}constructor(e){this.socket=e,e.binaryType=`arraybuffer`,e.addEventListener(`message`,e=>{let t=e.data;if(typeof t==`string`)this.deliver({kind:`text`,text:t});else if(t instanceof ArrayBuffer)this.deliver({kind:`binary`,data:new Uint8Array(t)});else if(t instanceof Uint8Array)this.deliver({kind:`binary`,data:t});else{let e=new a(`protocol`,`unsupported WebSocket message payload (expected string or ArrayBuffer)`);this.error=e,this.drainWithError(e)}}),e.addEventListener(`error`,()=>{this.error=new a(`io`,`websocket error`),this.drainWithError(this.error)}),e.addEventListener(`close`,e=>{if(this.closeInfo={code:e.code,reason:e.reason,wasClean:e.wasClean},this.closed=!0,e.wasClean)this.drainWithNull();else{let t=new a(`closed`,`websocket closed abnormally (code=${e.code})`);this.error=t,this.drainWithError(t)}})}get bufferedAmount(){return this.socket.bufferedAmount}get lastClose(){return this.closeInfo}send(e){if(this.closed)throw new a(`closed`,`transport closed`);if(this.error)throw this.error;let t=typeof e==`string`?e:he(e);try{this.socket.send(t)}catch(e){throw new a(`io`,`websocket send failed: ${e.message}`,{cause:e})}}recv(){if(this.error)return Promise.reject(this.error);if(this.inbox.length>0){let e=this.inbox.shift()??null;return Promise.resolve(e)}return this.closed?Promise.resolve(null):new Promise((e,t)=>{this.waiters.push({resolve:e,reject:t})})}close(){if(this.socket.readyState===this.socket.OPEN||this.socket.readyState===this.socket.CONNECTING)try{this.socket.close()}catch{}return Promise.resolve()}deliver(e){if(this.waiters.length>0){let t=this.waiters.shift();t&&t.resolve(e);return}this.inbox.push(e)}drainWithError(e){let t=this.waiters;this.waiters=[];for(let n of t)n.reject(e)}drainWithNull(){let e=this.waiters;this.waiters=[];for(let t of e)t.resolve(null)}},tt=`ahpd-web.token`;function nt(){try{let e=window.localStorage.getItem(tt)?.trim();return e===void 0||e===``?null:e}catch{return null}}function rt(e){try{e===null?window.localStorage.removeItem(tt):window.localStorage.setItem(tt,e)}catch{}}var E=!1;function it(){return E}async function at(){try{let e=await fetch(`./ahpw.json`,{headers:{accept:`application/json`},cache:`no-store`});if(!e.ok||!(e.headers.get(`content-type`)??``).includes(`application/json`))return!1;E=(await e.json()).tokenHeld===!0}catch{E=!1}return E}var D=globalThis.ahpwEmbedder,ot;(function(e){e.Enabled=`enabled`,e.Disabled=`disabled`,e.Unconfigured=`unconfigured`})(ot||={});var st;(function(e){e.Shell=`shell`,e.Subagent=`subagent`})(st||={});var ct;(function(e){e.User=`user`,e.Fork=`fork`,e.SideChat=`sideChat`,e.Tool=`tool`})(ct||={});var lt;(function(e){e.Full=`full`,e.ReadOnly=`read-only`,e.Hidden=`hidden`})(lt||={});var ut;(function(e){e.Steering=`steering`,e.Queued=`queued`})(ut||={});var dt;(function(e){e.Accept=`accept`,e.Decline=`decline`,e.Cancel=`cancel`})(dt||={});var ft;(function(e){e.Text=`text`,e.Number=`number`,e.Integer=`integer`,e.Boolean=`boolean`,e.SingleSelect=`single-select`,e.MultiSelect=`multi-select`})(ft||={});var pt;(function(e){e.Text=`text`,e.Number=`number`,e.Boolean=`boolean`,e.Selected=`selected`,e.SelectedMany=`selected-many`})(pt||={});var mt;(function(e){e.Draft=`draft`,e.Submitted=`submitted`,e.Skipped=`skipped`})(mt||={});var O;(function(e){e.Complete=`complete`,e.Cancelled=`cancelled`,e.Error=`error`})(O||={});var ht;(function(e){e.Simple=`simple`,e.EmbeddedResource=`embeddedResource`,e.Resource=`resource`,e.Annotations=`annotations`,e.Chat=`chat`})(ht||={});var gt;(function(e){e.User=`user`,e.Agent=`agent`,e.Tool=`tool`,e.Automation=`automation`,e.SystemNotification=`systemNotification`})(gt||={});var k;(function(e){e.Markdown=`markdown`,e.ContentRef=`contentRef`,e.ToolCall=`toolCall`,e.Reasoning=`reasoning`,e.SystemNotification=`systemNotification`,e.InputRequest=`inputRequest`,e.Error=`error`})(k||={});var A;(function(e){e.Streaming=`streaming`,e.PendingConfirmation=`pending-confirmation`,e.Running=`running`,e.AuthRequired=`auth-required`,e.PendingResultConfirmation=`pending-result-confirmation`,e.Completed=`completed`,e.Cancelled=`cancelled`})(A||={});var _t;(function(e){e.NotNeeded=`not-needed`,e.UserAction=`user-action`,e.Setting=`setting`})(_t||={});var vt;(function(e){e.Judge=`judge`})(vt||={});var yt;(function(e){e.Loading=`loading`,e.Complete=`complete`})(yt||={});var bt;(function(e){e.Denied=`denied`,e.Skipped=`skipped`,e.ResultDenied=`result-denied`})(bt||={});var xt;(function(e){e.Approve=`approve`,e.Deny=`deny`})(xt||={});var j;(function(e){e.Client=`client`,e.MCP=`mcp`})(j||={});var St;(function(e){e.Text=`text`,e.EmbeddedResource=`embeddedResource`,e.Resource=`resource`,e.FileEdit=`fileEdit`,e.Terminal=`terminal`,e.Subagent=`subagent`})(St||={});var Ct;(function(e){e.Added=`added`,e.Updated=`updated`,e.Deleted=`deleted`})(Ct||={});var wt;(function(e){e.Update=`update`,e.Remove=`remove`,e.Run=`run`})(wt||={});var Tt;(function(e){e.Skip=`skip`,e.RunOnce=`runOnce`})(Tt||={});var Et;(function(e){e.Schedule=`schedule`,e.Event=`event`})(Et||={});var Dt;(function(e){e.AfterRuns=`afterRuns`,e.AfterDate=`afterDate`})(Dt||={});var Ot;(function(e){e.Pending=`pending`,e.Running=`running`,e.Completed=`completed`,e.Failed=`failed`,e.Cancelled=`cancelled`})(Ot||={});var kt;(function(e){e.Manual=`manual`,e.Trigger=`trigger`})(kt||={});var At;(function(e){e.UserMessage=`userMessage`})(At||={});var jt;(function(e){e.Fork=`fork`,e.SideChat=`sideChat`})(jt||={});var Mt;(function(e){e.Session=`session`,e.NewSession=`newSession`})(Mt||={});var Nt;(function(e){e.Resource=`resource`,e.Range=`range`})(Nt||={});var Pt;(function(e){e.Required=`required`,e.Expired=`expired`})(Pt||={});function Ft(e,t){return new Date(Date.parse(e)+t).toISOString()}function It(e){return{toolCallId:e.toolCallId,toolName:e.toolName,displayName:e.displayName,intention:e.intention,contributor:e.contributor,_meta:e._meta}}function M(e,t){return{...It(e),_meta:t??e._meta}}function Lt(e,t,n){return t?e?.kind===j.Client?t.kind===j.Client&&t.clientId===e.clientId?t:(n?.(`Ignoring contributor change for client tool call from '${e.clientId}'`),e):t.kind===j.Client?(n?.(`Ignoring late client contributor '${t.clientId}' because client execution ownership must be established at tool call start`),e):t:e}function Rt(e,t){if(t&&e)return e.find(e=>e.id===t)}function zt(e){return e.activeTurn?e.activeTurn.responseParts.some(e=>e.kind===k.ToolCall&&(e.toolCall.status===A.PendingConfirmation||e.toolCall.status===A.PendingResultConfirmation||e.toolCall.status===A.AuthRequired)):!1}function Bt(e){return e.activeTurn?.responseParts.some(e=>e.kind===k.InputRequest&&e.response===void 0)??!1}function Vt(e,t){let n=e.findIndex(e=>e.kind===k.InputRequest&&e.response===void 0&&e.request.id===t);if(n<0)return;let r=e[n];return r.kind===k.InputRequest?{index:n,part:r}:void 0}function Ht(e){let t=e.responseParts[e.responseParts.length-1];return t?.kind===k.Error&&t.resumable===!0}function Ut(e){return e.kind===k.Error}function N(e,t,n){return n?e|t:e&~t}function P(e,t){let n;return n=t||(Bt(e)||zt(e)?S.InputNeeded:e.activeTurn?S.InProgress:S.Idle),e.status&-32|n}function F(e){let t=P(e);return t===e.status?e:{...e,status:t}}function Wt(e,t,n,r,i,a){if(!e.activeTurn||e.activeTurn.id!==t)return e;let o=e.activeTurn,s=o.responseParts.map(e=>{if(e.kind!==k.ToolCall)return e;let t=e.toolCall;return t.status===A.Completed||t.status===A.Cancelled?e:{kind:k.ToolCall,toolCall:{status:A.Cancelled,...It(t),invocationMessage:t.status===A.Streaming?t.invocationMessage??``:t.invocationMessage,toolInput:t.status===A.Streaming?void 0:t.toolInput,reason:bt.Skipped}}});a&&s.push(a);let c={id:o.id,startedAt:o.startedAt,duration:Math.max(0,r),message:o.message,responseParts:s,usage:o.usage,state:n},l={...e,turns:[...e.turns,c],activeTurn:void 0,modifiedAt:Ft(o.startedAt,c.duration??0)};return{...l,status:P(l,i)}}function Gt(e,t){let n=e.activeTurn;if(!n)return e;let r=Vt(n.responseParts,t.id),i=[...n.responseParts],a={kind:k.InputRequest,request:t};r?(a.request={...t,answers:t.answers??r.part.request.answers},i[r.index]=a):i.push(a);let o={...e,activeTurn:{...n,responseParts:i}};return{...o,status:N(P(o),S.IsRead,!1)}}function I(e,t,n,r){let i=e.activeTurn;if(!i||i.id!==t)return e;let a=!1,o=i.responseParts.map(e=>{if(e.kind===k.ToolCall&&e.toolCall.toolCallId===n){let t=r(e.toolCall);return t===e.toolCall?e:(a=!0,{...e,toolCall:t})}return e});return a?{...e,activeTurn:{...i,responseParts:o}}:e}function Kt(e,t,n,r){let i=e.activeTurn;if(!i||i.id!==t)return e;let a=!1,o=i.responseParts.map(e=>!a&&(e.kind===k.ToolCall?e.toolCall.toolCallId:`id`in e?e.id:void 0)===n?(a=!0,r(e)):e);return a?{...e,activeTurn:{...i,responseParts:o}}:e}function qt(e,t,n){switch(t.type){case _.ChatTurnStarted:{let n={...e,activeTurn:{id:t.turnId,startedAt:t.startedAt,message:t.message,responseParts:[],usage:void 0}};if(n={...n,status:N(P(n),S.IsRead,!1),modifiedAt:t.startedAt},t.queuedMessageId&&(n.steeringMessage?.id===t.queuedMessageId&&(n={...n,steeringMessage:void 0}),n.queuedMessages)){let e=n.queuedMessages.filter(e=>e.id!==t.queuedMessageId);n={...n,queuedMessages:e.length>0?e:void 0}}return n}case _.ChatDelta:return Kt(e,t.turnId,t.partId,e=>e.kind===k.Markdown?{...e,content:e.content+t.content}:e);case _.ChatResponsePart:return!e.activeTurn||e.activeTurn.id!==t.turnId||Ut(t.part)?e:{...e,activeTurn:{...e.activeTurn,responseParts:[...e.activeTurn.responseParts,t.part]}};case _.ChatTurnComplete:return Wt(e,t.turnId,O.Complete,t.duration);case _.ChatTurnCancelled:return Wt(e,t.turnId,O.Cancelled,t.duration);case _.ChatError:return Wt(e,t.turnId,O.Error,t.duration,S.Error,t.part);case _.ChatTurnResume:{if(e.activeTurn)return e;let n=e.turns.length-1,r=e.turns[n];if(!r||r.id!==t.turnId||r.state!==O.Error||!Ht(r))return e;let i=e.turns.slice();i.splice(n,1);let a={...e,turns:i,activeTurn:{id:r.id,startedAt:r.startedAt??e.modifiedAt,message:r.message,responseParts:r.responseParts,usage:r.usage}};return{...a,status:N(P(a),S.IsRead,!1)}}case _.ChatActivityChanged:return{...e,activity:t.activity};case _.ChatBackgroundWorkSet:{let n=e.backgroundWork??[],r=n.findIndex(e=>e.id===t.work.id),i=n.slice();return r<0?i.push(t.work):i[r]=t.work,{...e,backgroundWork:i}}case _.ChatBackgroundWorkRemoved:{let n=e.backgroundWork??[],r=n.findIndex(e=>e.id===t.id);if(r<0)return e;let i=n.slice();return i.splice(r,1),{...e,backgroundWork:i}}case _.ChatMovableChanged:return{...e,movable:t.movable};case _.ChatChangesetsChanged:{let{changesets:n,...r}=e;return t.changesets?{...r,changesets:t.changesets}:r}case _.ChatCanvasesChanged:{let{canvases:n,...r}=e;return t.canvases?{...r,canvases:t.canvases}:r}case _.ChatWorkingDirectorySet:{let n=e.workingDirectories??[];return n.includes(t.directory)?e:{...e,workingDirectories:[...n,t.directory]}}case _.ChatWorkingDirectoryRemoved:{let n=e.workingDirectories;if(!n)return e;let r=n.indexOf(t.directory);if(r<0)return e;let i=n.slice();return i.splice(r,1),{...e,workingDirectories:i}}case _.ChatToolCallStart:return!e.activeTurn||e.activeTurn.id!==t.turnId?e:{...e,activeTurn:{...e.activeTurn,responseParts:[...e.activeTurn.responseParts,{kind:k.ToolCall,toolCall:{toolCallId:t.toolCallId,toolName:t.toolName,displayName:t.displayName,intention:t.intention,contributor:t.contributor,_meta:t._meta,status:A.Streaming}}]}};case _.ChatToolCallDelta:return I(e,t.turnId,t.toolCallId,e=>e.status===A.Streaming?{...e,...t._meta===void 0?{}:{_meta:t._meta},...t.content===void 0?{}:{partialInput:(e.partialInput??``)+t.content},invocationMessage:t.invocationMessage??e.invocationMessage}:e);case _.ChatToolCallReady:return F(I(e,t.turnId,t.toolCallId,e=>{if(e.status!==A.Streaming&&e.status!==A.Running&&e.status!==A.PendingConfirmation)return e;let r={...M(e,t._meta),contributor:Lt(e.contributor,t.contributor,n),intention:t.intention??e.intention},i=t.toolInput??(e.status===A.Streaming?void 0:e.toolInput);if(t.confirmed)return{status:A.Running,...r,invocationMessage:t.invocationMessage,toolInput:i,confirmed:t.confirmed};let a=e.status===A.PendingConfirmation?e:void 0,o=t.options??a?.options;return{status:A.PendingConfirmation,...r,invocationMessage:t.invocationMessage,toolInput:i,confirmationTitle:t.confirmationTitle??a?.confirmationTitle,riskAssessment:t.riskAssessment??a?.riskAssessment,edits:t.edits??a?.edits,editable:t.editable??a?.editable,...o?{options:o}:{}}}));case _.ChatToolCallConfirmed:return F(I(e,t.turnId,t.toolCallId,e=>{if(e.status!==A.PendingConfirmation)return e;let n=M(e,t._meta),r=Rt(e.options,t.selectedOptionId);if(t.approved){let i=t.editedToolInput!==void 0&&typeof e.toolInput==`string`?t.editedToolInput:e.toolInput;return{status:A.Running,...n,invocationMessage:e.invocationMessage,toolInput:i,confirmed:t.confirmed,...r?{selectedOption:r}:{}}}return{status:A.Cancelled,...n,invocationMessage:e.invocationMessage,toolInput:e.toolInput,reason:t.reason,reasonMessage:t.reasonMessage,userSuggestion:t.userSuggestion,...r?{selectedOption:r}:{}}}));case _.ChatToolCallComplete:return F(I(e,t.turnId,t.toolCallId,e=>{if(e.status!==A.Running&&e.status!==A.PendingConfirmation&&e.status!==A.AuthRequired||e.status===A.AuthRequired&&t.result.success)return e;let n=M(e,t._meta),r=e.status===A.Running||e.status===A.AuthRequired?e.confirmed:_t.NotNeeded,i=e.status===A.Running||e.status===A.AuthRequired?e.selectedOption:void 0,a=e.status===A.AuthRequired?e.content:void 0;return t.requiresResultConfirmation&&e.status!==A.AuthRequired?{status:A.PendingResultConfirmation,...n,invocationMessage:e.invocationMessage,toolInput:e.toolInput,confirmed:r,...i?{selectedOption:i}:{},...a?{content:a}:{},...t.result}:{status:A.Completed,...n,invocationMessage:e.invocationMessage,toolInput:e.toolInput,confirmed:r,...i?{selectedOption:i}:{},...a?{content:a}:{},...t.result}}));case _.ChatToolCallResultConfirmed:return F(I(e,t.turnId,t.toolCallId,e=>{if(e.status!==A.PendingResultConfirmation)return e;let n=M(e,t._meta);return t.approved?{status:A.Completed,...n,invocationMessage:e.invocationMessage,toolInput:e.toolInput,confirmed:e.confirmed,...e.selectedOption?{selectedOption:e.selectedOption}:{},success:e.success,pastTenseMessage:e.pastTenseMessage,content:e.content,structuredContent:e.structuredContent,error:e.error}:{status:A.Cancelled,...n,invocationMessage:e.invocationMessage,toolInput:e.toolInput,reason:bt.ResultDenied,...e.selectedOption?{selectedOption:e.selectedOption}:{}}}));case _.ChatToolCallContentChanged:return I(e,t.turnId,t.toolCallId,e=>e.status===A.Running?{...e,...t._meta===void 0?{}:{_meta:t._meta},content:t.content}:e);case _.ChatToolCallAuthRequired:return F(I(e,t.turnId,t.toolCallId,e=>{if(e.status!==A.Running||!e.contributor||e.contributor.kind!==j.MCP)return e;let n=M(e,t._meta);return{status:A.AuthRequired,...n,contributor:e.contributor,invocationMessage:e.invocationMessage,toolInput:e.toolInput,confirmed:e.confirmed,...e.selectedOption?{selectedOption:e.selectedOption}:{},...e.content?{content:e.content}:{},auth:t.auth}}));case _.ChatToolCallAuthResolved:return F(I(e,t.turnId,t.toolCallId,e=>{if(e.status!==A.AuthRequired)return e;let n=M(e,t._meta);return{status:A.Running,...n,invocationMessage:e.invocationMessage,toolInput:e.toolInput,confirmed:e.confirmed,...e.selectedOption?{selectedOption:e.selectedOption}:{},...e.content?{content:e.content}:{}}}));case _.ChatUsage:return!e.activeTurn||e.activeTurn.id!==t.turnId?e:{...e,activeTurn:{...e.activeTurn,usage:t.usage}};case _.ChatReasoning:return Kt(e,t.turnId,t.partId,e=>e.kind===k.Reasoning?{...e,content:e.content+t.content}:e);case _.ChatTruncated:{let n;if(t.turnId===void 0)n=[];else{let r=e.turns.findIndex(e=>e.id===t.turnId);if(r<0)return e;n=e.turns.slice(0,r+1)}let r={...e,turns:n,activeTurn:void 0};return t.turnId===void 0&&delete r.turnsNextCursor,{...r,status:P(r)}}case _.ChatTurnsLoaded:{let n=new Set(e.turns.map(e=>e.id)),r=t.turns.filter(e=>!n.has(e.id));return{...e,turns:[...r,...e.turns],turnsNextCursor:t.turnsNextCursor}}case _.ChatInputRequested:return Gt(e,t.request);case _.ChatInputAnswerChanged:{let n=e.activeTurn,r=n?Vt(n.responseParts,t.requestId):void 0;if(!n||!r)return e;let{index:i,part:a}=r,o=a.request,s={...o.answers??{}};t.answer===void 0?delete s[t.questionId]:s[t.questionId]=t.answer;let c=[...n.responseParts];return c[i]={...a,request:{...o,answers:Object.keys(s).length>0?s:void 0}},{...e,activeTurn:{...n,responseParts:c}}}case _.ChatInputCompleted:{let n=e.activeTurn,r=n?Vt(n.responseParts,t.requestId):void 0;if(!n||!r)return e;let{index:i,part:a}=r,o={...a.request.answers??{},...t.answers??{}},s=[...n.responseParts];s[i]={...a,request:{...a.request,answers:Object.keys(o).length>0?o:void 0},response:t.response};let c={...e,activeTurn:{...n,responseParts:s}};return{...c,status:P(c)}}case _.ChatPendingMessageSet:{let n={id:t.id,message:t.message};if(t.kind===ut.Steering)return{...e,steeringMessage:n};let r=e.queuedMessages??[],i=r.findIndex(e=>e.id===t.id);if(i>=0){let t=[...r];return t[i]=n,{...e,queuedMessages:t}}return{...e,queuedMessages:[...r,n]}}case _.ChatPendingMessageRemoved:{if(t.kind===ut.Steering)return!e.steeringMessage||e.steeringMessage.id!==t.id?e:{...e,steeringMessage:void 0};let n=e.queuedMessages;if(!n)return e;let r=n.filter(e=>e.id!==t.id);return r.length===n.length?e:{...e,queuedMessages:r.length>0?r:void 0}}case _.ChatQueuedMessagesReordered:{let n=e.queuedMessages;if(!n)return e;let r=new Map(n.map(e=>[e.id,e])),i=new Set,a=t.order.filter(e=>r.has(e)&&!i.has(e)?(i.add(e),!0):!1).map(e=>r.get(e));for(let e of n)i.has(e.id)||a.push(e);return{...e,queuedMessages:a}}case _.ChatDraftChanged:return{...e,draft:t.draft};case _.ChatIsReadChanged:return{...e,status:N(e.status,S.IsRead,t.isRead)};case _.ChatIsArchivedChanged:return{...e,status:N(e.status,S.IsArchived,t.isArchived)};default:return y(t,n),e}}var Jt=`0.10.0`,Yt=Object.freeze(fe.flatMap(e=>e===`1.0.0`?[e,Jt]:e===`0.10.0`?[]:[e]));function Xt(e){let t=Zt(typeof e==`string`?Qt(e):e);if(t?.method!==`initialize`)return e;let n={...Zt(t.params),protocolVersions:[...Yt]},r={...t,params:n};return typeof e==`string`?JSON.stringify(r):r}function Zt(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function Qt(e){try{return JSON.parse(e)}catch{return null}}function $t(e){return{send:t=>e.send(Xt(t)),close:()=>e.close(),recv:()=>e.recv()}}function en(e){let t=nn(nn(nn(typeof e==`string`?rn(e):e)?.result)?.serverInfo);return t===null||typeof t.name!=`string`||t.name===``?null:{name:t.name,version:typeof t.version==`string`&&t.version!==``?t.version:null}}var tn=e=>e.version===null?e.name:`${e.name} ${e.version}`;function nn(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function rn(e){try{return JSON.parse(e)}catch{return null}}function an(e,t){return{send:t=>e.send(t),close:()=>e.close(),async recv(){let n=await e.recv(),r=n?.kind===`text`?en(n.text):n?.kind===`parsed`?en(n.message):null;return r!==null&&t(r),n}}}var on=`/ahp`;function sn(e,t,n){let r=t.protocol===`https:`?`wss:`:`ws:`,i=n?on:`/`;return`${r}//${t.host}${i}${e===null?``:`?tkn=${encodeURIComponent(e)}`}`}function cn(e,t){return t===null||t===``?e:`${e}${e.includes(`?`)?`&`:`?`}tkn=${encodeURIComponent(t)}`}var ln=2,un=8,dn=24,fn=32,pn=64;function mn(e){return(e&dn)===dn?`input`:(e&un)===0?(e&ln)===0?`idle`:`error`:`running`}function hn(e){return(e&fn)!==0}function gn(e){return(e&pn)!==0}var _n={input:`Needs you`,running:`Running`,error:`Failed`,idle:`Idle`},vn={input:`warning`,running:`info`,error:`danger`,idle:`default`};function yn(e){let t=0,n=0;for(let r of e){if(gn(r))continue;let e=mn(r);e===`idle`&&!hn(r)&&(t+=1),(e===`running`||e===`input`)&&(n+=1)}return{unread:t,working:n}}var bn=e(),xn=[`connection`,`session`,`terminal`,`traffic`],Sn=[`debug`,`info`,`warn`,`error`],Cn=2e3,wn=1024,L=[],R=[],z=null,Tn=0,En=new Set,Dn=!1;function On(){z=null,!Dn&&(Dn=!0,setTimeout(()=>{Dn=!1;for(let e of En)e()},50))}function B(e){Tn+=1;let t={...e,id:`l${Tn}`,at:e.at??Date.now()};t.scope===`traffic`?R=R.length>=1024?[...R.slice(R.length-wn+1),t]:[...R,t]:L=L.length>=2e3?[...L.slice(L.length-Cn+1),t]:[...L,t],On()}function kn(){L=[],R=[],On()}function An(){return z===null&&(z=[...L,...R].sort((e,t)=>e.at-t.at||Number(e.id.slice(1))-Number(t.id.slice(1)))),z}function jn(e){return En.add(e),()=>{En.delete(e)}}function Mn(){return(0,bn.useSyncExternalStore)(jn,An,An)}function Nn(e,t){let n=Sn.indexOf(t.minLevel),r=t.query.split(/\s+/).filter(e=>e!==``&&e!==`!`),i=r.filter(e=>!e.startsWith(`!`)).map(e=>e.toLowerCase()),a=r.filter(e=>e.startsWith(`!`)).map(e=>e.slice(1).toLowerCase());return e.filter(e=>{if(t.scopes.length>0&&!t.scopes.includes(e.scope)||Sn.indexOf(e.level)<n)return!1;if(i.length===0&&a.length===0)return!0;let r=e.text.toLowerCase();return i.every(e=>r.includes(e))&&!a.some(e=>r.includes(e))})}var Pn=/\b[a-z][a-z0-9+.-]*:\/{1,3}[^\s"'`<>()[\]{},]+/gi;function Fn(e){let t=[],n=0;for(let r of e.matchAll(Pn)){let i=r.index,a=r[0].replace(/[.:;]+$/,``);i>n&&t.push({kind:`text`,text:e.slice(n,i)}),t.push({kind:`uri`,text:a}),n=i+a.length}return n<e.length&&t.push({kind:`text`,text:e.slice(n)}),t}function In(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}.${String(t.getMilliseconds()).padStart(3,`0`)}`}var Ln=e=>`${new Date(e.at).toISOString().replace(`T`,` `).replace(`Z`,``)} [${e.level}] [${e.scope}] ${e.text}`,Rn=e=>e.map(Ln).join(`
2
- `),zn=65536;function V(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function H(e){return typeof e==`string`&&e!==``?e:null}var Bn=new Map,Vn=null;function Hn(e){if(!e.startsWith(`ahp-chat:`))return null;let t=e.split(`/`).pop()??``;try{let e=atob(t.replace(/-/g,`+`).replace(/_/g,`/`));return/^[a-z][a-z0-9+.-]*:/i.test(e)?e:null}catch{return null}}function Un(e,t){let n=`${e} ${H(t.resource)??``} ${H(t.channel)??``}`.toLowerCase();return n.includes(`terminal`)?`terminal`:n.includes(`session`)||n.includes(`chat`)||H(t.session)!==null?`session`:`connection`}function Wn(e,t){let n=e===`sent`?`→`:`←`,r=H(t.method),i=V(t.params);if(r===`action`)return`${n} ${H(V(i.action).type)??`action`} ${H(i.channel)??``}`.trim();if(r!==null){let e=H(i.resource)??H(i.channel)??H(i.session)??``;return`${n} ${r}${t.id===void 0?``:` #${String(t.id)}`} ${e}`.trim()}return t.error===void 0?`${n} result #${String(t.id)}`:`${n} error #${String(t.id)} ${H(V(t.error).message)??``}`.trim()}function Gn(e){let t=V(e.action),n=H(t.type)??``,r=H(e.channel)??``,i=Hn(r)??(r.includes(`session`)?r:null),a=(t,n,r)=>B({scope:t,level:n,text:r,detail:e}),o=H(e.rejectionReason);if(o!==null){a(n.startsWith(`terminal/`)?`terminal`:`session`,`warn`,`${n} rejected: ${o} · ${r}`);return}switch(n){case`session/ready`:a(`session`,`info`,`ready ${i??r}`);return;case`session/creationFailed`:a(`session`,`error`,`creation failed: ${H(V(t.error).message)??H(t.message)??``} ${i??r}`);return;case`session/titleChanged`:a(`session`,`info`,`title "${H(t.title)??``}" ${i??r}`);return;case`chat/turnStarted`:a(`session`,`info`,`turn started ${i??r}`);return;case`chat/turnComplete`:a(`session`,`info`,`turn complete ${i??r}`);return;case`chat/turnCancelled`:a(`session`,`warn`,`turn cancelled ${i??r}`);return;case`chat/error`:a(`session`,`error`,`${H(V(t.error).message)??H(t.message)??`error`} ${i??r}`);return;case`terminal/commandExecuted`:a(`terminal`,`info`,`$ ${H(t.commandLine)??``} · ${r}`);return;case`terminal/commandFinished`:{let e=typeof t.exitCode==`number`?t.exitCode:null;a(`terminal`,e!==null&&e!==0?`warn`:`info`,`command finished${e===null?``:` · exit ${e}`} · ${r}`);return}case`terminal/exited`:{let e=typeof t.exitCode==`number`?t.exitCode:null;a(`terminal`,`info`,`exited${e===null?``:` ${e}`} · ${r}`);return}case`terminal/claimed`:{let e=V(t.claim);a(`terminal`,`info`,`claimed by ${H(e.session)??(e.kind===`client`?`client ${H(e.clientId)??``}`:``)} · ${r}`);return}case`root/terminalsChanged`:{let e=new Map;for(let n of Array.isArray(t.terminals)?t.terminals:[]){let t=V(n),r=H(t.resource);r!==null&&e.set(r,H(t.title)??``)}let n=Vn;if(Vn=e,n===null)return;for(let[t,r]of e)n.has(t)||a(`terminal`,`info`,`opened ${r===``?``:`${r} `}${t}`);for(let[t,r]of n)e.has(t)||a(`terminal`,`info`,`closed ${r===``?``:`${r} `}${t}`);return}}}var Kn=`••••••`;function qn(e){let t=V(e.params);return e.method!==`authenticate`||typeof t.token!=`string`?e:{...e,params:{...t,token:Kn}}}function Jn(e,t){let n;try{n=V(JSON.parse(t))}catch{B({scope:`traffic`,level:`debug`,text:`${e===`sent`?`→`:`←`} ${t.slice(0,120)}`,detail:t.slice(0,zn)});return}let r=qn(n);r!==n&&(n=r,t=JSON.stringify(r)),B({scope:`traffic`,level:`debug`,text:Wn(e,n),detail:t.length>zn?t.slice(0,zn):t});let i=n.id===void 0||n.id===null?null:String(n.id),a=H(n.method);if(e===`sent`){i!==null&&a!==null&&Bn.set(i,{method:a,params:V(n.params)});return}if(a===`action`){Gn(V(n.params));return}if(i===null||a!==null)return;let o=Bn.get(i);if(Bn.delete(i),n.error===void 0)return;let s=V(n.error),c=o===void 0?`#${i}`:`${o.method} ${H(o.params.resource)??H(o.params.channel)??``}`.trim();B({scope:o===void 0?`connection`:Un(o.method,o.params),level:`error`,text:`${c} refused: ${H(s.message)??`error`}${typeof s.code==`number`?` (${s.code})`:``}`,detail:{request:o??null,error:n.error}})}function Yn(){Bn.clear()}function Xn(e){return{send:t=>(Jn(`sent`,typeof t==`string`?t:JSON.stringify(t)),e.send(t)),close:()=>e.close(),async recv(){let t=await e.recv();return t?.kind===`text`?Jn(`received`,t.text):t?.kind===`parsed`&&Jn(`received`,JSON.stringify(t.message)),t}}}var U=`$/ahp/connection`,Zn=`$/ahp/sessions`,Qn=`$/ahp/agents`,$n=`$/ahp/defaultDirectory`,W=e=>`$/ahp/channels/${encodeURIComponent(e)}`,er=`$/ahp/automationCaps`,tr=`$/ahp/sessionCounts/unread`,nr=`$/ahp/sessionCounts/working`,rr=`$/ahp/host`,ir=`$/ahp/server`,ar=`$/ahp/terminals/detached`,G=e=>`$/ahp/titles/${encodeURIComponent(e)}`,or=e=>`$/ahp/channelErrors/${encodeURIComponent(e)}`,K=ee,sr=`ahp-automations://`,q=`daemon`;function cr(e){return[...e].sort((e,t)=>t.modifiedAt.localeCompare(e.modifiedAt))}var lr=2e3,J,Y,X=new Map,ur=e=>e instanceof Error?e.message:String(e);async function dr(e){let t=J,n=Y;if(t!==void 0&&n!==void 0)try{let r=await t.subscribe(q,e);if(!X.has(e))return;r.snapshot!==void 0&&(Q.delete(W(e)),n.set(W(e),r.snapshot.state)),n.set(or(e),null)}catch(t){n.set(or(e),ur(t))}}function fr(e,t){let n=X.get(e);n===void 0?(X.set(e,{count:1,reducer:t}),J?.host(q)?.state.status===`connected`&&dr(e)):(n.count+=1,clearTimeout(n.release),delete n.release);let r=!1;return()=>{if(r)return;r=!0;let t=X.get(e);t!==void 0&&(--t.count,!(t.count>0||e===K)&&(t.release=setTimeout(()=>{X.get(e)!==t||t.count>0||(X.delete(e),J?.unsubscribe(q,e).catch(()=>void 0))},lr)))}}async function pr(e){X.has(e)&&await dr(e)}async function mr(){let e=Y;if(e===void 0)return;let t=await Z(`listSessions`,{channel:K});e.set(Zn,cr(t.items));for(let n of t.items)e.set(G(n.resource),n.title===``?`Untitled`:n.title)}async function hr(e){let t=J;if(t===void 0)throw Error(`Not connected to the server.`);let n=await t.subscribe(q,e);return X.has(e)||t.unsubscribe(q,e).catch(()=>void 0),n.snapshot?.state}async function gr(e){let t=await Z(`resourceRead`,{channel:K,uri:e,encoding:`utf-8`});return{text:String(t.encoding)===`utf-8`?t.data:null,...t.contentType===void 0?{}:{contentType:t.contentType}}}async function _r(e,t){let n=await Z(`resourceRead`,{channel:K,uri:e,encoding:`base64`});if(String(n.encoding)!==`base64`)return new Blob([n.data],{type:t});let r=atob(n.data),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e);return new Blob([i],{type:t})}async function vr(e){return(await Z(`resourceResolve`,{channel:K,uri:e})).size}async function yr(e,t,n){await Z(`resourceWrite`,{channel:K,uri:e,data:t,encoding:`utf-8`,...n===void 0?{}:{ifMatch:n}})}async function br(e){return(await Z(`resourceResolve`,{channel:K,uri:e})).etag}async function xr(e){try{return(await Z(`resourceResolve`,{channel:K,uri:e})).type}catch{return null}}async function Sr(e){return await Z(`resourceRead`,{channel:K,uri:e,encoding:`base64`})}async function Cr(e,t,n,r=!1){await Z(`resourceWrite`,{channel:K,uri:e,data:t,encoding:n,...r?{createOnly:r}:{}})}async function wr(e){await Z(`resourceMkdir`,{channel:K,uri:e})}async function Tr(e,t){await Z(`resourceMove`,{channel:K,source:e,destination:t,failIfExists:!0})}async function Er(e,t){await Z(`resourceCopy`,{channel:K,source:e,destination:t,failIfExists:!0})}async function Dr(e,t){await Z(`resourceDelete`,{channel:K,uri:e,recursive:t})}function Or(e,t){J?.dispatch(q,e,t)}async function Z(e,t){let n=J?.client(q)?.rawClient();if(n===void 0)throw Error(`Not connected to the server.`);return n.request(e,t)}function kr(e,t,n){e.get(t)!==n&&e.set(t,n)}function Ar(e,t){let n=cr(t.aggregatedSessions().map(e=>e.summary));e.set(Zn,n);for(let t of n)kr(e,G(t.resource),t.title===``?`Untitled`:t.title);let r=yn(n.map(e=>e.status));kr(e,tr,r.unread),kr(e,nr,r.working);let i=t.host(q);e.set(Qn,i?.agents??[]),e.set($n,i?.defaultDirectory??null),e.set(er,i?.automations??null);for(let t of i?.terminals??[])kr(e,G(t.resource),t.title===``?`Terminal`:t.title);e.set(rr,i===void 0?null:{label:i.label,clientId:i.clientId,protocolVersion:i.protocolVersion,serverSeq:i.serverSeq,connectedAt:i.lastConnectedAt,activeSessions:i.activeSessions,terminals:i.terminals??[],subscriptions:i.subscriptions.length})}function jr(e){e.status!==`connected`&&Yn(),e.status===`failed`?B({scope:`connection`,level:`error`,text:`failed: ${e.error.message}`}):e.status===`reconnecting`?B({scope:`connection`,level:`warn`,text:`reconnecting (attempt ${e.attempt})`}):B({scope:`connection`,level:`info`,text:e.status})}async function Mr(e,t){let n=0;for await(let r of t.hostEvents()){if(r.type===`stateChanged`){let t=r.state;jr(t),e.set(U,{status:t.status,error:t.status===`failed`?t.error.message:r.lastError?.message??null,generation:n,...t.status===`reconnecting`?{attempt:t.attempt}:{}})}if(r.type===`connected`){n=r.generation,e.set(U,{status:`connected`,error:null,generation:n}),Ar(e,t);for(let e of X.keys())dr(e)}}}var Q=new Map,$=!1,Nr;function Pr(e,t){if(Nr=void 0,Y===e){for(let[t,n]of Q)e.set(t,n);Q.clear(),$&&($=!1,Ar(e,t))}}function Fr(e,t){Nr===void 0&&(Nr=document.hidden?window.setTimeout(()=>Pr(e,t),100):window.requestAnimationFrame(()=>Pr(e,t)))}async function Ir(e,t){for await(let n of t.events()){let r=n.event;if(r.type===`sessionAdded`||r.type===`sessionRemoved`||r.type===`sessionSummaryChanged`){$=!0,Fr(e,t);continue}if(r.type!==`action`)continue;let{channel:i,action:a}=r.params;i===K&&($=!0,Fr(e,t));let o=X.get(i);if(o===void 0)continue;let s=W(i),c=Q.has(s)?Q.get(s):e.get(s);if(c!==void 0)try{Q.set(s,o.reducer(c,a)),Fr(e,t)}catch{}}}async function Lr(){if(D!==void 0){let e=await D.host();return Rr=e.url,et.connect(cn(e.url,await D.token()))}return et.connect(sn(it()?null:nt(),window.location,!1))}var Rr=null;async function zr(e,t){try{await t.addHost({id:q,label:D===void 0?window.location.host:(await D.host()).name,transportFactory:async()=>an($t(Xn(await Lr())),t=>e.set(ir,t))})}catch(t){e.set(U,{status:`failed`,error:ur(t),generation:0})}}async function Br(){let e=J,t=Y;if(e!==void 0&&t!==void 0){if(e.host(q)===void 0){await zr(t,e);return}t.set(U,{...t.get(U),status:`connecting`}),await e.reconnectHost(q).catch(()=>void 0)}}var Vr;async function Hr(e){if(D===void 0||Rr===null)return;let t=await D.host().catch(()=>null);t!==null&&e.some(e=>e.id===t.id&&e.url!==Rr)&&await Br()}function Ur(){if(document.visibilityState!==`visible`)return;let e=J?.host(q)?.state.status;(e===void 0||e===`reconnecting`||e===`failed`||e===`disconnected`)&&Br()}var Wr={namespace:`ahp`,load:`eager`,provider:{async load(e){let t=new Pe;J=t,Y=e,e.set(U,{status:`connecting`,error:null,generation:0}),Mr(e,t),Ir(e,t),window.addEventListener(`online`,Ur),document.addEventListener(`visibilitychange`,Ur),D!==void 0&&(Vr=D.onHosts(e=>void Hr(e))),await zr(e,t)},async unload(e){window.removeEventListener(`online`,Ur),document.removeEventListener(`visibilitychange`,Ur),Vr?.(),Vr=void 0,Rr=null;let t=J;J=void 0,Y=void 0;for(let e of X.values())clearTimeout(e.release);X.clear(),Q.clear(),$=!1,e.clearNamespace(`ahp`),await t?.shutdown()}}};export{at as $,mr as A,Nn as B,Tr as C,gr as D,hr as E,yr as F,_n as G,Rn as H,Sn as I,gn as J,vn as K,xn as L,vr as M,G as N,Br as O,Cr as P,D as Q,kn as R,wr as S,_r as T,Fn as U,Ln as V,Mn as W,tn as X,hn as Y,qt as Z,Dr as _,ar as a,Re as at,fr as b,Zn as c,sr as d,nt as et,K as f,Er as g,W as h,$n as i,Ye as it,Z as j,pr as k,tr as l,or as m,er as n,$e as nt,rr as o,Se as ot,Wr as p,mn as q,U as r,Qe as rt,ir as s,me as st,Qn as t,rt as tt,nr as u,Or as v,Sr as w,xr as x,br as y,In as z};
@@ -1 +0,0 @@
1
- import{f as e,j as t}from"./data-CBWyZN_H.js";import{i as n}from"./words-T8-D0K4W.js";var r=e=>/^[a-z][a-z0-9+.-]*:\/\/(\/|\/[A-Za-z]:\/)?$/i.test(e)?e:e.replace(/\/+$/,``);function i(e,t,n=[],i=[]){let a=new Set(i.map(r)),o=new Set,s=[],c=(e,t)=>{if(e===void 0||e===``)return;let n=r(e);o.has(n)||(o.add(n),s.push({uri:n,isDefault:t,added:a.has(n)}))};c(e??void 0,!0);for(let e of t)c(e.workingDirectories?.[0],!1);for(let e of i)c(e,!1);for(let e of n)c(e,!1);return s}var a=(e,t)=>`${e}${e.endsWith(`/`)?``:`/`}${encodeURIComponent(t)}`;function o(e){return[...e.filter(e=>e.type===`directory`),...e.filter(e=>e.type!==`directory`)]}function s(e){try{return decodeURIComponent(r(e).replace(/^file:\/\//i,``))}catch{return r(e).replace(/^file:\/\//i,``)}}function c(e,t){let n=s(t),r=e.filter(e=>{let t=s(e);return n===t||n.startsWith(t.endsWith(`/`)?t:`${t}/`)}).sort((e,t)=>s(t).length-s(e).length)[0];if(r===void 0)return[`file://${n.split(`/`).map(encodeURIComponent).join(`/`)}`];let i=[r];for(let e of n.slice(s(r).length).split(`/`).filter(e=>e!==``))i.push(a(i[i.length-1]??r,e));return i}var l=`$/folders/added`,u=`ahpd-web.folders-added`;function d(e,t){let n=r(t);return e.some(e=>r(e)===n)?[...e]:[...e,n]}function f(e,t){let n=r(t);return e.filter(e=>r(e)!==n)}function p(){try{let e=JSON.parse(window.localStorage.getItem(`ahpd-web.folders-added`)??`[]`);return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}catch{return[]}}function m(e){try{window.localStorage.setItem(u,JSON.stringify(e))}catch{}}function h(e){let t=e.replace(/\\/g,`/`),n=t.lastIndexOf(`/`);return{dir:t.slice(0,n+1),part:t.slice(n+1)}}function g(e,t){return t===null||!(e===`~`||e.startsWith(`~/`))?e:`${t}${e===`~`?`/`:e.slice(1)}`}function _(e){let t=e.replace(/\/+$/,``);return t===``||/^[A-Za-z]:$/.test(t)?null:t.slice(0,t.lastIndexOf(`/`)+1)||`/`}async function v(r){return(await t(`resourceList`,{channel:e,uri:n(r)})).entries.filter(e=>e.type===`directory`).map(e=>e.name).sort((e,t)=>e.localeCompare(t,void 0,{sensitivity:`base`}))}export{l as a,f as c,c as d,a as f,h as i,m as l,i as m,g as n,p as o,o as p,_ as r,d as s,v as t,r as u};