@starlove/orbit 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +10 -8
- package/README.md +146 -164
- package/dist/full/csp.txt +1 -0
- package/dist/full/fonts/JetBrains_Mono/JetBrainsMono-subset.woff2 +0 -0
- package/dist/full/fonts/JetBrains_Mono/README.txt +5 -0
- package/dist/full/fonts/Mona_Sans/MonaSans-subset.woff2 +0 -0
- package/{public/fonts/Open_Sans → dist/full/fonts/Mona_Sans}/OFL.txt +93 -93
- package/dist/full/fonts/Mona_Sans/README.txt +10 -0
- package/{public/fonts/JetBrains_Mono → dist/full/fonts/Newsreader}/OFL.txt +93 -93
- package/dist/full/fonts/Newsreader/README.txt +8 -0
- package/dist/full/fonts/Newsreader/newsreader.woff2 +0 -0
- package/dist/full/index.html +36 -653
- package/dist/full/js/app.BmuponPJ.js +32 -0
- package/dist/full/js/app.BmuponPJ.js.map +1 -0
- package/dist/full/js/chunk.1fJGQGbW.js +2 -0
- package/dist/full/js/chunk.1fJGQGbW.js.map +1 -0
- package/dist/full/js/chunk.5D7JO2zp.js +2 -0
- package/dist/full/js/chunk.5D7JO2zp.js.map +1 -0
- package/dist/full/js/chunk.BrNn_D79.js +2 -0
- package/dist/full/js/chunk.BrNn_D79.js.map +1 -0
- package/dist/full/js/chunk.CokJXIqM.js +2 -0
- package/dist/full/js/chunk.CokJXIqM.js.map +1 -0
- package/dist/full/js/chunk.D_Haqy6R.js +2 -0
- package/dist/full/js/chunk.D_Haqy6R.js.map +1 -0
- package/dist/full/js/chunk.RO0jsH6I.js +15 -0
- package/dist/full/js/chunk.RO0jsH6I.js.map +1 -0
- package/dist/full/js/chunk.dqWOEtBM.js +2 -0
- package/dist/full/js/chunk.dqWOEtBM.js.map +1 -0
- package/dist/full/js/warm.f260bbbc.js +15 -0
- package/dist/full/orbits-favicon.png +0 -0
- package/dist/full/orbits-logo-bg-wide.png +0 -0
- package/dist/full/orbits-logo-bg.png +0 -0
- package/dist/full/orbits-logo.png +0 -0
- package/dist/full/styles.2b154ffe.css +1 -0
- package/dist/full/vendor/starlove-ui/theme-init.js +66 -0
- package/dist/full/version.json +2 -2
- package/docs/AGENT_GUIDE.md +114 -0
- package/docs/UPDATING.md +249 -64
- package/lib/adapters/indexeddb/blobs.d.ts +3 -0
- package/lib/adapters/indexeddb/blobs.js +54 -0
- package/lib/adapters/indexeddb/database.d.ts +60 -0
- package/lib/adapters/indexeddb/database.js +126 -0
- package/lib/adapters/indexeddb/index.d.ts +5 -0
- package/lib/adapters/indexeddb/index.js +3 -0
- package/lib/adapters/indexeddb/locks.d.ts +14 -0
- package/lib/adapters/indexeddb/locks.js +40 -0
- package/lib/adapters/indexeddb/store.d.ts +40 -0
- package/lib/adapters/indexeddb/store.js +424 -0
- package/lib/adapters/indexeddb/tables.d.ts +43 -0
- package/lib/adapters/indexeddb/tables.js +127 -0
- package/lib/adapters/memory/blobs.d.ts +3 -0
- package/lib/adapters/memory/blobs.js +44 -0
- package/lib/adapters/memory/board.d.ts +41 -0
- package/lib/adapters/memory/board.js +521 -0
- package/lib/adapters/memory/index.d.ts +2 -0
- package/lib/adapters/memory/index.js +2 -0
- package/lib/adapters/memory/search.d.ts +6 -0
- package/lib/adapters/memory/search.js +30 -0
- package/lib/adapters/memory/store.d.ts +34 -0
- package/lib/adapters/memory/store.js +266 -0
- package/lib/adapters/sqlite/backups.d.ts +53 -0
- package/lib/adapters/sqlite/backups.js +232 -0
- package/lib/adapters/sqlite/blobs.d.ts +14 -0
- package/lib/adapters/sqlite/blobs.js +109 -0
- package/lib/adapters/sqlite/board.d.ts +77 -0
- package/lib/adapters/sqlite/board.js +328 -0
- package/lib/adapters/sqlite/database.d.ts +67 -0
- package/lib/adapters/sqlite/database.js +285 -0
- package/lib/adapters/sqlite/index.d.ts +3 -0
- package/lib/adapters/sqlite/index.js +2 -0
- package/lib/adapters/sqlite/lock.d.ts +11 -0
- package/lib/adapters/sqlite/lock.js +34 -0
- package/lib/adapters/sqlite/records.d.ts +54 -0
- package/lib/adapters/sqlite/records.js +546 -0
- package/lib/adapters/sqlite/schema.d.ts +54 -0
- package/lib/adapters/sqlite/schema.js +276 -0
- package/lib/adapters/sqlite/store.d.ts +39 -0
- package/lib/adapters/sqlite/store.js +385 -0
- package/lib/browser/in-page.d.ts +31 -0
- package/lib/browser/in-page.js +46 -0
- package/lib/browser/old-preview.d.ts +13 -0
- package/lib/browser/old-preview.js +80 -0
- package/lib/browser/preview-board.d.ts +8 -0
- package/lib/browser/preview-board.js +69 -0
- package/lib/cli/main.d.ts +7 -0
- package/lib/cli/main.js +343 -0
- package/lib/cli/orbit.d.ts +8 -0
- package/lib/cli/orbit.js +25 -0
- package/lib/client/http.d.ts +38 -0
- package/lib/client/http.js +334 -0
- package/lib/client/local.d.ts +26 -0
- package/lib/client/local.js +190 -0
- package/lib/client/object-url.d.ts +8 -0
- package/lib/client/object-url.js +21 -0
- package/lib/client/types.d.ts +268 -0
- package/lib/client/types.js +8 -0
- package/lib/commands/agent-tools.d.ts +31 -0
- package/lib/commands/agent-tools.js +100 -0
- package/lib/commands/index.d.ts +56 -0
- package/lib/commands/index.js +298 -0
- package/lib/commands/parse.d.ts +73 -0
- package/lib/commands/parse.js +231 -0
- package/lib/commands/present.d.ts +134 -0
- package/lib/commands/present.js +198 -0
- package/lib/commands/session.d.ts +85 -0
- package/lib/commands/session.js +138 -0
- package/lib/commands/verbs.d.ts +35 -0
- package/lib/commands/verbs.js +842 -0
- package/lib/core/actors.d.ts +18 -0
- package/lib/core/actors.js +45 -0
- package/lib/core/agent.d.ts +128 -0
- package/lib/core/agent.js +323 -0
- package/lib/core/boards.d.ts +113 -0
- package/lib/core/boards.js +288 -0
- package/lib/core/bootstrap.d.ts +47 -0
- package/lib/core/bootstrap.js +100 -0
- package/lib/core/bytes.d.ts +10 -0
- package/lib/core/bytes.js +52 -0
- package/lib/core/card-paths.d.ts +25 -0
- package/lib/core/card-paths.js +44 -0
- package/lib/core/context.d.ts +60 -0
- package/lib/core/context.js +42 -0
- package/lib/core/cross-board.d.ts +81 -0
- package/lib/core/cross-board.js +228 -0
- package/lib/core/describe.d.ts +21 -0
- package/lib/core/describe.js +81 -0
- package/lib/core/errors.d.ts +159 -0
- package/lib/core/errors.js +160 -0
- package/lib/core/files.d.ts +79 -0
- package/lib/core/files.js +262 -0
- package/lib/core/history.d.ts +20 -0
- package/lib/core/history.js +53 -0
- package/lib/core/image-types.d.ts +16 -0
- package/lib/core/image-types.js +36 -0
- package/lib/core/model.d.ts +263 -0
- package/lib/core/model.js +34 -0
- package/lib/core/nebula-link.d.ts +14 -0
- package/lib/core/nebula-link.js +39 -0
- package/lib/core/relations.d.ts +58 -0
- package/lib/core/relations.js +112 -0
- package/lib/core/search.d.ts +38 -0
- package/lib/core/search.js +92 -0
- package/lib/core/sessions.d.ts +44 -0
- package/lib/core/sessions.js +158 -0
- package/lib/core/snapshot-schema.d.ts +295 -0
- package/lib/core/snapshot-schema.js +82 -0
- package/lib/core/snapshots.d.ts +75 -0
- package/lib/core/snapshots.js +409 -0
- package/lib/core/states.d.ts +25 -0
- package/lib/core/states.js +126 -0
- package/lib/core/text.d.ts +40 -0
- package/lib/core/text.js +113 -0
- package/lib/core/tickets.d.ts +69 -0
- package/lib/core/tickets.js +311 -0
- package/lib/core/trello.d.ts +17 -0
- package/lib/core/trello.js +269 -0
- package/lib/core/verdicts.d.ts +28 -0
- package/lib/core/verdicts.js +92 -0
- package/lib/core/views.d.ts +95 -0
- package/lib/core/views.js +186 -0
- package/lib/http/app.d.ts +46 -0
- package/lib/http/app.js +491 -0
- package/lib/mcp-server.d.ts +10 -0
- package/lib/mcp-server.js +120 -0
- package/lib/node/assets.d.ts +7 -0
- package/lib/node/assets.js +68 -0
- package/lib/node/data-folder.d.ts +21 -0
- package/lib/node/data-folder.js +34 -0
- package/lib/node/env.d.ts +38 -0
- package/lib/node/env.js +49 -0
- package/lib/node/host-check.d.ts +24 -0
- package/lib/node/host-check.js +53 -0
- package/lib/node/host-services.d.ts +9 -0
- package/lib/node/host-services.js +150 -0
- package/lib/node/local.d.ts +22 -0
- package/lib/node/local.js +61 -0
- package/lib/node/migrate.d.ts +53 -0
- package/lib/node/migrate.js +635 -0
- package/lib/node/package.d.ts +7 -0
- package/lib/node/package.js +14 -0
- package/lib/node/repo-board.d.ts +49 -0
- package/lib/node/repo-board.js +245 -0
- package/lib/node/serve.d.ts +8 -0
- package/lib/node/serve.js +106 -0
- package/lib/orbit.d.ts +47 -0
- package/lib/orbit.js +44 -0
- package/lib/quiet-sqlite-warning.d.ts +1 -0
- package/lib/quiet-sqlite-warning.js +18 -0
- package/lib/store/blob-path.d.ts +6 -0
- package/lib/store/blob-path.js +12 -0
- package/lib/store/conformance.d.ts +52 -0
- package/lib/store/conformance.js +1449 -0
- package/lib/store/search-words.d.ts +10 -0
- package/lib/store/search-words.js +19 -0
- package/lib/store/types.d.ts +452 -0
- package/lib/store/types.js +34 -0
- package/llms.txt +63 -0
- package/package.json +109 -25
- package/src/cli/orbit.js +11 -658
- package/src/mcp-server.js +16 -876
- package/SKILL-ORBIT.md +0 -151
- package/build.mjs +0 -210
- package/dist/full/js/app.62905fcb.js +0 -952
- package/dist/full/js/app.62905fcb.js.map +0 -7
- package/dist/full/styles.4e60d824.css +0 -1
- package/docs/AGENT_PROTOCOL.md +0 -424
- package/docs/MCP_SETUP.md +0 -54
- package/docs/ORBIT_DISPATCH.md +0 -280
- package/docs/SS-Orbit-Dark.png +0 -0
- package/docs/SS-Orbit-Light.png +0 -0
- package/docs/mcp-client.example.json +0 -13
- package/docs/setup/orbit-init-wizard.md +0 -174
- package/public/apple-touch-icon.png +0 -0
- package/public/cursors/live_arrow.cur +0 -0
- package/public/cursors/live_link.cur +0 -0
- package/public/cursors/live_move.cur +0 -0
- package/public/cursors/live_select.cur +0 -0
- package/public/cursors/live_unavail.cur +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-Bold.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-BoldItalic.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-Italic.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-Light.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-LightItalic.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-Medium.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-MediumItalic.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-Regular.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-SemiBold.ttf +0 -0
- package/public/fonts/Chakra_Petch/ChakraPetch-SemiBoldItalic.ttf +0 -0
- package/public/fonts/Chakra_Petch/OFL.txt +0 -93
- package/public/fonts/Inter/Inter-Italic-VariableFont_opsz,wght.ttf +0 -0
- package/public/fonts/Inter/Inter-VariableFont_opsz,wght.ttf +0 -0
- package/public/fonts/Inter/OFL.txt +0 -93
- package/public/fonts/Inter/README.txt +0 -118
- package/public/fonts/JetBrains_Mono/JetBrainsMono-Italic-VariableFont_wght.ttf +0 -0
- package/public/fonts/JetBrains_Mono/JetBrainsMono-VariableFont_wght.ttf +0 -0
- package/public/fonts/JetBrains_Mono/README.txt +0 -79
- package/public/fonts/OpenRing-Regular.ttf +0 -0
- package/public/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
- package/public/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
- package/public/fonts/Open_Sans/README.txt +0 -100
- package/public/fonts/Orbitron/OFL.txt +0 -93
- package/public/fonts/Orbitron/Orbitron-VariableFont_wght.ttf +0 -0
- package/public/fonts/Orbitron/README.txt +0 -68
- package/public/fonts/Rajdhani/OFL.txt +0 -93
- package/public/fonts/Rajdhani/Rajdhani-Bold.ttf +0 -0
- package/public/fonts/Rajdhani/Rajdhani-Light.ttf +0 -0
- package/public/fonts/Rajdhani/Rajdhani-Medium.ttf +0 -0
- package/public/fonts/Rajdhani/Rajdhani-Regular.ttf +0 -0
- package/public/fonts/Rajdhani/Rajdhani-SemiBold.ttf +0 -0
- package/public/fonts/runescape-uf.ttf +0 -0
- package/public/index.html +0 -769
- package/public/js/actor-labels.js +0 -65
- package/public/js/api.js +0 -39
- package/public/js/app.js +0 -45
- package/public/js/artifact-drawer.js +0 -79
- package/public/js/board-export.js +0 -161
- package/public/js/board-menu.js +0 -374
- package/public/js/card-actions.js +0 -545
- package/public/js/config.js +0 -20
- package/public/js/create-card.js +0 -190
- package/public/js/dom.js +0 -19
- package/public/js/drawer.js +0 -273
- package/public/js/font-preference.js +0 -229
- package/public/js/format.js +0 -433
- package/public/js/help-menu.js +0 -31
- package/public/js/icons.js +0 -16
- package/public/js/kanban.js +0 -694
- package/public/js/local-backend.js +0 -1015
- package/public/js/main.js +0 -161
- package/public/js/modal.js +0 -33
- package/public/js/motion-preference.js +0 -64
- package/public/js/panel.js +0 -58
- package/public/js/router.js +0 -134
- package/public/js/search.js +0 -56
- package/public/js/settings-tabs.js +0 -7
- package/public/js/settings.js +0 -1634
- package/public/js/sse.js +0 -159
- package/public/js/starscape.js +0 -332
- package/public/js/state.js +0 -129
- package/public/js/text-editing.js +0 -128
- package/public/js/theme-preference.js +0 -95
- package/public/js/ticket-detail.js +0 -1516
- package/public/js/ticket-typeahead.js +0 -49
- package/public/js/toast.js +0 -89
- package/public/js/topbar-notes.js +0 -155
- package/public/js/transport.js +0 -22
- package/public/js/typeahead.js +0 -206
- package/public/js/unread.js +0 -121
- package/public/js/update-check.js +0 -58
- package/public/js/url-routes.js +0 -94
- package/public/orbits-favicon.png +0 -0
- package/public/orbits-logo-bg-wide.png +0 -0
- package/public/orbits-logo-bg.png +0 -0
- package/public/orbits-logo.png +0 -0
- package/public/styles.css +0 -7709
- package/src/core/agent.js +0 -387
- package/src/core/agents-md.js +0 -109
- package/src/core/artifacts.js +0 -149
- package/src/core/attachments.js +0 -238
- package/src/core/auth.js +0 -85
- package/src/core/backups.js +0 -142
- package/src/core/board.js +0 -148
- package/src/core/boards.js +0 -409
- package/src/core/bootstrap.js +0 -170
- package/src/core/css-bundle.js +0 -30
- package/src/core/db.js +0 -315
- package/src/core/delete-board.js +0 -163
- package/src/core/dispatch.js +0 -1007
- package/src/core/events.js +0 -314
- package/src/core/http.js +0 -115
- package/src/core/migrate.js +0 -198
- package/src/core/paths.js +0 -55
- package/src/core/provision-repo-board.js +0 -119
- package/src/core/queries.js +0 -246
- package/src/core/registry.js +0 -211
- package/src/core/relations.js +0 -163
- package/src/core/review-verdicts.js +0 -138
- package/src/core/router.js +0 -556
- package/src/core/search.js +0 -183
- package/src/core/seed.js +0 -234
- package/src/core/snapshots.js +0 -692
- package/src/core/states.js +0 -167
- package/src/core/system-picker.js +0 -109
- package/src/core/tickets.js +0 -400
- package/src/core/util.js +0 -106
- package/src/core/version-check.js +0 -154
- package/src/mcp/orbit-client.js +0 -287
- package/src/server.js +0 -115
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,n as t,r as n,t as r}from"./chunk.D_Haqy6R.js";import{Q as i}from"./app.BmuponPJ.js";var a=e(n(),1),o=t(),s=r(),c={x:[`M6 6l12 12M18 6L6 18`],pin:[`M9 4h6l-1 6 4 4H6l4-4z`,`M12 14v6`],out:[`M8 16L16 8M10 8h6v6`],up:[`M12 18V6M7 11l5-5 5 5`],down:[`M12 6v12M7 13l5 5 5-5`],left:[`M18 12H6M11 7l-5 5 5 5`],right:[`M6 12h12M13 7l5 5-5 5`]},l=[9,15].flatMap(e=>[7,12,17].map(t=>({cx:e,cy:t})));function u(e){let t=(0,o.c)(5),{name:n}=e,r=`qm-i qm-i--${n}`,i;t[0]===n?i=t[1]:(i=n===`grip`?l.map(f):c[n].map(d),t[0]=n,t[1]=i);let a;return t[2]!==r||t[3]!==i?(a=(0,s.jsx)(`svg`,{className:r,viewBox:`0 0 24 24`,"aria-hidden":`true`,focusable:`false`,children:i}),t[2]=r,t[3]=i,t[4]=a):a=t[4],a}function d(e){return(0,s.jsx)(`path`,{d:e},e)}function f(e){let{cx:t,cy:n}=e;return(0,s.jsx)(`circle`,{cx:t,cy:n,r:1.4},`${t}-${n}`)}var p=(0,a.createContext)(null);function m(){let e=(0,a.useContext)(p);if(!e)throw Error(`A quick menu part is drawn outside QuickMenuCard.`);return e}var h={sessions:`Sessions`,pinned:`Pinned`,recent:`Recent`,nebula:`Nebula`},g={waiting:`Waiting for you`,working:`Working now`,finished:`Finished`},_=[`waiting`,`working`,`finished`],v=3e4,y=5e3;function b(e,t=Date.now()){let n=Math.floor((t-Date.parse(e))/6e4);if(!Number.isFinite(n)||n<1)return`just now`;if(n<60)return`${n} min ago`;let r=Math.floor(n/60);if(r<24)return r===1?`1 hour ago`:`${r} hours ago`;let i=Math.floor(r/24);return i===1?`1 day ago`:`${i} days ago`}var x=e=>e.unnamed?`Unnamed agent`:e.agent,S=e=>(e??``).replace(/ -> /g,`\xA0→ `),C=e=>e.reason===`ask`&&e.detail?`\u201c${e.detail}\u201d`:e.detail||``;function w(){return matchMedia(`(max-width: 639px)`).matches?`phone`:matchMedia(`(min-width: 1000px)`).matches?`three`:`two`}var T={type:`button`,"data-variant":`qm`,"data-no-arc":``},E=e=>e;function D(e){let t=(0,o.c)(3),{name:n,words:r}=e,i;return t[0]!==n||t[1]!==r?(i=(0,s.jsx)(`p`,{"data-k":n,className:`qm-empty`,children:r}),t[0]=n,t[1]=r,t[2]=i):i=t[2],i}function O(e){let t=(0,o.c)(66),{section:n,phone:r}=e,{view:i,actions:a,drag:c}=m(),l=h[n.id],d,f;if(t[0]!==i.sections||t[1]!==n.column||t[2]!==n.id){let e;t[5]===n.column?e=t[6]:(e=e=>e.column===n.column,t[5]=n.column,t[6]=e),d=i.sections.filter(e);let r;t[7]===n.id?r=t[8]:(r=e=>e.id===n.id,t[7]=n.id,t[8]=r),f=d.findIndex(r),t[0]=i.sections,t[1]=n.column,t[2]=n.id,t[3]=d,t[4]=f}else d=t[3],f=t[4];let p=f,g=r?`tab`:`column`,_;t[9]!==a||t[10]!==n.id?(_=(e,t,r,i)=>(0,s.jsx)(`button`,{...T,className:`qm-icon-btn`,"data-act":`move-${e}`,"data-id":n.id,"data-fk":`${t}-${n.id}`,"aria-label":r,disabled:i,onClick:()=>a.moveSection(n.id,e),children:(0,s.jsx)(u,{name:e})}),t[9]=a,t[10]=n.id,t[11]=_):_=t[11];let v=_,y=`edit-${n.id}`,b=n.visible?`qm-edit-item`:`qm-edit-item is-hidden`,x=n.id,S=String(n.column),C;t[12]!==c||t[13]!==n.id?(C=e=>c.gripDown(e,n.id),t[12]=c,t[13]=n.id,t[14]=C):C=t[14];let w;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,s.jsx)(u,{name:`grip`}),t[15]=w):w=t[15];let E;t[16]!==C||t[17]!==n.id?(E=(0,s.jsx)(`span`,{className:`qm-grip`,"data-grip":n.id,title:`Drag to move`,"aria-hidden":`true`,onPointerDown:C,children:w}),t[16]=C,t[17]=n.id,t[18]=E):E=t[18];let D;t[19]===l?D=t[20]:(D=(0,s.jsx)(`span`,{className:`qm-edit-title`,children:l}),t[19]=l,t[20]=D);let O;t[21]===n.visible?O=t[22]:(O=(0,s.jsx)(`span`,{className:`qm-edit-hidden`,hidden:n.visible,children:`hidden`}),t[21]=n.visible,t[22]=O);let k;t[23]!==D||t[24]!==O?(k=(0,s.jsxs)(`span`,{className:`qm-edit-name`,children:[D,O]}),t[23]=D,t[24]=O,t[25]=k):k=t[25];let A=`Move ${l} to the ${g} on the left`,j=n.column<=1,M;t[26]!==v||t[27]!==A||t[28]!==j?(M=v(`left`,`ml`,A,j),t[26]=v,t[27]=A,t[28]=j,t[29]=M):M=t[29];let N=`Move ${l} up`,P=p<=0,F;t[30]!==v||t[31]!==N||t[32]!==P?(F=v(`up`,`mu`,N,P),t[30]=v,t[31]=N,t[32]=P,t[33]=F):F=t[33];let I=`Move ${l} down`,L=p>=d.length-1,R;t[34]!==v||t[35]!==I||t[36]!==L?(R=v(`down`,`md`,I,L),t[34]=v,t[35]=I,t[36]=L,t[37]=R):R=t[37];let z=`Move ${l} to the ${g} on the right`,B=n.column>=3,V;t[38]!==v||t[39]!==z||t[40]!==B?(V=v(`right`,`mr`,z,B),t[38]=v,t[39]=z,t[40]=B,t[41]=V):V=t[41];let H=`vis-${n.id}`,U=`Show ${l}`,W;t[42]!==a||t[43]!==n.id?(W=()=>a.toggleVisible(n.id),t[42]=a,t[43]=n.id,t[44]=W):W=t[44];let G;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,s.jsx)(`span`,{className:`qm-switch-knob`,"aria-hidden":`true`}),t[45]=G):G=t[45];let K;t[46]!==H||t[47]!==U||t[48]!==W||t[49]!==n.id||t[50]!==n.visible?(K=(0,s.jsx)(`button`,{...T,className:`qm-switch`,role:`switch`,"data-act":`toggle-visible`,"data-id":n.id,"data-fk":H,"aria-label":U,"aria-checked":n.visible,onClick:W,children:G}),t[46]=H,t[47]=U,t[48]=W,t[49]=n.id,t[50]=n.visible,t[51]=K):K=t[51];let q;t[52]!==M||t[53]!==F||t[54]!==R||t[55]!==V||t[56]!==K?(q=(0,s.jsxs)(`span`,{className:`qm-edit-ctrls`,children:[M,F,R,V,K]}),t[52]=M,t[53]=F,t[54]=R,t[55]=V,t[56]=K,t[57]=q):q=t[57];let J;return t[58]!==k||t[59]!==y||t[60]!==q||t[61]!==b||t[62]!==S||t[63]!==E||t[64]!==n.id?(J=(0,s.jsxs)(`li`,{"data-k":y,className:b,"data-sec":x,"data-col":S,children:[E,k,q]}),t[58]=k,t[59]=y,t[60]=q,t[61]=b,t[62]=S,t[63]=E,t[64]=n.id,t[65]=J):J=t[65],J}function k(){let e=(0,o.c)(16),{s:t,view:n}=m(),r=n.mode===`phone`,i=r?`Move sections with the arrows; the switch shows or hides one.`:`Drag a section by its handle, or use the arrows. The switch shows or hides one.`,a=t.writable?`Your arrangement follows you between Orbit and Nebula once you sign in.`:`A newer Orbit or Nebula saved this arrangement, so changes here last until you reload.`,c;e[0]!==i||e[1]!==a?(c=[i,a],e[0]=i,e[1]=a,e[2]=c):c=e[2];let l=c.join(` `),u=r?`edit-cols-stacked`:`edit-cols`,d;e[3]===l?d=e[4]:(d=(0,s.jsx)(`p`,{"data-k":`edit-hint`,className:`qm-edit-hint`,children:l}),e[3]=l,e[4]=d);let f=r?`qm-edit-cols is-stacked`:`qm-edit-cols`,p;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(p=[1,2,3],e[5]=p):p=e[5];let h;e[6]!==r||e[7]!==n.sections?(h=p.map(e=>{let t=n.sections.filter(t=>t.column===e);return(0,s.jsxs)(`div`,{"data-k":`editcol-${e}`,className:`qm-edit-col`,children:[(0,s.jsx)(`h4`,{className:`qm-group-title`,children:`${r?`Tab`:`Column`} ${e}`}),(0,s.jsx)(`ul`,{className:`qm-edit-list`,role:`list`,"data-col":String(e),children:t.length?t.map(e=>(0,s.jsx)(O,{section:e,phone:r},`edit-${e.id}`)):(0,s.jsx)(`li`,{"data-k":`edit-empty-${e}`,className:`qm-edit-empty`,children:`Empty`},`edit-empty-${e}`)})]},`editcol-${e}`)}),e[6]=r,e[7]=n.sections,e[8]=h):h=e[8];let g;e[9]!==f||e[10]!==h||e[11]!==u?(g=(0,s.jsx)(`div`,{"data-k":u,className:f,children:h},u),e[9]=f,e[10]=h,e[11]=u,e[12]=g):g=e[12];let _;return e[13]!==d||e[14]!==g?(_=(0,s.jsxs)(`div`,{"data-k":`edit-body`,className:`qm-scroll`,children:[d,g]},`edit-body`),e[13]=d,e[14]=g,e[15]=_):_=e[15],_}function A(e){let t=(0,o.c)(64),{board:n}=e,{s:r,view:i,adapter:a,actions:c}=m(),l=`board-${n.id}`,d;t[0]!==n||t[1]!==i?(d=i.activity(n),t[0]=n,t[1]=i,t[2]=d):d=t[2];let f=d,p;t[3]!==n||t[4]!==i?(p=i.isPinned(n),t[3]=n,t[4]=i,t[5]=p):p=t[5];let h=p,g=`board-open-${n.id}`,_;t[6]!==a||t[7]!==n?(_=a.boardHref(n),t[6]=a,t[7]=n,t[8]=_):_=t[8];let v=n.id,y;t[9]!==c||t[10]!==n?(y=e=>c.openBoard(e,n),t[9]=c,t[10]=n,t[11]=y):y=t[11];let x;t[12]===n.colour?x=t[13]:(x=E({"--c":n.colour}),t[12]=n.colour,t[13]=x);let S=!f,C=f?.state,w;t[14]!==S||t[15]!==C?(w=(0,s.jsx)(`span`,{className:`qm-sat qm-sat--planet`,hidden:S,"data-state":C}),t[14]=S,t[15]=C,t[16]=w):w=t[16];let D;t[17]!==w||t[18]!==x?(D=(0,s.jsx)(`span`,{className:`qm-planet`,"aria-hidden":`true`,style:x,children:w}),t[17]=w,t[18]=x,t[19]=D):D=t[19];let O;t[20]===n.name?O=t[21]:(O=(0,s.jsx)(`span`,{className:`qm-board-title`,children:n.name}),t[20]=n.name,t[21]=O);let k=n.id!==a.currentBoardId,A;t[22]===k?A=t[23]:(A=(0,s.jsx)(`span`,{className:`qm-here-tag`,hidden:k,children:`Here`}),t[22]=k,t[23]=A);let j;t[24]!==O||t[25]!==A?(j=(0,s.jsxs)(`span`,{className:`qm-board-name`,children:[O,A]}),t[24]=O,t[25]=A,t[26]=j):j=t[26];let M=`${a.placeLabel} \u00b7 `,N;t[27]===M?N=t[28]:(N=(0,s.jsx)(`span`,{className:`qm-board-place`,children:M}),t[27]=M,t[28]=N);let P=f?.state,F;t[29]!==n.lastActiveAt||t[30]!==f||t[31]!==r?(F=f?f.words:n.lastActiveAt?`active ${b(n.lastActiveAt,r.now)}`:`not opened yet`,t[29]=n.lastActiveAt,t[30]=f,t[31]=r,t[32]=F):F=t[32];let I;t[33]!==P||t[34]!==F?(I=(0,s.jsx)(`span`,{className:`qm-activity`,"data-state":P,children:F}),t[33]=P,t[34]=F,t[35]=I):I=t[35];let L;t[36]!==N||t[37]!==I?(L=(0,s.jsxs)(`span`,{className:`qm-board-meta`,children:[N,I]}),t[36]=N,t[37]=I,t[38]=L):L=t[38];let R;t[39]!==j||t[40]!==L?(R=(0,s.jsxs)(`span`,{className:`qm-board-text`,children:[j,L]}),t[39]=j,t[40]=L,t[41]=R):R=t[41];let z;t[42]!==n.id||t[43]!==D||t[44]!==R||t[45]!==g||t[46]!==_||t[47]!==y?(z=(0,s.jsxs)(`a`,{className:`qm-board-main`,"data-act":`open-board`,"data-fk":g,href:_,"data-id":v,onClick:y,children:[D,R]}),t[42]=n.id,t[43]=D,t[44]=R,t[45]=g,t[46]=_,t[47]=y,t[48]=z):z=t[48];let B=`pin-${n.id}`,V=`Pin ${n.name}`,H=h?`Unpin`:`Pin`,U;t[49]!==c||t[50]!==n?(U=()=>c.pin(n),t[49]=c,t[50]=n,t[51]=U):U=t[51];let W;t[52]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,s.jsx)(u,{name:`pin`}),t[52]=W):W=t[52];let G;t[53]!==n.id||t[54]!==h||t[55]!==B||t[56]!==V||t[57]!==H||t[58]!==U?(G=(0,s.jsx)(`button`,{...T,className:`qm-icon-btn qm-pin`,"data-act":`pin`,"data-fk":B,"data-id":n.id,"aria-pressed":h,"aria-label":V,title:H,onClick:U,children:W}),t[53]=n.id,t[54]=h,t[55]=B,t[56]=V,t[57]=H,t[58]=U,t[59]=G):G=t[59];let K;return t[60]!==l||t[61]!==z||t[62]!==G?(K=(0,s.jsxs)(`li`,{"data-k":l,className:`qm-board`,children:[z,G]}),t[60]=l,t[61]=z,t[62]=G,t[63]=K):K=t[63],K}function j(e){let t=(0,o.c)(5),{name:n,boards:r}=e,i;t[0]===r?i=t[1]:(i=r.map(M),t[0]=r,t[1]=i);let a;return t[2]!==n||t[3]!==i?(a=(0,s.jsx)(`ul`,{"data-k":n,className:`qm-list`,role:`list`,children:i}),t[2]=n,t[3]=i,t[4]=a):a=t[4],a}function M(e){return(0,s.jsx)(A,{board:e},`board-${e.id}`)}function N(){let e=(0,o.c)(5),{s:t,view:n}=m();if(n.pinnedBoards.length){let t;return e[0]===n.pinnedBoards?t=e[1]:(t=(0,s.jsx)(j,{name:`list-pinned`,boards:n.pinnedBoards},`list-pinned`),e[0]=n.pinnedBoards,e[1]=t),t}if(!t.loaded){let t;return e[2]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,s.jsx)(D,{name:`empty-pinned`,words:`Looking for your boards.`},`empty-pinned`),e[2]=t):t=e[2],t}let r=t.boards.length?`Nothing pinned yet. Pin a board in Recent with its pin, and it stays here.`:`Nothing pinned yet. Create a board, then pin it here.`,i;return e[3]===r?i=e[4]:(i=(0,s.jsx)(D,{name:`empty-pinned`,words:r},`empty-pinned`),e[3]=r,e[4]=i),i}function P(){let e=(0,o.c)(5),{s:t,view:n}=m();if(n.recentBoards.length){let t;return e[0]===n.recentBoards?t=e[1]:(t=(0,s.jsx)(j,{name:`list-recent`,boards:n.recentBoards},`list-recent`),e[0]=n.recentBoards,e[1]=t),t}if(!t.loaded){let t;return e[2]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,s.jsx)(D,{name:`empty-recent`,words:`Looking for your boards.`},`empty-recent`),e[2]=t):t=e[2],t}let r=t.boards.length?`Every board is pinned.`:`No boards yet. Create one from the Board menu and it shows here, last active first.`,i;return e[3]===r?i=e[4]:(i=(0,s.jsx)(D,{name:`empty-recent`,words:r},`empty-recent`),e[3]=r,e[4]=i),i}function F(e){let t=(0,o.c)(70),{session:n}=e,{s:r,view:i,adapter:a,actions:c,swipe:l}=m(),d=`ses-${n.id}`,f=n.id,p=n.state,h;t[0]!==l||t[1]!==n.id?(h=e=>l.down(e,n.id),t[0]=l,t[1]=n.id,t[2]=h):h=t[2];let g=l.move,_=l.end,v=l.cancel,y;t[3]===n.state?y=t[4]:(y=(0,s.jsx)(`span`,{className:`qm-sat`,"aria-hidden":`true`,"data-state":n.state}),t[3]=n.state,t[4]=y);let w=`ses-open-${n.id}`,D;t[5]!==a||t[6]!==n?(D=a.sessionHref(n),t[5]=a,t[6]=n,t[7]=D):D=t[7];let O=n.id,k;t[8]!==c||t[9]!==n?(k=e=>c.openSession(e,n),t[8]=c,t[9]=n,t[10]=k):k=t[10];let A;t[11]===n?A=t[12]:(A=x(n),t[11]=n,t[12]=A);let j;t[13]===A?j=t[14]:(j=(0,s.jsx)(`strong`,{className:`qm-ses-agent`,children:A}),t[13]=A,t[14]=j);let M;t[15]===n.what?M=t[16]:(M=S(n.what),t[15]=n.what,t[16]=M);let N;t[17]===M?N=t[18]:(N=(0,s.jsx)(`span`,{className:`qm-ses-what`,children:M}),t[17]=M,t[18]=N);let P;t[19]!==j||t[20]!==N?(P=(0,s.jsxs)(`span`,{className:`qm-ses-line`,children:[j,` `,N]}),t[19]=j,t[20]=N,t[21]=P):P=t[21];let F=!n.detail,I;t[22]===n?I=t[23]:(I=C(n),t[22]=n,t[23]=I);let L;t[24]!==F||t[25]!==I?(L=(0,s.jsx)(`span`,{className:`qm-ses-detail`,hidden:F,children:I}),t[24]=F,t[25]=I,t[26]=L):L=t[26];let R;t[27]!==i||t[28]!==n.board.id?(R=E({"--c":i.boardById(n.board.id)?.colour||`currentColor`}),t[27]=i,t[28]=n.board.id,t[29]=R):R=t[29];let z;t[30]===R?z=t[31]:(z=(0,s.jsx)(`span`,{className:`qm-dot`,"aria-hidden":`true`,style:R}),t[30]=R,t[31]=z);let B=n.board.name,V;t[32]!==r.now||t[33]!==n.at?(V=b(n.at,r.now),t[32]=r.now,t[33]=n.at,t[34]=V):V=t[34];let H=`${B} \u00b7 ${V}`,U;t[35]===H?U=t[36]:(U=(0,s.jsx)(`span`,{className:`qm-ses-where`,children:H}),t[35]=H,t[36]=U);let W;t[37]!==z||t[38]!==U?(W=(0,s.jsxs)(`span`,{className:`qm-ses-meta`,children:[z,U]}),t[37]=z,t[38]=U,t[39]=W):W=t[39];let G;t[40]!==k||t[41]!==P||t[42]!==L||t[43]!==W||t[44]!==w||t[45]!==D||t[46]!==n.id?(G=(0,s.jsxs)(`a`,{className:`qm-ses-main`,"data-act":`open-session`,"data-fk":w,href:D,"data-id":O,onClick:k,children:[P,L,W]}),t[40]=k,t[41]=P,t[42]=L,t[43]=W,t[44]=w,t[45]=D,t[46]=n.id,t[47]=G):G=t[47];let K=`ses-x-${n.id}`,q=n.id,J;t[48]===n?J=t[49]:(J=x(n),t[48]=n,t[49]=J);let Y=`Dismiss ${J} on ${n.board.name}`,ee;t[50]!==c||t[51]!==n.id?(ee=()=>c.dismiss(n.id),t[50]=c,t[51]=n.id,t[52]=ee):ee=t[52];let te;t[53]===Symbol.for(`react.memo_cache_sentinel`)?(te=(0,s.jsx)(u,{name:`x`}),t[53]=te):te=t[53];let X;t[54]!==K||t[55]!==Y||t[56]!==ee||t[57]!==n.id?(X=(0,s.jsx)(`button`,{...T,className:`qm-x`,"data-act":`dismiss`,"data-fk":K,"data-id":q,"aria-label":Y,onClick:ee,children:te}),t[54]=K,t[55]=Y,t[56]=ee,t[57]=n.id,t[58]=X):X=t[58];let Z;return t[59]!==d||t[60]!==l.cancel||t[61]!==l.end||t[62]!==l.move||t[63]!==G||t[64]!==h||t[65]!==X||t[66]!==y||t[67]!==n.id||t[68]!==n.state?(Z=(0,s.jsxs)(`li`,{"data-k":d,className:`qm-ses`,"data-ses":f,"data-state":p,onPointerDown:h,onPointerMove:g,onPointerUp:_,onPointerCancel:v,children:[y,G,X]}),t[59]=d,t[60]=l.cancel,t[61]=l.end,t[62]=l.move,t[63]=G,t[64]=h,t[65]=X,t[66]=y,t[67]=n.id,t[68]=n.state,t[69]=Z):Z=t[69],Z}function I(e,t,n,r){return e?t?`Sessions didn't load. Orbit tries again in 30 seconds while this menu is open.`:n?r?`All quiet. The sessions left are dismissed.`:`All quiet. No agent has written on your boards in the last two hours. When one does, its session shows here.`:`No boards yet, so no agents either. When an agent writes on one of your boards, its session shows here for two hours.`:`Looking for agents on your boards.`}function L(){let e=(0,o.c)(13),{s:t,view:n,actions:r}=m(),i,a;e[0]===n.shownSessions?(i=e[1],a=e[2]):(i=_.map(e=>({g:e,items:n.shownSessions.filter(t=>t.state===e)})).filter(B),a=i.map(R),e[0]=n.shownSessions,e[1]=i,e[2]=a);let c;e[3]!==i.length||e[4]!==t?(c=i.length?null:(0,s.jsx)(D,{name:`empty-sessions`,words:I(t.loaded,t.sessionsFailed,t.boards.length,t.sessions.length)},`empty-sessions`),e[3]=i.length,e[4]=t,e[5]=c):c=e[5];let l;e[6]!==r||e[7]!==n.hiddenCount?(l=n.hiddenCount?(0,s.jsxs)(`p`,{"data-k":`dismissed-foot`,className:`qm-foot`,children:[(0,s.jsx)(`span`,{className:`qm-foot-count`,children:`${n.hiddenCount} dismissed in this browser.`}),` `,(0,s.jsx)(`button`,{...T,className:`qm-link-btn`,"data-act":`restore`,"data-fk":`restore`,onClick:r.restore,children:`Show them again`})]},`dismissed-foot`):null,e[6]=r,e[7]=n.hiddenCount,e[8]=l):l=e[8];let u;return e[9]!==a||e[10]!==c||e[11]!==l?(u=(0,s.jsxs)(s.Fragment,{children:[a,c,l]}),e[9]=a,e[10]=c,e[11]=l,e[12]=u):u=e[12],u}function R(e){let{g:t,items:n}=e;return(0,s.jsxs)(`div`,{"data-k":`grp-${t}`,className:`qm-group`,children:[(0,s.jsxs)(`h4`,{className:`qm-group-title`,"data-state":t,children:[g[t],` `,(0,s.jsx)(`span`,{className:`qm-count`,children:String(n.length)})]}),(0,s.jsx)(`ul`,{className:`qm-list`,role:`list`,children:n.map(z)})]},`grp-${t}`)}function z(e){return(0,s.jsx)(F,{session:e},`ses-${e.id}`)}function B(e){let{items:t}=e;return t.length}var V=`Every section is hidden. Choose Edit to show one.`;function H(){let e=(0,o.c)(8),{adapter:t,close:n}=m(),r;e[0]===n?r=e[1]:(r=()=>n({returnFocus:!1}),e[0]=n,e[1]=r);let i;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,s.jsx)(`span`,{className:`qm-app-glyph`,"aria-hidden":`true`}),e[2]=i):i=e[2];let a,c;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,s.jsxs)(`span`,{className:`qm-app-text`,children:[(0,s.jsx)(`span`,{className:`qm-app-title`,children:`Notes in Nebula`}),(0,s.jsx)(`span`,{className:`qm-app-meta`,children:`Opens Nebula in a new tab`})]}),c=(0,s.jsx)(u,{name:`out`}),e[3]=a,e[4]=c):(a=e[3],c=e[4]);let l;return e[5]!==t.nebulaUrl||e[6]!==r?(l=(0,s.jsxs)(`a`,{"data-k":`nebula-row`,className:`qm-app-row`,href:t.nebulaUrl,target:`_blank`,rel:`noopener`,"data-act":`open-nebula`,"data-fk":`nebula-row`,onClick:r,children:[i,a,c]}),e[5]=t.nebulaUrl,e[6]=r,e[7]=l):l=e[7],l}function U(e){let t=(0,o.c)(4),{id:n}=e;switch(n){case`sessions`:{let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,s.jsx)(L,{}),t[0]=e):e=t[0],e}case`pinned`:{let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,s.jsx)(N,{}),t[1]=e):e=t[1],e}case`recent`:{let e;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,s.jsx)(P,{}),t[2]=e):e=t[2],e}case`nebula`:{let e;return t[3]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,s.jsx)(H,{}),t[3]=e):e=t[3],e}}}function W(e,t){switch(e){case`sessions`:{let e=[],n=t.shownSessions.filter(e=>e.state===`waiting`).length,r=t.shownSessions.filter(e=>e.state===`working`).length;return n&&e.push(`${n} waiting`),r&&e.push(`${r} working`),e.join(`, `)||`quiet`}case`pinned`:return t.pinnedBoards.length===1?`1 board`:`${t.pinnedBoards.length} boards`;case`recent`:return`last active first`;case`nebula`:return`notes for your projects`}}function G(e){let t=(0,o.c)(19),{id:n}=e,{view:r,cardId:i}=m(),a=`sec-${n}`,c=`${i}-h-${n}`,l=`${i}-h-${n}`,u=h[n],d;t[0]!==l||t[1]!==u?(d=(0,s.jsx)(`h3`,{className:`qm-sec-title`,id:l,children:u}),t[0]=l,t[1]=u,t[2]=d):d=t[2];let f;t[3]!==n||t[4]!==r?(f=W(n,r),t[3]=n,t[4]=r,t[5]=f):f=t[5];let p;t[6]===f?p=t[7]:(p=(0,s.jsx)(`span`,{className:`qm-sec-meta`,children:f}),t[6]=f,t[7]=p);let g;t[8]!==d||t[9]!==p?(g=(0,s.jsxs)(`header`,{className:`qm-sec-head`,children:[d,p]}),t[8]=d,t[9]=p,t[10]=g):g=t[10];let _;t[11]===n?_=t[12]:(_=(0,s.jsx)(`div`,{className:`qm-sec-body`,children:(0,s.jsx)(U,{id:n})}),t[11]=n,t[12]=_);let v;return t[13]!==n||t[14]!==a||t[15]!==c||t[16]!==g||t[17]!==_?(v=(0,s.jsxs)(`section`,{"data-k":a,className:`qm-sec`,"data-sec":n,"aria-labelledby":c,children:[g,_]}),t[13]=n,t[14]=a,t[15]=c,t[16]=g,t[17]=_,t[18]=v):v=t[18],v}function K(){let e=(0,o.c)(9),{view:t}=m(),n=t.displayColumns;if(!n.length){let t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,s.jsx)(D,{name:`empty-all`,words:V},`empty-all`),e[0]=t):t=e[0],t}let r=`cols-${n.length}`,i=String(n.length),a;e[1]===i?a=e[2]:(a=E({"--cols":i}),e[1]=i,e[2]=a);let c;e[3]===n?c=e[4]:(c=n.map(q),e[3]=n,e[4]=c);let l;return e[5]!==r||e[6]!==a||e[7]!==c?(l=(0,s.jsx)(`div`,{"data-k":r,className:`qm-cols`,style:a,children:c},r),e[5]=r,e[6]=a,e[7]=c,e[8]=l):l=e[8],l}function q(e,t){return(0,s.jsx)(`div`,{"data-k":`col-${t+1}`,className:`qm-col`,children:e.map(J)},`col-${t+1}`)}function J(e){return(0,s.jsx)(G,{id:e},`sec-${e}`)}function Y(e){let t=(0,o.c)(24),{ids:n,i:r}=e,{view:i,cardId:a,actions:c}=m(),l=n[0]?h[n[0]]:``,u;t[0]!==n||t[1]!==i.waitingCount?(u=n.includes(`sessions`)?i.waitingCount:0,t[0]=n,t[1]=i.waitingCount,t[2]=u):u=t[2];let d=u,f=`${a}-tab-${r}`,p=String(r),g=`tab-${r}`,_=`${a}-panel`,v=d?`${l}, ${d} waiting`:void 0,y=r===i.tab,b=r===i.tab?0:-1,x,S;t[3]!==c||t[4]!==r?(S=()=>c.selectTab(r),x=e=>c.onTabKey(e,r),t[3]=c,t[4]=r,t[5]=x,t[6]=S):(x=t[5],S=t[6]);let C;t[7]===l?C=t[8]:(C=(0,s.jsx)(`span`,{className:`qm-tab-label`,children:l}),t[7]=l,t[8]=C);let w=!d,E=d?String(d):``,D;t[9]!==w||t[10]!==E?(D=(0,s.jsx)(`span`,{className:`qm-tab-badge`,"data-state":`waiting`,hidden:w,children:E}),t[9]=w,t[10]=E,t[11]=D):D=t[11];let O;return t[12]!==x||t[13]!==C||t[14]!==D||t[15]!==f||t[16]!==p||t[17]!==g||t[18]!==_||t[19]!==v||t[20]!==y||t[21]!==b||t[22]!==S?(O=(0,s.jsxs)(`button`,{...T,role:`tab`,className:`qm-tab`,id:f,"data-act":`tab`,"data-id":p,"data-fk":g,"aria-controls":_,"aria-label":v,"aria-selected":y,tabIndex:b,onClick:S,onKeyDown:x,children:[C,D]}),t[12]=x,t[13]=C,t[14]=D,t[15]=f,t[16]=p,t[17]=g,t[18]=_,t[19]=v,t[20]=y,t[21]=b,t[22]=S,t[23]=O):O=t[23],O}function ee(){let e=(0,o.c)(23),{view:t,cardId:n}=m(),{columns:r,tab:i}=t;if(!r.length){let t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,s.jsx)(D,{name:`empty-all`,words:V},`empty-all`),e[0]=t):t=e[0],t}let a;e[1]===r?a=e[2]:(a=r.map(X),e[1]=r,e[2]=a);let c=String(r.length),l=String(i),u;e[3]!==c||e[4]!==l?(u=E({"--n":c,"--i":l}),e[3]=c,e[4]=l,e[5]=u):u=e[5];let d;e[6]===u?d=e[7]:(d=(0,s.jsx)(`span`,{className:`qm-tab-ink`,"aria-hidden":`true`,style:u}),e[6]=u,e[7]=d);let f;e[8]!==a||e[9]!==d?(f=(0,s.jsxs)(`div`,{"data-k":`tabs`,className:`qm-tabs`,role:`tablist`,"aria-label":`Sections`,children:[a,d]},`tabs`),e[8]=a,e[9]=d,e[10]=f):f=e[10];let p=`${n}-panel`,h=`${n}-tab-${i}`,g;e[11]!==r||e[12]!==i?(g=r[i]??[],e[11]=r,e[12]=i,e[13]=g):g=e[13];let _;e[14]===g?_=e[15]:(_=g.map(te),e[14]=g,e[15]=_);let v;e[16]!==p||e[17]!==h||e[18]!==_?(v=(0,s.jsx)(`div`,{"data-k":`panel`,className:`qm-panel`,role:`tabpanel`,id:p,tabIndex:-1,"aria-labelledby":h,children:_},`panel`),e[16]=p,e[17]=h,e[18]=_,e[19]=v):v=e[19];let y;return e[20]!==v||e[21]!==f?(y=(0,s.jsxs)(s.Fragment,{children:[f,v]}),e[20]=v,e[21]=f,e[22]=y):y=e[22],y}function te(e){return(0,s.jsx)(G,{id:e},`sec-${e}`)}function X(e,t){return(0,s.jsx)(Y,{ids:e,i:t},`tab-${t}`)}var Z=`starscape.quickMenu.config`,ne=`starscape.quickMenu.dismissed`,re=[{id:`sessions`,visible:!0,column:1},{id:`pinned`,visible:!0,column:2},{id:`nebula`,visible:!0,column:2},{id:`recent`,visible:!0,column:3}],ie=e=>re.some(t=>t.id===e),ae=e=>e===1||e===2||e===3,oe=e=>!!e&&typeof e==`object`&&!Array.isArray(e),se=e=>Array.isArray(e)?e:null;function ce(){return re.map(e=>({...e}))}function le(){return{version:1,updatedAt:null,style:`columns`,sections:null,pins:[]}}function ue(e,t){try{return e?.getItem(t)??null}catch{return null}}function Q(e,t,n){if(!e)return!1;try{return e.setItem(t,JSON.stringify(n)),!0}catch{return!1}}function de(e){try{return JSON.parse(e??`null`)}catch{return null}}function fe(e){let t=de(ue(e,Z));if(!oe(t)||typeof t.version!=`number`)return{doc:le(),writable:!0};if(t.version>1)return{doc:le(),writable:!1};if(t.version!==1)return{doc:le(),writable:!0};let n={...t,version:t.version,pins:se(t.pins)??[],sections:se(t.sections)};return`style`in n||(n.style=`columns`),{doc:n,writable:!0}}function pe(e,t,n=new Date().toISOString()){let{doc:r,writable:i}=fe(e),a={...t(r),updatedAt:n};return i?{ok:Q(e,Z,a),doc:a}:{ok:!1,doc:a}}function me(e){if(!Array.isArray(e.sections))return ce();let t=new Set,n=[];for(let r of e.sections){if(!oe(r))continue;let e=r.id;if(!ie(e)||t.has(e))continue;t.add(e);let i=re.find(t=>t.id===e)?.column??1;n.push({...r,id:e,visible:r.visible!==!1,column:ae(r.column)?r.column:i})}for(let e of re)t.has(e.id)||n.push({...e});return n}function he(e,t){let n=t.map(e=>({...e})),r=[];for(let t of e.sections??[])if(oe(t)&&ie(t.id)){let e=n.shift();e&&r.push(e)}else r.push(t);return r.push(...n),{...e,sections:r}}var ge=(e,{app:t,place:n,board:r})=>oe(e)&&e.app===t&&e.place===n&&e.board===r;function _e(e,{app:t,place:n}){let r=[];for(let i of e.pins)oe(i)&&i.app===t&&i.place===n&&typeof i.board==`string`&&r.push(i.board);return r}function ve(e,t){let n=e.pins,r=n.some(e=>ge(e,t))?n.filter(e=>!ge(e,t)):[...n,{app:t.app,place:t.place,board:t.board}];return{...e,pins:r}}function ye(e){let t=se(de(ue(e,`starscape.quickMenu.dismissed`)??`[]`));if(!t)return[];let n=[];for(let e of t)typeof e==`string`?n.push({id:e,state:null}):oe(e)&&typeof e.id==`string`&&n.push({id:e.id,state:typeof e.state==`string`?e.state:null});return n}function be(e,t){let n=e.find(e=>e.id===t.id);return n?t.state!==`waiting`||n.state===`waiting`:!1}function xe(e,t){let n=ye(e).filter(e=>e.id!==t.id);return n.push({id:t.id,state:t.state??null}),Q(e,ne,n),n}function Se(e,t){let n=ye(e).filter(e=>e.id!==t);return Q(e,ne,n),n}function Ce(e){return Q(e,ne,[]),[]}function we(e,t){let n=new Set(t.map(e=>e.id)),r=ye(e),i=r.filter(e=>n.has(e.id));return i.length!==r.length&&Q(e,ne,i),i}function Te(){try{return globalThis.localStorage}catch{return null}}function Ee(e){let t=fe(e);return{editing:!1,tab:0,boards:[],sessions:[],loaded:!1,sessionsFailed:!1,doc:t.doc,writable:t.writable,dismissed:ye(e),toast:null,now:Date.now()}}var De=e=>e!==void 0;function Oe(e,t,n){let r=t===`phone`?`phone`:`wide`,i=me(e.doc),a=_e(e.doc,n),o=e=>a.includes(e.slug),s=a.map(t=>e.boards.find(e=>e.slug===t)).filter(De),c=e.boards.filter(e=>!o(e)).sort((e,t)=>(Date.parse(t.lastActiveAt??``)||0)-(Date.parse(e.lastActiveAt??``)||0)).slice(0,5),l=e.sessions.filter(t=>!be(e.dismissed,t)),u=[],d=[[],[],[]];for(let e of i)e.visible&&d[e.column-1]?.push(e.id);for(let e of d)e.length&&u.push(e);let[f=[],p=[],m=[]]=u,h=r===`phone`||t===`three`||u.length<3?u:[f,[...p,...m]];return{mode:r,sections:i,pinnedBoards:s,recentBoards:c,shownSessions:l,hiddenCount:e.sessions.length-l.length,waitingCount:l.filter(e=>e.state===`waiting`).length,columns:u,displayColumns:h,tab:e.tab<u.length?e.tab:0,isPinned:o,boardById:t=>t?e.boards.find(e=>e.id===t):void 0,activity:e=>{let t=l.filter(t=>t.board.id===e.id&&t.state!==`finished`),n=t.find(e=>e.state===`waiting`);if(n)return{state:`waiting`,words:`${x(n)} waiting`};let r=t[0];return r?{state:`working`,words:`${x(r)} working`}:null}}}function ke(){let e=(0,o.c)(1),t=(0,a.useRef)(null),n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n={liveRef:t,announce:e=>{let n=t.current;n&&(n.textContent=``,setTimeout(()=>{n.textContent=e},30))}},e[0]=n):n=e[0],n}function Ae(e,t){let n=[...e],r=n.filter(e=>e.column===t.column).at(-1);return n.splice(r?n.indexOf(r)+1:n.length,0,t),n}function je(e,t,n){let r=e.find(e=>e.id===t);if(!r)return e;if(n===`left`||n===`right`){let t=r.column+(n===`left`?-1:1);return t!==1&&t!==2&&t!==3?e:Ae(e.filter(e=>e!==r),{...r,column:t})}let i=e.filter(e=>e.column===r.column),a=i[i.indexOf(r)+(n===`up`?-1:1)];if(!a)return e;let o=[...e],s=o.indexOf(r),c=o.indexOf(a);return o[s]=a,o[c]=r,o}function Me(e,t,n){let r=e.find(e=>e.id===t);if(!r)return e;let i=e.filter(e=>e!==r),a={...r,column:n.col},o=n.before?i.findIndex(e=>e.id===n.before):-1;return o<0?Ae(i,a):(i.splice(o,0,a),i)}function Ne(e,t,n){return e.map(e=>e.id===t?{...e,visible:n}:e)}var Pe=(e,t)=>e.querySelector(`[data-fk="${CSS.escape(t)}"]`),Fe=e=>e instanceof HTMLButtonElement&&e.disabled;function Ie(e){return[...e.querySelectorAll(`a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])`)].filter(e=>!e.closest(`.qm-ghosts`)&&e.getClientRects().length>0&&!e.closest(`[hidden]`))}function Le(e){let t=e.querySelector(`.qm-main`);return e.querySelector(`.qm-ses[data-state="waiting"] .qm-ses-main`)??e.querySelector(`.qm-main [role="tab"][aria-selected="true"]`)??Ie(e).find(e=>t?.contains(e))??e.querySelector(`.qm-close`)}function Re(e){let t=e.closest(`.qm-col, .qm-panel, .qm-scroll`);if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();n.bottom>r.bottom-8?t.scrollTop+=n.bottom-r.bottom+16:n.top<r.top+8&&(t.scrollTop-=r.top-n.top+16)}var ze=e=>e===2?2:e===3?3:1;function Be(e,t,n){let r=null,i=1/0;for(let a of e.querySelectorAll(`.qm-edit-list`)){let e=a.getBoundingClientRect(),o=t<e.left?e.left-t:t>e.right?t-e.right:0;o+=n<e.top-40?e.top-40-n:n>e.bottom+40?n-e.bottom-40:0,o<i&&(i=o,r=a)}if(!r)return null;let a=ze(Number(r.dataset.col)),o=[...r.querySelectorAll(`.qm-edit-item`)].filter(e=>!e.classList.contains(`is-dragging`)),s=r.getBoundingClientRect();for(let e of o){let t=e.getBoundingClientRect();if(n<t.top+t.height/2)return{col:a,before:e.dataset.sec??null,y:t.top-3,left:s.left,width:s.width}}let c=o.at(-1);return{col:a,before:null,y:c?c.getBoundingClientRect().bottom+3:s.top+4,left:s.left,width:s.width}}var Ve=e=>!(e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey);function He(e){let t=(0,o.c)(83),{s:n,view:r,update:i,storage:s,here:c,adapter:l,open:u,motion:d,announce:f,cardRef:p,close:m}=e,{render:g}=d,_=(0,a.useRef)(0),v;t[0]!==n.doc||t[1]!==n.writable||t[2]!==s?(v=function(e){if(!n.writable)return{doc:e(n.doc),writable:!1};let t=pe(s,e);return t.ok?{doc:t.doc,writable:!0}:{doc:e(n.doc),writable:fe(s).writable}},t[0]=n.doc,t[1]=n.writable,t[2]=s,t[3]=v):v=t[3];let b=v,S=n.toast?.id??0,C;t[4]!==u||t[5]!==g||t[6]!==n.toast?.id||t[7]!==i?(C=e=>{n.toast?.id===e&&(u&&g(),i(t=>t.toast?.id===e?{toast:null}:{}))},t[4]=u,t[5]=g,t[6]=n.toast?.id,t[7]=i,t[8]=C):C=t[8];let w=(0,a.useEffectEvent)(C),T;t[9]!==w||t[10]!==S?(T=()=>{if(!S)return;let e=setTimeout(()=>w(S),y);return()=>clearTimeout(e)},t[9]=w,t[10]=S,t[11]=T):T=t[11];let E;t[12]===S?E=t[13]:(E=[S],t[12]=S,t[13]=E),(0,a.useEffect)(T,E);let D;t[14]!==f||t[15]!==p||t[16]!==g||t[17]!==n.sessions||t[18]!==s||t[19]!==i?(D=function(e,t){let r=n.sessions.find(t=>t.id===e);if(!r)return;let a=[...p.current?.querySelectorAll(`.qm-main .qm-ses`)??[]],o=a.findIndex(t=>t.dataset.ses===e),c=a[o+1]??a[o-1],l=xe(s,r);_.current+=1;let u=`ses-${e}`;g({exits:{[u]:t??{}},focus:c?.dataset.ses?`ses-x-${c.dataset.ses}`:`undo`,fallback:`undo`}),i({dismissed:l,toast:{id:_.current,text:`Dismissed ${x(r)} on ${r.board.name}.`,undo:e}}),f(`Dismissed. Undo is available.`)},t[14]=f,t[15]=p,t[16]=g,t[17]=n.sessions,t[18]=s,t[19]=i,t[20]=D):D=t[20];let O=D,k;t[21]!==f||t[22]!==g||t[23]!==n.toast?.undo||t[24]!==s||t[25]!==i?(k=function(){let e=n.toast?.undo;if(!e)return;let t=Se(s,e);g({focus:`ses-x-${e}`}),i({dismissed:t,toast:null}),f(`Restored`)},t[21]=f,t[22]=g,t[23]=n.toast?.undo,t[24]=s,t[25]=i,t[26]=k):k=t[26];let A=k,j;t[27]!==f||t[28]!==p||t[29]!==g||t[30]!==s||t[31]!==i?(j=function(){let e=p.current,t=(e?Le(e)?.getAttribute(`data-fk`):null)||`edit`,n=Ce(s);g({focus:t,fallback:`edit`}),i({dismissed:n,toast:null}),f(`Dismissed sessions shown again`)},t[27]=f,t[28]=p,t[29]=g,t[30]=s,t[31]=i,t[32]=j):j=t[32];let M=j,N;t[33]!==f||t[34]!==c||t[35]!==g||t[36]!==b||t[37]!==i||t[38]!==r?(N=function(e){let t=!r.isPinned(e),n=b(t=>ve(t,{...c,board:e.slug}));g({focus:`pin-${e.id}`}),i(n),f(`${e.name} ${t?`pinned`:`unpinned`}`)},t[33]=f,t[34]=c,t[35]=g,t[36]=b,t[37]=i,t[38]=r,t[39]=N):N=t[39];let P=N,F;t[40]!==f||t[41]!==g||t[42]!==n.editing||t[43]!==i||t[44]!==r?(F=function(){let e=!n.editing;g({focus:`edit`}),i({editing:e,tab:r.tab}),f(e?`Editing sections`:`Done editing`)},t[40]=f,t[41]=g,t[42]=n.editing,t[43]=i,t[44]=r,t[45]=F):F=t[45];let I=F,L;t[46]!==g||t[47]!==i?(L=function(e){g({focus:`tab-${e}`,resetPanel:!0}),i({tab:e})},t[46]=g,t[47]=i,t[48]=L):L=t[48];let R=L,z;t[49]!==R||t[50]!==r?(z=function(e,t){if(![`ArrowRight`,`ArrowLeft`,`Home`,`End`].includes(e.key))return;let n=r.columns.length,i=e.key===`Home`?0:e.key===`End`?n-1:(t+(e.key===`ArrowRight`?1:-1)+n)%n;e.preventDefault(),R(i)},t[49]=R,t[50]=r,t[51]=z):z=t[51];let B=z,V;t[52]!==f||t[53]!==g||t[54]!==b||t[55]!==i?(V=function(e,t,n){let r=b(t=>he(t,e(me(t))));g({focus:n}),i(r),f(t)},t[52]=f,t[53]=g,t[54]=b,t[55]=i,t[56]=V):V=t[56];let H=V,U;t[57]===H?U=t[58]:(U=(e,t)=>H(n=>je(n,e,t),`${h[e]} moved`,null),t[57]=H,t[58]=U);let W=U,G;t[59]!==H||t[60]!==r?(G=function(e){let t=!r.sections.find(t=>t.id===e)?.visible;H(n=>Ne(n,e,t),`${h[e]} ${t?`shown`:`hidden`}`,null)},t[59]=H,t[60]=r,t[61]=G):G=t[61];let K=G,q;t[62]===H?q=t[63]:(q=(e,t)=>H(n=>Me(n,e,t),`${h[e]} moved`,`mu-${e}`),t[62]=H,t[63]=q);let J=q,Y;t[64]!==l||t[65]!==m?(Y=function(e,t){Ve(e)&&(e.preventDefault(),m({returnFocus:!1}),l.openBoard(t))},t[64]=l,t[65]=m,t[66]=Y):Y=t[66];let ee=Y,te;t[67]!==l||t[68]!==m?(te=function(e,t){Ve(e)&&(e.preventDefault(),m({returnFocus:!1}),l.openSession(t))},t[67]=l,t[68]=m,t[69]=te):te=t[69];let X=te,Z;return t[70]!==O||t[71]!==J||t[72]!==W||t[73]!==B||t[74]!==ee||t[75]!==X||t[76]!==P||t[77]!==M||t[78]!==R||t[79]!==I||t[80]!==K||t[81]!==A?(Z={dismiss:O,undo:A,restore:M,pin:P,toggleEdit:I,selectTab:R,onTabKey:B,moveSection:W,toggleVisible:K,dropSection:J,openBoard:ee,openSession:X},t[70]=O,t[71]=J,t[72]=W,t[73]=B,t[74]=ee,t[75]=X,t[76]=P,t[77]=M,t[78]=R,t[79]=I,t[80]=K,t[81]=A,t[82]=Z):Z=t[82],Z}var Ue=`cubic-bezier(0.2, 0.8, 0.2, 1)`,$=Object.freeze({move:220,enter:200,leave:180,open:200,close:140,item:180}),We=28,Ge=140,Ke=e=>e.getAttribute(`data-k`)??``;function qe(e){let t=e.parentElement?.closest(`[data-k]`);return t?Ke(t):null}function Je(e){let t=new Map;for(let n of e.querySelectorAll(`[data-k]`))n.closest(`[data-flip-ghosts]`)||t.set(Ke(n),{el:n,rect:n.getBoundingClientRect(),parent:qe(n)});return t}function Ye(e,t,{exits:n={},ghosts:r=null}={}){let i=new Map;for(let e of t.querySelectorAll(`[data-k]`))e.closest(`[data-flip-ghosts]`)||i.set(Ke(e),e);let a=new Map;for(let[t,n]of i){let r=e.get(t);if(!r)continue;let i=n.getBoundingClientRect();a.set(t,{dx:r.rect.left-i.left,dy:r.rect.top-i.top})}let o=0;for(let[e,t]of i){let n=qe(t),r=a.get(e);if(r){let e=(n?a.get(n):void 0)??{dx:0,dy:0},i=r.dx-e.dx,o=r.dy-e.dy;if(Math.abs(i)<.5&&Math.abs(o)<.5)continue;t.animate([{transform:`translate(${i}px, ${o}px)`},{transform:`none`}],{duration:$.move,easing:Ue})}else{let e=n!==null&&i.has(n)&&!a.has(n),r=Math.min(o++*We,Ge)+(e?30:0);t.animate([{opacity:0,transform:`translateY(6px) scale(0.97)`,filter:`blur(3px)`},{opacity:1,transform:`none`,filter:`blur(0)`}],{duration:$.enter,delay:r,easing:Ue,fill:`backwards`})}}if(!r)return;let s=t.getBoundingClientRect();for(let[t,a]of e){if(i.has(t)||a.parent&&!i.has(a.parent)||a.rect.width===0&&a.rect.height===0)continue;let e=a.el.cloneNode(!0);if(!(e instanceof HTMLElement))continue;for(let t of[e,...e.querySelectorAll(`[data-k], [id], [data-fk]`)])t.removeAttribute(`data-k`),t.removeAttribute(`id`),t.removeAttribute(`data-fk`);e.setAttribute(`aria-hidden`,`true`),e.setAttribute(`inert`,``),e.classList.add(`qm-ghost`),e.style.left=`${a.rect.left-s.left}px`,e.style.top=`${a.rect.top-s.top}px`,e.style.width=`${a.rect.width}px`,e.style.height=`${a.rect.height}px`,r.append(e);let o=n[t]??{},c=o.dx?`translateX(${o.dx}px)`:`scale(0.96)`,l=e.animate([{opacity:o.fromOpacity??1,transform:o.from||`none`,filter:`blur(0)`},{opacity:0,transform:c,filter:`blur(2px)`}],{duration:$.leave,easing:Ue,fill:`forwards`}),u=()=>e.remove();l.onfinish=u,setTimeout(u,$.leave+80)}}function Xe(e){let t=(0,o.c)(13),{cardRef:n,backdropRef:r,ghostsRef:s,open:c,shown:l,announce:u}=e,d=(0,a.useRef)(null),f;t[0]!==n||t[1]!==c||t[2]!==l?(f=e=>{let t=e??{},r=n.current,a=(t.animate??!0)&&c&&l&&r!==null&&!r.hidden&&!i(),o=document.activeElement,s=o&&r?.contains(o)?o.getAttribute(`data-fk`):null,u=d.current;d.current={before:u?.before??(a?Je(r):null),exits:{...u?.exits,...t.exits},focus:t.focus??u?.focus??null,fallback:t.fallback??u?.fallback??null,kept:u?u.kept:s,opening:u?.opening??!1,resetPanel:(t.resetPanel??!1)||(u?.resetPanel??!1)}},t[0]=n,t[1]=c,t[2]=l,t[3]=f):f=t[3];let p=f,m;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(m=()=>{d.current={before:null,exits:{},focus:null,fallback:null,kept:null,opening:!0,resetPanel:!1}},t[4]=m):m=t[4];let h=m,g;t[5]!==u||t[6]!==r||t[7]!==n||t[8]!==s||t[9]!==c?(g=()=>{let e=d.current,t=n.current;if(!e||!t)return;if(d.current=null,e.opening){for(let e of t.querySelectorAll(`.qm-col, .qm-panel, .qm-scroll`))e.scrollTop=0;if(!i()){t.animate([{opacity:0,transform:`translateY(-6px) scale(0.97)`},{opacity:1,transform:`none`}],{duration:$.open,easing:Ue}),[...t.querySelectorAll(`.qm-main [data-k]`)].slice(0,14).forEach(Ze);let e=r.current;e&&!e.hidden&&e.animate([{opacity:0},{opacity:1}],{duration:$.item,easing:`ease-out`})}Le(t)?.focus({preventScroll:!0}),u(`Quick menu open`);return}let a=e.focus??e.kept;if(a&&c){let n=Pe(t,a);n&&Fe(n)&&(n=null),!n&&e.kept&&/^m[udlr]-/.test(e.kept)&&(n=t.querySelector(`.qm-edit-item[data-sec="${CSS.escape(e.kept.slice(3))}"] .qm-icon-btn:not([disabled])`)),!n&&e.fallback&&(n=Pe(t,e.fallback)),!n&&e.kept&&e.kept===a&&(n=Le(t)),n&&n!==document.activeElement&&n.focus({preventScroll:!0}),n&&e.focus&&Re(n)}if(e.resetPanel){let e=t.querySelector(`.qm-panel`);e&&(e.scrollTop=0)}e.before&&Ye(e.before,t,{exits:e.exits,ghosts:s.current})},t[5]=u,t[6]=r,t[7]=n,t[8]=s,t[9]=c,t[10]=g):g=t[10],(0,a.useLayoutEffect)(g);let _;return t[11]===p?_=t[12]:(_={render:p,opening:h},t[11]=p,t[12]=_),_}function Ze(e,t){e.animate([{opacity:0,transform:`translateY(4px)`},{opacity:1,transform:`none`}],{duration:$.item,delay:40+Math.min(t*18,140),easing:Ue,fill:`backwards`})}function Qe(e){let t=(0,o.c)(26),{open:n,cardRef:r,opener:i,close:s,drag:c,onDrop:l,onResize:u}=e,d;t[0]!==r||t[1]!==i?(d=e=>e instanceof Node&&!!(r.current?.contains(e)||i()?.contains(e)),t[0]=r,t[1]=i,t[2]=d):d=t[2];let f=(0,a.useEffectEvent)(d),p;t[3]!==r||t[4]!==s||t[5]!==c?(p=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopImmediatePropagation(),c.cancel()||s();return}let t=r.current;if(e.key!==`Tab`||!t)return;let n=Ie(t),i=n[0],a=n.at(-1);i&&a&&(t.contains(document.activeElement)?e.shiftKey&&document.activeElement===i?(e.preventDefault(),a.focus()):!e.shiftKey&&document.activeElement===a&&(e.preventDefault(),i.focus()):(e.preventDefault(),(e.shiftKey?a:i).focus()))},t[3]=r,t[4]=s,t[5]=c,t[6]=p):p=t[6];let m=(0,a.useEffectEvent)(p),h;t[7]===s?h=t[8]:(h=()=>s({returnFocus:!1}),t[7]=s,t[8]=h);let g=(0,a.useEffectEvent)(h),_;t[9]===c?_=t[10]:(_=e=>c.move(e),t[9]=c,t[10]=_);let v=(0,a.useEffectEvent)(_),y;t[11]!==c||t[12]!==l?(y=e=>{let t=c.end(e);t&&l(t.id,t.target)},t[11]=c,t[12]=l,t[13]=y):y=t[13];let b=(0,a.useEffectEvent)(y),x;t[14]===u?x=t[15]:(x=()=>u(),t[14]=u,t[15]=x);let S=(0,a.useEffectEvent)(x),C;t[16]!==f||t[17]!==v||t[18]!==b||t[19]!==m||t[20]!==g||t[21]!==n||t[22]!==S?(C=()=>{if(!n)return;let e=!1,t=!1,r=n=>{e=f(n.target),t=!1},i=e=>{t=f(e.target)},a=()=>{e=!1},o=n=>{let r=e,i=t;e=!1,t=!1,!(r||i||f(n.target))&&g()},s=e=>m(e),c=e=>v(e),l=e=>b(e),u=()=>S();return document.addEventListener(`keydown`,s,!0),document.addEventListener(`pointerdown`,r,!0),document.addEventListener(`pointerup`,i,!0),document.addEventListener(`pointercancel`,a,!0),document.addEventListener(`keydown`,a,!0),document.addEventListener(`click`,o,!0),document.addEventListener(`pointermove`,c),document.addEventListener(`pointerup`,l),addEventListener(`resize`,u),()=>{document.removeEventListener(`keydown`,s,!0),document.removeEventListener(`pointerdown`,r,!0),document.removeEventListener(`pointerup`,i,!0),document.removeEventListener(`pointercancel`,a,!0),document.removeEventListener(`keydown`,a,!0),document.removeEventListener(`click`,o,!0),document.removeEventListener(`pointermove`,c),document.removeEventListener(`pointerup`,l),removeEventListener(`resize`,u)}},t[16]=f,t[17]=v,t[18]=b,t[19]=m,t[20]=g,t[21]=n,t[22]=S,t[23]=C):C=t[23];let w;t[24]===n?w=t[25]:(w=[n],t[24]=n,t[25]=w),(0,a.useEffect)(C,w)}function $e(e,t){let n=(0,o.c)(16),r=(0,a.useRef)(null),i;n[0]===e?i=n[1]:(i=t=>{t.marker.remove(),e.current?.classList.remove(`is-dragging`),t.item.classList.remove(`is-dragging`);let n=t.item.style.transform;return t.item.style.transform=``,n},n[0]=e,n[1]=i);let s=i,c=et,l;n[2]!==e||n[3]!==t?(l=(n,i)=>{let a=e.current,o=n.currentTarget.closest(`.qm-edit-item`);if(n.pointerType===`touch`||!t||!a||!o)return;n.preventDefault();let s=document.createElement(`div`);s.className=`qm-drop-marker`,s.setAttribute(`aria-hidden`,`true`),a.append(s),r.current={id:i,item:o,x:n.clientX,y:n.clientY,target:null,pid:n.pointerId,marker:s},o.classList.add(`is-dragging`),a.classList.add(`is-dragging`)},n[2]=e,n[3]=t,n[4]=l):l=n[4];let u=l,d;n[5]===e?d=n[6]:(d=t=>{let n=r.current,i=e.current;if(!n||!i||t.pointerId!==n.pid)return;n.item.style.transform=`translate(${t.clientX-n.x}px, ${t.clientY-n.y}px)`;let a=Be(i,t.clientX,t.clientY);if(!a)return;n.target=a;let o=i.getBoundingClientRect();n.marker.style.left=`${a.left-o.left}px`,n.marker.style.width=`${a.width}px`,n.marker.style.top=`${a.y-o.top-2}px`,n.marker.style.opacity=`1`},n[5]=e,n[6]=d);let f=d,p;n[7]===s?p=n[8]:(p=e=>{let t=r.current;if(!t||e.pointerId!==t.pid)return null;r.current=null;let n=s(t);return t.target?{id:t.id,target:t.target}:(c(t,n),null)},n[7]=s,n[8]=p);let m=p,h;n[9]===s?h=n[10]:(h=()=>{let e=r.current;return e?(r.current=null,c(e,s(e)),!0):!1},n[9]=s,n[10]=h);let g=h,_;return n[11]!==g||n[12]!==m||n[13]!==u||n[14]!==f?(_={gripDown:u,move:f,end:m,cancel:g},n[11]=g,n[12]=m,n[13]=u,n[14]=f,n[15]=_):_=n[15],_}function et(e,t){!i()&&t&&e.item.animate([{transform:t},{transform:`none`}],{duration:$.item,easing:Ue})}function tt(e){let t=(0,o.c)(8),n=(0,a.useRef)(null),r=(0,a.useRef)(!1),s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=(e,t)=>{if(e.pointerType===`mouse`||e.target instanceof Element&&e.target.closest(`.qm-x`))return;let r=e.currentTarget;n.current={row:r,id:t,x:e.clientX,y:e.clientY,dx:0,active:!1,pid:e.pointerId,w:r.getBoundingClientRect().width}},t[0]=s):s=t[0];let c=s,l;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(l=e=>{let t=n.current;if(!t||e.pointerId!==t.pid)return;let r=e.clientX-t.x,i=e.clientY-t.y;if(!t.active){if(Math.abs(i)>10&&Math.abs(i)>Math.abs(r)){n.current=null;return}if(Math.abs(r)>10){t.active=!0,t.row.classList.add(`is-swiping`);try{t.row.setPointerCapture(e.pointerId)}catch{}}}t.active&&(t.dx=r,t.row.style.transform=`translateX(${r}px)`,t.row.style.opacity=String(Math.max(.25,1-Math.abs(r)/t.w)))},t[1]=l):l=t[1];let u=l,d;t[2]===e?d=t[3]:(d=t=>{let a=n.current;if(!a||t.pointerId!==a.pid||(n.current=null,!a.active))return;r.current=!0,setTimeout(()=>{r.current=!1},350),a.row.classList.remove(`is-swiping`);let o=a.row.style.transform,s=Number(a.row.style.opacity);a.row.style.transform=``,a.row.style.opacity=``,Math.abs(a.dx)>a.w*.33?e(a.id,{dx:Math.sign(a.dx)*a.w,from:o,fromOpacity:s}):i()||a.row.animate([{transform:o},{transform:`none`}],{duration:$.item,easing:Ue})},t[2]=e,t[3]=d);let f=d,p;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(p=e=>{let t=n.current;t&&e.pointerId===t.pid&&(t.row.style.transform=``,t.row.style.opacity=``,t.row.classList.remove(`is-swiping`),n.current=null)},t[4]=p):p=t[4];let m=p,h;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(h=e=>{r.current&&(r.current=!1,e.preventDefault(),e.stopPropagation())},t[5]=h):h=t[5];let g=h,_;return t[6]===f?_=t[7]:(_={down:c,move:u,end:f,cancel:m,clickCapture:g},t[6]=f,t[7]=_),_}function nt(e){let t=(0,o.c)(41),{adapter:n,open:r,onClose:s,opener:c,storage:l,loaded:u,update:d,motion:f,setShown:p,cardRef:m,backdropRef:h,ghostsRef:g,cancelDrag:_}=e,[y,b]=(0,a.useState)(it),x=(0,a.useRef)(0),S;t[0]!==s||t[1]!==r||t[2]!==c?(S=e=>{r&&(s(),(e?.returnFocus??!0)&&c()?.focus({preventScroll:!0}))},t[0]=s,t[1]=r,t[2]=c,t[3]=S):S=t[3];let C=S,T;if(t[4]!==c){let e=()=>{let e=c()?.getBoundingClientRect();return e?Math.round(e.bottom+6):null};T=()=>b({layout:w(),top:e()}),t[4]=c,t[5]=T}else T=t[5];let E=T,D;t[6]===n?D=t[7]:(D=()=>Promise.allSettled([n.listBoards(),n.listSessions()]),t[6]=n,t[7]=D);let O=(0,a.useEffectEvent)(D),k;t[8]===u?k=t[9]:(k=()=>u,t[8]=u,t[9]=k);let A=(0,a.useEffectEvent)(k),j;t[10]!==f||t[11]!==r||t[12]!==l||t[13]!==d?(j=(e,t)=>{let n={loaded:!0,now:Date.now()};e.status===`fulfilled`&&(n.boards=e.value),t.status===`fulfilled`?(n.sessions=t.value,n.sessionsFailed=!1,n.dismissed=we(l,t.value)):n.sessionsFailed=!0,r&&f.render(),d(n)},t[10]=f,t[11]=r,t[12]=l,t[13]=d,t[14]=j):j=t[14];let M=(0,a.useEffectEvent)(j),N;t[15]!==h||t[16]!==m||t[17]!==f||t[18]!==E||t[19]!==p||t[20]!==d?(N=()=>{let e=m.current,t=h.current;for(let n of[...e?.getAnimations()??[],...t?.getAnimations()??[]])n.cancel();f.opening(),E(),d({editing:!1,toast:null,now:Date.now()}),p(!0)},t[15]=h,t[16]=m,t[17]=f,t[18]=E,t[19]=p,t[20]=d,t[21]=N):N=t[21];let P=(0,a.useEffectEvent)(N),F;t[22]!==h||t[23]!==_||t[24]!==m||t[25]!==g||t[26]!==p?(F=()=>{_();let e=m.current,t=h.current,n=x.current+=1,r=()=>{if(n===x.current){x.current+=1;for(let n of[...e?.getAnimations()??[],...t?.getAnimations()??[]])n.cancel();g.current?.replaceChildren(),p(!1)}};if(i()||!e||e.hidden){r();return}let a=e.animate([{opacity:1,transform:`none`},{opacity:0,transform:`translateY(-4px) scale(0.98)`}],{duration:$.close,easing:`ease-in`,fill:`forwards`});t&&!t.hidden&&t.animate([{opacity:1},{opacity:0}],{duration:$.close,fill:`forwards`}),a.onfinish=r,setTimeout(r,$.close+30)},t[22]=h,t[23]=_,t[24]=m,t[25]=g,t[26]=p,t[27]=F):F=t[27];let I=(0,a.useEffectEvent)(F),L;t[28]!==M||t[29]!==I||t[30]!==A||t[31]!==O||t[32]!==r||t[33]!==P?(L=()=>{if(!r)return;x.current+=1;let e=new AbortController,t,n=async()=>{let[e,t]=await O();M(e,t)};return(async()=>{let r=n();A()||await Promise.race([r,new Promise(rt)]),!e.signal.aborted&&(P(),t=setInterval(()=>void n(),v))})(),()=>{e.abort(),clearInterval(t),I()}},t[28]=M,t[29]=I,t[30]=A,t[31]=O,t[32]=r,t[33]=P,t[34]=L):L=t[34];let R;t[35]===r?R=t[36]:(R=[r],t[35]=r,t[36]=R),(0,a.useEffect)(L,R);let z;return t[37]!==C||t[38]!==y||t[39]!==E?(z={place:y,relayout:E,close:C},t[37]=C,t[38]=y,t[39]=E,t[40]=z):z=t[40],z}function rt(e){return setTimeout(e,600)}function it(){return{layout:w(),top:null}}function at(e){let t=(0,o.c)(86),{adapter:n,open:r,onClose:i,opener:c,...l}=e,d=l.cardId??`quickMenuCard`,f=l.storage===void 0?Te():l.storage,m={app:n.app||`orbit`,place:n.place||`this-computer`},[h,g]=(0,a.useState)(()=>Ee(f)),[_,v]=(0,a.useState)(!1),y=(0,a.useRef)(null),b=(0,a.useRef)(null),x=(0,a.useRef)(null),S;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(S=e=>{g(t=>({...t,...typeof e==`function`?e(t):e}))},t[0]=S):S=t[0];let C=S,{liveRef:w,announce:D}=ke(),O;t[1]!==D||t[2]!==r||t[3]!==_?(O={cardRef:y,backdropRef:b,ghostsRef:x,open:r,shown:_,announce:D},t[1]=D,t[2]=r,t[3]=_,t[4]=O):O=t[4];let A=Xe(O),j=$e(y,h.editing),M;t[5]===j?M=t[6]:(M=()=>void j.cancel(),t[5]=j,t[6]=M);let N;t[7]!==n||t[8]!==A||t[9]!==i||t[10]!==r||t[11]!==c||t[12]!==h.loaded||t[13]!==f||t[14]!==M?(N={adapter:n,open:r,onClose:i,opener:c,storage:f,loaded:h.loaded,update:C,motion:A,setShown:v,cardRef:y,backdropRef:b,ghostsRef:x,cancelDrag:M},t[7]=n,t[8]=A,t[9]=i,t[10]=r,t[11]=c,t[12]=h.loaded,t[13]=f,t[14]=M,t[15]=N):N=t[15];let P=nt(N),F=Oe(h,P.place.layout,m),I=He({s:h,view:F,update:C,storage:f,here:m,adapter:n,open:r,motion:A,announce:D,cardRef:y,close:P.close}),L=tt(I.dismiss),R;t[16]!==A||t[17]!==P?(R=()=>{A.render({animate:!1}),P.relayout()},t[16]=A,t[17]=P,t[18]=R):R=t[18];let z;t[19]!==I.dropSection||t[20]!==j||t[21]!==r||t[22]!==c||t[23]!==R||t[24]!==P.close?(z={open:r,cardRef:y,opener:c,close:P.close,drag:j,onDrop:I.dropSection,onResize:R},t[19]=I.dropSection,t[20]=j,t[21]=r,t[22]=c,t[23]=R,t[24]=P.close,t[25]=z):z=t[25],Qe(z);let B={s:h,view:F,adapter:n,cardId:d,actions:I,swipe:L,drag:j,close:P.close},V=F.boardById(n.currentBoardId),H;t[26]===P.place.top?H=t[27]:(H=P.place.top===null?void 0:E({"--qm-top":`${P.place.top}px`}),t[26]=P.place.top,t[27]=H);let U=H,W=!_||P.place.layout!==`phone`,G;t[28]!==W||t[29]!==U?(G=(0,s.jsx)(`div`,{ref:b,className:`qm-backdrop`,hidden:W,style:U,onClick:ot}),t[28]=W,t[29]=U,t[30]=G):G=t[30];let q=h.editing?`qm-card is-editing`:`qm-card`,J=`${d}-title`,Y=!_,te=F.mode,X=L.clickCapture,Z=!V,ne=E({"--c":V?.colour||`transparent`}),re;t[31]!==Z||t[32]!==ne?(re=(0,s.jsx)(`span`,{className:`qm-planet qm-planet--sm`,"aria-hidden":`true`,hidden:Z,style:ne}),t[31]=Z,t[32]=ne,t[33]=re):re=t[33];let ie=`${d}-title`,ae;t[34]===ie?ae=t[35]:(ae=(0,s.jsx)(`h2`,{className:`qm-eyebrow`,id:ie,children:`Quick menu`}),t[34]=ie,t[35]=ae);let oe=V?.name||`No board open`,se;t[36]===oe?se=t[37]:(se=(0,s.jsx)(`span`,{className:`qm-here-board`,children:oe}),t[36]=oe,t[37]=se);let ce;t[38]===n.placeLabel?ce=t[39]:(ce=(0,s.jsx)(`span`,{className:`qm-here-place`,children:n.placeLabel}),t[38]=n.placeLabel,t[39]=ce);let le;t[40]!==se||t[41]!==ce?(le=(0,s.jsxs)(`p`,{className:`qm-here-name`,children:[se,` `,ce]}),t[40]=se,t[41]=ce,t[42]=le):le=t[42];let ue;t[43]!==ae||t[44]!==le?(ue=(0,s.jsxs)(`div`,{className:`qm-here-text`,children:[ae,le]}),t[43]=ae,t[44]=le,t[45]=ue):ue=t[45];let Q;t[46]!==re||t[47]!==ue?(Q=(0,s.jsxs)(`div`,{className:`qm-here`,children:[re,ue]}),t[46]=re,t[47]=ue,t[48]=Q):Q=t[48];let de=h.editing?`Done`:`Edit`,fe;t[49]!==I.toggleEdit||t[50]!==h.editing||t[51]!==de?(fe=(0,s.jsx)(`button`,{...T,className:`qm-text-btn`,"data-act":`edit`,"data-fk":`edit`,"aria-pressed":h.editing,onClick:I.toggleEdit,children:de}),t[49]=I.toggleEdit,t[50]=h.editing,t[51]=de,t[52]=fe):fe=t[52];let pe;t[53]===P?pe=t[54]:(pe=()=>P.close(),t[53]=P,t[54]=pe);let me;t[55]===Symbol.for(`react.memo_cache_sentinel`)?(me=(0,s.jsx)(u,{name:`x`}),t[55]=me):me=t[55];let he;t[56]===pe?he=t[57]:(he=(0,s.jsx)(`button`,{...T,className:`qm-icon-btn qm-close`,"data-act":`close`,"data-fk":`close`,"aria-label":`Close quick menu`,onClick:pe,children:me}),t[56]=pe,t[57]=he);let ge;t[58]!==fe||t[59]!==he?(ge=(0,s.jsxs)(`div`,{className:`qm-head-actions`,children:[fe,he]}),t[58]=fe,t[59]=he,t[60]=ge):ge=t[60];let _e;t[61]!==Q||t[62]!==ge?(_e=(0,s.jsxs)(`div`,{className:`qm-head`,children:[Q,ge]}),t[61]=Q,t[62]=ge,t[63]=_e):_e=t[63];let ve;t[64]!==h.editing||t[65]!==F?(ve=(0,s.jsx)(`div`,{className:`qm-main`,children:h.editing?(0,s.jsx)(k,{}):F.mode===`phone`?(0,s.jsx)(ee,{}):(0,s.jsx)(K,{})}),t[64]=h.editing,t[65]=F,t[66]=ve):ve=t[66];let ye;t[67]!==I.undo||t[68]!==h.toast?(ye=h.toast&&(0,s.jsxs)(`div`,{"data-k":`toast`,className:`qm-toast`,children:[(0,s.jsx)(`span`,{className:`qm-toast-text`,children:h.toast.text}),(0,s.jsx)(`button`,{...T,className:`qm-link-btn`,"data-act":`undo`,"data-fk":`undo`,onClick:I.undo,children:`Undo`})]},`toast`),t[67]=I.undo,t[68]=h.toast,t[69]=ye):ye=t[69];let be;t[70]===ye?be=t[71]:(be=(0,s.jsx)(`div`,{className:`qm-toast-slot`,children:ye}),t[70]=ye,t[71]=be);let xe;t[72]===Symbol.for(`react.memo_cache_sentinel`)?(xe=(0,s.jsx)(`div`,{ref:x,className:`qm-ghosts`,"aria-hidden":`true`,"data-flip-ghosts":``}),t[72]=xe):xe=t[72];let Se;t[73]!==d||t[74]!==L.clickCapture||t[75]!==q||t[76]!==J||t[77]!==Y||t[78]!==_e||t[79]!==ve||t[80]!==be||t[81]!==U||t[82]!==F?(Se=(0,s.jsxs)(`div`,{ref:y,id:d,className:q,role:`dialog`,"aria-modal":`true`,"aria-labelledby":J,hidden:Y,"data-mode":te,style:U,onClickCapture:X,children:[_e,ve,be,xe]}),t[73]=d,t[74]=L.clickCapture,t[75]=q,t[76]=J,t[77]=Y,t[78]=_e,t[79]=ve,t[80]=be,t[81]=U,t[82]=F,t[83]=Se):Se=t[83];let Ce;return t[84]===w?Ce=t[85]:(Ce=(0,s.jsx)(`p`,{ref:w,className:`qm-sr`,"aria-live":`polite`}),t[84]=w,t[85]=Ce),(0,s.jsxs)(p,{value:B,children:[G,Se,Ce]})}function ot(){}export{at as QuickMenuCard};
|
|
2
|
+
//# sourceMappingURL=chunk.dqWOEtBM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk.dqWOEtBM.js","names":["d","cx","cy","_c","_temp","_temp2","createContext","useContext","name","words","_c","o","label","disabled","dir","title","hint","x","phone","wrapKey","_c","pinned","key","name","board","_c","_temp","e","key","g","items","x","_c","_temp","_temp3","_Fragment","_temp2","id","HIDDEN_ALL","key","title","ids","i","_c","_temp2","_temp","_Fragment","_c","useRef","id","dismissed","next","i","doc","change","focus","x","list","e","board","session","_c","useRef","useEffectEvent","moved","moveSection","dropped","dropSection","card","el","_c","useRef","_temp","e","began","ended","drop","_c","useEffectEvent","d","card","e","from","_c","useRef","_temp","e","sw","_c","useRef","card","backdrop","a","timer","boards","sessions","_c","useState","_temp","useRef","useEffectEvent","backdropRef","top","ghostsRef","cardRef","cardId","liveRef","menu","_c","useState","useRef","__toESM","require_compiler_runtime","require_react","require_jsx_runtime","reducedMotion","import_react","import_compiler_runtime","import_jsx_runtime","PATHS","GRIP","Icon","$","t0","t1","name","t2","_temp$7","_temp2$3","t3","d","cx","cy","MenuContext","useMenu","menu","TITLES","STATE_WORDS","GROUPS","REFRESH_MS","UNDO_MS","ago","minutes","nowMs","iso","hours","days","agentName","s","whatWords","what","detailWords","currentLayout","QM","cssVars","vars","Empty","words","EditItem","x","title","peers","view","o","o_0","idx","side","phone","actions","dir","fk","label","arrow","t4","t5","t6","t7","drag","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","EditLayout","hint","wrapKey","items","c","x_0","BoardRow","key","board","live","pinned","adapter","BoardList","boards","_temp$6","PinnedBody","RecentBody","SessionRow","swipe","e_0","t32","t33","t34","t35","emptyWords","loaded","failed","sessions","SessionsBody","groups","g","_temp$5","_temp3$1","g_0","items_0","_temp2$2","HIDDEN_ALL","NebulaRow","close","SectionBody","id","sectionMeta","parts","w","k","SectionNode","cardId","ColumnsLayout","cols","_temp2$1","i","ids","_temp$4","Tab","n","TabsLayout","columns","_temp3","tab","_temp4","CONFIG_KEY","DISMISSED_KEY","DEFAULT_SECTIONS","isKnown","value","isColumn","isObject","asArray","defaultSections","freshDoc","readRaw","storage","writeRaw","parse","text","readConfig","parsed","doc","updateConfig","next","change","nowIso","writable","sectionsOf","seen","out","entry","fallback","withSections","queue","ordered","pinMatches","pin","app","place","pinsOf","p","togglePin","pins","readDismissed","isDismissed","list","session","dismissSession","undismissSession","clearDismissed","pruneDismissed","before","defaultStorage","initialState","first","isBoard","b","viewOf","mode","layout","sections","pinnedSlugs","here","isPinned","pinnedBoards","slug","recentBoards","a","shownSessions","displayColumns","on","waiting","useAnnounce","liveRef","placeAtEnd","last","moved","moveSection","column","other","dropSection","rest","target","at","setVisible","findFk","card","isDisabled","el","focusables","firstFocusable","main","keepInView","box","r","toColumn","dropTarget","best","bestDist","l","dist","y","col","lr","item","plainClick","useMenuActions","motion","toastSeq","result","saved","toastId","open","render","update","prev","expireToast","timer","announce","cardRef","id_0","rows","dismissed","leaving","exit","dismiss","back","dismissed_0","undo","focus","dismissed_1","restore","pinning","next_0","editing","toggleEdit","i_0","selectTab","next_1","i_1","onTabKey","next_2","doc_0","change_0","focus_0","arrange","id_1","moveSection$1","visible","id_2","list_0","toggleVisible","list_1","id_3","dropSection$1","board_0","openBoard","e_1","session_0","openSession","EASE","DURATIONS","STAGGER_MS","STAGGER_CAP_MS","keyOf","parentKey","parent","measure","map","root","play","after","deltas","entering","pk","pd","dx","dy","parentArrived","delay","ghosts","rootRect","ghost","exits","to","animation","remove","useMotion","job","shown","options","active","kept","opening","backdropRef","ghostsRef","work","card_0","_temp$3","backdrop","el_0","panel","usePageListeners","opener","isInside","firstItem","lastItem","onKeydown","onOutside","onDragMove","onDrop","drop","onDragUp","onResize","resized","began","ended","down","e_2","up","e_3","reset","click","wasBegun","wasEnded","e_4","e_5","move","e_6","drop_0","e_7","resize","useSectionDrag","from","finish","slideBack","_temp$2","e","marker","gripDown","d_1","t","d_2","from_1","end","d_3","cancel","from_0","d_0","useSwipeDismiss","suppressClick","row","sw","sw_0","fromOpacity","sw_1","clickCapture","useVisit","setPlace","_temp$1","closeToken","onClose","openerTop","relayout","listAll","isLoaded","patch","applyRefresh","setShown","showCard","cancelDrag","backdrop_0","token","a_0","fade","hideCard","visit","refresh","boards_0","sessions_0","loading","_temp2","done","QuickMenuCard","setS","top","_temp","t36","t37","t38","t39","t40","t41","t42","t43","t44"],"sources":["../../../web/src/quick-menu/icons.tsx","../../../web/src/quick-menu/menu-context.ts","../../../web/src/quick-menu/model.ts","../../../web/src/quick-menu/parts.tsx","../../../web/src/quick-menu/EditLayout.tsx","../../../web/src/quick-menu/Boards.tsx","../../../web/src/quick-menu/Sessions.tsx","../../../web/src/quick-menu/Sections.tsx","../../../web/src/quick-menu/config.ts","../../../web/src/quick-menu/state.ts","../../../web/src/quick-menu/useAnnounce.ts","../../../web/src/quick-menu/arrange.ts","../../../web/src/quick-menu/dom.ts","../../../web/src/quick-menu/useMenuActions.ts","../../../web/src/quick-menu/flip.ts","../../../web/src/quick-menu/useMotion.ts","../../../web/src/quick-menu/usePageListeners.ts","../../../web/src/quick-menu/useSectionDrag.ts","../../../web/src/quick-menu/useSwipeDismiss.ts","../../../web/src/quick-menu/useVisit.ts","../../../web/src/quick-menu/QuickMenuCard.tsx"],"sourcesContent":["// The quick menu's icons: line drawings on a 24 px grid, drawn in the\n// current colour by the stylesheet (.qm-i), hidden from screen readers.\n\nconst PATHS = {\n x: [\"M6 6l12 12M18 6L6 18\"],\n pin: [\"M9 4h6l-1 6 4 4H6l4-4z\", \"M12 14v6\"],\n out: [\"M8 16L16 8M10 8h6v6\"],\n up: [\"M12 18V6M7 11l5-5 5 5\"],\n down: [\"M12 6v12M7 13l5 5 5-5\"],\n left: [\"M18 12H6M11 7l-5 5 5 5\"],\n right: [\"M6 12h12M13 7l5 5-5 5\"]\n} as const;\n\n/** The grip's six dots. */\nconst GRIP = [9, 15].flatMap((cx) => [7, 12, 17].map((cy) => ({ cx, cy })));\n\nexport type IconName = keyof typeof PATHS | \"grip\";\n\nexport function Icon({ name }: { name: IconName }) {\n return (\n <svg className={`qm-i qm-i--${name}`} viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n {name === \"grip\" ? GRIP.map(({ cx, cy }) => <circle key={`${cx}-${cy}`} cx={cx} cy={cy} r={1.4} />) : PATHS[name].map((d) => <path key={d} d={d} />)}\n </svg>\n );\n}\n","// Quick menu: what its parts read while it's drawn. The card puts its state,\n// what it shows, its actions and its gestures here, and the rows, sections\n// and layouts take what they need; nothing outside the menu provides it.\n\nimport { createContext, useContext } from \"react\";\nimport type { QuickMenuAdapter } from \"./model.ts\";\nimport type { MenuState, MenuView } from \"./state.ts\";\nimport type { MenuActions } from \"./useMenuActions.ts\";\nimport type { SectionDrag } from \"./useSectionDrag.ts\";\nimport type { SwipeDismiss } from \"./useSwipeDismiss.ts\";\n\nexport interface Menu {\n s: MenuState;\n view: MenuView;\n adapter: QuickMenuAdapter;\n /** The dialog's id: headings, tabs and the panel take theirs from it. */\n cardId: string;\n actions: MenuActions;\n swipe: SwipeDismiss;\n drag: SectionDrag;\n close: (options?: { returnFocus?: boolean }) => void;\n}\n\nexport const MenuContext = createContext<Menu | null>(null);\n\nexport function useMenu(): Menu {\n const menu = useContext(MenuContext);\n if (!menu) throw new Error(\"A quick menu part is drawn outside QuickMenuCard.\");\n return menu;\n}\n","/**\n * Quick menu: what the menu shows, as data, and the adapter an app gives it.\n * No DOM and no app imports: the menu knows boards, sessions, links and ways\n * to go somewhere, and the app (Orbit today, Nebula later) supplies them.\n */\n\n/** A board as the menu lists it. */\nexport interface MenuBoard {\n id: string;\n slug: string;\n name: string;\n lastActiveAt: string | null;\n colour: string;\n}\n\n/** An agent's session, in `GET /api/sessions`'s shape (the fields the menu reads). */\nexport interface MenuSession {\n id: string;\n board: { id: string; slug: string; name: string };\n agent: string;\n unnamed: boolean;\n state: \"waiting\" | \"working\" | \"finished\";\n reason: string | null;\n what: string;\n detail: string;\n card: { id: string } | null;\n at: string;\n}\n\nexport interface QuickMenuAdapter {\n /** The app and place its pins belong to (\"orbit\", \"this-computer\"). */\n app: string;\n place: string;\n /** The place in words (\"This computer\", or the server's name). */\n placeLabel: string;\n nebulaUrl: string;\n /** The board on screen, or null. */\n currentBoardId: string | null;\n listBoards(): Promise<MenuBoard[]>;\n listSessions(): Promise<MenuSession[]>;\n /** Links, for opening in a new tab. */\n boardHref(board: MenuBoard): string;\n sessionHref(session: MenuSession): string;\n /** Goes there in this tab. */\n openBoard(board: MenuBoard): void;\n openSession(session: MenuSession): void;\n}\n\nexport const TITLES = { sessions: \"Sessions\", pinned: \"Pinned\", recent: \"Recent\", nebula: \"Nebula\" } as const;\nexport const STATE_WORDS = { waiting: \"Waiting for you\", working: \"Working now\", finished: \"Finished\" } as const;\nexport const GROUPS = [\"waiting\", \"working\", \"finished\"] as const;\nexport const RECENT_COUNT = 5;\nexport const REFRESH_MS = 30_000;\nexport const UNDO_MS = 5_000;\nexport const FIRST_LOAD_WAIT_MS = 600;\nexport const PHONE = \"(max-width: 639px)\";\nexport const THREE = \"(min-width: 1000px)\";\n\nexport function ago(iso: string, nowMs = Date.now()): string {\n const minutes = Math.floor((nowMs - Date.parse(iso)) / 60_000);\n if (!Number.isFinite(minutes) || minutes < 1) return \"just now\";\n if (minutes < 60) return `${minutes} min ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return hours === 1 ? \"1 hour ago\" : `${hours} hours ago`;\n const days = Math.floor(hours / 24);\n return days === 1 ? \"1 day ago\" : `${days} days ago`;\n}\n\nexport const agentName = (s: MenuSession): string => (s.unnamed ? \"Unnamed agent\" : s.agent);\n\n/** describeEvent's words, with its arrow kept on one line (\"In Progress -> Review\"). */\nexport const whatWords = (what: string | null | undefined): string => (what ?? \"\").replace(/ -> /g, \"\\u00a0\\u2192 \");\n\n/** The line under an agent's words: an ask is quoted. */\nexport const detailWords = (s: MenuSession): string => (s.reason === \"ask\" && s.detail ? `\\u201c${s.detail}\\u201d` : s.detail || \"\");\n\n/** How the screen fits the menu: a phone's tabs, or two or three columns. */\nexport type Layout = \"phone\" | \"two\" | \"three\";\n\nexport function currentLayout(): Layout {\n if (matchMedia(PHONE).matches) return \"phone\";\n return matchMedia(THREE).matches ? \"three\" : \"two\";\n}\n","// Quick menu: small pieces every part uses. Its buttons opt out of the house\n// button's look; an empty section says what will appear there.\n\nimport type { CSSProperties } from \"react\";\n\n/** A button that opts out of the house button's primary look and its arc ring. */\nexport const QM = { type: \"button\", \"data-variant\": \"qm\", \"data-no-arc\": \"\" } as const;\n\n/** Custom properties for a style attribute (a board's colour, the column count). */\nexport const cssVars = (vars: Record<string, string>): CSSProperties => vars;\n\nexport function Empty({ name, words }: { name: string; words: string }) {\n return (\n <p data-k={name} className=\"qm-empty\">\n {words}\n </p>\n );\n}\n","// Quick menu: Edit, where the sections are arranged. A column (a tab on a\n// phone) per list; each section has a handle to drag it (mouse and pen),\n// arrows to move it, and a switch to show or hide it.\n\nimport type { ReactNode } from \"react\";\nimport type { Direction } from \"./arrange.ts\";\nimport type { Column, Section } from \"./config.ts\";\nimport { Icon } from \"./icons.tsx\";\nimport { useMenu } from \"./menu-context.ts\";\nimport { TITLES } from \"./model.ts\";\nimport { QM } from \"./parts.tsx\";\n\nfunction EditItem({ section: x, phone }: { section: Section; phone: boolean }) {\n const { view, actions, drag } = useMenu();\n const title = TITLES[x.id];\n const peers = view.sections.filter((o) => o.column === x.column);\n const idx = peers.findIndex((o) => o.id === x.id);\n const side = phone ? \"tab\" : \"column\";\n const arrow = (dir: Direction, fk: string, label: string, disabled: boolean): ReactNode => (\n <button {...QM} className=\"qm-icon-btn\" data-act={`move-${dir}`} data-id={x.id} data-fk={`${fk}-${x.id}`} aria-label={label} disabled={disabled} onClick={() => actions.moveSection(x.id, dir)}>\n <Icon name={dir} />\n </button>\n );\n return (\n <li data-k={`edit-${x.id}`} className={x.visible ? \"qm-edit-item\" : \"qm-edit-item is-hidden\"} data-sec={x.id} data-col={String(x.column)}>\n <span className=\"qm-grip\" data-grip={x.id} title=\"Drag to move\" aria-hidden=\"true\" onPointerDown={(e) => drag.gripDown(e, x.id)}>\n <Icon name=\"grip\" />\n </span>\n <span className=\"qm-edit-name\">\n <span className=\"qm-edit-title\">{title}</span>\n <span className=\"qm-edit-hidden\" hidden={x.visible}>\n hidden\n </span>\n </span>\n <span className=\"qm-edit-ctrls\">\n {arrow(\"left\", \"ml\", `Move ${title} to the ${side} on the left`, x.column <= 1)}\n {arrow(\"up\", \"mu\", `Move ${title} up`, idx <= 0)}\n {arrow(\"down\", \"md\", `Move ${title} down`, idx >= peers.length - 1)}\n {arrow(\"right\", \"mr\", `Move ${title} to the ${side} on the right`, x.column >= 3)}\n <button {...QM} className=\"qm-switch\" role=\"switch\" data-act=\"toggle-visible\" data-id={x.id} data-fk={`vis-${x.id}`} aria-label={`Show ${title}`} aria-checked={x.visible} onClick={() => actions.toggleVisible(x.id)}>\n <span className=\"qm-switch-knob\" aria-hidden=\"true\" />\n </button>\n </span>\n </li>\n );\n}\n\nexport function EditLayout() {\n const { s, view } = useMenu();\n const phone = view.mode === \"phone\";\n const hint = [\n phone ? \"Move sections with the arrows; the switch shows or hides one.\" : \"Drag a section by its handle, or use the arrows. The switch shows or hides one.\",\n s.writable ? \"Your arrangement follows you between Orbit and Nebula once you sign in.\" : \"A newer Orbit or Nebula saved this arrangement, so changes here last until you reload.\"\n ].join(\" \");\n const wrapKey = phone ? \"edit-cols-stacked\" : \"edit-cols\";\n return (\n <div key=\"edit-body\" data-k=\"edit-body\" className=\"qm-scroll\">\n <p data-k=\"edit-hint\" className=\"qm-edit-hint\">\n {hint}\n </p>\n <div key={wrapKey} data-k={wrapKey} className={phone ? \"qm-edit-cols is-stacked\" : \"qm-edit-cols\"}>\n {([1, 2, 3] as const satisfies readonly Column[]).map((c) => {\n const items = view.sections.filter((x) => x.column === c);\n return (\n <div key={`editcol-${c}`} data-k={`editcol-${c}`} className=\"qm-edit-col\">\n <h4 className=\"qm-group-title\">{`${phone ? \"Tab\" : \"Column\"} ${c}`}</h4>\n <ul className=\"qm-edit-list\" role=\"list\" data-col={String(c)}>\n {items.length ? (\n items.map((x) => <EditItem key={`edit-${x.id}`} section={x} phone={phone} />)\n ) : (\n <li key={`edit-empty-${c}`} data-k={`edit-empty-${c}`} className=\"qm-edit-empty\">\n Empty\n </li>\n )}\n </ul>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","// Quick menu: the Pinned and Recent sections. A board row opens the board\n// and says what's happening on it (an agent waiting or working, else when it\n// was last active); its pin moves it between the two.\n\nimport { useMenu } from \"./menu-context.ts\";\nimport { Icon } from \"./icons.tsx\";\nimport { ago } from \"./model.ts\";\nimport type { MenuBoard } from \"./model.ts\";\nimport { Empty, QM, cssVars } from \"./parts.tsx\";\n\nfunction BoardRow({ board }: { board: MenuBoard }) {\n const { s, view, adapter, actions } = useMenu();\n const key = `board-${board.id}`;\n const live = view.activity(board);\n const pinned = view.isPinned(board);\n return (\n <li data-k={key} className=\"qm-board\">\n <a className=\"qm-board-main\" data-act=\"open-board\" data-fk={`board-open-${board.id}`} href={adapter.boardHref(board)} data-id={board.id} onClick={(e) => actions.openBoard(e, board)}>\n <span className=\"qm-planet\" aria-hidden=\"true\" style={cssVars({ \"--c\": board.colour })}>\n <span className=\"qm-sat qm-sat--planet\" hidden={!live} data-state={live?.state} />\n </span>\n <span className=\"qm-board-text\">\n <span className=\"qm-board-name\">\n <span className=\"qm-board-title\">{board.name}</span>\n <span className=\"qm-here-tag\" hidden={board.id !== adapter.currentBoardId}>\n Here\n </span>\n </span>\n <span className=\"qm-board-meta\">\n <span className=\"qm-board-place\">{`${adapter.placeLabel} \\u00b7 `}</span>\n <span className=\"qm-activity\" data-state={live?.state}>\n {live ? live.words : board.lastActiveAt ? `active ${ago(board.lastActiveAt, s.now)}` : \"not opened yet\"}\n </span>\n </span>\n </span>\n </a>\n <button {...QM} className=\"qm-icon-btn qm-pin\" data-act=\"pin\" data-fk={`pin-${board.id}`} data-id={board.id} aria-pressed={pinned} aria-label={`Pin ${board.name}`} title={pinned ? \"Unpin\" : \"Pin\"} onClick={() => actions.pin(board)}>\n <Icon name=\"pin\" />\n </button>\n </li>\n );\n}\n\nfunction BoardList({ name, boards }: { name: string; boards: MenuBoard[] }) {\n return (\n <ul data-k={name} className=\"qm-list\" role=\"list\">\n {boards.map((board) => (\n <BoardRow key={`board-${board.id}`} board={board} />\n ))}\n </ul>\n );\n}\n\nexport function PinnedBody() {\n const { s, view } = useMenu();\n if (view.pinnedBoards.length) return <BoardList key=\"list-pinned\" name=\"list-pinned\" boards={view.pinnedBoards} />;\n if (!s.loaded) return <Empty key=\"empty-pinned\" name=\"empty-pinned\" words=\"Looking for your boards.\" />;\n return <Empty key=\"empty-pinned\" name=\"empty-pinned\" words={s.boards.length ? \"Nothing pinned yet. Pin a board in Recent with its pin, and it stays here.\" : \"Nothing pinned yet. Create a board, then pin it here.\"} />;\n}\n\nexport function RecentBody() {\n const { s, view } = useMenu();\n if (view.recentBoards.length) return <BoardList key=\"list-recent\" name=\"list-recent\" boards={view.recentBoards} />;\n if (!s.loaded) return <Empty key=\"empty-recent\" name=\"empty-recent\" words=\"Looking for your boards.\" />;\n return <Empty key=\"empty-recent\" name=\"empty-recent\" words={s.boards.length ? \"Every board is pinned.\" : \"No boards yet. Create one from the Board menu and it shows here, last active first.\"} />;\n}\n","// Quick menu: the Sessions section. Agents' sessions grouped as waiting for\n// you, working now and finished; each row opens its card and can be\n// dismissed (its x, or a swipe). Agent names and an agent's question are text\n// someone else wrote, so they're drawn as text.\n\nimport { useMenu } from \"./menu-context.ts\";\nimport { Icon } from \"./icons.tsx\";\nimport { GROUPS, STATE_WORDS, agentName, ago, detailWords, whatWords } from \"./model.ts\";\nimport type { MenuSession } from \"./model.ts\";\nimport { Empty, QM, cssVars } from \"./parts.tsx\";\n\nfunction SessionRow({ session: x }: { session: MenuSession }) {\n const { s, view, adapter, actions, swipe } = useMenu();\n const key = `ses-${x.id}`;\n return (\n <li data-k={key} className=\"qm-ses\" data-ses={x.id} data-state={x.state} onPointerDown={(e) => swipe.down(e, x.id)} onPointerMove={swipe.move} onPointerUp={swipe.end} onPointerCancel={swipe.cancel}>\n <span className=\"qm-sat\" aria-hidden=\"true\" data-state={x.state} />\n <a className=\"qm-ses-main\" data-act=\"open-session\" data-fk={`ses-open-${x.id}`} href={adapter.sessionHref(x)} data-id={x.id} onClick={(e) => actions.openSession(e, x)}>\n <span className=\"qm-ses-line\">\n <strong className=\"qm-ses-agent\">{agentName(x)}</strong> <span className=\"qm-ses-what\">{whatWords(x.what)}</span>\n </span>\n <span className=\"qm-ses-detail\" hidden={!x.detail}>\n {detailWords(x)}\n </span>\n <span className=\"qm-ses-meta\">\n <span className=\"qm-dot\" aria-hidden=\"true\" style={cssVars({ \"--c\": view.boardById(x.board.id)?.colour || \"currentColor\" })} />\n <span className=\"qm-ses-where\">{`${x.board.name} \\u00b7 ${ago(x.at, s.now)}`}</span>\n </span>\n </a>\n <button {...QM} className=\"qm-x\" data-act=\"dismiss\" data-fk={`ses-x-${x.id}`} data-id={x.id} aria-label={`Dismiss ${agentName(x)} on ${x.board.name}`} onClick={() => actions.dismiss(x.id)}>\n <Icon name=\"x\" />\n </button>\n </li>\n );\n}\n\n/** What Sessions shows when it has no rows, by why. */\nfunction emptyWords(loaded: boolean, failed: boolean, boards: number, sessions: number): string {\n if (!loaded) return \"Looking for agents on your boards.\";\n if (failed) return \"Sessions didn't load. Orbit tries again in 30 seconds while this menu is open.\";\n if (!boards) return \"No boards yet, so no agents either. When an agent writes on one of your boards, its session shows here for two hours.\";\n if (sessions) return \"All quiet. The sessions left are dismissed.\";\n return \"All quiet. No agent has written on your boards in the last two hours. When one does, its session shows here.\";\n}\n\nexport function SessionsBody() {\n const { s, view, actions } = useMenu();\n const groups = GROUPS.map((g) => ({ g, items: view.shownSessions.filter((x) => x.state === g) })).filter(({ items }) => items.length);\n return (\n <>\n {groups.map(({ g, items }) => (\n <div key={`grp-${g}`} data-k={`grp-${g}`} className=\"qm-group\">\n <h4 className=\"qm-group-title\" data-state={g}>\n {STATE_WORDS[g]} <span className=\"qm-count\">{String(items.length)}</span>\n </h4>\n <ul className=\"qm-list\" role=\"list\">\n {items.map((x) => (\n <SessionRow key={`ses-${x.id}`} session={x} />\n ))}\n </ul>\n </div>\n ))}\n {groups.length ? null : <Empty key=\"empty-sessions\" name=\"empty-sessions\" words={emptyWords(s.loaded, s.sessionsFailed, s.boards.length, s.sessions.length)} />}\n {view.hiddenCount ? (\n <p key=\"dismissed-foot\" data-k=\"dismissed-foot\" className=\"qm-foot\">\n <span className=\"qm-foot-count\">{`${view.hiddenCount} dismissed in this browser.`}</span>{\" \"}\n <button {...QM} className=\"qm-link-btn\" data-act=\"restore\" data-fk=\"restore\" onClick={actions.restore}>\n Show them again\n </button>\n </p>\n ) : null}\n </>\n );\n}\n","// Quick menu: its sections and how they're laid out. On a wide screen the\n// columns side by side (three, or two between 640 and 999 px); on a phone a\n// tab per column and one panel. Each section is a region named by its\n// heading, with a line of meta beside it.\n\nimport { PinnedBody, RecentBody } from \"./Boards.tsx\";\nimport type { SectionId } from \"./config.ts\";\nimport { Icon } from \"./icons.tsx\";\nimport { useMenu } from \"./menu-context.ts\";\nimport { TITLES } from \"./model.ts\";\nimport { Empty, QM, cssVars } from \"./parts.tsx\";\nimport { SessionsBody } from \"./Sessions.tsx\";\nimport type { MenuView } from \"./state.ts\";\n\nconst HIDDEN_ALL = \"Every section is hidden. Choose Edit to show one.\";\n\nfunction NebulaRow() {\n const { adapter, close } = useMenu();\n return (\n <a data-k=\"nebula-row\" className=\"qm-app-row\" href={adapter.nebulaUrl} target=\"_blank\" rel=\"noopener\" data-act=\"open-nebula\" data-fk=\"nebula-row\" onClick={() => close({ returnFocus: false })}>\n <span className=\"qm-app-glyph\" aria-hidden=\"true\" />\n <span className=\"qm-app-text\">\n <span className=\"qm-app-title\">Notes in Nebula</span>\n <span className=\"qm-app-meta\">Opens Nebula in a new tab</span>\n </span>\n <Icon name=\"out\" />\n </a>\n );\n}\n\nfunction SectionBody({ id }: { id: SectionId }) {\n switch (id) {\n case \"sessions\":\n return <SessionsBody />;\n case \"pinned\":\n return <PinnedBody />;\n case \"recent\":\n return <RecentBody />;\n case \"nebula\":\n return <NebulaRow />;\n }\n}\n\n/** The line beside a section's heading. */\nfunction sectionMeta(id: SectionId, view: MenuView): string {\n switch (id) {\n case \"sessions\": {\n const parts: string[] = [];\n const w = view.shownSessions.filter((x) => x.state === \"waiting\").length;\n const k = view.shownSessions.filter((x) => x.state === \"working\").length;\n if (w) parts.push(`${w} waiting`);\n if (k) parts.push(`${k} working`);\n return parts.join(\", \") || \"quiet\";\n }\n case \"pinned\":\n return view.pinnedBoards.length === 1 ? \"1 board\" : `${view.pinnedBoards.length} boards`;\n case \"recent\":\n return \"last active first\";\n case \"nebula\":\n return \"notes for your projects\";\n }\n}\n\nfunction SectionNode({ id }: { id: SectionId }) {\n const { view, cardId } = useMenu();\n return (\n <section data-k={`sec-${id}`} className=\"qm-sec\" data-sec={id} aria-labelledby={`${cardId}-h-${id}`}>\n <header className=\"qm-sec-head\">\n <h3 className=\"qm-sec-title\" id={`${cardId}-h-${id}`}>\n {TITLES[id]}\n </h3>\n <span className=\"qm-sec-meta\">{sectionMeta(id, view)}</span>\n </header>\n <div className=\"qm-sec-body\">\n <SectionBody id={id} />\n </div>\n </section>\n );\n}\n\nexport function ColumnsLayout() {\n const { view } = useMenu();\n const cols = view.displayColumns;\n if (!cols.length) return <Empty key=\"empty-all\" name=\"empty-all\" words={HIDDEN_ALL} />;\n const key = `cols-${cols.length}`;\n return (\n <div key={key} data-k={key} className=\"qm-cols\" style={cssVars({ \"--cols\": String(cols.length) })}>\n {cols.map((ids, i) => (\n <div key={`col-${i + 1}`} data-k={`col-${i + 1}`} className=\"qm-col\">\n {ids.map((id) => (\n <SectionNode key={`sec-${id}`} id={id} />\n ))}\n </div>\n ))}\n </div>\n );\n}\n\n/** A phone tab. Tabs carry no data-k: they don't fly, the ink does. */\nfunction Tab({ ids, i }: { ids: SectionId[]; i: number }) {\n const { view, cardId, actions } = useMenu();\n const title = ids[0] ? TITLES[ids[0]] : \"\";\n const n = ids.includes(\"sessions\") ? view.waitingCount : 0;\n return (\n <button\n {...QM}\n role=\"tab\"\n className=\"qm-tab\"\n id={`${cardId}-tab-${i}`}\n data-act=\"tab\"\n data-id={String(i)}\n data-fk={`tab-${i}`}\n aria-controls={`${cardId}-panel`}\n aria-label={n ? `${title}, ${n} waiting` : undefined}\n aria-selected={i === view.tab}\n tabIndex={i === view.tab ? 0 : -1}\n onClick={() => actions.selectTab(i)}\n onKeyDown={(e) => actions.onTabKey(e, i)}\n >\n <span className=\"qm-tab-label\">{title}</span>\n <span className=\"qm-tab-badge\" data-state=\"waiting\" hidden={!n}>\n {n ? String(n) : \"\"}\n </span>\n </button>\n );\n}\n\nexport function TabsLayout() {\n const { view, cardId } = useMenu();\n const { columns, tab } = view;\n if (!columns.length) return <Empty key=\"empty-all\" name=\"empty-all\" words={HIDDEN_ALL} />;\n return (\n <>\n <div key=\"tabs\" data-k=\"tabs\" className=\"qm-tabs\" role=\"tablist\" aria-label=\"Sections\">\n {columns.map((ids, i) => (\n <Tab key={`tab-${i}`} ids={ids} i={i} />\n ))}\n <span className=\"qm-tab-ink\" aria-hidden=\"true\" style={cssVars({ \"--n\": String(columns.length), \"--i\": String(tab) })} />\n </div>\n <div key=\"panel\" data-k=\"panel\" className=\"qm-panel\" role=\"tabpanel\" id={`${cardId}-panel`} tabIndex={-1} aria-labelledby={`${cardId}-tab-${tab}`}>\n {(columns[tab] ?? []).map((id) => (\n <SectionNode key={`sec-${id}`} id={id} />\n ))}\n </div>\n </>\n );\n}\n","/**\n * Quick menu: the config both apps read, version 1, and this browser's\n * dismissals.\n *\n * No DOM and no app imports, in @starlove/ui's shape: it moves into ss-ui\n * with the menu when Nebula takes it. Storage is passed in (anything with\n * getItem and setItem, such as localStorage), so it tests without a browser.\n *\n * Rules for every app that reads the config:\n * - keep every field you don't understand when writing back (unknown top-level\n * fields, unknown sections where they stand, other apps' and places' pins);\n * - additive changes stay version 1; a breaking change is version 2;\n * - an app that meets a version newer than it knows shows its defaults and\n * never writes, so it can't clobber the newer copy.\n */\n\nexport const CONFIG_KEY = \"starscape.quickMenu.config\";\nexport const DISMISSED_KEY = \"starscape.quickMenu.dismissed\";\nexport const VERSION = 1;\n\nexport type SectionId = \"sessions\" | \"pinned\" | \"nebula\" | \"recent\";\nexport type Column = 1 | 2 | 3;\n\n/** A section as this app shows it; fields another app added ride along. */\nexport interface Section {\n [field: string]: unknown;\n id: SectionId;\n visible: boolean;\n column: Column;\n}\n\n/** The stored document. Entries this app doesn't know stay `unknown` and are kept as they are. */\nexport interface ConfigDoc {\n [field: string]: unknown;\n version: number;\n sections: unknown[] | null;\n pins: unknown[];\n}\n\n/** Where a pin belongs: the app, its place, and the board's slug. */\nexport interface PinTarget {\n app: string;\n place: string;\n board: string;\n}\n\n/** A dismissed session: its id and its state when it was dismissed. */\nexport interface Dismissal {\n id: string;\n state: string | null;\n}\n\n/** localStorage, or anything with its two methods; null when there is none. */\nexport type ConfigStorage = Pick<Storage, \"getItem\" | \"setItem\"> | null;\n\n/** The sections this app shows, in 2.0's default arrangement (`sections: null`). */\nconst DEFAULT_SECTIONS: readonly Section[] = [\n { id: \"sessions\", visible: true, column: 1 },\n { id: \"pinned\", visible: true, column: 2 },\n { id: \"nebula\", visible: true, column: 2 },\n { id: \"recent\", visible: true, column: 3 }\n];\n\nconst isKnown = (value: unknown): value is SectionId => DEFAULT_SECTIONS.some((s) => s.id === value);\nconst isColumn = (value: unknown): value is Column => value === 1 || value === 2 || value === 3;\nconst isObject = (value: unknown): value is Record<string, unknown> => Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\nconst asArray = (value: unknown): unknown[] | null => (Array.isArray(value) ? (value as unknown[]) : null);\n\nexport function defaultSections(): Section[] {\n return DEFAULT_SECTIONS.map((s) => ({ ...s }));\n}\n\nfunction freshDoc(): ConfigDoc {\n return { version: VERSION, updatedAt: null, style: \"columns\", sections: null, pins: [] };\n}\n\nfunction readRaw(storage: ConfigStorage, key: string): string | null {\n try {\n return storage?.getItem(key) ?? null;\n } catch {\n return null; // storage blocked: nothing is saved\n }\n}\n\nfunction writeRaw(storage: ConfigStorage, key: string, value: unknown): boolean {\n if (!storage) return false;\n try {\n storage.setItem(key, JSON.stringify(value));\n return true;\n } catch {\n return false; // private mode or full: the change lasts this page only\n }\n}\n\nfunction parse(text: string | null): unknown {\n try {\n return JSON.parse(text ?? \"null\") as unknown;\n } catch {\n return null;\n }\n}\n\n/**\n * The stored document, or a fresh default one. `writable` is false when the\n * stored copy is from a newer version: show `doc` (defaults) and never save.\n */\nexport function readConfig(storage: ConfigStorage): { doc: ConfigDoc; writable: boolean } {\n const parsed = parse(readRaw(storage, CONFIG_KEY));\n if (!isObject(parsed) || typeof parsed.version !== \"number\") return { doc: freshDoc(), writable: true };\n if (parsed.version > VERSION) return { doc: freshDoc(), writable: false };\n if (parsed.version !== VERSION) return { doc: freshDoc(), writable: true };\n const doc: ConfigDoc = { ...parsed, version: parsed.version, pins: asArray(parsed.pins) ?? [], sections: asArray(parsed.sections) };\n if (!(\"style\" in doc)) doc.style = \"columns\";\n return { doc, writable: true };\n}\n\n/**\n * Applies `change(doc)` to a fresh read and saves it, so another tab's change\n * since this page read the config isn't lost. `ok` is false (and nothing is\n * written) when the stored copy is newer or storage refuses.\n */\nexport function updateConfig(storage: ConfigStorage, change: (doc: ConfigDoc) => ConfigDoc, nowIso = new Date().toISOString()): { ok: boolean; doc: ConfigDoc } {\n const { doc, writable } = readConfig(storage);\n const next: ConfigDoc = { ...change(doc), updatedAt: nowIso };\n if (!writable) return { ok: false, doc: next };\n return { ok: writeRaw(storage, CONFIG_KEY, next), doc: next };\n}\n\n/**\n * The sections to show, in order: the stored arrangement's known sections\n * (each a copy, unknown fields kept), then any known section it lacks, with\n * its default. Unknown ids stay in the document and aren't shown.\n */\nexport function sectionsOf(doc: ConfigDoc): Section[] {\n if (!Array.isArray(doc.sections)) return defaultSections();\n const seen = new Set<SectionId>();\n const out: Section[] = [];\n for (const entry of doc.sections) {\n if (!isObject(entry)) continue;\n const id = entry.id;\n if (!isKnown(id) || seen.has(id)) continue;\n seen.add(id);\n const fallback = DEFAULT_SECTIONS.find((s) => s.id === id)?.column ?? 1;\n out.push({ ...entry, id, visible: entry.visible !== false, column: isColumn(entry.column) ? entry.column : fallback });\n }\n for (const s of DEFAULT_SECTIONS) if (!seen.has(s.id)) out.push({ ...s });\n return out;\n}\n\n/** The document with this app's sections in `ordered`'s order; unknown entries keep their slots. */\nexport function withSections(doc: ConfigDoc, ordered: Section[]): ConfigDoc {\n const queue = ordered.map((s) => ({ ...s }));\n const out: unknown[] = [];\n for (const entry of doc.sections ?? []) {\n if (isObject(entry) && isKnown(entry.id)) {\n const next = queue.shift();\n if (next) out.push(next);\n } else {\n out.push(entry);\n }\n }\n out.push(...queue);\n return { ...doc, sections: out };\n}\n\nconst pinMatches = (pin: unknown, { app, place, board }: PinTarget): boolean => isObject(pin) && pin.app === app && pin.place === place && pin.board === board;\n\n/** This app and place's pinned boards, in pin order. */\nexport function pinsOf(doc: ConfigDoc, { app, place }: { app: string; place: string }): string[] {\n const out: string[] = [];\n for (const p of doc.pins) if (isObject(p) && p.app === app && p.place === place && typeof p.board === \"string\") out.push(p.board);\n return out;\n}\n\n/** Pins or unpins one board; every other pin stays as it was. */\nexport function togglePin(doc: ConfigDoc, pin: PinTarget): ConfigDoc {\n const pins = doc.pins;\n const next = pins.some((p) => pinMatches(p, pin)) ? pins.filter((p) => !pinMatches(p, pin)) : [...pins, { app: pin.app, place: pin.place, board: pin.board }];\n return { ...doc, pins: next };\n}\n\n// ---- dismissals: this browser only, never in the config ----\n\nexport function readDismissed(storage: ConfigStorage): Dismissal[] {\n const parsed = asArray(parse(readRaw(storage, DISMISSED_KEY) ?? \"[]\"));\n if (!parsed) return [];\n const out: Dismissal[] = [];\n for (const d of parsed) {\n if (typeof d === \"string\") out.push({ id: d, state: null });\n else if (isObject(d) && typeof d.id === \"string\") out.push({ id: d.id, state: typeof d.state === \"string\" ? d.state : null });\n }\n return out;\n}\n\n/**\n * Hidden while dismissed, unless it now waits for you and didn't when it was\n * dismissed: a question is the one thing that should come back.\n */\nexport function isDismissed(list: Dismissal[], session: { id: string; state: string }): boolean {\n const entry = list.find((d) => d.id === session.id);\n if (!entry) return false;\n return !(session.state === \"waiting\" && entry.state !== \"waiting\");\n}\n\nexport function dismissSession(storage: ConfigStorage, session: { id: string; state?: string | null }): Dismissal[] {\n const list = readDismissed(storage).filter((d) => d.id !== session.id);\n list.push({ id: session.id, state: session.state ?? null });\n writeRaw(storage, DISMISSED_KEY, list);\n return list;\n}\n\nexport function undismissSession(storage: ConfigStorage, id: string): Dismissal[] {\n const list = readDismissed(storage).filter((d) => d.id !== id);\n writeRaw(storage, DISMISSED_KEY, list);\n return list;\n}\n\nexport function clearDismissed(storage: ConfigStorage): Dismissal[] {\n writeRaw(storage, DISMISSED_KEY, []);\n return [];\n}\n\n/** Forgets dismissals of sessions no longer in the feed (it keeps 2 hours). */\nexport function pruneDismissed(storage: ConfigStorage, sessions: { id: string }[]): Dismissal[] {\n const live = new Set(sessions.map((s) => s.id));\n const before = readDismissed(storage);\n const list = before.filter((d) => live.has(d.id));\n if (list.length !== before.length) writeRaw(storage, DISMISSED_KEY, list);\n return list;\n}\n","// Quick menu: what it holds while it's in the page (boards, sessions, the\n// arrangement, Edit, the phone tab, Undo), and what it shows from that,\n// worked out on each draw. No React and no DOM.\n\nimport { isDismissed, pinsOf, readConfig, readDismissed, sectionsOf } from \"./config.ts\";\nimport type { ConfigDoc, ConfigStorage, Dismissal, Section, SectionId } from \"./config.ts\";\nimport { RECENT_COUNT, agentName } from \"./model.ts\";\nimport type { Layout, MenuBoard, MenuSession } from \"./model.ts\";\n\nexport interface Toast {\n id: number;\n text: string;\n /** The session Undo brings back. */\n undo: string;\n}\n\nexport interface MenuState {\n editing: boolean;\n tab: number;\n boards: MenuBoard[];\n sessions: MenuSession[];\n loaded: boolean;\n sessionsFailed: boolean;\n doc: ConfigDoc;\n writable: boolean;\n dismissed: Dismissal[];\n toast: Toast | null;\n /** When the data was read: \"3 min ago\" counts from here. */\n now: number;\n}\n\n/** Merges a change into the state, as a patch or worked out from the state before it. */\nexport type Update = (patch: Partial<MenuState> | ((prev: MenuState) => Partial<MenuState>)) => void;\n\n/** Where this app's pins belong: the app, and the place it runs. */\nexport interface Here {\n app: string;\n place: string;\n}\n\nexport function defaultStorage(): ConfigStorage {\n try {\n return globalThis.localStorage;\n } catch {\n return null; // storage blocked: the menu keeps its arrangement for this page\n }\n}\n\nexport function initialState(storage: ConfigStorage): MenuState {\n const first = readConfig(storage);\n return { editing: false, tab: 0, boards: [], sessions: [], loaded: false, sessionsFailed: false, doc: first.doc, writable: first.writable, dismissed: readDismissed(storage), toast: null, now: Date.now() };\n}\n\n/** What a board row says is happening on it: an agent waiting for you comes first. */\nexport interface Activity {\n state: \"waiting\" | \"working\";\n words: string;\n}\n\n/** What the menu shows, from its state, the window's layout and where its pins belong. */\nexport interface MenuView {\n mode: \"phone\" | \"wide\";\n sections: Section[];\n pinnedBoards: MenuBoard[];\n recentBoards: MenuBoard[];\n /** Sessions not dismissed in this browser. */\n shownSessions: MenuSession[];\n hiddenCount: number;\n waitingCount: number;\n /** The visible sections by column, empty columns left out. */\n columns: SectionId[][];\n /** The columns as drawn: three, or two (the third under the second) between 640 and 999 px. */\n displayColumns: SectionId[][];\n /** The phone tab shown: a tab past the last column (one was hidden) shows the first. */\n tab: number;\n isPinned: (board: MenuBoard) => boolean;\n boardById: (id: string | null) => MenuBoard | undefined;\n activity: (board: MenuBoard) => Activity | null;\n}\n\nconst isBoard = (b: MenuBoard | undefined): b is MenuBoard => b !== undefined;\n\nexport function viewOf(s: MenuState, layout: Layout, here: Here): MenuView {\n const mode = layout === \"phone\" ? \"phone\" : \"wide\";\n const sections = sectionsOf(s.doc);\n const pinnedSlugs = pinsOf(s.doc, here);\n const isPinned = (board: MenuBoard): boolean => pinnedSlugs.includes(board.slug);\n const pinnedBoards = pinnedSlugs.map((slug) => s.boards.find((b) => b.slug === slug)).filter(isBoard);\n const recentBoards = s.boards\n .filter((b) => !isPinned(b))\n .sort((a, b) => (Date.parse(b.lastActiveAt ?? \"\") || 0) - (Date.parse(a.lastActiveAt ?? \"\") || 0))\n .slice(0, RECENT_COUNT);\n const shownSessions = s.sessions.filter((x) => !isDismissed(s.dismissed, x));\n\n const columns: SectionId[][] = [];\n const cols: SectionId[][] = [[], [], []];\n for (const x of sections) if (x.visible) cols[x.column - 1]?.push(x.id);\n for (const c of cols) if (c.length) columns.push(c);\n const [a = [], b = [], c = []] = columns;\n const displayColumns = mode === \"phone\" || layout === \"three\" || columns.length < 3 ? columns : [a, [...b, ...c]];\n\n const activity = (board: MenuBoard): Activity | null => {\n const on = shownSessions.filter((x) => x.board.id === board.id && x.state !== \"finished\");\n const waiting = on.find((x) => x.state === \"waiting\");\n if (waiting) return { state: \"waiting\", words: `${agentName(waiting)} waiting` };\n const first = on[0];\n if (first) return { state: \"working\", words: `${agentName(first)} working` };\n return null;\n };\n\n return {\n mode,\n sections,\n pinnedBoards,\n recentBoards,\n shownSessions,\n hiddenCount: s.sessions.length - shownSessions.length,\n waitingCount: shownSessions.filter((x) => x.state === \"waiting\").length,\n columns,\n displayColumns,\n tab: s.tab < columns.length ? s.tab : 0,\n isPinned,\n boardById: (id) => (id ? s.boards.find((board) => board.id === id) : undefined),\n activity\n };\n}\n","// Quick menu: a polite live region, for what changed when nothing on screen\n// says it (pinned, moved, dismissed). The words are set straight on the\n// region, emptied first and filled a beat later, so the same words twice are\n// still spoken twice.\n\nimport { useRef } from \"react\";\nimport type { RefObject } from \"react\";\n\nexport function useAnnounce(): { liveRef: RefObject<HTMLParagraphElement | null>; announce: (words: string) => void } {\n const liveRef = useRef<HTMLParagraphElement>(null);\n const announce = (words: string): void => {\n const live = liveRef.current;\n if (!live) return;\n live.textContent = \"\";\n setTimeout(() => {\n live.textContent = words;\n }, 30);\n };\n return { liveRef, announce };\n}\n","// Quick menu: Edit's changes to the arrangement, as plain list changes. The\n// arrows move a section one step, a drag drops it where the marker showed,\n// and the switch shows or hides it. Each returns a new list; a move that\n// can't happen returns the list it was given.\n\nimport type { Section, SectionId } from \"./config.ts\";\nimport type { DropTarget } from \"./dom.ts\";\n\nexport type Direction = \"up\" | \"down\" | \"left\" | \"right\";\n\n/** `list` with `moved` placed after the last section of its column (or at the end). */\nfunction placeAtEnd(list: Section[], moved: Section): Section[] {\n const out = [...list];\n const inCol = out.filter((x) => x.column === moved.column);\n const last = inCol.at(-1);\n out.splice(last ? out.indexOf(last) + 1 : out.length, 0, moved);\n return out;\n}\n\n/** Up or down within its column, or left or right to the end of the column beside. */\nexport function moveSection(list: Section[], id: SectionId, dir: Direction): Section[] {\n const x = list.find((o) => o.id === id);\n if (!x) return list;\n if (dir === \"left\" || dir === \"right\") {\n const column = x.column + (dir === \"left\" ? -1 : 1);\n if (column !== 1 && column !== 2 && column !== 3) return list;\n return placeAtEnd(\n list.filter((o) => o !== x),\n { ...x, column }\n );\n }\n const peers = list.filter((o) => o.column === x.column);\n const other = peers[peers.indexOf(x) + (dir === \"up\" ? -1 : 1)];\n if (!other) return list;\n const out = [...list];\n const a = out.indexOf(x);\n const b = out.indexOf(other);\n out[a] = other;\n out[b] = x;\n return out;\n}\n\n/** Into the drop target's column, before the section it names (or at the column's end). */\nexport function dropSection(list: Section[], id: SectionId, target: DropTarget): Section[] {\n const x = list.find((o) => o.id === id);\n if (!x) return list;\n const rest = list.filter((o) => o !== x);\n const moved: Section = { ...x, column: target.col };\n const at = target.before ? rest.findIndex((o) => o.id === target.before) : -1;\n if (at < 0) return placeAtEnd(rest, moved);\n rest.splice(at, 0, moved);\n return rest;\n}\n\nexport function setVisible(list: Section[], id: SectionId, visible: boolean): Section[] {\n return list.map((x) => (x.id === id ? { ...x, visible } : x));\n}\n","// Quick menu: what the menu reads off its own page. Focus order, the first\n// thing to focus, scrolling a control into view, and where a dragged section\n// would land. Plain DOM, so the gestures and the focus trap see exactly what\n// is drawn.\n\nimport type { Column } from \"./config.ts\";\n\nexport const findFk = (card: Element, fk: string): HTMLElement | null => card.querySelector<HTMLElement>(`[data-fk=\"${CSS.escape(fk)}\"]`);\n\nexport const isDisabled = (el: Element): boolean => el instanceof HTMLButtonElement && el.disabled;\n\n/** The card's focusable controls in page order, leaving out ghosts and anything hidden. */\nexport function focusables(card: Element): HTMLElement[] {\n return [...card.querySelectorAll<HTMLElement>('a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])')].filter(\n (el) => !el.closest(\".qm-ghosts\") && el.getClientRects().length > 0 && !el.closest(\"[hidden]\")\n );\n}\n\n/** The first session waiting for you, else the selected tab, else the first row, else Close. */\nexport function firstFocusable(card: Element): HTMLElement | null {\n const main = card.querySelector(\".qm-main\");\n return (\n card.querySelector<HTMLElement>('.qm-ses[data-state=\"waiting\"] .qm-ses-main') ??\n card.querySelector<HTMLElement>('.qm-main [role=\"tab\"][aria-selected=\"true\"]') ??\n focusables(card).find((el) => main?.contains(el)) ??\n card.querySelector<HTMLElement>(\".qm-close\")\n );\n}\n\n/** Scrolls the column, panel or Edit body holding `el` just enough to show it. */\nexport function keepInView(el: Element): void {\n const box = el.closest(\".qm-col, .qm-panel, .qm-scroll\");\n if (!box) return;\n const r = el.getBoundingClientRect();\n const b = box.getBoundingClientRect();\n if (r.bottom > b.bottom - 8) box.scrollTop += r.bottom - b.bottom + 16;\n else if (r.top < b.top + 8) box.scrollTop -= b.top - r.top + 16;\n}\n\nexport interface DropTarget {\n col: Column;\n /** The section it lands before, or null for the column's end. */\n before: string | null;\n /** Where the marker goes, in the viewport. */\n y: number;\n left: number;\n width: number;\n}\n\nconst toColumn = (n: number): Column => (n === 2 ? 2 : n === 3 ? 3 : 1);\n\n/** The nearest Edit column to a point, and the place in it; null when Edit isn't showing. */\nexport function dropTarget(card: Element, x: number, y: number): DropTarget | null {\n let best: HTMLElement | null = null;\n let bestDist = Infinity;\n for (const l of card.querySelectorAll<HTMLElement>(\".qm-edit-list\")) {\n const r = l.getBoundingClientRect();\n let dist = x < r.left ? r.left - x : x > r.right ? x - r.right : 0;\n dist += y < r.top - 40 ? r.top - 40 - y : y > r.bottom + 40 ? y - r.bottom - 40 : 0;\n if (dist < bestDist) {\n bestDist = dist;\n best = l;\n }\n }\n if (!best) return null;\n const col = toColumn(Number(best.dataset.col));\n const items = [...best.querySelectorAll<HTMLElement>(\".qm-edit-item\")].filter((el) => !el.classList.contains(\"is-dragging\"));\n const lr = best.getBoundingClientRect();\n for (const item of items) {\n const r = item.getBoundingClientRect();\n if (y < r.top + r.height / 2) return { col, before: item.dataset.sec ?? null, y: r.top - 3, left: lr.left, width: lr.width };\n }\n const last = items.at(-1);\n return { col, before: null, y: last ? last.getBoundingClientRect().bottom + 3 : lr.top + 4, left: lr.left, width: lr.width };\n}\n","// Quick menu: what its controls do. Each action notes the change for motion\n// and focus first (`motion.render`), then makes it, then says it in the live\n// region. Pins and the arrangement are saved to the shared config; a\n// dismissal is saved in this browser and can be undone for five seconds.\n\nimport { useEffect, useEffectEvent, useRef } from \"react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent, RefObject } from \"react\";\nimport { dropSection as dropped, moveSection as moved, setVisible } from \"./arrange.ts\";\nimport type { Direction } from \"./arrange.ts\";\nimport { clearDismissed, dismissSession, readConfig, sectionsOf, togglePin, undismissSession, updateConfig, withSections } from \"./config.ts\";\nimport type { ConfigDoc, ConfigStorage, Section, SectionId } from \"./config.ts\";\nimport type { DropTarget } from \"./dom.ts\";\nimport { firstFocusable } from \"./dom.ts\";\nimport type { Exit } from \"./flip.ts\";\nimport { TITLES, UNDO_MS, agentName } from \"./model.ts\";\nimport type { MenuBoard, MenuSession, QuickMenuAdapter } from \"./model.ts\";\nimport type { Here, MenuState, MenuView, Update } from \"./state.ts\";\nimport type { Motion } from \"./useMotion.ts\";\n\nexport interface MenuActions {\n dismiss: (id: string, exit?: Exit) => void;\n undo: () => void;\n /** Shows every dismissed session again. */\n restore: () => void;\n pin: (board: MenuBoard) => void;\n toggleEdit: () => void;\n selectTab: (i: number) => void;\n onTabKey: (e: ReactKeyboardEvent<HTMLButtonElement>, i: number) => void;\n moveSection: (id: SectionId, dir: Direction) => void;\n toggleVisible: (id: SectionId) => void;\n dropSection: (id: SectionId, target: DropTarget) => void;\n openBoard: (e: ReactMouseEvent<HTMLAnchorElement>, board: MenuBoard) => void;\n openSession: (e: ReactMouseEvent<HTMLAnchorElement>, session: MenuSession) => void;\n}\n\ninterface ActionOptions {\n s: MenuState;\n view: MenuView;\n update: Update;\n storage: ConfigStorage;\n here: Here;\n adapter: QuickMenuAdapter;\n open: boolean;\n motion: Motion;\n announce: (words: string) => void;\n cardRef: RefObject<HTMLDivElement | null>;\n close: (options?: { returnFocus?: boolean }) => void;\n}\n\n/** A plain left click: anything else (a new tab, a new window) follows the link's href. */\nconst plainClick = (e: ReactMouseEvent): boolean => !(e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey);\n\nexport function useMenuActions({ s, view, update, storage, here, adapter, open, motion, announce, cardRef, close }: ActionOptions): MenuActions {\n const { render } = motion;\n /** Numbers each Undo toast, so an old one's timer can't take a newer one away. */\n const toastSeq = useRef(0);\n\n /** The config after `change`: saved where it can be, else kept for this page only. */\n function saved(change: (doc: ConfigDoc) => ConfigDoc): { doc: ConfigDoc; writable: boolean } {\n if (!s.writable) return { doc: change(s.doc), writable: false };\n const result = updateConfig(storage, change);\n if (result.ok) return { doc: result.doc, writable: true };\n return { doc: change(s.doc), writable: readConfig(storage).writable };\n }\n\n // Undo goes after five seconds.\n const toastId = s.toast?.id ?? 0;\n const expireToast = useEffectEvent((id: number) => {\n if (s.toast?.id !== id) return;\n if (open) render();\n update((prev) => (prev.toast?.id === id ? { toast: null } : {}));\n });\n useEffect(() => {\n if (!toastId) return;\n const timer = setTimeout(() => expireToast(toastId), UNDO_MS);\n return () => clearTimeout(timer);\n }, [toastId]);\n\n function dismiss(id: string, exit?: Exit): void {\n const session = s.sessions.find((x) => x.id === id);\n if (!session) return;\n const rows = [...(cardRef.current?.querySelectorAll<HTMLElement>(\".qm-main .qm-ses\") ?? [])];\n const i = rows.findIndex((r) => r.dataset.ses === id);\n const next = rows[i + 1] ?? rows[i - 1];\n const dismissed = dismissSession(storage, session);\n toastSeq.current += 1;\n const leaving = `ses-${id}`;\n render({ exits: { [leaving]: exit ?? {} }, focus: next?.dataset.ses ? `ses-x-${next.dataset.ses}` : \"undo\", fallback: \"undo\" });\n update({ dismissed, toast: { id: toastSeq.current, text: `Dismissed ${agentName(session)} on ${session.board.name}.`, undo: id } });\n announce(\"Dismissed. Undo is available.\");\n }\n\n function undo(): void {\n const back = s.toast?.undo;\n if (!back) return;\n const dismissed = undismissSession(storage, back);\n render({ focus: `ses-x-${back}` });\n update({ dismissed, toast: null });\n announce(\"Restored\");\n }\n\n function restore(): void {\n const card = cardRef.current;\n const focus = (card ? firstFocusable(card)?.getAttribute(\"data-fk\") : null) || \"edit\";\n const dismissed = clearDismissed(storage);\n render({ focus, fallback: \"edit\" });\n update({ dismissed, toast: null });\n announce(\"Dismissed sessions shown again\");\n }\n\n function pin(board: MenuBoard): void {\n const pinning = !view.isPinned(board);\n const next = saved((doc) => togglePin(doc, { ...here, board: board.slug }));\n render({ focus: `pin-${board.id}` });\n update(next);\n announce(`${board.name} ${pinning ? \"pinned\" : \"unpinned\"}`);\n }\n\n function toggleEdit(): void {\n const editing = !s.editing;\n render({ focus: \"edit\" });\n update({ editing, tab: view.tab });\n announce(editing ? \"Editing sections\" : \"Done editing\");\n }\n\n function selectTab(i: number): void {\n render({ focus: `tab-${i}`, resetPanel: true });\n update({ tab: i });\n }\n\n function onTabKey(e: ReactKeyboardEvent<HTMLButtonElement>, i: number): void {\n if (![\"ArrowRight\", \"ArrowLeft\", \"Home\", \"End\"].includes(e.key)) return;\n const n = view.columns.length;\n const next = e.key === \"Home\" ? 0 : e.key === \"End\" ? n - 1 : (i + (e.key === \"ArrowRight\" ? 1 : -1) + n) % n;\n e.preventDefault();\n selectTab(next);\n }\n\n function arrange(change: (list: Section[]) => Section[], words: string, focus: string | null): void {\n const next = saved((doc) => withSections(doc, change(sectionsOf(doc))));\n render({ focus });\n update(next);\n announce(words);\n }\n\n const moveSection = (id: SectionId, dir: Direction): void => arrange((list) => moved(list, id, dir), `${TITLES[id]} moved`, null);\n\n function toggleVisible(id: SectionId): void {\n const visible = !view.sections.find((x) => x.id === id)?.visible;\n arrange((list) => setVisible(list, id, visible), `${TITLES[id]} ${visible ? \"shown\" : \"hidden\"}`, null);\n }\n\n const dropSection = (id: SectionId, target: DropTarget): void => arrange((list) => dropped(list, id, target), `${TITLES[id]} moved`, `mu-${id}`);\n\n function openBoard(e: ReactMouseEvent<HTMLAnchorElement>, board: MenuBoard): void {\n if (!plainClick(e)) return;\n e.preventDefault();\n close({ returnFocus: false });\n adapter.openBoard(board);\n }\n\n function openSession(e: ReactMouseEvent<HTMLAnchorElement>, session: MenuSession): void {\n if (!plainClick(e)) return;\n e.preventDefault();\n close({ returnFocus: false });\n adapter.openSession(session);\n }\n\n return { dismiss, undo, restore, pin, toggleEdit, selectTab, onTabKey, moveSection, toggleVisible, dropSection, openBoard, openSession };\n}\n","/**\n * Quick menu: FLIP motion for keyed elements.\n *\n * measure() every element carrying data-k inside a root, change the DOM, then\n * play(): an element that stayed moves from its old place, one that arrived\n * materializes (fade, rise 6 px, scale from 0.97, un-blur, staggered), and one\n * that left is drawn as a ghost at its old place while the rest close the gap.\n * A child that moved with its parent animates only the difference, so a row\n * inside a moving section doesn't move twice. Durations stay under 250 ms.\n *\n * Plain DOM, no app imports, in @starlove/ui's shape. The caller decides about\n * reduced motion: call play() only when motion is allowed.\n */\n\nexport const EASE = \"cubic-bezier(0.2, 0.8, 0.2, 1)\";\nexport const DURATIONS = Object.freeze({ move: 220, enter: 200, leave: 180, open: 200, close: 140, item: 180 });\nconst STAGGER_MS = 28;\nconst STAGGER_CAP_MS = 140;\n\n/** How a leaving element goes: { dx } keeps going sideways (a swipe), { from, fromOpacity } starts where a gesture left it. */\nexport interface Exit {\n dx?: number;\n from?: string;\n fromOpacity?: number;\n}\n\nexport interface Measured {\n el: Element;\n rect: DOMRect;\n parent: string | null;\n}\n\nconst keyOf = (el: Element): string => el.getAttribute(\"data-k\") ?? \"\";\n\nfunction parentKey(el: Element): string | null {\n const parent = el.parentElement?.closest(\"[data-k]\");\n return parent ? keyOf(parent) : null;\n}\n\n/** Where every keyed element is now: key -> { el, rect, parent }. */\nexport function measure(root: Element): Map<string, Measured> {\n const map = new Map<string, Measured>();\n for (const el of root.querySelectorAll(\"[data-k]\")) {\n if (el.closest(\"[data-flip-ghosts]\")) continue;\n map.set(keyOf(el), { el, rect: el.getBoundingClientRect(), parent: parentKey(el) });\n }\n return map;\n}\n\n/**\n * Animates from `before` (a measure() taken before the change) to now.\n * `exits` maps a key to how it leaves; `ghosts` is the layer (position:\n * absolute, inset 0, inside root) where leavers are drawn.\n */\nexport function play(before: Map<string, Measured>, root: Element, { exits = {}, ghosts = null }: { exits?: Record<string, Exit>; ghosts?: Element | null } = {}): void {\n const after = new Map<string, Element>();\n for (const el of root.querySelectorAll(\"[data-k]\")) {\n if (!el.closest(\"[data-flip-ghosts]\")) after.set(keyOf(el), el);\n }\n // A key on both sides is the same thing, even when its element is new:\n // React makes a fresh element when a row changes parent (Recent to Pinned,\n // a section to another column), and that row should travel, not arrive.\n const deltas = new Map<string, { dx: number; dy: number }>();\n for (const [k, el] of after) {\n const b = before.get(k);\n if (!b) continue;\n const r = el.getBoundingClientRect();\n deltas.set(k, { dx: b.rect.left - r.left, dy: b.rect.top - r.top });\n }\n let entering = 0;\n for (const [k, el] of after) {\n const pk = parentKey(el);\n const d = deltas.get(k);\n if (d) {\n const pd = (pk ? deltas.get(pk) : undefined) ?? { dx: 0, dy: 0 };\n const dx = d.dx - pd.dx;\n const dy = d.dy - pd.dy;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) continue;\n el.animate([{ transform: `translate(${dx}px, ${dy}px)` }, { transform: \"none\" }], { duration: DURATIONS.move, easing: EASE });\n } else {\n // A child of an element that arrived comes in with it, a beat later.\n const parentArrived = pk !== null && after.has(pk) && !deltas.has(pk);\n const delay = Math.min(entering++ * STAGGER_MS, STAGGER_CAP_MS) + (parentArrived ? 30 : 0);\n el.animate(\n [\n { opacity: 0, transform: \"translateY(6px) scale(0.97)\", filter: \"blur(3px)\" },\n { opacity: 1, transform: \"none\", filter: \"blur(0)\" }\n ],\n { duration: DURATIONS.enter, delay, easing: EASE, fill: \"backwards\" }\n );\n }\n }\n if (!ghosts) return;\n const rootRect = root.getBoundingClientRect();\n for (const [k, b] of before) {\n if (after.has(k)) continue; // stayed, or came back as a new element: it moved above\n if (b.parent && !after.has(b.parent)) continue; // its parent leaves as one piece\n if (b.rect.width === 0 && b.rect.height === 0) continue;\n const ghost = b.el.cloneNode(true);\n if (!(ghost instanceof HTMLElement)) continue;\n for (const n of [ghost, ...ghost.querySelectorAll(\"[data-k], [id], [data-fk]\")]) {\n n.removeAttribute(\"data-k\");\n n.removeAttribute(\"id\");\n n.removeAttribute(\"data-fk\");\n }\n ghost.setAttribute(\"aria-hidden\", \"true\");\n ghost.setAttribute(\"inert\", \"\");\n ghost.classList.add(\"qm-ghost\");\n ghost.style.left = `${b.rect.left - rootRect.left}px`;\n ghost.style.top = `${b.rect.top - rootRect.top}px`;\n ghost.style.width = `${b.rect.width}px`;\n ghost.style.height = `${b.rect.height}px`;\n ghosts.append(ghost);\n const exit = exits[k] ?? {};\n const to = exit.dx ? `translateX(${exit.dx}px)` : \"scale(0.96)\";\n const animation = ghost.animate(\n [\n { opacity: exit.fromOpacity ?? 1, transform: exit.from || \"none\", filter: \"blur(0)\" },\n { opacity: 0, transform: to, filter: \"blur(2px)\" }\n ],\n { duration: DURATIONS.leave, easing: EASE, fill: \"forwards\" }\n );\n const remove = (): void => ghost.remove();\n animation.onfinish = remove;\n // WebKit can deliver finish late: a timer as well, whichever comes first.\n setTimeout(remove, DURATIONS.leave + 80);\n }\n}\n","// Quick menu: the motion and focus that follow a change. A change is noted\n// just before it's made (`render`): the rows' places, measured for FLIP\n// (./flip.ts), and where focus should be after it. Once React has drawn it,\n// the layout effect puts focus there and plays the motion. Opening plays the\n// card's entrance and focuses its first control instead. Reduced motion\n// (data-motion over the OS, through @starlove/ui/prefs) stops the motion,\n// never the focus.\n\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { RefObject } from \"react\";\nimport { reducedMotion } from \"@starlove/ui/prefs\";\nimport { findFk, firstFocusable, isDisabled, keepInView } from \"./dom.ts\";\nimport { DURATIONS, EASE, measure, play } from \"./flip.ts\";\nimport type { Exit, Measured } from \"./flip.ts\";\n\n/** What to do once React has drawn a change: focus, and the motion measured before it. */\ninterface Job {\n before: Map<string, Measured> | null;\n exits: Record<string, Exit>;\n focus: string | null;\n fallback: string | null;\n kept: string | null;\n opening: boolean;\n resetPanel: boolean;\n}\n\nexport interface RenderOptions {\n /** False for a change nobody should see move (a resize). */\n animate?: boolean;\n /** The data-fk to focus after the change. */\n focus?: string | null;\n /** Focused when `focus` isn't in the page after it. */\n fallback?: string | null;\n /** Rows leaving by a gesture, keyed by data-k: they leave from where the gesture left them. */\n exits?: Record<string, Exit>;\n /** Scroll the phone panel back to its top (another tab). */\n resetPanel?: boolean;\n}\n\nexport interface Motion {\n /** Call before a change: measures for FLIP and notes where focus should be after it. */\n render: (options?: RenderOptions) => void;\n /** The next draw is the card opening. */\n opening: () => void;\n}\n\ninterface MotionOptions {\n cardRef: RefObject<HTMLDivElement | null>;\n backdropRef: RefObject<HTMLDivElement | null>;\n ghostsRef: RefObject<HTMLDivElement | null>;\n open: boolean;\n /** The card is drawn (not hidden). */\n shown: boolean;\n announce: (words: string) => void;\n}\n\nexport function useMotion({ cardRef, backdropRef, ghostsRef, open, shown, announce }: MotionOptions): Motion {\n const job = useRef<Job | null>(null);\n\n const render = (options?: RenderOptions): void => {\n const o = options ?? {};\n const card = cardRef.current;\n const motion = (o.animate ?? true) && open && shown && card !== null && !card.hidden && !reducedMotion();\n const active = document.activeElement;\n const kept = active && card?.contains(active) ? active.getAttribute(\"data-fk\") : null;\n const prev = job.current;\n job.current = {\n before: prev?.before ?? (motion ? measure(card) : null),\n exits: { ...prev?.exits, ...o.exits },\n focus: o.focus ?? prev?.focus ?? null,\n fallback: o.fallback ?? prev?.fallback ?? null,\n kept: prev ? prev.kept : kept,\n opening: prev?.opening ?? false,\n resetPanel: (o.resetPanel ?? false) || (prev?.resetPanel ?? false)\n };\n };\n\n const opening = (): void => {\n // A fresh start: whatever the visit before left noted is dropped.\n job.current = { before: null, exits: {}, focus: null, fallback: null, kept: null, opening: true, resetPanel: false };\n };\n\n useLayoutEffect(() => {\n const work = job.current;\n const card = cardRef.current;\n if (!work || !card) return;\n job.current = null;\n if (work.opening) {\n for (const box of card.querySelectorAll(\".qm-col, .qm-panel, .qm-scroll\")) box.scrollTop = 0;\n if (!reducedMotion()) {\n card.animate([{ opacity: 0, transform: \"translateY(-6px) scale(0.97)\" }, { opacity: 1, transform: \"none\" }], { duration: DURATIONS.open, easing: EASE });\n [...card.querySelectorAll(\".qm-main [data-k]\")].slice(0, 14).forEach((el, i) => {\n el.animate([{ opacity: 0, transform: \"translateY(4px)\" }, { opacity: 1, transform: \"none\" }], { duration: DURATIONS.item, delay: 40 + Math.min(i * 18, 140), easing: EASE, fill: \"backwards\" });\n });\n const backdrop = backdropRef.current;\n if (backdrop && !backdrop.hidden) backdrop.animate([{ opacity: 0 }, { opacity: 1 }], { duration: DURATIONS.item, easing: \"ease-out\" });\n }\n firstFocusable(card)?.focus({ preventScroll: true });\n announce(\"Quick menu open\");\n return;\n }\n const target = work.focus ?? work.kept;\n if (target && open) {\n let el = findFk(card, target);\n if (el && isDisabled(el)) el = null;\n // An arrow that became disabled hands focus to its row's next arrow.\n if (!el && work.kept && /^m[udlr]-/.test(work.kept)) el = card.querySelector<HTMLElement>(`.qm-edit-item[data-sec=\"${CSS.escape(work.kept.slice(3))}\"] .qm-icon-btn:not([disabled])`);\n if (!el && work.fallback) el = findFk(card, work.fallback);\n if (!el && work.kept && work.kept === target) el = firstFocusable(card);\n if (el && el !== document.activeElement) el.focus({ preventScroll: true });\n if (el && work.focus) keepInView(el);\n }\n if (work.resetPanel) {\n const panel = card.querySelector(\".qm-panel\");\n if (panel) panel.scrollTop = 0;\n }\n if (work.before) play(work.before, card, { exits: work.exits, ghosts: ghostsRef.current });\n });\n\n return { render, opening };\n}\n","// Quick menu: the page around it while it's open. A press that began and\n// ended outside closes it; Escape cancels a section drag, else closes; Tab\n// and Shift+Tab stay inside the card; a section drag follows the pointer\n// anywhere on the page; a resize lays the card out again.\n\nimport { useEffect, useEffectEvent } from \"react\";\nimport type { RefObject } from \"react\";\nimport type { SectionId } from \"./config.ts\";\nimport { focusables } from \"./dom.ts\";\nimport type { DropTarget } from \"./dom.ts\";\nimport type { SectionDrag } from \"./useSectionDrag.ts\";\n\ninterface PageOptions {\n open: boolean;\n cardRef: RefObject<HTMLDivElement | null>;\n opener: () => HTMLElement | null;\n close: (options?: { returnFocus?: boolean }) => void;\n drag: SectionDrag;\n onDrop: (id: SectionId, target: DropTarget) => void;\n onResize: () => void;\n}\n\nexport function usePageListeners({ open, cardRef, opener, close, drag, onDrop, onResize }: PageOptions): void {\n const isInside = useEffectEvent((target: EventTarget | null): boolean => {\n if (!(target instanceof Node)) return false;\n return Boolean(cardRef.current?.contains(target) || opener()?.contains(target));\n });\n\n const onKeydown = useEffectEvent((e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopImmediatePropagation();\n if (!drag.cancel()) close();\n return;\n }\n const card = cardRef.current;\n if (e.key !== \"Tab\" || !card) return;\n const items = focusables(card);\n const firstItem = items[0];\n const lastItem = items.at(-1);\n if (!firstItem || !lastItem) return;\n if (!card.contains(document.activeElement)) {\n e.preventDefault();\n (e.shiftKey ? lastItem : firstItem).focus();\n } else if (e.shiftKey && document.activeElement === firstItem) {\n e.preventDefault();\n lastItem.focus();\n } else if (!e.shiftKey && document.activeElement === lastItem) {\n e.preventDefault();\n firstItem.focus();\n }\n });\n\n const onOutside = useEffectEvent(() => close({ returnFocus: false }));\n const onDragMove = useEffectEvent((e: PointerEvent) => drag.move(e));\n const onDragUp = useEffectEvent((e: PointerEvent) => {\n const drop = drag.end(e);\n if (drop) onDrop(drop.id, drop.target);\n });\n const resized = useEffectEvent(() => onResize());\n\n useEffect(() => {\n if (!open) return;\n // Close only on a press that began outside and ended outside: a drag\n // from inside (selecting text, moving a section) that ends past the edge\n // fires its click on a common ancestor, outside the card.\n let began = false;\n let ended = false;\n const down = (e: PointerEvent): void => {\n began = isInside(e.target);\n ended = false;\n };\n const up = (e: PointerEvent): void => {\n ended = isInside(e.target);\n };\n // A press that never becomes a click, or a key typed before the next\n // click, must not shield the click after it.\n const reset = (): void => {\n began = false;\n };\n const click = (e: MouseEvent): void => {\n const wasBegun = began;\n const wasEnded = ended;\n began = false;\n ended = false;\n if (wasBegun || wasEnded || isInside(e.target)) return;\n onOutside();\n };\n const key = (e: KeyboardEvent): void => onKeydown(e);\n const move = (e: PointerEvent): void => onDragMove(e);\n const drop = (e: PointerEvent): void => onDragUp(e);\n const resize = (): void => resized();\n document.addEventListener(\"keydown\", key, true);\n document.addEventListener(\"pointerdown\", down, true);\n document.addEventListener(\"pointerup\", up, true);\n document.addEventListener(\"pointercancel\", reset, true);\n document.addEventListener(\"keydown\", reset, true);\n document.addEventListener(\"click\", click, true);\n document.addEventListener(\"pointermove\", move);\n document.addEventListener(\"pointerup\", drop);\n addEventListener(\"resize\", resize);\n return () => {\n document.removeEventListener(\"keydown\", key, true);\n document.removeEventListener(\"pointerdown\", down, true);\n document.removeEventListener(\"pointerup\", up, true);\n document.removeEventListener(\"pointercancel\", reset, true);\n document.removeEventListener(\"keydown\", reset, true);\n document.removeEventListener(\"click\", click, true);\n document.removeEventListener(\"pointermove\", move);\n document.removeEventListener(\"pointerup\", drop);\n removeEventListener(\"resize\", resize);\n };\n }, [open]);\n}\n","// Quick menu: dragging a section by its handle in Edit (mouse and pen; on a\n// touch screen the arrows move sections). The dragged row and the drop\n// marker are moved straight on the page: a pointer move comes too often to\n// draw through React, and the row and the card keep their classes while their\n// own class names stay the same. The page's pointer listeners\n// (./usePageListeners.ts) feed `move` and `end`.\n\nimport { useRef } from \"react\";\nimport type { PointerEvent as ReactPointerEvent, RefObject } from \"react\";\nimport { reducedMotion } from \"@starlove/ui/prefs\";\nimport type { SectionId } from \"./config.ts\";\nimport { dropTarget } from \"./dom.ts\";\nimport type { DropTarget } from \"./dom.ts\";\nimport { DURATIONS, EASE } from \"./flip.ts\";\n\ninterface Drag {\n id: SectionId;\n item: HTMLElement;\n x: number;\n y: number;\n target: DropTarget | null;\n pid: number;\n marker: HTMLElement;\n}\n\nexport interface SectionDrag {\n /** On a section's handle: starts a drag in Edit. */\n gripDown: (e: ReactPointerEvent<HTMLSpanElement>, id: SectionId) => void;\n /** A pointer move anywhere on the page. */\n move: (e: PointerEvent) => void;\n /** A pointer released anywhere on the page: where the section was dropped, or null (it slides back). */\n end: (e: PointerEvent) => { id: SectionId; target: DropTarget } | null;\n /** Ends a drag in progress where it is, the row sliding back; false when there was none. */\n cancel: () => boolean;\n}\n\nexport function useSectionDrag(cardRef: RefObject<HTMLDivElement | null>, editing: boolean): SectionDrag {\n const drag = useRef<Drag | null>(null);\n\n /** Takes the drag off the page; returns where the row was dragged to. */\n const finish = (d: Drag): string => {\n d.marker.remove();\n cardRef.current?.classList.remove(\"is-dragging\");\n d.item.classList.remove(\"is-dragging\");\n const from = d.item.style.transform;\n d.item.style.transform = \"\";\n return from;\n };\n\n const slideBack = (d: Drag, from: string): void => {\n if (!reducedMotion() && from) d.item.animate([{ transform: from }, { transform: \"none\" }], { duration: DURATIONS.item, easing: EASE });\n };\n\n const gripDown = (e: ReactPointerEvent<HTMLSpanElement>, id: SectionId): void => {\n const card = cardRef.current;\n const item = e.currentTarget.closest<HTMLElement>(\".qm-edit-item\");\n if (e.pointerType === \"touch\" || !editing || !card || !item) return;\n e.preventDefault();\n const marker = document.createElement(\"div\");\n marker.className = \"qm-drop-marker\";\n marker.setAttribute(\"aria-hidden\", \"true\");\n card.append(marker);\n drag.current = { id, item, x: e.clientX, y: e.clientY, target: null, pid: e.pointerId, marker };\n item.classList.add(\"is-dragging\");\n card.classList.add(\"is-dragging\");\n };\n\n const move = (e: PointerEvent): void => {\n const d = drag.current;\n const card = cardRef.current;\n if (!d || !card || e.pointerId !== d.pid) return;\n d.item.style.transform = `translate(${e.clientX - d.x}px, ${e.clientY - d.y}px)`;\n const t = dropTarget(card, e.clientX, e.clientY);\n if (!t) return;\n // Past the card's edge, the last place shown stays the drop.\n d.target = t;\n const c = card.getBoundingClientRect();\n d.marker.style.left = `${t.left - c.left}px`;\n d.marker.style.width = `${t.width}px`;\n d.marker.style.top = `${t.y - c.top - 2}px`;\n d.marker.style.opacity = \"1\";\n };\n\n const end = (e: PointerEvent): { id: SectionId; target: DropTarget } | null => {\n const d = drag.current;\n if (!d || e.pointerId !== d.pid) return null;\n drag.current = null;\n const from = finish(d);\n if (!d.target) {\n slideBack(d, from);\n return null;\n }\n return { id: d.id, target: d.target };\n };\n\n const cancel = (): boolean => {\n const d = drag.current;\n if (!d) return false;\n drag.current = null;\n slideBack(d, finish(d));\n return true;\n };\n\n return { gripDown, move, end, cancel };\n}\n","// Quick menu: swiping a session row sideways dismisses it (touch and pen; a\n// mouse uses the row's x). Past a third of the row's width it leaves from\n// where the finger left it; short of that it slides back. A vertical move\n// first is a scroll, not a swipe, and the tap that ends a swipe isn't a\n// choice: `clickCapture` on the card swallows it.\n\nimport { useRef } from \"react\";\nimport type { MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent } from \"react\";\nimport { reducedMotion } from \"@starlove/ui/prefs\";\nimport { DURATIONS, EASE } from \"./flip.ts\";\nimport type { Exit } from \"./flip.ts\";\n\ninterface Swipe {\n row: HTMLElement;\n id: string;\n x: number;\n y: number;\n dx: number;\n active: boolean;\n pid: number;\n w: number;\n}\n\ntype RowEvent = ReactPointerEvent<HTMLLIElement>;\n\nexport interface SwipeDismiss {\n down: (e: RowEvent, id: string) => void;\n move: (e: RowEvent) => void;\n end: (e: RowEvent) => void;\n cancel: (e: RowEvent) => void;\n clickCapture: (e: ReactMouseEvent) => void;\n}\n\nexport function useSwipeDismiss(dismiss: (id: string, exit?: Exit) => void): SwipeDismiss {\n const swipe = useRef<Swipe | null>(null);\n const suppressClick = useRef(false);\n\n const down = (e: RowEvent, id: string): void => {\n if (e.pointerType === \"mouse\") return;\n if (e.target instanceof Element && e.target.closest(\".qm-x\")) return;\n const row = e.currentTarget;\n swipe.current = { row, id, x: e.clientX, y: e.clientY, dx: 0, active: false, pid: e.pointerId, w: row.getBoundingClientRect().width };\n };\n\n const move = (e: RowEvent): void => {\n const sw = swipe.current;\n if (!sw || e.pointerId !== sw.pid) return;\n const dx = e.clientX - sw.x;\n const dy = e.clientY - sw.y;\n if (!sw.active) {\n if (Math.abs(dy) > 10 && Math.abs(dy) > Math.abs(dx)) {\n swipe.current = null;\n return;\n }\n if (Math.abs(dx) > 10) {\n sw.active = true;\n sw.row.classList.add(\"is-swiping\");\n try {\n sw.row.setPointerCapture(e.pointerId);\n } catch {\n // Synthetic events have no capture.\n }\n }\n }\n if (sw.active) {\n sw.dx = dx;\n sw.row.style.transform = `translateX(${dx}px)`;\n sw.row.style.opacity = String(Math.max(0.25, 1 - Math.abs(dx) / sw.w));\n }\n };\n\n const end = (e: RowEvent): void => {\n const sw = swipe.current;\n if (!sw || e.pointerId !== sw.pid) return;\n swipe.current = null;\n if (!sw.active) return;\n suppressClick.current = true;\n setTimeout(() => {\n suppressClick.current = false;\n }, 350);\n sw.row.classList.remove(\"is-swiping\");\n const from = sw.row.style.transform;\n const fromOpacity = Number(sw.row.style.opacity);\n sw.row.style.transform = \"\";\n sw.row.style.opacity = \"\";\n if (Math.abs(sw.dx) > sw.w * 0.33) {\n dismiss(sw.id, { dx: Math.sign(sw.dx) * sw.w, from, fromOpacity });\n return;\n }\n if (!reducedMotion()) sw.row.animate([{ transform: from }, { transform: \"none\" }], { duration: DURATIONS.item, easing: EASE });\n };\n\n const cancel = (e: RowEvent): void => {\n const sw = swipe.current;\n if (!sw || e.pointerId !== sw.pid) return;\n sw.row.style.transform = \"\";\n sw.row.style.opacity = \"\";\n sw.row.classList.remove(\"is-swiping\");\n swipe.current = null;\n };\n\n const clickCapture = (e: ReactMouseEvent): void => {\n if (!suppressClick.current) return;\n suppressClick.current = false;\n e.preventDefault();\n e.stopPropagation();\n };\n\n return { down, move, end, cancel, clickCapture };\n}\n","// Quick menu: a visit, from open to close. Opening reads boards and sessions\n// (waiting a moment the first time, so the card opens full), shows the card,\n// then reads again every 30 seconds while it stays open. Closing stops the\n// reads and fades the card out. Also where the card sits: the layout for the\n// window's width, and its top just under the control that opened it.\n\nimport { useEffect, useEffectEvent, useRef, useState } from \"react\";\nimport type { Dispatch, RefObject, SetStateAction } from \"react\";\nimport { reducedMotion } from \"@starlove/ui/prefs\";\nimport { pruneDismissed } from \"./config.ts\";\nimport type { ConfigStorage } from \"./config.ts\";\nimport { DURATIONS } from \"./flip.ts\";\nimport { FIRST_LOAD_WAIT_MS, REFRESH_MS, currentLayout } from \"./model.ts\";\nimport type { Layout, MenuBoard, MenuSession, QuickMenuAdapter } from \"./model.ts\";\nimport type { MenuState, Update } from \"./state.ts\";\nimport type { Motion } from \"./useMotion.ts\";\n\nexport interface Placement {\n layout: Layout;\n /** The card's top in px, under the opener; null until it first opens. */\n top: number | null;\n}\n\ninterface VisitOptions {\n adapter: QuickMenuAdapter;\n open: boolean;\n onClose: () => void;\n opener: () => HTMLElement | null;\n storage: ConfigStorage;\n loaded: boolean;\n update: Update;\n motion: Motion;\n setShown: Dispatch<SetStateAction<boolean>>;\n cardRef: RefObject<HTMLDivElement | null>;\n backdropRef: RefObject<HTMLDivElement | null>;\n ghostsRef: RefObject<HTMLDivElement | null>;\n /** Ends a section drag in progress, before the card fades. */\n cancelDrag: () => void;\n}\n\nexport interface Visit {\n place: Placement;\n /** Lays the card out again for the window as it is now. */\n relayout: () => void;\n /** Asks the app to close the menu; focus goes back to the opener unless told otherwise. */\n close: (options?: { returnFocus?: boolean }) => void;\n}\n\nexport function useVisit({ adapter, open, onClose, opener, storage, loaded, update, motion, setShown, cardRef, backdropRef, ghostsRef, cancelDrag }: VisitOptions): Visit {\n const [place, setPlace] = useState<Placement>(() => ({ layout: currentLayout(), top: null }));\n /** Bumped by each open and close, so a close's fade that a reopen overtook doesn't hide the card. */\n const closeToken = useRef(0);\n\n const close = (options?: { returnFocus?: boolean }): void => {\n if (!open) return;\n onClose();\n if (options?.returnFocus ?? true) opener()?.focus({ preventScroll: true });\n };\n\n const openerTop = (): number | null => {\n const r = opener()?.getBoundingClientRect();\n return r ? Math.round(r.bottom + 6) : null;\n };\n const relayout = (): void => setPlace({ layout: currentLayout(), top: openerTop() });\n\n const listAll = useEffectEvent(() => Promise.allSettled([adapter.listBoards(), adapter.listSessions()]));\n const isLoaded = useEffectEvent(() => loaded);\n\n const applyRefresh = useEffectEvent((boards: PromiseSettledResult<MenuBoard[]>, sessions: PromiseSettledResult<MenuSession[]>) => {\n const patch: Partial<MenuState> = { loaded: true, now: Date.now() };\n if (boards.status === \"fulfilled\") patch.boards = boards.value;\n if (sessions.status === \"fulfilled\") {\n patch.sessions = sessions.value;\n patch.sessionsFailed = false;\n patch.dismissed = pruneDismissed(storage, sessions.value);\n } else {\n patch.sessionsFailed = true;\n }\n if (open) motion.render();\n update(patch);\n });\n\n const showCard = useEffectEvent(() => {\n const card = cardRef.current;\n const backdrop = backdropRef.current;\n for (const a of [...(card?.getAnimations() ?? []), ...(backdrop?.getAnimations() ?? [])]) a.cancel();\n // A fresh start: Edit and Undo end with the visit before.\n motion.opening();\n relayout();\n update({ editing: false, toast: null, now: Date.now() });\n setShown(true);\n });\n\n const hideCard = useEffectEvent(() => {\n cancelDrag();\n const card = cardRef.current;\n const backdrop = backdropRef.current;\n const token = ++closeToken.current;\n const finish = (): void => {\n if (token !== closeToken.current) return;\n closeToken.current += 1;\n for (const a of [...(card?.getAnimations() ?? []), ...(backdrop?.getAnimations() ?? [])]) a.cancel();\n ghostsRef.current?.replaceChildren();\n setShown(false);\n };\n if (reducedMotion() || !card || card.hidden) {\n finish();\n return;\n }\n const fade = card.animate([{ opacity: 1, transform: \"none\" }, { opacity: 0, transform: \"translateY(-4px) scale(0.98)\" }], { duration: DURATIONS.close, easing: \"ease-in\", fill: \"forwards\" });\n if (backdrop && !backdrop.hidden) backdrop.animate([{ opacity: 1 }, { opacity: 0 }], { duration: DURATIONS.close, fill: \"forwards\" });\n fade.onfinish = finish;\n // WebKit can deliver finish late: a timer as well.\n setTimeout(finish, DURATIONS.close + 30);\n });\n\n useEffect(() => {\n if (!open) return;\n closeToken.current += 1;\n const visit = new AbortController();\n let timer: ReturnType<typeof setInterval> | undefined;\n const refresh = async (): Promise<void> => {\n const [boards, sessions] = await listAll();\n applyRefresh(boards, sessions);\n };\n void (async () => {\n const loading = refresh();\n if (!isLoaded()) await Promise.race([loading, new Promise((done) => setTimeout(done, FIRST_LOAD_WAIT_MS))]);\n if (visit.signal.aborted) return;\n showCard();\n timer = setInterval(() => void refresh(), REFRESH_MS);\n })();\n return () => {\n visit.abort();\n clearInterval(timer);\n hideCard();\n };\n }, [open]);\n\n return { place, relayout, close };\n}\n","/**\n * The quick menu, in columns.\n *\n * Three columns on a wide screen (two between 640 and 999 px), one on a phone\n * with a tab per column, the sheet dropping from the top. Sections: Sessions\n * (agents waiting for you, working now, finished), Pinned, Recent and the\n * Nebula row; Edit arranges them; a session can be dismissed with Undo.\n *\n * It knows no app: the app passes an adapter for its data and navigation\n * (./model.ts), says whether it is open, and hears when it asks to close. It\n * moves into ss-ui when Nebula takes it.\n *\n * This file is the frame and where the parts meet: the state (./state.ts),\n * a visit from open to close (./useVisit.ts), what the controls do\n * (./useMenuActions.ts), motion and focus after each change (./useMotion.ts),\n * the gestures (./useSwipeDismiss.ts, ./useSectionDrag.ts) and the page\n * around it (./usePageListeners.ts). The rows, sections and layouts\n * (./Sessions.tsx, ./Boards.tsx, ./Sections.tsx, ./EditLayout.tsx) read it all\n * through ./menu-context.ts.\n *\n * Every name and text is rendered as text: agent names and an agent's\n * question are text someone else wrote. Rows are keyed, so focus and scroll\n * survive a refresh; when a row changes parent (pinned, regrouped, moved to\n * another column), focus follows it by its data-fk.\n */\n\nimport { useRef, useState } from \"react\";\nimport type { ConfigStorage } from \"./config.ts\";\nimport { EditLayout } from \"./EditLayout.tsx\";\nimport { Icon } from \"./icons.tsx\";\nimport { MenuContext } from \"./menu-context.ts\";\nimport type { Menu } from \"./menu-context.ts\";\nimport type { QuickMenuAdapter } from \"./model.ts\";\nimport { QM, cssVars } from \"./parts.tsx\";\nimport { ColumnsLayout, TabsLayout } from \"./Sections.tsx\";\nimport { defaultStorage, initialState, viewOf } from \"./state.ts\";\nimport type { MenuState, Update } from \"./state.ts\";\nimport { useAnnounce } from \"./useAnnounce.ts\";\nimport { useMenuActions } from \"./useMenuActions.ts\";\nimport { useMotion } from \"./useMotion.ts\";\nimport { usePageListeners } from \"./usePageListeners.ts\";\nimport { useSectionDrag } from \"./useSectionDrag.ts\";\nimport { useSwipeDismiss } from \"./useSwipeDismiss.ts\";\nimport { useVisit } from \"./useVisit.ts\";\n\nexport interface QuickMenuCardProps {\n adapter: QuickMenuAdapter;\n /** The app keeps whether it's open. */\n open: boolean;\n /** Asks the app to close it. */\n onClose: () => void;\n /** The control that opens it: focus goes back there, and a press on it isn't a press outside. */\n opener: () => HTMLElement | null;\n /** The dialog's id, which the opener's aria-controls names. */\n cardId?: string;\n storage?: ConfigStorage;\n}\n\nexport function QuickMenuCard({ adapter, open, onClose, opener, ...rest }: QuickMenuCardProps) {\n const cardId = rest.cardId ?? \"quickMenuCard\";\n const storage = rest.storage === undefined ? defaultStorage() : rest.storage;\n const here = { app: adapter.app || \"orbit\", place: adapter.place || \"this-computer\" };\n const [s, setS] = useState<MenuState>(() => initialState(storage));\n /** The card is drawn: from the end of the first load's wait until the close's fade ends. */\n const [shown, setShown] = useState(false);\n const cardRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n const ghostsRef = useRef<HTMLDivElement>(null);\n\n const update: Update = (patch) => {\n setS((prev) => ({ ...prev, ...(typeof patch === \"function\" ? patch(prev) : patch) }));\n };\n\n const { liveRef, announce } = useAnnounce();\n const motion = useMotion({ cardRef, backdropRef, ghostsRef, open, shown, announce });\n const drag = useSectionDrag(cardRef, s.editing);\n const visit = useVisit({ adapter, open, onClose, opener, storage, loaded: s.loaded, update, motion, setShown, cardRef, backdropRef, ghostsRef, cancelDrag: () => void drag.cancel() });\n const view = viewOf(s, visit.place.layout, here);\n const actions = useMenuActions({ s, view, update, storage, here, adapter, open, motion, announce, cardRef, close: visit.close });\n const swipe = useSwipeDismiss(actions.dismiss);\n usePageListeners({\n open,\n cardRef,\n opener,\n close: visit.close,\n drag,\n onDrop: actions.dropSection,\n onResize: () => {\n motion.render({ animate: false });\n visit.relayout();\n }\n });\n\n const menu: Menu = { s, view, adapter, cardId, actions, swipe, drag, close: visit.close };\n const board = view.boardById(adapter.currentBoardId);\n const top = visit.place.top === null ? undefined : cssVars({ \"--qm-top\": `${visit.place.top}px` });\n\n return (\n <MenuContext value={menu}>\n {/* A click listener of its own, so WebKit on touch screens sends the tap's click (it skips elements nothing listens to); the press outside decides. */}\n <div ref={backdropRef} className=\"qm-backdrop\" hidden={!shown || visit.place.layout !== \"phone\"} style={top} onClick={() => undefined} />\n <div\n ref={cardRef}\n id={cardId}\n className={s.editing ? \"qm-card is-editing\" : \"qm-card\"}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={`${cardId}-title`}\n hidden={!shown}\n data-mode={view.mode}\n style={top}\n onClickCapture={swipe.clickCapture}\n >\n <div className=\"qm-head\">\n <div className=\"qm-here\">\n <span className=\"qm-planet qm-planet--sm\" aria-hidden=\"true\" hidden={!board} style={cssVars({ \"--c\": board?.colour || \"transparent\" })} />\n <div className=\"qm-here-text\">\n <h2 className=\"qm-eyebrow\" id={`${cardId}-title`}>\n Quick menu\n </h2>\n <p className=\"qm-here-name\">\n <span className=\"qm-here-board\">{board?.name || \"No board open\"}</span> <span className=\"qm-here-place\">{adapter.placeLabel}</span>\n </p>\n </div>\n </div>\n <div className=\"qm-head-actions\">\n <button {...QM} className=\"qm-text-btn\" data-act=\"edit\" data-fk=\"edit\" aria-pressed={s.editing} onClick={actions.toggleEdit}>\n {s.editing ? \"Done\" : \"Edit\"}\n </button>\n <button {...QM} className=\"qm-icon-btn qm-close\" data-act=\"close\" data-fk=\"close\" aria-label=\"Close quick menu\" onClick={() => visit.close()}>\n <Icon name=\"x\" />\n </button>\n </div>\n </div>\n <div className=\"qm-main\">{s.editing ? <EditLayout /> : view.mode === \"phone\" ? <TabsLayout /> : <ColumnsLayout />}</div>\n <div className=\"qm-toast-slot\">\n {s.toast && (\n <div key=\"toast\" data-k=\"toast\" className=\"qm-toast\">\n <span className=\"qm-toast-text\">{s.toast.text}</span>\n <button {...QM} className=\"qm-link-btn\" data-act=\"undo\" data-fk=\"undo\" onClick={actions.undo}>\n Undo\n </button>\n </div>\n )}\n </div>\n <div ref={ghostsRef} className=\"qm-ghosts\" aria-hidden=\"true\" data-flip-ghosts=\"\" />\n </div>\n <p ref={liveRef} className=\"qm-sr\" aria-live=\"polite\" />\n </MenuContext>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Loads the app's on-demand chunks once the page is idle, so it keeps working
|
|
2
|
+
// offline and a first open doesn't wait. import() keeps each module in the page's
|
|
3
|
+
// module map, where the app's own import() of it finds it (WebKit warns about a
|
|
4
|
+
// modulepreload hint the page doesn't use within seconds).
|
|
5
|
+
const chunks = ["chunk.1fJGQGbW.js","chunk.5D7JO2zp.js","chunk.BrNn_D79.js","chunk.CokJXIqM.js","chunk.RO0jsH6I.js","chunk.dqWOEtBM.js"];
|
|
6
|
+
let fetched = false;
|
|
7
|
+
const fetchAll = () => {
|
|
8
|
+
if (fetched) return;
|
|
9
|
+
fetched = true;
|
|
10
|
+
for (const chunk of chunks) import(new URL(chunk, import.meta.url).href).catch(() => {});
|
|
11
|
+
};
|
|
12
|
+
const whenIdle = () => ("requestIdleCallback" in window ? requestIdleCallback(fetchAll, { timeout: 3000 }) : setTimeout(fetchAll, 500));
|
|
13
|
+
document.addEventListener("orbit:ready", whenIdle, { once: true });
|
|
14
|
+
// A board that never comes up (an error, a slow disk) still gets its chunks.
|
|
15
|
+
addEventListener("load", () => setTimeout(whenIdle, 10000));
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|