@kanyun-ai-infra/band-cli 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/official/activity/package.json +1 -1
- package/bundled/official/approval/package.json +1 -1
- package/bundled/official/artifacts/package.json +1 -1
- package/bundled/official/chat/dist/index.js +1 -1
- package/bundled/official/chat/package.json +2 -2
- package/bundled/official/chunks/chunk-7XYETT7C.js +1 -0
- package/bundled/official/comment/package.json +1 -1
- package/bundled/official/header/package.json +1 -1
- package/bundled/official/home/dist/index.js +1 -1
- package/bundled/official/home/package.json +2 -2
- package/bundled/official/layouts/package.json +1 -1
- package/bundled/official/library/package.json +1 -1
- package/bundled/official/members/dist/index.js +1 -1
- package/bundled/official/members/package.json +2 -2
- package/bundled/official/memory/package.json +1 -1
- package/bundled/official/native/package.json +1 -1
- package/bundled/official/params-form/package.json +1 -1
- package/bundled/official/plugins/package.json +1 -1
- package/bundled/official/project/dist/index.js +1 -1
- package/bundled/official/project/package.json +2 -2
- package/bundled/official/queue/package.json +1 -1
- package/bundled/official/settings/dist/index.js +1 -1
- package/bundled/official/settings/package.json +2 -2
- package/bundled/official/shell/dist/index.js +1 -1
- package/bundled/official/shell/package.json +2 -2
- package/bundled/official/stages/package.json +1 -1
- package/bundled/official/threads/dist/index.js +1 -1
- package/bundled/official/threads/package.json +2 -2
- package/bundled/official/turn-bar/package.json +1 -1
- package/bundled/official/turn-trace/package.json +1 -1
- package/bundled/official/version-switch/dist/index.js +1 -1
- package/bundled/official/version-switch/package.json +1 -1
- package/bundled/official/viewer-entity/package.json +1 -1
- package/bundled/official/viewer-external/package.json +1 -1
- package/bundled/official/viewer-image/package.json +1 -1
- package/bundled/official/viewer-media/package.json +1 -1
- package/bundled/official/viewer-storyboard/package.json +1 -1
- package/bundled/official/viewer-text/package.json +1 -1
- package/bundled/official/viewer-tool/package.json +1 -1
- package/bundled/official/viewer-web/package.json +1 -1
- package/bundled/official/viewer-web-app/package.json +1 -1
- package/bundled/official/workshops/dist/index.js +2 -2
- package/bundled/official/workshops/package.json +2 -2
- package/bundled/tokens/components.css +1 -1
- package/dev-host/app.tsx +23 -7
- package/dev-host/host.css +7 -0
- package/dist/bin.js +1 -1
- package/dist/{chunk-Q2XJXNVH.js → chunk-FGPWXAOA.js} +151 -19
- package/dist/{dev-server-Q7NTJ3QD.js → dev-server-IBR3PKDE.js} +14 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/package.json +5 -4
- package/src/inspector-default.ts +9 -0
- package/bundled/official/chunks/chunk-DIL5YSVK.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{MATERIAL_TEXT_MAX_BYTES,materialError,materialObjectUrl,materialViewer,resolveMaterialSource}from"./chunk-N6N56MWF.js";import{artifactTypeDisplayName}from"@kanyun-ai-infra/band-contracts";import{Avatar,ErrorNote as ErrorNote4,ExternalImportPanel,Markdown,Mount as Mount3,Retry,STAGE_EVENTS as STAGE_EVENTS2,THREAD_EVENTS as THREAD_EVENTS2,agentLabel,createState,estimateMinutesText,firstTurnEnd,importConnector,importFrom,memberName as memberName2,memberOrder,reactMount,shortTime as shortTime2,stoppedTurnText,turnEndWord,useAppData as useAppData2,useCtxData as useCtxData6,useMembers as useMembers2,useSlotEntries as useSlotEntries2,useStateOf,versionLabel,withImeGuard as withImeGuard4}from"@kanyun-ai-infra/band-plugin-react";import{checkConfig,definePlugin,projectPath}from"@kanyun-ai-infra/band-plugin-sdk";import{useEffect as useEffect42,useId as useId3,useLayoutEffect as useLayoutEffect6,useMemo as useMemo2,useRef as useRef42,useState as useState52,useSyncExternalStore as useSyncExternalStore2}from"react";import{flushSync}from"react-dom";import{withImeGuard}from"@kanyun-ai-infra/band-plugin-react";import{THREAD_EVENTS,durationText,memberName,shortTime,useCtxData,useMembers}from"@kanyun-ai-infra/band-plugin-react";import{jsx as jsx9,jsxs as jsxs6}from"react/jsx-runtime";import{useCallback,useEffect as useEffect4,useLayoutEffect as useLayoutEffect5,useRef as useRef6,useState as useState5}from"react";import{useEffect,useRef}from"react";import{Fragment as Fragment3}from"react";function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}var clsx_default=clsx;import{Fragment,useLayoutEffect as useLayoutEffect3,useRef as useRef4,useState as useState2}from"react";import{cloneElement,forwardRef}from"react";import{jsx}from"react/jsx-runtime";import{Children,useEffect as useEffect2,useLayoutEffect,useRef as useRef2,useState}from"react";import{createPortal}from"react-dom";import{jsx as jsx2,jsxs}from"react/jsx-runtime";import{useLayoutEffect as useLayoutEffect2,useRef as useRef3}from"react";import{jsx as jsx3}from"react/jsx-runtime";import{Fragment as Fragment2,jsx as jsx4,jsxs as jsxs2}from"react/jsx-runtime";import{jsx as jsx5,jsxs as jsxs3}from"react/jsx-runtime";import{useEffect as useEffect3,useLayoutEffect as useLayoutEffect4,useRef as useRef5,useState as useState4}from"react";import{useState as useState3}from"react";import{Fragment as Fragment4,jsx as jsx6,jsxs as jsxs4}from"react/jsx-runtime";import{jsx as jsx7,jsxs as jsxs5}from"react/jsx-runtime";import{jsx as jsx8}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css='/* src/components/dockkit.module.css */\n.dockkit_split {\n display: flex;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n}\n.dockkit_splitRow {\n flex-direction: row;\n}\n.dockkit_splitColumn {\n flex-direction: column;\n}\n.dockkit_splitCell {\n display: flex;\n flex-basis: 0;\n min-width: 0;\n min-height: 0;\n}\n.dockkit_divider {\n position: relative;\n z-index: 1;\n flex: none;\n touch-action: none;\n}\n.dockkit_divider::before,\n.dockkit_divider::after {\n content: "";\n position: absolute;\n}\n.dockkit_divider::before {\n background: var(--rule-strong);\n}\n.dockkit_splitRow > .dockkit_divider {\n width: 0;\n cursor: col-resize;\n}\n.dockkit_splitRow > .dockkit_divider::before {\n top: 0;\n bottom: 0;\n left: -0.25px;\n width: 0.5px;\n}\n.dockkit_splitRow > .dockkit_divider::after {\n top: 0;\n bottom: 0;\n left: -4px;\n right: -4px;\n}\n.dockkit_splitColumn > .dockkit_divider {\n height: 0;\n cursor: row-resize;\n}\n.dockkit_splitColumn > .dockkit_divider::before {\n left: 0;\n right: 0;\n top: -0.25px;\n height: 0.5px;\n}\n.dockkit_splitColumn > .dockkit_divider::after {\n left: 0;\n right: 0;\n top: -4px;\n bottom: -4px;\n}\n.dockkit_divider::after {\n opacity: 0;\n transition: opacity 120ms ease-out;\n}\n.dockkit_divider:hover::after {\n opacity: 1;\n}\n.dockkit_splitRow > .dockkit_divider::after {\n background:\n linear-gradient(\n to bottom,\n transparent,\n var(--muted) 50%,\n transparent) center / 1px 100% no-repeat;\n}\n.dockkit_splitColumn > .dockkit_divider::after {\n background:\n linear-gradient(\n to right,\n transparent,\n var(--muted) 50%,\n transparent) center / 100% 1px no-repeat;\n}\n.dockkit_surface {\n display: flex;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n}\n.dockkit_tabLayout {\n display: grid;\n flex: 1 1 auto;\n grid-template-rows: minmax(0, 1fr);\n min-width: 0;\n min-height: 0;\n}\n.dockkit_tabCell,\n.dockkit_emptyTabHost {\n display: flex;\n min-width: 0;\n min-height: 0;\n z-index: var(--band-dock-dock-layer, 10);\n}\n.dockkit_tabCell[hidden] {\n display: none;\n}\n.dockkit_floatingCell {\n width: 0;\n height: 0;\n z-index: var(--band-dock-float-layer, 60);\n}\n.dockkit_tabHost {\n min-width: 0;\n min-height: 0;\n pointer-events: auto;\n}\n.dockkit_tabHost:not(.dockkit_float),\n.dockkit_emptyTabHost {\n background: var(--panel);\n}\n.dockkit_tabCell[data-dockkit-host=dock][data-dockkit-column="0"] > .dockkit_tabHost {\n border-left: 0.5px solid var(--rule-strong);\n}\n.dockkit_tabHostHeader {\n flex: none;\n}\n.dockkit_tabHostBody {\n position: relative;\n min-width: 0;\n}\n.dockkit_tabLayoutDivider {\n width: 0;\n cursor: col-resize;\n z-index: calc(var(--band-dock-dock-layer, 10) + 1);\n pointer-events: auto;\n}\n.dockkit_tabLayoutDivider::before {\n top: 0;\n bottom: 0;\n left: -0.25px;\n width: 0.5px;\n}\n.dockkit_tabLayoutDivider::after {\n top: 0;\n bottom: 0;\n left: -4px;\n right: -4px;\n background:\n linear-gradient(\n to bottom,\n transparent,\n var(--muted) 50%,\n transparent) center / 1px 100% no-repeat;\n}\n.dockkit_pane {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n.dockkit_pane:focus,\n.dockkit_float:focus {\n outline: none;\n}\n.dockkit_tabStrip {\n display: flex;\n flex: none;\n gap: 4px;\n align-items: center;\n height: 28px;\n padding: 10px 6px 0 var(--band-dock-strip-inline-start, 10px);\n touch-action: none;\n}\n.dockkit_stripTabs {\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n min-width: 0;\n overflow-x: auto;\n overflow-y: hidden;\n scroll-behavior: smooth;\n scrollbar-width: none;\n touch-action: none;\n}\n.dockkit_stripTabs::-webkit-scrollbar {\n display: none;\n}\n.dockkit_stripTabs[data-dockkit-strip-scroll=end] {\n mask-image:\n linear-gradient(\n to right,\n black calc(100% - 24px),\n transparent);\n}\n.dockkit_stripTabs[data-dockkit-strip-scroll=start] {\n mask-image:\n linear-gradient(\n to right,\n transparent,\n black 24px);\n}\n.dockkit_stripTabs[data-dockkit-strip-scroll="start end"] {\n mask-image:\n linear-gradient(\n to right,\n transparent,\n black 24px,\n black calc(100% - 24px),\n transparent);\n}\n.dockkit_stripFill {\n flex: 1 1 0;\n min-width: 0;\n}\n.dockkit_stripChrome {\n display: flex;\n flex: none;\n gap: 8px;\n align-items: center;\n height: 28px;\n margin-left: 4px;\n}\nhtml[data-platform=darwin] .dockkit_stripTabs,\nhtml[data-platform=darwin] .dockkit_stripChrome,\nhtml[data-platform=darwin] .dockkit_paneBody,\nhtml[data-platform=darwin] .dockkit_float,\nhtml[data-platform=darwin] .dockkit_divider {\n -webkit-app-region: no-drag;\n}\n.dockkit_slot {\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 10px;\n height: 28px;\n}\n.dockkit_slot::before {\n content: "";\n width: 0.5px;\n height: 14px;\n background: var(--rule-strong);\n}\n.dockkit_tabActive + .dockkit_slot:not(.dockkit_slotCaret)::before,\n.dockkit_slot:not(.dockkit_slotCaret):has(+ .dockkit_tabActive)::before {\n background: transparent;\n}\n.dockkit_slotCaret::before {\n width: 2px;\n height: 20px;\n background: var(--accent);\n}\n.dockkit_tab {\n position: relative;\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n min-width: 80px;\n max-width: 170px;\n height: 28px;\n padding: 0 10px;\n color: var(--muted);\n font-size: var(--band-dock-font-size, 13px);\n line-height: 1;\n white-space: nowrap;\n border-radius: var(--r-sm);\n cursor: pointer;\n touch-action: none;\n user-select: none;\n}\n.dockkit_tabTitle {\n display: flex;\n flex: 1 1 auto;\n gap: 5px;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n line-height: 1.4;\n}\n.dockkit_tabTitle[data-dockkit-tab-clipped] {\n mask-image:\n linear-gradient(\n to right,\n black calc(100% - 16px),\n transparent);\n}\n.dockkit_tab:not(.dockkit_floatTitle):hover .dockkit_tabTitle,\n.dockkit_tab:not(.dockkit_floatTitle):focus-within .dockkit_tabTitle,\n.dockkit_tabActive .dockkit_tabTitle {\n mask-image:\n linear-gradient(\n to right,\n black calc(100% - 30px),\n transparent calc(100% - 14px));\n}\n.dockkit_tabClose {\n position: absolute;\n top: 4px;\n right: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n color: var(--muted);\n line-height: 1;\n background: transparent;\n border: none;\n border-radius: var(--r-sm);\n cursor: pointer;\n opacity: 0;\n pointer-events: none;\n}\n.dockkit_tab:hover .dockkit_tabClose,\n.dockkit_tab:focus-within .dockkit_tabClose,\n.dockkit_tabActive .dockkit_tabClose {\n opacity: 1;\n pointer-events: auto;\n}\n.dockkit_addTab {\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n color: var(--muted);\n line-height: 1;\n background: transparent;\n border: none;\n border-radius: var(--r-sm);\n cursor: pointer;\n}\n.dockkit_addTab:hover {\n color: var(--ink);\n background: var(--fill-2);\n}\n.dockkit_tabClose:hover {\n color: var(--ink);\n background: var(--fill-2);\n}\n.dockkit_tab:hover {\n background: var(--fill-2);\n}\n.dockkit_tabActive {\n color: var(--ink);\n background: var(--fill);\n}\n.dockkit_tab.dockkit_tabQuiet,\n.dockkit_tab.dockkit_tabQuiet:hover {\n color: var(--ink);\n background: transparent;\n cursor: default;\n}\n.dockkit_tab.dockkit_tabQuiet .dockkit_tabTitle,\n.dockkit_tab.dockkit_tabQuiet:hover .dockkit_tabTitle,\n.dockkit_tab.dockkit_tabQuiet:focus-within .dockkit_tabTitle {\n mask-image: none;\n}\n.dockkit_tab.dockkit_tabQuiet .dockkit_tabTitle[data-dockkit-tab-clipped] {\n mask-image:\n linear-gradient(\n to right,\n black calc(100% - 16px),\n transparent);\n}\n.dockkit_tabDragging {\n opacity: 0.5;\n}\n.dockkit_iconButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 6px;\n color: var(--muted);\n line-height: 1;\n background: transparent;\n border: none;\n border-radius: var(--r-sm);\n cursor: pointer;\n}\n.dockkit_iconButton svg {\n width: 15px;\n height: 15px;\n}\n.dockkit_iconButton:hover:not(:disabled) {\n background: var(--fill-2);\n}\n.dockkit_iconButton:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.dockkit_menu {\n position: fixed;\n z-index: 70;\n display: flex;\n flex-direction: column;\n min-width: 96px;\n padding: 4px;\n border: 0.5px solid var(--rule);\n}\n.dockkit_menu:not(:has([role=menuitem], [role=menuitemcheckbox], [role=menuitemradio])) {\n display: none;\n}\n.dockkit_menuItem {\n padding: 4px 7px;\n color: var(--ink);\n font-size: calc(var(--band-dock-font-size, 13px) - 1px);\n text-align: left;\n background: transparent;\n border: none;\n border-radius: var(--r);\n cursor: pointer;\n}\n.dockkit_menuItem:hover {\n background: var(--fill-2);\n}\n.dockkit_paneBody {\n position: relative;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n --band-scrollbar-thumb: var(--fill-2);\n --band-scrollbar-thumb-hover: var(--fill-3);\n}\n.dockkit_empty {\n margin: 0;\n padding: 12px;\n color: var(--muted);\n font-size: var(--band-dock-font-size, 13px);\n}\n.dockkit_dockScrim {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none;\n background: color-mix(in srgb, var(--panel) 72%, transparent);\n backdrop-filter: blur(6px);\n animation: dockkit_dockScrimIn 140ms ease-out;\n}\n.dockkit_dockHint {\n position: absolute;\n z-index: 10;\n display: flex;\n box-sizing: border-box;\n padding: 8px;\n pointer-events: none;\n}\n.dockkit_dockHint[data-dockkit-dock-zone=center] {\n inset: 0;\n}\n.dockkit_dockHint[data-dockkit-dock-zone=left] {\n top: 0;\n bottom: 0;\n left: 0;\n width: 40%;\n}\n.dockkit_dockHint[data-dockkit-dock-zone=right] {\n top: 0;\n right: 0;\n bottom: 0;\n width: 40%;\n}\n[data-dockkit-drop-zones=horizontal] .dockkit_dockHint[data-dockkit-dock-zone=left] {\n width: 50%;\n padding-right: 4px;\n}\n[data-dockkit-drop-zones=horizontal] .dockkit_dockHint[data-dockkit-dock-zone=right] {\n width: 50%;\n padding-left: 4px;\n}\n.dockkit_dockHintCard {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n justify-content: center;\n min-width: 0;\n min-height: 0;\n padding: 12px;\n overflow: hidden;\n color: var(--muted);\n border: 1.5px dashed var(--rule);\n border-radius: var(--r-lg);\n transition:\n color 120ms ease-out,\n background-color 120ms ease-out,\n border-color 120ms ease-out;\n animation: dockkit_dockHintIn 140ms ease-out;\n}\n.dockkit_dockHint[data-dockkit-drop-active] .dockkit_dockHintCard {\n color: var(--muted);\n background: color-mix(in srgb, var(--accent) 8%, transparent);\n border-color: var(--accent);\n}\n.dockkit_dockHintCard svg {\n flex: none;\n width: 20px;\n height: 20px;\n}\n.dockkit_dockHintLabel {\n max-width: 100%;\n overflow: hidden;\n font-size: var(--band-dock-font-size, 13px);\n font-weight: 500;\n line-height: 1.4;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n@keyframes dockkit_dockHintIn {\n from {\n opacity: 0;\n transform: scale(0.98);\n }\n to {\n opacity: 1;\n transform: none;\n }\n}\n@keyframes dockkit_dockScrimIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.dockkit_dockHint[data-dockkit-dock-zone=top] {\n top: 0;\n right: 0;\n left: 0;\n height: 40%;\n}\n.dockkit_dockHint[data-dockkit-dock-zone=bottom] {\n right: 0;\n bottom: 0;\n left: 0;\n height: 40%;\n}\nhtml[data-windows-titlebar] .dockkit_float {\n --band-dock-float-top: calc(var(--band-titlebar-height) + 20px);\n}\nhtml[data-windows-titlebar][data-fullscreen] .dockkit_float {\n --band-dock-float-top: 20px;\n}\n.dockkit_float {\n position: fixed;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--sunk);\n border-radius: var(--r-lg);\n --dsw-elevation-stroke-color: var(--rule);\n box-shadow: var(--shadow-pop);\n pointer-events: auto;\n}\n.dockkit_floatHeader {\n cursor: move;\n user-select: none;\n}\n.dockkit_floatTitle {\n flex: 0 1 auto;\n cursor: inherit;\n}\n.dockkit_tab.dockkit_floatTitle:hover {\n background: transparent;\n}\n.dockkit_dockGlyph {\n transform: scaleX(-1);\n}\n.dockkit_floatBody {\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n --band-scrollbar-thumb: var(--fill-2);\n --band-scrollbar-thumb-hover: var(--fill-3);\n}\n.dockkit_floatResize {\n position: absolute;\n right: 0;\n bottom: 0;\n width: 20px;\n height: 20px;\n cursor: nwse-resize;\n touch-action: none;\n}\n.dockkit_floatResize::after {\n content: "";\n position: absolute;\n right: 4px;\n bottom: 4px;\n width: calc(var(--r-lg) - 4px);\n height: calc(var(--r-lg) - 4px);\n border-right: 1.5px solid var(--muted);\n border-bottom: 1.5px solid var(--muted);\n border-bottom-right-radius: calc(var(--r-lg) - 4px);\n opacity: 0;\n transition: opacity 120ms ease-out;\n}\n.dockkit_float:hover .dockkit_floatResize::after,\n.dockkit_floatResize:active::after {\n opacity: 1;\n}\n.dockkit_floatResize:hover::after {\n border-color: var(--muted);\n}\n';let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-dockkit"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-dockkit");document.head.prepend(el)}el.textContent=css}function assertNever(value,what){throw new Error(`${what}: unhandled ${JSON.stringify(value)}`)}function getNode(state,id){const node=state.nodes[id];if(node===void 0)throw new Error(`layout: unknown node ${id}`);return node}function getPane(state,id){const node=getNode(state,id);if(node.kind!=="pane")throw new Error(`layout: ${id} is not a pane`);return node}function getSplit(state,id){const node=getNode(state,id);if(node.kind!=="split")throw new Error(`layout: ${id} is not a split`);return node}function getTab(state,id){const tab=state.tabs[id];if(tab===void 0)throw new Error(`layout: unknown tab ${id}`);return tab}function floatRect(pane){if(pane.host!=="float"||pane.rect===void 0)throw new Error(`layout: ${pane.id} is not floating`);return pane.rect}function floatIndex(state,id){const index=state.floats.indexOf(id);if(index<0)throw new Error(`layout: floating pane ${id} is not in the z order`);return index}function onlyTabId(pane){const tabId=pane.tabs[0];if(tabId===void 0||pane.tabs.length!==1)throw new Error(`layout: ${pane.id} does not hold exactly one tab`);return tabId}function findParent(state,id){for(const node of Object.values(state.nodes)){if(node.kind==="split"&&node.children.includes(id))return node}return void 0}function findTabPane(state,tabId){for(const node of Object.values(state.nodes)){if(node.kind==="pane"&&node.tabs.includes(tabId))return node}throw new Error(`layout: tab ${tabId} has no pane`)}function dockPaneIds(state){const out=[];const walk=id=>{const node=getNode(state,id);if(node.kind==="pane"){out.push(node.id);return}for(const child of node.children)walk(child)};walk(state.rootId);return out}function normalizeSizes(sizes){const total=sizes.reduce((sum,size)=>sum+size,0);if(!(total>0))throw new Error("layout: sizes must sum above zero");if(Math.abs(total-1)<1e-12)return[...sizes];return sizes.map(size=>size/total)}function entriesOf(record2){return Object.entries(record2)}function keysOf(record2){return Object.keys(record2)}function withNodes(state,updates){const nodes={};for(const[id,node]of entriesOf(state.nodes)){if(!(id in updates))nodes[id]=node}for(const[id,node]of entriesOf(updates)){if(node!==null)nodes[id]=node}return{...state,nodes}}function withTabs(state,updates){const tabs={};for(const[id,tab]of entriesOf(state.tabs)){if(!(id in updates))tabs[id]=tab}for(const[id,tab]of entriesOf(updates)){if(tab!==null)tabs[id]=tab}return{...state,tabs}}function insertAt(items,index,value){const at=Math.max(0,Math.min(index,items.length));return[...items.slice(0,at),value,...items.slice(at)]}function removeAt(items,index){return[...items.slice(0,index),...items.slice(index+1)]}function neighbourTabId(tabs,removedIndex){const remaining=removeAt(tabs,removedIndex);if(remaining.length===0)return void 0;return remaining[Math.max(0,removedIndex-1)]}function paneWithTabs(pane,tabs,activeTabId){return{...pane,tabs,activeTabId}}function replaceInParent(state,targetId,replacementId){const parent=findParent(state,targetId);if(parent===void 0){if(state.rootId!==targetId)throw new Error(`layout: ${targetId} is neither rooted nor parented`);return{...state,rootId:replacementId}}const children=parent.children.map(child=>child===targetId?replacementId:child);return withNodes(state,{[parent.id]:{...parent,children}})}function descend(state,choose){let node=getNode(state,state.rootId);while(node.kind==="split"){const next=choose(node);if(next===void 0)throw new Error(`layout: split ${node.id} has no children`);node=getNode(state,next)}return node.id}function firstDockPaneId(state){return descend(state,split=>split.children[0])}function topRightPaneId(state){return descend(state,split=>split.axis==="row"?split.children.at(-1):split.children[0])}function focusSnapshot(state,paneIds){const paneActiveTabs={};for(const id of paneIds)paneActiveTabs[id]=getPane(state,id).activeTabId;return{type:"restoreFocus",activePaneId:state.activePaneId,floats:state.floats,paneActiveTabs}}function raise(floats,paneId){return[...floats.filter(id=>id!==paneId),paneId]}function reseatFocus(state,removedPaneId){if(state.activePaneId!==removedPaneId)return state;return{...state,activePaneId:firstDockPaneId(state)}}function emptyDockPane(id){return{kind:"pane",id,host:"dock",tabs:[],activeTabId:void 0,rect:void 0}}function assertFreeNode(state,id){if(state.nodes[id]!==void 0)throw new Error(`layout: node ${id} already exists`)}function assertFreeTab(state,id){if(state.tabs[id]!==void 0)throw new Error(`layout: tab ${id} already exists`)}function applySplit(state,op){const pane=getPane(state,op.paneId);if(pane.host!=="dock")throw new Error("layout: split requires a docked pane");assertFreeNode(state,op.newPaneId);const newPane=emptyDockPane(op.newPaneId);const parent=findParent(state,op.paneId);if(parent!==void 0&&parent.axis===op.axis){const index=parent.children.indexOf(op.paneId);const at=op.direction==="after"?index+1:index;const children2=insertAt(parent.children,at,op.newPaneId);const sizes=parent.sizes.flatMap((size,i)=>i===index?[size/2,size/2]:[size]);return{state:withNodes(state,{[op.newPaneId]:newPane,[parent.id]:{...parent,children:children2,sizes}}),inverse:[{type:"merge",paneId:op.newPaneId},{type:"resize",splitId:parent.id,sizes:parent.sizes}]}}assertFreeNode(state,op.newSplitId);const rehomed=replaceInParent(state,op.paneId,op.newSplitId);const children=op.direction==="after"?[op.paneId,op.newPaneId]:[op.newPaneId,op.paneId];return{state:withNodes(rehomed,{[op.newPaneId]:newPane,[op.newSplitId]:{kind:"split",id:op.newSplitId,axis:op.axis,children,sizes:[.5,.5]}}),inverse:[{type:"merge",paneId:op.newPaneId}]}}function applyMerge(state,op){const pane=getPane(state,op.paneId);if(pane.tabs.length>0)throw new Error("layout: merge requires an empty pane");const focus=focusSnapshot(state,[]);if(pane.host==="float"){const index2=floatIndex(state,op.paneId);const dropped=withNodes({...state,floats:removeAt(state.floats,index2)},{[op.paneId]:null});return{state:reseatFocus(dropped,op.paneId),inverse:[{type:"insertPane",pane,tabs:[],attach:{mode:"float",index:index2}},focus]}}const parent=findParent(state,op.paneId);if(parent===void 0)throw new Error("layout: the docked root pane cannot be merged");const index=parent.children.indexOf(op.paneId);if(parent.children.length>2){const children=removeAt(parent.children,index);const sizes=normalizeSizes(removeAt(parent.sizes,index));const dropped=withNodes(state,{[op.paneId]:null,[parent.id]:{...parent,children,sizes}});return{state:reseatFocus(dropped,op.paneId),inverse:[{type:"insertPane",pane,tabs:[],attach:{mode:"child",parentId:parent.id,index,sizes:parent.sizes}},focus]}}const siblingId=parent.children[1-index];if(siblingId===void 0)throw new Error("layout: merge found a split without a sibling");const collapsed=withNodes(replaceInParent(state,parent.id,siblingId),{[op.paneId]:null,[parent.id]:null});return{state:reseatFocus(collapsed,op.paneId),inverse:[{type:"insertPane",pane,tabs:[],attach:{mode:"wrap",targetId:siblingId,split:parent}},focus]}}function applyOpenTab(state,op){const pane=getPane(state,op.paneId);if(pane.host!=="dock")throw new Error("layout: openTab requires a docked pane");assertFreeTab(state,op.tab.id);const focus=focusSnapshot(state,[pane.id]);const seated=withNodes(withTabs(state,{[op.tab.id]:op.tab}),{[pane.id]:paneWithTabs(pane,insertAt(pane.tabs,op.index,op.tab.id),op.tab.id)});return{state:{...seated,activePaneId:pane.id},inverse:[{type:"closeTab",tabId:op.tab.id},focus]}}function applyInsertTab(state,op){const pane=getPane(state,op.paneId);if(pane.host!=="dock")throw new Error("layout: insertTab requires a docked pane");assertFreeTab(state,op.tab.id);const focus=focusSnapshot(state,[pane.id]);const tabs=insertAt(pane.tabs,op.index,op.tab.id);return{state:withNodes(withTabs(state,{[op.tab.id]:op.tab}),{[pane.id]:paneWithTabs(pane,tabs,pane.activeTabId??op.tab.id)}),inverse:[{type:"closeTab",tabId:op.tab.id},focus]}}function applyCloseTab(state,op){const tab=getTab(state,op.tabId);const pane=findTabPane(state,op.tabId);const index=pane.tabs.indexOf(op.tabId);const focus=focusSnapshot(state,[pane.id]);if(pane.host==="float"){const index2=floatIndex(state,pane.id);const dropped=withTabs(withNodes({...state,floats:removeAt(state.floats,index2)},{[pane.id]:null}),{[op.tabId]:null});return{state:reseatFocus(dropped,pane.id),inverse:[{type:"insertPane",pane,tabs:[tab],attach:{mode:"float",index:index2}},focus]}}const activeTabId=pane.activeTabId===op.tabId?neighbourTabId(pane.tabs,index):pane.activeTabId;return{state:withTabs(withNodes(state,{[pane.id]:paneWithTabs(pane,removeAt(pane.tabs,index),activeTabId)}),{[op.tabId]:null}),inverse:[{type:"insertTab",paneId:pane.id,tab,index},focus]}}function applyInsertPane(state,op){assertFreeNode(state,op.pane.id);if(op.pane.tabs.length!==op.tabs.length)throw new Error("layout: insertPane tab records do not match the pane");if(op.pane.host==="dock"&&op.tabs.length>0)throw new Error("layout: insertPane returns a docked pane empty");const tabUpdates={};for(const tab of op.tabs){assertFreeTab(state,tab.id);tabUpdates[tab.id]=tab}const restoredTab=op.tabs[0];const inverse=restoredTab===void 0?[{type:"merge",paneId:op.pane.id}]:[{type:"closeTab",tabId:restoredTab.id},focusSnapshot(state,[])];const attach=op.attach;switch(attach.mode){case"child":{const parent=getSplit(state,attach.parentId);const children=insertAt(parent.children,attach.index,op.pane.id);if(attach.sizes.length!==children.length)throw new Error("layout: insertPane sizes do not match the split");inverse.push({type:"resize",splitId:parent.id,sizes:parent.sizes});return{state:withNodes(withTabs(state,tabUpdates),{[op.pane.id]:op.pane,[parent.id]:{...parent,children,sizes:attach.sizes}}),inverse}}case"wrap":{if(!attach.split.children.includes(op.pane.id)){throw new Error("layout: insertPane wrap split does not list the pane")}const rehomed=replaceInParent(state,attach.targetId,attach.split.id);return{state:withNodes(withTabs(rehomed,tabUpdates),{[op.pane.id]:op.pane,[attach.split.id]:attach.split}),inverse}}case"float":{if(op.pane.host!=="float")throw new Error("layout: float attachment requires a floating pane");const floats=insertAt(state.floats,attach.index,op.pane.id);return{state:withNodes(withTabs({...state,floats},tabUpdates),{[op.pane.id]:op.pane}),inverse}}default:return assertNever(attach,"layout: insertPane attachment")}}function applyMoveTab(state,op){const from=findTabPane(state,op.tabId);if(from.host!=="dock")throw new Error("layout: moveTab source must be docked; use unfloat");const to=getPane(state,op.toPaneId);if(to.host!=="dock")throw new Error("layout: moveTab target must be docked");if(to.id===from.id)throw new Error("layout: moveTab across one pane; use reorderTab");const index=from.tabs.indexOf(op.tabId);const focus=focusSnapshot(state,[from.id,to.id]);const activeTabId=from.activeTabId===op.tabId?neighbourTabId(from.tabs,index):from.activeTabId;const moved=withNodes(state,{[from.id]:paneWithTabs(from,removeAt(from.tabs,index),activeTabId),[to.id]:paneWithTabs(to,insertAt(to.tabs,op.index,op.tabId),op.tabId)});return{state:{...moved,activePaneId:to.id},inverse:[{type:"moveTab",tabId:op.tabId,toPaneId:from.id,index},focus]}}function applyReorderTab(state,op){const pane=findTabPane(state,op.tabId);const from=pane.tabs.indexOf(op.tabId);const tabs=insertAt(removeAt(pane.tabs,from),op.index,op.tabId);return{state:withNodes(state,{[pane.id]:{...pane,tabs}}),inverse:[{type:"reorderTab",tabId:op.tabId,index:from}]}}function applyFocusTab(state,op){const pane=findTabPane(state,op.tabId);const focus=focusSnapshot(state,[pane.id]);const focused=withNodes(state,{[pane.id]:{...pane,activeTabId:op.tabId}});const floats=pane.host==="float"?raise(focused.floats,pane.id):focused.floats;return{state:{...focused,activePaneId:pane.id,floats},inverse:[focus]}}function applyFocusPane(state,op){const pane=getPane(state,op.paneId);const focus=focusSnapshot(state,[]);const floats=pane.host==="float"?raise(state.floats,pane.id):state.floats;return{state:{...state,activePaneId:pane.id,floats},inverse:[focus]}}function applyResize(state,op){const split=getSplit(state,op.splitId);if(op.sizes.length!==split.children.length)throw new Error("layout: resize sizes do not match the split");if(op.sizes.some(size=>!(size>0)))throw new Error("layout: resize sizes must all be above zero");return{state:withNodes(state,{[split.id]:{...split,sizes:normalizeSizes(op.sizes)}}),inverse:[{type:"resize",splitId:split.id,sizes:split.sizes}]}}function applyFloat(state,op){getTab(state,op.tabId);const from=findTabPane(state,op.tabId);if(from.host!=="dock")throw new Error("layout: float requires a docked tab");assertFreeNode(state,op.newPaneId);const index=from.tabs.indexOf(op.tabId);const focus=focusSnapshot(state,[from.id]);const activeTabId=from.activeTabId===op.tabId?neighbourTabId(from.tabs,index):from.activeTabId;const floated=withNodes(state,{[from.id]:paneWithTabs(from,removeAt(from.tabs,index),activeTabId),[op.newPaneId]:{kind:"pane",id:op.newPaneId,host:"float",tabs:[op.tabId],activeTabId:op.tabId,rect:op.rect}});return{state:{...floated,floats:[...floated.floats,op.newPaneId],activePaneId:op.newPaneId},inverse:[{type:"unfloat",paneId:op.newPaneId,toPaneId:from.id,index},focus]}}function applyUnfloat(state,op){const pane=getPane(state,op.paneId);const rect=floatRect(pane);const tabId=onlyTabId(pane);const to=getPane(state,op.toPaneId);if(to.host!=="dock")throw new Error("layout: unfloat target must be docked");const focus=focusSnapshot(state,[to.id]);const docked=withNodes({...state,floats:removeAt(state.floats,floatIndex(state,op.paneId))},{[op.paneId]:null,[to.id]:paneWithTabs(to,insertAt(to.tabs,op.index,tabId),tabId)});return{state:{...docked,activePaneId:to.id},inverse:[{type:"float",tabId,newPaneId:op.paneId,rect},focus]}}function reshapeFloat(state,pane,rect){const reshaped=withNodes(state,{[pane.id]:{...pane,rect}});return{...reshaped,activePaneId:pane.id,floats:raise(reshaped.floats,pane.id)}}function applyMoveFloat(state,op){const pane=getPane(state,op.paneId);const rect=floatRect(pane);return{state:reshapeFloat(state,pane,{...rect,x:op.x,y:op.y}),inverse:[{type:"moveFloat",paneId:op.paneId,x:rect.x,y:rect.y},focusSnapshot(state,[])]}}function applyResizeFloat(state,op){const pane=getPane(state,op.paneId);const rect=floatRect(pane);if(!(op.rect.width>0)||!(op.rect.height>0))throw new Error("layout: float size must be above zero");return{state:reshapeFloat(state,pane,op.rect),inverse:[{type:"resizeFloat",paneId:op.paneId,rect},focusSnapshot(state,[])]}}function applyRestoreFocus(state,op){const inverse=focusSnapshot(state,keysOf(op.paneActiveTabs));for(const paneId of op.floats){const pane=getPane(state,paneId);if(pane.host!=="float")throw new Error(`layout: restoreFocus lists docked pane ${paneId} as floating`)}let next=state;for(const[paneId,activeTabId]of entriesOf(op.paneActiveTabs)){const pane=getPane(next,paneId);next=withNodes(next,{[paneId]:{...pane,activeTabId}})}getPane(next,op.activePaneId);return{state:{...next,activePaneId:op.activePaneId,floats:op.floats},inverse:[inverse]}}function applyOp(state,op){switch(op.type){case"split":return applySplit(state,op);case"merge":return applyMerge(state,op);case"openTab":return applyOpenTab(state,op);case"insertTab":return applyInsertTab(state,op);case"closeTab":return applyCloseTab(state,op);case"insertPane":return applyInsertPane(state,op);case"moveTab":return applyMoveTab(state,op);case"reorderTab":return applyReorderTab(state,op);case"focusTab":return applyFocusTab(state,op);case"focusPane":return applyFocusPane(state,op);case"resize":return applyResize(state,op);case"float":return applyFloat(state,op);case"unfloat":return applyUnfloat(state,op);case"moveFloat":return applyMoveFloat(state,op);case"resizeFloat":return applyResizeFloat(state,op);case"setExpanded":return{state:{...state,expanded:op.expanded},inverse:[{type:"setExpanded",expanded:state.expanded}]};case"setMode":return{state:{...state,mode:op.mode},inverse:[{type:"setMode",mode:state.mode}]};case"restoreFocus":return applyRestoreFocus(state,op);default:return assertNever(op,"layout: operation")}}var EMPTY_HISTORY={entries:[],cursor:0};var FOCUS_OP_TYPES=new Set(["focusTab","focusPane","restoreFocus"]);function isFocusOp(op){return FOCUS_OP_TYPES.has(op.type)}function isFocusEntry(history,index){const entry=history.entries[index];return entry!==void 0&&entry.ops.every(isFocusOp)}function canStepBack(history){return history.cursor>0}function canStepForward(history){return history.cursor<history.entries.length}function recordedOps(history){return history.entries.flatMap(entry=>entry.ops)}function record(history,state,ops){if(ops.length===0)return{history,state};let next=state;const inverse=[];for(const op of ops){const result=applyOp(next,op);next=result.state;inverse.unshift(...result.inverse)}const kept=history.cursor===history.entries.length?history.entries:history.entries.slice(0,history.cursor);return{history:{entries:[...kept,{ops,inverse}],cursor:history.cursor+1},state:next}}function stepBack(history,state){if(!canStepBack(history))return void 0;let count=1;if(isFocusEntry(history,history.cursor-1)){while(isFocusEntry(history,history.cursor-1-count))count+=1}let next=state;for(const entry of history.entries.slice(history.cursor-count,history.cursor).reverse()){for(const op of entry.inverse)next=applyOp(next,op).state}return{history:{entries:history.entries,cursor:history.cursor-count},state:next}}function stepForward(history,state){if(!canStepForward(history))return void 0;let count=1;if(isFocusEntry(history,history.cursor)){while(isFocusEntry(history,history.cursor+count))count+=1}let next=state;for(const entry of history.entries.slice(history.cursor,history.cursor+count)){for(const op of entry.ops)next=applyOp(next,op).state}return{history:{entries:history.entries,cursor:history.cursor+count},state:next}}var Sequencer=class{current;recorded=EMPTY_HISTORY;constructor(initial){this.current=initial}get state(){return this.current}get history(){return this.recorded}get ops(){return recordedOps(this.recorded)}get cursor(){return this.recorded.cursor}get canUndo(){return canStepBack(this.recorded)}get canRedo(){return canStepForward(this.recorded)}dispatch(op){return this.dispatchAll([op])}dispatchAll(ops){const stepped=record(this.recorded,this.current,ops);this.recorded=stepped.history;this.current=stepped.state;return this.current}undo(){const stepped=stepBack(this.recorded,this.current);if(stepped===void 0)return false;this.recorded=stepped.history;this.current=stepped.state;return true}redo(){const stepped=stepForward(this.recorded,this.current);if(stepped===void 0)return false;this.recorded=stepped.history;this.current=stepped.state;return true}};var MAX_DOCK_PANES=4;var MIN_PANE_FRACTION=.12;var FLOAT_DEFAULT_SIZE={width:380,height:300};var DOCK_EDGE_FRACTION=.25;function dockPaneCount(state){return dockPaneIds(state).length}function canSplit(state){return dockPaneCount(state)<MAX_DOCK_PANES}function zoneAt(x,y,edge=DOCK_EDGE_FRACTION){let zone="left";let distance=x;if(1-x<distance){zone="right";distance=1-x}if(y<distance){zone="top";distance=y}if(1-y<distance){zone="bottom";distance=1-y}return distance<edge?zone:"center"}function zoneSplit(zone){switch(zone){case"center":return void 0;case"left":return{axis:"row",direction:"before"};case"right":return{axis:"row",direction:"after"};case"top":return{axis:"column",direction:"before"};case"bottom":return{axis:"column",direction:"after"};default:return assertNever(zone,"layout: dock zone")}}function clampSizes(sizes,minimum=MIN_PANE_FRACTION){if(sizes.length===0)return[];const floor=Math.min(minimum,1/sizes.length);const positive=sizes.map(size=>size>0?size:0);const total=positive.reduce((sum,size)=>sum+size,0);let shares=total>0?positive.map(size=>size/total):positive.map(()=>1/sizes.length);const pinned=new Set;for(;;){const under=shares.flatMap((share,index)=>!pinned.has(index)&&share<floor?[index]:[]);if(under.length===0)return shares;for(const index of under)pinned.add(index);const remainder=1-pinned.size*floor;const freeTotal=shares.reduce((sum,share,index)=>pinned.has(index)?sum:sum+share,0);shares=shares.map((share,index)=>pinned.has(index)?floor:share/freeTotal*remainder)}}function containsPoint(rect,x,y){return x>=rect.x&&x<=rect.x+rect.width&&y>=rect.y&&y<=rect.y+rect.height}function zoneInRect(rect,x,y,edge=DOCK_EDGE_FRACTION){if(!(rect.width>0)||!(rect.height>0))return"center";return zoneAt((x-rect.x)/rect.width,(y-rect.y)/rect.height,edge)}function insertionIndex(tabRects,x){let index=0;for(const rect of tabRects){if(x<rect.x+rect.width/2)break;index+=1}return index}var SPLIT_MINIMUMS={divider:0,chip:100,body:48};function halvesFit(measure,minimums=SPLIT_MINIMUMS){const{pane,strip}=measure;if(!(pane.width>0)||!(pane.height>0)||!(strip.width>0))return{row:true,column:true};const borders=Math.max(0,pane.width-strip.width);const fixed=Math.max(0,strip.width-measure.chipsWidth-measure.fillWidth-(measure.splitControlWidth??0));const halfWidth=(pane.width-minimums.divider)/2-borders;const halfHeight=(pane.height-minimums.divider)/2-borders;return{row:halfWidth>=fixed+minimums.chip,column:halfHeight>=strip.height+minimums.body}}var DRAG_THRESHOLD=4;function passedThreshold(startX,startY,x,y){return Math.abs(x-startX)>=DRAG_THRESHOLD||Math.abs(y-startY)>=DRAG_THRESHOLD}function dividerSizes(sizes,index,delta){const before=sizes[index];const after=sizes[index+1];if(before===void 0||after===void 0)return[...sizes];const next=[...sizes];next[index]=before+delta;next[index+1]=after-delta;return next}function floatRectAt(x,y,size){return{x:Math.max(0,x-GRAB_OFFSET.x),y:Math.max(0,y-GRAB_OFFSET.y),...size}}var GRAB_OFFSET={x:60,y:14};var FLOAT_CASCADE_STEP=24;var FLOAT_ORIGIN={x:160,y:120};var NOTHING=[];function findPaneContentTab(state,paneId,contentId,kind){for(const tabId of getPane(state,paneId).tabs){const tab=state.tabs[tabId];if(tab?.contentId===contentId&&(kind===void 0||tab.kind===kind))return tabId}return void 0}function findContentTab(state,contentId,kind){for(const paneId of[...dockPaneIds(state),...state.floats]){const found=findPaneContentTab(state,paneId,contentId,kind);if(found!==void 0)return found}return void 0}function activeDockPaneId(state){const active=getPane(state,state.activePaneId);return active.host==="dock"?active.id:firstDockPaneId(state)}function tabInto(source,tabId,toPaneId,index){return source.host==="float"?{type:"unfloat",paneId:source.id,toPaneId,index}:{type:"moveTab",tabId,toPaneId,index}}function planSetExpanded(state,expanded){return state.expanded===expanded?NOTHING:[{type:"setExpanded",expanded}]}function planSetMode(state,mode){return state.mode===mode?NOTHING:[{type:"setMode",mode}]}function planSplitPane(state,mint,paneId,makePaneTab){if(!canSplit(state))return NOTHING;const target=paneId??activeDockPaneId(state);if(getPane(state,target).host!=="dock")return NOTHING;const newPaneId=mint("pane");const ops=[{type:"split",paneId:target,axis:"row",direction:"after",newPaneId,newSplitId:mint("split")}];const seed=makePaneTab?.(mint("tab"));if(seed!==void 0)ops.push({type:"openTab",paneId:newPaneId,tab:seed,index:0});return ops}function planAddTab(state,mint,paneId,makeTab){if(makeTab===void 0)return NOTHING;const pane=getPane(state,paneId);if(pane.host!=="dock")return NOTHING;return[{type:"openTab",paneId,tab:makeTab(mint("tab")),index:pane.tabs.length}]}function planOpenContent(state,mint,input){const existing=input.revealIfOpened===false?void 0:findContentTab(state,input.contentId,input.kind);if(existing!==void 0)return{ops:[{type:"focusTab",tabId:existing}],tabId:existing};const paneId=input.paneId??activeDockPaneId(state);const tab={id:mint("tab"),kind:input.kind,contentId:input.contentId,title:input.title};return{ops:[{type:"openTab",paneId,tab,index:input.index??getPane(state,paneId).tabs.length}],tabId:tab.id}}function planDuplicateTab(state,mint,tabId){const source=getTab(state,tabId);const pane=findTabPane(state,tabId);const host=pane.host==="dock"?pane.id:activeDockPaneId(state);const index=pane.host==="dock"?pane.tabs.indexOf(tabId)+1:getPane(state,host).tabs.length;const tab={...source,id:mint("tab")};return{ops:[{type:"openTab",paneId:host,tab,index}],tabId:tab.id}}function planPlaceTab(state,tabId,toPaneId,index){const source=findTabPane(state,tabId);if(getPane(state,toPaneId).host!=="dock")return NOTHING;if(source.id===toPaneId){const from=source.tabs.indexOf(tabId);const to=index>from?index-1:index;return to===from?NOTHING:[{type:"reorderTab",tabId,index:to}]}return[tabInto(source,tabId,toPaneId,index)]}function planDropTab(state,mint,tabId,targetPaneId,zone,makeTab){const source=findTabPane(state,tabId);const target=getPane(state,targetPaneId);if(target.host!=="dock")return NOTHING;const split=zoneSplit(zone);if(split===void 0){if(source.id===targetPaneId)return NOTHING;return[tabInto(source,tabId,targetPaneId,target.tabs.length)]}const vacates=source.id===targetPaneId&&source.tabs.length===1;if(vacates&&makeTab===void 0)return NOTHING;if(!canSplit(state))return NOTHING;const newPaneId=mint("pane");const ops=[{type:"split",paneId:targetPaneId,axis:split.axis,direction:split.direction,newPaneId,newSplitId:mint("split")}];if(vacates&&makeTab!==void 0){ops.push({type:"openTab",paneId:targetPaneId,tab:makeTab(mint("tab")),index:source.tabs.length})}ops.push(tabInto(source,tabId,newPaneId,0));return ops}function planFloatTab(state,mint,tabId,rect){const step=state.floats.length*FLOAT_CASCADE_STEP;const newPaneId=mint("float");return{ops:[{type:"float",tabId,newPaneId,rect:rect??{x:FLOAT_ORIGIN.x+step,y:FLOAT_ORIGIN.y+step,width:FLOAT_DEFAULT_SIZE.width,height:FLOAT_DEFAULT_SIZE.height}}],paneId:newPaneId}}function planUnfloatPane(state,paneId,toPaneId){const destination=toPaneId??activeDockPaneId(state);return[{type:"unfloat",paneId,toPaneId:destination,index:getPane(state,destination).tabs.length}]}function planResizeSplit(splitId,sizes,minimum){return[{type:"resize",splitId,sizes:clampSizes(sizes,minimum)}]}function createIdMinter(seed=0){let counter=seed;const next=(prefix=>{counter+=1;return`${prefix}${counter}`});return{next}}function createInitialState(minter,makeInitialTab,mode="push"){const paneId=minter.next("pane");const initial=makeInitialTab?.(minter.next("tab"));return{nodes:{[paneId]:{kind:"pane",id:paneId,host:"dock",tabs:initial===void 0?[]:[initial.id],activeTabId:initial?.id,rect:void 0}},tabs:initial===void 0?{}:{[initial.id]:initial},rootId:paneId,floats:[],activePaneId:paneId,expanded:false,mode}}var DockController=class{minter;sequencer;listeners=new Set;makePaneTab;snapshot;constructor(options={}){this.minter=createIdMinter();this.makePaneTab=options.makePaneTab;this.sequencer=new Sequencer(createInitialState(this.minter,options.makeInitialTab,options.mode));this.snapshot=this.buildSnapshot()}subscribe=listener=>{this.listeners.add(listener);return()=>{this.listeners.delete(listener)}};getSnapshot=()=>this.snapshot;get ops(){return this.sequencer.ops}buildSnapshot(){const state=this.sequencer.state;return{state,canUndo:this.sequencer.canUndo,canRedo:this.sequencer.canRedo,canSplit:canSplit(state),opCount:this.sequencer.ops.length,cursor:this.sequencer.cursor}}commit(){this.snapshot=this.buildSnapshot();for(const listener of[...this.listeners])listener()}get state(){return this.sequencer.state}get mint(){return this.minter.next}run(ops){if(ops.length===0)return false;this.sequencer.dispatchAll(ops);this.commit();return true}setExpanded(expanded){this.run(planSetExpanded(this.state,expanded))}toggleExpanded(){this.setExpanded(!this.state.expanded)}setMode(mode){this.run(planSetMode(this.state,mode))}splitPane(paneId){return this.run(planSplitPane(this.state,this.mint,paneId,this.makePaneTab))}addTab(paneId){return this.run(planAddTab(this.state,this.mint,paneId,this.makePaneTab))}openContent(input){const planned=planOpenContent(this.state,this.mint,input);this.run(planned.ops);return planned.tabId}duplicateTab(tabId){const planned=planDuplicateTab(this.state,this.mint,tabId);this.run(planned.ops);return planned.tabId}closeTab(tabId){this.run([{type:"closeTab",tabId}])}focusTab(tabId){this.run([{type:"focusTab",tabId}])}focusPane(paneId){this.run([{type:"focusPane",paneId}])}reorderTab(tabId,index){this.run([{type:"reorderTab",tabId,index}])}placeTab(tabId,toPaneId,index){return this.run(planPlaceTab(this.state,tabId,toPaneId,index))}dropTab(tabId,targetPaneId,zone){return this.run(planDropTab(this.state,this.mint,tabId,targetPaneId,zone))}floatTab(tabId,rect){const planned=planFloatTab(this.state,this.mint,tabId,rect);this.run(planned.ops);return planned.paneId}unfloatPane(paneId,toPaneId){this.run(planUnfloatPane(this.state,paneId,toPaneId))}moveFloat(paneId,x,y){this.run([{type:"moveFloat",paneId,x,y}])}resizeFloat(paneId,rect){this.run([{type:"resizeFloat",paneId,rect}])}resizeSplit(splitId,sizes){this.run(planResizeSplit(splitId,sizes))}undo(){if(!this.sequencer.undo())return false;this.commit();return true}redo(){if(!this.sequencer.redo())return false;this.commit();return true}activeDockPaneId(){return activeDockPaneId(this.state)}};var NO_RECT={x:0,y:0,width:0,height:0};var UNMEASURED={row:true,column:true};function rectOf(element){return element===null?NO_RECT:element.getBoundingClientRect()}function px(value){const parsed=Number.parseFloat(value);return Number.isFinite(parsed)?parsed:0}function paneElements(root){const panes=[];for(const pane of root.querySelectorAll("[data-dockkit-pane]")){const paneId=pane.dataset.dockkitPane;if(paneId===void 0)continue;panes.push([paneId,pane])}return panes}function chipMinimum(root){const chip=root.querySelector("[data-dockkit-tab]");if(chip===null)return SPLIT_MINIMUMS.chip;const style=getComputedStyle(chip);const min=px(style.minWidth);if(min<=0)return SPLIT_MINIMUMS.chip;if(style.boxSizing==="border-box")return min;return min+px(style.paddingLeft)+px(style.paddingRight)+px(style.borderLeftWidth)+px(style.borderRightWidth)}function dividerSize(root){const divider=root.querySelector("[data-dockkit-divider]");if(divider===null)return SPLIT_MINIMUMS.divider;const{width,height}=divider.getBoundingClientRect();const thickness=Math.min(width,height);return thickness>0?thickness:SPLIT_MINIMUMS.divider}function splitControlFootprint(pane){const control=pane.querySelector("[data-dockkit-split-button]");if(control===null)return 0;const width=control.getBoundingClientRect().width;if(!(width>0))return 0;const strip=pane.querySelector("[data-dockkit-strip]");return width+(strip===null?0:px(getComputedStyle(strip).columnGap))}function measurePaneFits(root,splitHiddenWhenBlocked=false){const minimums={divider:dividerSize(root),chip:chipMinimum(root),body:SPLIT_MINIMUMS.body};const fits=new Map;for(const[paneId,pane]of paneElements(root)){fits.set(paneId,halvesFit({pane:rectOf(pane),strip:rectOf(pane.querySelector("[data-dockkit-strip]")),chipsWidth:rectOf(pane.querySelector("[data-dockkit-strip-tabs]")).width,fillWidth:rectOf(pane.querySelector("[data-dockkit-strip-fill]")).width,splitControlWidth:splitHiddenWhenBlocked?splitControlFootprint(pane):0},minimums))}return fits}function fitOf(fits,paneId){return fits.get(paneId)??UNMEASURED}function sameFits(a,b){if(a.size!==b.size)return false;for(const[paneId,fit]of a){const other=b.get(paneId);if(other===void 0||other.row!==fit.row||other.column!==fit.column)return false}return true}function capturePointer(element,pointerId){if(typeof element.setPointerCapture!=="function")return;element.setPointerCapture(pointerId)}function followPointer(element,pointerId,followers){capturePointer(element,pointerId);const controller=new AbortController;const{signal}=controller;element.dataset.dockkitPointer=String(pointerId);signal.addEventListener("abort",()=>{if(element.dataset.dockkitPointer===String(pointerId))delete element.dataset.dockkitPointer},{once:true});const own=event=>event.pointerId===pointerId;window.addEventListener("pointermove",event=>{if(own(event))followers.move(event)},{signal});window.addEventListener("pointerup",event=>{if(!own(event))return;controller.abort();followers.up(event)},{signal});window.addEventListener("pointercancel",event=>{if(!own(event))return;controller.abort();followers.cancel()},{signal});return()=>{controller.abort()}}function useGesture(reset){const inFlight=useRef(void 0);useEffect(()=>()=>{inFlight.current?.stop()},[]);return(element,pointerId,followers)=>{inFlight.current?.end();const settle=()=>{inFlight.current=void 0;reset()};const stop=followPointer(element,pointerId,{move:followers.move,up:event=>{settle();followers.up(event)},cancel:settle});inFlight.current={stop,end:()=>{stop();settle()}}}}var navigationKeys=new Set(["Tab","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"]);var releases=new WeakMap;function focusWithoutRing(element,options){releases.get(element)?.();const release=()=>{element.removeAttribute("data-band-automatic-focus");element.removeEventListener("blur",release);element.removeEventListener("keydown",navigate,true);releases.delete(element)};const navigate=event=>{if(!event.isComposing&&!event.ctrlKey&&!event.altKey&&!event.metaKey&&navigationKeys.has(event.key))release()};releases.set(element,release);element.setAttribute("data-band-automatic-focus","");element.addEventListener("blur",release);element.addEventListener("keydown",navigate,true);element.focus(options);if(!element.matches(":focus"))release()}var modalSelector='[role="dialog"][aria-modal="true"], [role="menu"]';function observeComposition(document2){let composing=false;let ended=false;const start=()=>{composing=true};const end=()=>{composing=false;ended=true};const release=()=>{ended=false};const blur=()=>{composing=false;ended=false};document2.addEventListener("compositionstart",start,true);document2.addEventListener("compositionend",end,true);document2.addEventListener("keyup",release,true);document2.defaultView?.addEventListener("blur",blur);return{guards:event=>{const guarded=composing||ended||event.isComposing||event.keyCode===229;ended=false;return guarded},dispose:()=>{document2.removeEventListener("compositionstart",start,true);document2.removeEventListener("compositionend",end,true);document2.removeEventListener("keyup",release,true);document2.defaultView?.removeEventListener("blur",blur)}}}function Tooltip({label,shortcutKeys,disabled,children}){if(disabled)return children;const keys=shortcutKeys&&shortcutKeys.length>0?`\uFF08${shortcutKeys.join("+")}\uFF09`:"";return cloneElement(children,{title:`${label}${keys}`})}var MenuSurface=forwardRef(function MenuSurface2({compact:_compact,className,...props},ref){return jsx("div",{...props,ref,className:["band-menu",className].filter(Boolean).join(" ")})});function glyph(d){return function Icon({size=16,className}){return jsx("svg",{width:size,height:size,viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",className,children:jsx("path",{d,stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})})}}var IconCloseFillRegular=glyph("M4.5 4.5l7 7M11.5 4.5l-7 7");var IconCloseOutlineRegular=glyph("M4.5 4.5l7 7M11.5 4.5l-7 7");var IconPlusOutlineRegular=glyph("M8 3.5v9M3.5 8h9");var IconPanelLeftOutlineRegular=glyph("M2.5 2.5h11v11h-11zM6 2.5v11");var dockkit_default={split:"dockkit_split",splitRow:"dockkit_splitRow",splitColumn:"dockkit_splitColumn",splitCell:"dockkit_splitCell",divider:"dockkit_divider",surface:"dockkit_surface",tabLayout:"dockkit_tabLayout",tabCell:"dockkit_tabCell",emptyTabHost:"dockkit_emptyTabHost",floatingCell:"dockkit_floatingCell",tabHost:"dockkit_tabHost",float:"dockkit_float",tabHostHeader:"dockkit_tabHostHeader",tabHostBody:"dockkit_tabHostBody",tabLayoutDivider:"dockkit_tabLayoutDivider",pane:"dockkit_pane",tabStrip:"dockkit_tabStrip",stripTabs:"dockkit_stripTabs",stripFill:"dockkit_stripFill",stripChrome:"dockkit_stripChrome",paneBody:"dockkit_paneBody",slot:"dockkit_slot",tabActive:"dockkit_tabActive",slotCaret:"dockkit_slotCaret",tab:"dockkit_tab",tabTitle:"dockkit_tabTitle",floatTitle:"dockkit_floatTitle",tabClose:"dockkit_tabClose",addTab:"dockkit_addTab",tabQuiet:"dockkit_tabQuiet",tabDragging:"dockkit_tabDragging",iconButton:"dockkit_iconButton",menu:"dockkit_menu",menuItem:"dockkit_menuItem",empty:"dockkit_empty",dockScrim:"dockkit_dockScrim",dockScrimIn:"dockkit_dockScrimIn",dockHint:"dockkit_dockHint",dockHintCard:"dockkit_dockHintCard",dockHintIn:"dockkit_dockHintIn",dockHintLabel:"dockkit_dockHintLabel",floatHeader:"dockkit_floatHeader",dockGlyph:"dockkit_dockGlyph",floatBody:"dockkit_floatBody",floatResize:"dockkit_floatResize"};var MENU_GAP=4;function placeMenu(anchor,menu){const rect=anchor.getBoundingClientRect();const width=menu.offsetWidth;const left=rect.left+width+MENU_GAP>window.innerWidth?Math.max(MENU_GAP,rect.right-width):rect.left;return{top:rect.bottom+MENU_GAP,left}}function TabMenu({labels,anchor,onClose,onDismiss,extras}){const self=useRef2(null);const[position,setPosition]=useState(void 0);const hasItems=onClose!==void 0||Children.toArray(extras).some(item=>item!=="");useLayoutEffect(()=>{if(self.current===null)return;setPosition(placeMenu(anchor,self.current))},[anchor,hasItems]);useEffect2(()=>{const menu=self.current;if(menu===null)return void 0;const document2=menu.ownerDocument;const composition=observeComposition(document2);const onKeyDown=event=>{if(composition.guards(event)||event.defaultPrevented||event.key!=="Escape"||event.ctrlKey||event.altKey||event.metaKey||event.shiftKey)return;const top=[...document2.querySelectorAll(modalSelector)].at(-1);if(top!==menu)return;event.preventDefault();if(event.repeat)return;const restoreFocus=menu.contains(document2.activeElement);onDismiss();if(restoreFocus)focusWithoutRing(anchor)};document2.addEventListener("keydown",onKeyDown,true);const onPointerDown=event=>{if(event.target instanceof Node&&menu.contains(event.target))return;onDismiss()};window.addEventListener("pointerdown",onPointerDown,true);return()=>{composition.dispose();document2.removeEventListener("keydown",onKeyDown,true);window.removeEventListener("pointerdown",onPointerDown,true)}},[anchor,onDismiss,hasItems]);if(!hasItems)return null;return createPortal(jsxs(MenuSurface,{className:dockkit_default.menu,ref:self,role:"menu","data-dockkit-tab-menu":true,style:position??{visibility:"hidden",top:0,left:0},onPointerDown:event=>{event.stopPropagation()},onClick:event=>{event.stopPropagation()},children:[onClose!==void 0&&jsx2("button",{type:"button",role:"menuitem",className:dockkit_default.menuItem,"data-dockkit-menu-close":true,onClick:onClose,children:labels.closeTab}),extras]}),document.body)}function markClipped(element){if(element.scrollWidth>element.clientWidth+1)element.dataset.dockkitTabClipped="";else delete element.dataset.dockkitTabClipped}function TabTitle({children}){const span=useRef3(null);useLayoutEffect2(()=>{if(span.current!==null)markClipped(span.current)});useLayoutEffect2(()=>{const element=span.current;if(element===null||typeof ResizeObserver==="undefined")return void 0;const observer=new ResizeObserver(()=>{markClipped(element)});observer.observe(element);return()=>{observer.disconnect()}},[]);return jsx3("span",{ref:span,className:dockkit_default.tabTitle,"data-dockkit-tab-title":true,children})}var PANEL_FRAME="M9.67272 0.522841C10.8339 0.522841 11.76 0.522714 12.4963 0.602493C13.2453 0.683657 13.8789 0.854248 14.4264 1.25197C14.7504 1.48739 15.0355 1.77247 15.2709 2.0965C15.6686 2.64394 15.8392 3.27758 15.9204 4.02655C16.0002 4.7629 16 5.68895 16 6.85014V9.14986C16 10.3111 16.0002 11.2371 15.9204 11.9735C15.8392 12.7224 15.6686 13.3561 15.2709 13.9035C15.0355 14.2275 14.7504 14.5126 14.4264 14.748C13.8789 15.1458 13.2453 15.3163 12.4963 15.3975C11.76 15.4773 10.8339 15.4772 9.67272 15.4772H6.3273C5.16611 15.4772 4.24006 15.4773 3.50371 15.3975C2.75474 15.3163 2.1211 15.1458 1.57366 14.748C1.24963 14.5126 0.964549 14.2275 0.729131 13.9035C0.331407 13.3561 0.160817 12.7224 0.0796529 11.9735C-0.000126137 11.2371 1.25338e-09 10.3111 1.25338e-09 9.14986V6.85014C1.25329e-09 5.68895 -0.000126137 4.7629 0.0796529 4.02655C0.160817 3.27758 0.331407 2.64394 0.729131 2.0965C0.964549 1.77247 1.24963 1.48739 1.57366 1.25197C2.1211 0.854248 2.75474 0.683657 3.50371 0.602493C4.24006 0.522714 5.16611 0.522841 6.3273 0.522841H9.67272ZM4.1828 14.0873L5.54303 14.1118C5.78636 14.1128 6.04709 14.1169 6.3273 14.1169H9.67272C10.8639 14.1169 11.7032 14.1164 12.3493 14.0465C12.9824 13.9779 13.3497 13.8494 13.6268 13.6482C13.8354 13.4966 14.0195 13.3125 14.1711 13.1039C14.3723 12.8268 14.5007 12.4595 14.5693 11.8264C14.6393 11.1803 14.6398 10.341 14.6398 9.14986V6.85014C14.6398 5.65896 14.6393 4.81967 14.5693 4.1736C14.5007 3.54048 14.3723 3.17318 14.1711 2.89609C14.0195 2.68747 13.8354 2.50337 13.6268 2.35179C13.3497 2.1506 12.9824 2.02212 12.3493 1.95353C11.7032 1.88358 10.8639 1.88307 9.67272 1.88307H6.3273C6.04709 1.88307 5.78636 1.8862 5.54303 1.88715L4.1828 1.91166C3.99125 1.9216 3.8148 1.93577 3.65076 1.95353C3.01764 2.02212 2.65034 2.1506 2.37325 2.35179C2.16463 2.50337 1.98052 2.68747 1.82895 2.89609C1.62776 3.17318 1.49928 3.54048 1.43069 4.1736C1.36074 4.81967 1.36023 5.65896 1.36023 6.85014V9.14986C1.36023 10.341 1.36074 11.1803 1.43069 11.8264C1.49928 12.4595 1.62776 12.8268 1.82895 13.1039C1.98052 13.3125 2.16463 13.4966 2.37325 13.6482C2.65034 13.8494 3.01764 13.9779 3.65076 14.0465C3.81478 14.0642 3.99127 14.0774 4.1828 14.0873Z";function SplitGlyph(){return jsxs2("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[jsx4("path",{d:"M13.5 1.5H2.5C1.94772 1.5 1.5 1.94772 1.5 2.5V13.5C1.5 14.0523 1.94772 14.5 2.5 14.5H13.5C14.0523 14.5 14.5 14.0523 14.5 13.5V2.5C14.5 1.94772 14.0523 1.5 13.5 1.5Z",stroke:"currentColor"}),jsx4("path",{d:"M8 1.5V14.5",stroke:"currentColor"})]})}var ZONE_FILL={center:"M4.56 3.48H11.44A1.6 1.6 0 0 1 13.04 5.08V10.92A1.6 1.6 0 0 1 11.44 12.52H4.56A1.6 1.6 0 0 1 2.96 10.92V5.08A1.6 1.6 0 0 1 4.56 3.48Z",left:"M4 0.523H8V15.477H4A4 4 0 0 1 0 11.477V4.523A4 4 0 0 1 4 0.523Z",right:"M8 0.523H12A4 4 0 0 1 16 4.523V11.477A4 4 0 0 1 12 15.477H8Z",top:"M0 8V4.523A4 4 0 0 1 4 0.523H12A4 4 0 0 1 16 4.523V8Z",bottom:"M0 8H16V11.477A4 4 0 0 1 12 15.477H4A4 4 0 0 1 0 11.477Z"};function ZoneGlyph({zone}){return jsxs2("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[jsx4("path",{fillRule:"evenodd",clipRule:"evenodd",d:PANEL_FRAME,fill:"currentColor"}),jsx4("path",{d:ZONE_FILL[zone],fill:"currentColor"})]})}function DockHint({zone,active,labels}){return jsx4("div",{className:dockkit_default.dockHint,"data-dockkit-dock-zone":zone,"data-dockkit-drop-active":active||void 0,children:jsxs2("div",{className:dockkit_default.dockHintCard,children:[jsx4(ZoneGlyph,{zone}),jsx4("span",{className:dockkit_default.dockHintLabel,children:labels.dropZone[zone]})]})})}function chipToFocus(key,tabs,tabId){const count=tabs.length;const index=tabs.indexOf(tabId);switch(key){case"ArrowLeft":return tabs[(index-1+count)%count];case"ArrowRight":return tabs[(index+1)%count];case"Home":return tabs[0];case"End":return tabs.at(-1);default:return void 0}}function selects(key){return key==="Enter"||key===" "}function hiddenSides(box){const start=box.scrollLeft>1;const end=box.scrollLeft+box.clientWidth<box.scrollWidth-1;if(start&&end)return"start end";if(start)return"start";if(end)return"end";return void 0}function useStripScrollFades(box,tabs){useLayoutEffect3(()=>{const element=box.current;if(element===null)return void 0;const apply=()=>{const sides=hiddenSides(element);if(sides===void 0)delete element.dataset.dockkitStripScroll;else element.dataset.dockkitStripScroll=sides};apply();element.addEventListener("scroll",apply,{passive:true});const observer=typeof ResizeObserver==="undefined"?void 0:new ResizeObserver(apply);observer?.observe(element);return()=>{element.removeEventListener("scroll",apply);observer?.disconnect()}},[box,tabs])}function useActiveChipInView(box,chips,tabs,activeTabId){useLayoutEffect3(()=>{const element=box.current;const chip=activeTabId===void 0?void 0:chips.get(activeTabId);if(element===null||chip===void 0)return;const bounds=element.getBoundingClientRect();const rect=chip.getBoundingClientRect();if(rect.left<bounds.left)element.scrollLeft+=rect.left-bounds.left-STRIP_FADE;else if(rect.right>bounds.right)element.scrollLeft+=rect.right-bounds.right+STRIP_FADE},[box,chips,tabs,activeTabId])}var STRIP_FADE=24;function splitBlockedTitle(labels,block){switch(block){case"budget":return labels.splitPaneDisabled;case"width":return labels.splitPaneNarrow}}function TabStrip({state,pane,callbacks}){const[menu,setMenu]=useState2(void 0);const[chips]=useState2(()=>new Map);const stripTabs=useRef4(null);useStripScrollFades(stripTabs,pane.tabs);useActiveChipInView(stripTabs,chips,pane.tabs,pane.activeTabId);const block=callbacks.splitBlock(pane.id);const target=callbacks.dropTarget;const stripIndex=target!==void 0&&target.kind==="strip"&&target.paneId===pane.id?target.index:void 0;const activate=tabId=>{if(state.activePaneId===pane.id&&pane.activeTabId===tabId)return;callbacks.onFocusTab(tabId)};const focusChip=tabId=>{const chip=chips.get(tabId);if(chip===void 0)return;chip.focus()};return jsxs2("div",{className:dockkit_default.tabStrip,role:"tablist","data-dockkit-strip":pane.id,"data-window-drag":state.floats.length===0?true:void 0,children:[jsxs2("div",{ref:stripTabs,className:dockkit_default.stripTabs,role:"presentation","data-dockkit-strip-tabs":pane.id,children:[pane.tabs.map((tabId,index)=>{const tab=getTab(state,tabId);const selected=tabId===pane.activeTabId;const closable=callbacks.canCloseTab(tabId);const quiet=!closable&&pane.tabs.length===1;return jsxs2(Fragment,{children:[(index>0||stripIndex===index)&&jsx4("div",{className:clsx_default(dockkit_default.slot,stripIndex===index&&dockkit_default.slotCaret),"data-dockkit-caret":stripIndex===index?index:void 0}),jsxs2("div",{role:"tab","aria-selected":selected,tabIndex:selected?0:-1,className:clsx_default(dockkit_default.tab,selected&&dockkit_default.tabActive,quiet&&dockkit_default.tabQuiet,callbacks.draggingTabId===tabId&&dockkit_default.tabDragging),"data-dockkit-tab":tabId,"data-dockkit-tab-quiet":quiet||void 0,ref:element=>{if(element===null)chips.delete(tabId);else chips.set(tabId,element)},onPointerDown:event=>{if(event.button===2)return;callbacks.onTabPressed(tabId,event)},onClick:event=>{event.stopPropagation();activate(tabId)},onKeyDown:event=>{if(event.target!==event.currentTarget)return;if(event.altKey||event.ctrlKey||event.metaKey||event.shiftKey||event.nativeEvent.isComposing)return;const next=chipToFocus(event.key,pane.tabs,tabId);if(next!==void 0){event.preventDefault();focusChip(next);return}if(selects(event.key)){event.preventDefault();activate(tabId)}},onContextMenu:event=>{event.preventDefault();const anchor=event.currentTarget;setMenu(current=>current?.tabId===tabId?void 0:{tabId,anchor})},children:[jsx4(TabTitle,{children:callbacks.renderTabTitle?.(tab)??tab.title}),closable&&jsx4(Tooltip,{disabled:menu!==void 0,label:callbacks.labels.closeTab,shortcutKeys:callbacks.labels.closeTabKeys,side:"bottom",delayMs:500,children:jsx4("button",{type:"button",className:dockkit_default.tabClose,"aria-label":callbacks.labels.closeTab,"aria-keyshortcuts":callbacks.labels.closeTabShortcut,"data-dockkit-tab-close":tabId,onPointerDown:event=>{event.stopPropagation()},onClick:event=>{event.stopPropagation();callbacks.onCloseTab(tabId)},children:jsx4(IconCloseFillRegular,{size:14})})}),menu?.tabId===tabId&&jsx4(TabMenu,{labels:callbacks.labels,anchor:menu.anchor,onClose:closable?()=>{setMenu(void 0);callbacks.onCloseTab(tabId)}:void 0,onDismiss:()=>{setMenu(void 0)},extras:callbacks.renderTabMenuItems?.(tab,()=>{setMenu(void 0)})})]})]},tabId)}),stripIndex===pane.tabs.length&&jsx4("div",{className:clsx_default(dockkit_default.slot,dockkit_default.slotCaret),"data-dockkit-caret":stripIndex})]}),callbacks.canAddTab(pane.id)&&jsx4(Tooltip,{label:callbacks.labels.addTab,side:"bottom",delayMs:500,children:jsx4("button",{type:"button",className:dockkit_default.addTab,"aria-label":callbacks.labels.addTab,"data-dockkit-add-tab":pane.id,onClick:event=>{event.stopPropagation();callbacks.onAddTab(pane.id)},children:jsx4(IconPlusOutlineRegular,{size:14})})}),jsx4("div",{className:dockkit_default.stripFill,"data-dockkit-strip-fill":true}),!(callbacks.hideSplitWhenBlocked&&block!==void 0)&&jsx4(Tooltip,{label:block===void 0?callbacks.labels.splitPane:splitBlockedTitle(callbacks.labels,block),shortcutKeys:callbacks.labels.splitPaneKeys,side:"bottom",delayMs:500,children:jsx4("span",{tabIndex:block===void 0?void 0:0,"aria-label":block===void 0?void 0:splitBlockedTitle(callbacks.labels,block),children:jsx4("button",{type:"button",className:dockkit_default.iconButton,"aria-label":callbacks.labels.splitPane,"aria-keyshortcuts":callbacks.labels.splitPaneShortcut,disabled:block!==void 0,"data-dockkit-split-button":pane.id,"data-dockkit-split-blocked":block,onClick:event=>{event.stopPropagation();callbacks.onSplitPane(pane.id)},children:jsx4(SplitGlyph,{})})})}),pane.id===callbacks.chromePaneId&&callbacks.chrome!==void 0&&jsx4("div",{className:dockkit_default.stripChrome,"data-dockkit-strip-chrome":true,onClick:event=>{event.stopPropagation()},children:callbacks.chrome})]})}function PaneDropHints({pane,callbacks}){const target=callbacks.dropTarget;const zone=target?.kind==="zone"&&target.paneId===pane.id?target.zone:void 0;if(zone===void 0)return null;return jsxs2(Fragment2,{children:[jsx4("div",{className:dockkit_default.dockScrim,"data-dockkit-dock-scrim":true}),callbacks.horizontalDrops&&zone!=="center"?jsxs2(Fragment2,{children:[jsx4(DockHint,{zone:"left",active:zone==="left",labels:callbacks.labels}),jsx4(DockHint,{zone:"right",active:zone==="right",labels:callbacks.labels})]}):jsx4(DockHint,{zone,active:true,labels:callbacks.labels})]})}function TabPanel({state,pane,callbacks}){const active=pane.activeTabId===void 0?void 0:getTab(state,pane.activeTabId);return jsxs2("section",{className:dockkit_default.pane,"data-dockkit-pane":pane.id,tabIndex:-1,"data-dockkit-pane-active":state.activePaneId===pane.id||void 0,onClick:()=>{if(state.activePaneId!==pane.id)callbacks.onFocusPane(pane.id)},children:[jsx4(TabStrip,{state,pane,callbacks}),jsxs2("div",{className:dockkit_default.paneBody,children:[active===void 0?jsx4("p",{className:dockkit_default.empty,children:callbacks.labels.emptyPane}):callbacks.renderTab(active),jsx4(PaneDropHints,{pane,callbacks})]})]})}function PaneTree({state,nodeId,callbacks,preview}){const node=getNode(state,nodeId);if(node.kind==="pane")return jsx5(TabPanel,{state,pane:node,callbacks});const sizes=preview!==void 0&&preview.splitId===node.id?preview.sizes:node.sizes;return jsx5("div",{className:clsx_default(dockkit_default.split,node.axis==="row"?dockkit_default.splitRow:dockkit_default.splitColumn),"data-dockkit-split":node.id,children:node.children.map((childId,index)=>jsxs3(Fragment3,{children:[index>0&&jsx5("div",{className:dockkit_default.divider,"data-dockkit-divider":`${node.id}:${index-1}`,onPointerDown:event=>{callbacks.onDividerPressed(node.id,index-1,event)}}),jsx5("div",{className:dockkit_default.splitCell,"data-dockkit-cell":`${node.id}:${index}`,style:{flexGrow:sizes[index]},children:jsx5(PaneTree,{state,nodeId:childId,callbacks,preview})})]},childId))})}var NO_PREVIEW={draggingTabId:void 0,dropTarget:void 0,sizes:void 0};var NO_FITS=new Map;var ALWAYS=()=>true;function hitTest(root,x,y,canSplit2,fits,dropZones){for(const[paneId,pane]of paneElements(root)){const rect=pane.getBoundingClientRect();if(!containsPoint(rect,x,y))continue;const strip=pane.querySelector("[data-dockkit-strip]");if(strip!==null&&containsPoint(strip.getBoundingClientRect(),x,y)){const tabs=[...strip.querySelectorAll("[data-dockkit-tab]")];return{kind:"strip",paneId,index:insertionIndex(tabs.map(tab=>tab.getBoundingClientRect()),x)}}const zone=dropZones==="horizontal"?canSplit2&&fitOf(fits,paneId).row?x<rect.x+rect.width/2?"left":"right":"center":zoneInRect(rect,x,y);if(zone!=="center"){const fit=fitOf(fits,paneId);const room=zone==="left"||zone==="right"?fit.row:fit.column;if(!canSplit2||!room)return void 0}return{kind:"zone",paneId,zone}}return void 0}function draggedSizes(drag,x,y,minimum){const moved=(drag.axis==="row"?x:y)-drag.origin;const delta=drag.extent>0?moved/drag.extent:0;return clampSizes(dividerSizes(drag.sizes,drag.index,delta),minimum)}var SIZE_TOLERANCE=1e-9;function sameSizes(a,b){return a.length===b.length&&a.every((size,index)=>{const other=b[index];return other!==void 0&&Math.abs(size-other)<SIZE_TOLERANCE})}function Surface({state,canSplit:canSplit2,canAddTab,canCloseTab,intents,labels,renderTab,renderTabTitle,renderTabMenuItems,chrome,onRoom,draw,dropZones="edges",minPaneFraction=MIN_PANE_FRACTION,hideSplitWhenBlocked=false}){const surface=useRef6(null);const[preview,setPreview]=useState5(NO_PREVIEW);const[fits,setFits]=useState5(NO_FITS);const begin=useGesture(()=>{setPreview(NO_PREVIEW)});const withSurface=useCallback(use=>{const root=surface.current;if(root===null)return;use(root)},[]);const remeasure=useCallback(()=>{withSurface(root=>{const next=measurePaneFits(root,hideSplitWhenBlocked);setFits(current=>sameFits(current,next)?current:next)})},[withSurface,hideSplitWhenBlocked]);useLayoutEffect5(()=>{remeasure()});useEffect4(()=>{onRoom?.(fits)},[fits,onRoom]);useEffect4(()=>{const root=surface.current;if(root===null||typeof ResizeObserver==="undefined")return void 0;const observer=new ResizeObserver(()=>{remeasure()});observer.observe(root);return()=>{observer.disconnect()}},[remeasure]);const splitBlock=paneId=>{if(!canSplit2)return"budget";return fitOf(fits,paneId).row?void 0:"width"};const callbacks={onFocusTab:intents.focusTab.bind(intents),onFocusPane:intents.focusPane.bind(intents),onSplitPane:intents.splitPane.bind(intents),onAddTab:intents.addTab.bind(intents),onCloseTab:intents.closeTab.bind(intents),onTabPressed:(tabId,event)=>{withSurface(root=>{const startX=event.clientX;const startY=event.clientY;let dragging=false;begin(event.currentTarget,event.pointerId,{move:moved=>{if(!dragging){if(!passedThreshold(startX,startY,moved.clientX,moved.clientY))return;dragging=true}setPreview({...NO_PREVIEW,draggingTabId:tabId,dropTarget:hitTest(root,moved.clientX,moved.clientY,canSplit2,fits,dropZones)})},up:released=>{if(!dragging)return;const target=hitTest(root,released.clientX,released.clientY,canSplit2,fits,dropZones);if(target===void 0){if(containsPoint(root.getBoundingClientRect(),released.clientX,released.clientY))return;intents.floatTab(tabId,floatRectAt(released.clientX,released.clientY,FLOAT_DEFAULT_SIZE));return}if(target.kind==="strip")intents.placeTab(tabId,target.paneId,target.index);else intents.dropTab(tabId,target.paneId,target.zone)}})})},onDividerPressed:(splitId,index,event)=>{const container=event.currentTarget.parentElement;if(container===null)return;const split=getSplit(state,splitId);const box=container.getBoundingClientRect();const drag={splitId,index,axis:split.axis,origin:split.axis==="row"?event.clientX:event.clientY,extent:split.axis==="row"?box.width:box.height,sizes:split.sizes};begin(event.currentTarget,event.pointerId,{move:moved=>{setPreview({...NO_PREVIEW,sizes:{splitId,sizes:draggedSizes(drag,moved.clientX,moved.clientY,minPaneFraction)}})},up:released=>{const sizes=draggedSizes(drag,released.clientX,released.clientY,minPaneFraction);if(sameSizes(sizes,drag.sizes))return;intents.resizeSplit(splitId,sizes)}})},splitBlock,hideSplitWhenBlocked,canAddTab:canAddTab??ALWAYS,canCloseTab:canCloseTab??ALWAYS,dropTarget:preview.dropTarget,horizontalDrops:dropZones==="horizontal",draggingTabId:preview.draggingTabId,labels,renderTab,renderTabTitle,renderTabMenuItems,chromePaneId:topRightPaneId(state),chrome};return jsx8("div",{className:dockkit_default.surface,ref:surface,"data-dockkit-surface":true,"data-dockkit-drop-zones":dropZones,children:draw(callbacks,preview.sizes)})}function DockSurface(props){return jsx8(Surface,{...props,draw:(callbacks,preview)=>jsx8(PaneTree,{state:props.state,nodeId:props.state.rootId,callbacks,preview})})}import{ErrorNote,Mount,STAGE_EVENTS,useCtxData as useCtxData2,useSlotEntries}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect5,useRef as useRef7,useState as useState6,useSyncExternalStore}from"react";import{jsx as jsx22}from"react/jsx-runtime";import{Mount as Mount2}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect22,useId,useRef as useRef22,useState as useState22}from"react";import{LINK_CARD_MIME,resolveViewer}from"@kanyun-ai-infra/band-plugin-sdk";import{jsx as jsx32,jsxs as jsxs22}from"react/jsx-runtime";import{MODEL_NEEDS_PERSONAL,MODEL_NEEDS_SETTINGS,PERSONAL_MODELS_PAGE,PROJECT_MODEL_NEEDS_ME,projectModelNeedsOf,projectModelNeedsText,useCtxData as useCtxData3}from"@kanyun-ai-infra/band-plugin-react";import{jsx as jsx42,jsxs as jsxs32}from"react/jsx-runtime";import{canRestoreProject}from"@kanyun-ai-infra/band-plugin-react";import{withImeGuard as withImeGuard2}from"@kanyun-ai-infra/band-plugin-sdk";import{LOCKED_REFS,panelConfig,panelRef,resolvePanel}from"@kanyun-ai-infra/band-plugin-sdk";import{LOCKED_REFS as LOCKED_REFS2,panelRef as panelRef2,resolvePanel as resolvePanel2,shortName}from"@kanyun-ai-infra/band-plugin-sdk";import{jsx as jsx52,jsxs as jsxs42}from"react/jsx-runtime";import{FIRST_MESSAGE_MAX}from"@kanyun-ai-infra/band-contracts/api";import{useUnsavedGuard,withImeGuard as withImeGuard3}from"@kanyun-ai-infra/band-plugin-react";import{useId as useId2,useState as useState32}from"react";import{jsx as jsx62,jsxs as jsxs52}from"react/jsx-runtime";import{ErrorNote as ErrorNote2,useAppData}from"@kanyun-ai-infra/band-plugin-react";import{jsx as jsx72,jsxs as jsxs62}from"react/jsx-runtime";import{ErrorNote as ErrorNote3,UPGRADE_TEXT,flushAllDrafts,upgradeErrorText,useCtxData as useCtxData4}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect32,useRef as useRef32,useState as useState42}from"react";import{Fragment as Fragment5,jsx as jsx82,jsxs as jsxs7}from"react/jsx-runtime";import{useCtxData as useCtxData5}from"@kanyun-ai-infra/band-plugin-react";import{jsx as jsx92,jsxs as jsxs8}from"react/jsx-runtime";import{useMemo}from"react";import{Fragment as Fragment22,jsx as jsx10,jsxs as jsxs9}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css='/* src/project.css */\n.band-project-header,\n.band-project-layout,\n.band-project-slot-item {\n display: contents;\n}\n.band-project-header > :where(.band-react-surface),\n.band-project-layout > :where(.band-react-surface),\n.band-project-slot-item > :where(.band-react-surface) {\n display: contents;\n}\n.band-project-head {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.band-project-header:where(.band-project-head > *) {\n display: flex;\n flex: 1;\n min-width: 0;\n}\n.band-project-header:where(.band-project-head > *) > :where(.band-react-surface) > :where(*) {\n flex: 1;\n min-width: 0;\n}\n.band-project-review-head {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.band-project-header:where(.band-project-review-head > *) {\n display: flex;\n flex: 1;\n min-width: 0;\n}\n.band-project-header:where(.band-project-review-head > *) > :where(.band-react-surface) > :where(*) {\n flex: 1;\n min-width: 0;\n}\n.band-project-head-actions {\n display: flex;\n flex: none;\n align-items: center;\n gap: 8px;\n padding-right: 18px;\n}\n.band-project-head-actions:where(:empty) {\n display: none;\n}\n.band-project-page {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.band-project-title {\n margin: 0;\n padding: 12px 18px;\n font-size: var(--fs-title);\n font-weight: 650;\n}\n.band-project-body {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0 12px;\n}\n.band-project-turnbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px 10px;\n padding: 8px 18px calc(10px + env(safe-area-inset-bottom, 0px));\n padding-right: 56px;\n}\n.band-project-locked:where([data-band-page=project] *) {\n flex: none;\n}\n.band-project-turnbar > :where(:empty) {\n display: none;\n}\n.band-project-turn {\n flex: 1 1 auto;\n min-width: 0;\n}\n.band-project-mswitch {\n display: none;\n}\n.band-project-seg {\n display: inline-flex;\n gap: 2px;\n justify-self: start;\n padding: 2px;\n border-radius: 9px;\n background: var(--fill-2);\n}\n.band-project-seg-option {\n padding: 3px 12px;\n border: 0;\n border-radius: 7px;\n background: none;\n color: var(--muted);\n font-size: var(--fs-ui);\n cursor: pointer;\n}\n.band-project-review-seg {\n max-width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n.band-project-review-seg > .band-project-seg-option {\n flex: none;\n white-space: nowrap;\n}\n.band-project-seg-option:where([aria-pressed=true]) {\n background: var(--panel);\n color: var(--ink);\n font-weight: 500;\n box-shadow: 0 1px 2px rgba(22, 28, 45, 0.12);\n}\n.band-project-viewer-title {\n margin: 0;\n padding: 10px 14px 4px;\n font-size: var(--fs-ui);\n font-weight: 600;\n}\n.band-project-viewer {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n}\n.band-project-viewer > :where(:not(style, script, link)) {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n}\n.band-project-compare {\n display: grid;\n flex: 1;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 10px;\n min-height: 0;\n padding: 0 14px 14px;\n}\n.band-project-compare-pane {\n display: flex;\n flex-direction: column;\n gap: 6px;\n min-width: 0;\n min-height: 0;\n margin: 0;\n}\n.band-project-compare-label {\n overflow: hidden;\n font-size: var(--fs-meta);\n line-height: 18px;\n color: var(--muted);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n@media (max-width: 860px) {\n .band-project-compare {\n grid-template-columns: minmax(0, 1fr);\n }\n}\n.band-project-missing {\n margin: 0;\n padding: 8px 10px;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-project-item {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n}\n.band-project-item > :where(.band-react-surface) {\n flex: 1;\n min-height: 0;\n}\n.band-project-dock {\n display: flex;\n flex-direction: column;\n flex: 0 1 360px;\n width: 420px;\n min-width: 280px;\n min-height: 0;\n padding-left: 8px;\n overflow: auto;\n overscroll-behavior: contain;\n border-left: var(--hairline) solid var(--rule);\n}\n.band-project-dock:where([data-empty]) {\n display: none;\n}\n.band-project-dock-item {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n}\n.band-project-dock-item > :where(.band-react-surface) {\n flex: 1;\n min-height: 0;\n}\n.band-project-comment-host {\n position: fixed;\n z-index: var(--layer-viewer-full);\n width: 0;\n height: 0;\n flex: none;\n}\n.band-project-review {\n display: grid;\n gap: 14px;\n max-width: 460px;\n margin: 0 auto;\n padding: 18px 16px 40px;\n}\n.band-project-review-viewer {\n height: min(64vh, 560px);\n border-radius: 12px;\n overflow: hidden;\n background: var(--sunk);\n}\n@media (max-width: 860px) {\n .band-project-review-viewer:where([data-band-viewer=media]):where(:not([data-drawer=open] *)) {\n height: auto;\n min-height: min(64vh, 560px);\n }\n}\n.band-project-review:where([data-first-screen]) .band-project-review-viewer:where([data-band-viewer=media]) {\n height: auto;\n}\n.band-project-review-links {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n}\n.band-project-review-actions {\n display: grid;\n gap: 8px;\n position: sticky;\n bottom: env(safe-area-inset-bottom, 0px);\n z-index: 5;\n padding: 12px;\n border-radius: 14px;\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n}\n@media (min-width: 861px) {\n .band-project-review {\n --band-review-rail-top: 12px;\n max-width: none;\n padding: 12px;\n }\n .band-project-review-cols {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 300px;\n gap: 12px;\n align-items: start;\n }\n .band-project-review-main {\n display: grid;\n gap: 14px;\n min-width: 0;\n }\n .band-project-review-rail {\n position: sticky;\n top: var(--band-review-rail-top);\n display: flex;\n flex-direction: column;\n gap: 12px;\n height: var(--band-review-rail-h, calc(100dvh - var(--band-review-rail-top) - 12px));\n min-height: 0;\n }\n .band-project-review-actions:where(.band-project-review-rail > *) {\n position: static;\n flex: none;\n box-shadow: var(--shadow-card);\n }\n .band-project-review-compose {\n position: absolute;\n inline-size: 0;\n block-size: 0;\n }\n .band-project-review-compose:where(:has(.band-comment-resident)) {\n position: static;\n inline-size: auto;\n block-size: auto;\n flex: none;\n border-radius: 14px;\n background: var(--panel);\n box-shadow: var(--shadow-card);\n }\n .band-project-review-threads {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n border-radius: 14px;\n background: var(--panel);\n box-shadow: var(--shadow-card);\n overflow: hidden;\n }\n .band-project-review-threads > .band-project-item > :where(.band-react-surface) {\n display: flex;\n flex-direction: column;\n }\n}\n.band-project-review:where([data-drawer]) {\n padding-bottom: 96px;\n}\n.band-project-review-drawer {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 20;\n box-sizing: border-box;\n max-width: 460px;\n max-height: 52dvh;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n padding-bottom: env(safe-area-inset-bottom, 0px);\n border-radius: 16px 16px 0 0;\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n}\n.band-project-review-handle {\n display: grid;\n align-items: center;\n gap: 6px;\n flex: none;\n min-height: 44px;\n width: 100%;\n padding: 8px 16px 12px;\n border: 0;\n border-radius: 16px 16px 0 0;\n background: none;\n color: var(--ink);\n font: inherit;\n font-size: var(--fs-ui);\n text-align: left;\n cursor: pointer;\n touch-action: none;\n}\n.band-project-review-handle:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--accent);\n}\n.band-project-review-grab {\n justify-self: center;\n width: 36px;\n height: 4px;\n border-radius: 2px;\n background: var(--fill-3);\n}\n.band-project-review-hint {\n font-weight: 400;\n color: var(--muted);\n}\n.band-project-review-drawer-content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n}\n.band-project-review-drawer-content:where([data-band-drawer=collapsed] *) {\n flex: none;\n max-height: 0;\n overflow: hidden;\n}\n.band-project-review-drawer-body {\n display: grid;\n align-content: start;\n gap: 12px;\n flex: 1 1 auto;\n min-height: 0;\n padding: 0 16px 16px;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-project-review-dock {\n flex: none;\n}\n.band-project-review-actions:where(.band-project-review-drawer *) {\n position: static;\n padding: 0;\n box-shadow: none;\n border-radius: 0;\n}\n.band-project-review:where([data-drawer=open]) {\n padding-bottom: var(--band-review-drawer-h, 52dvh);\n}\n.band-project-review-viewer:where([data-drawer=open] *) {\n height: calc(100dvh - var(--band-review-drawer-h, 52dvh) - 24px);\n}\n@media (max-width: 860px) {\n .band-project-review {\n gap: 6px;\n padding-top: 8px;\n }\n .band-project-review:where(:has(.band-project-review-seg)) .review-artifact {\n display: none;\n }\n .band-project-review .band-project-seg-option {\n padding-block: 2px;\n }\n}\n@media (max-width: 860px) {\n .band-project-body {\n padding: 0;\n }\n .band-project-mswitch {\n display: flex;\n padding: 0 16px 10px;\n }\n .band-project-seg:where(.band-project-mswitch > *) {\n width: 100%;\n }\n .band-project-seg-option:where(.band-project-mswitch *) {\n flex: 1;\n }\n .band-project-turnbar {\n padding-inline: 16px;\n }\n .band-project-turn,\n .band-project-turn > :where(.band-react-surface) {\n display: contents;\n }\n .band-project-dock {\n box-sizing: border-box;\n flex: 0 1 50%;\n width: 100%;\n min-width: 0;\n max-height: 50%;\n padding: 8px 12px 0;\n border-left: 0;\n }\n .band-project-dock:where([data-mpane=left] *, [data-mpane=right] *) {\n display: none;\n }\n}\n@media (max-width: 860px) {\n .band-project-head {\n flex-wrap: wrap;\n gap: 0 8px;\n }\n .band-project-head-actions {\n flex: 1 1 100%;\n flex-wrap: wrap;\n min-width: 0;\n padding: 0 16px 8px;\n }\n .band-project-open-artifact,\n .band-project-head-version,\n .band-project-head-approval {\n order: 1;\n }\n}\n@media (max-width: 860px) {\n .band-project-review-head {\n flex-wrap: nowrap;\n gap: 6px;\n }\n .band-project-review-head > .band-project-head-actions {\n flex: 0 1 auto;\n min-width: 0;\n padding: 0 12px 0 0;\n }\n .band-project-review-head .band-project-head-version,\n .band-project-review-head .band-version-switch-picker {\n min-width: 0;\n }\n .band-project-review-head .band-version-switch-select.select {\n max-width: 150px;\n }\n}\n.band-project-candidates {\n display: flex;\n flex-wrap: wrap;\n gap: 6px 10px;\n align-items: center;\n padding: 8px 14px 0;\n}\n.band-project-candidates:where(.band-project-review *) {\n padding: 0;\n}\n.band-project-candidates-hint {\n font-size: var(--fs-meta);\n color: var(--muted);\n}\n.band-project-candidate-unused {\n opacity: 0.55;\n}\n.band-project-candidate-tick {\n margin-right: 4px;\n color: var(--ok);\n font-weight: 600;\n}\n.band-project-candidate-grid {\n display: grid;\n flex: 1;\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n grid-auto-rows: max-content;\n align-content: start;\n gap: 12px;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n padding: 10px 14px 14px;\n}\n.band-project-candidate {\n display: flex;\n flex-direction: column;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n border-radius: 12px;\n background: var(--panel);\n box-shadow: 0 0 0 1px var(--rule);\n transition: box-shadow var(--sixteenth) var(--ease), opacity var(--sixteenth) var(--ease);\n}\n.band-project-candidate:hover {\n box-shadow: 0 0 0 1px var(--rule-strong), 0 2px 10px rgb(0 0 0 / 0.06);\n}\n.band-project-candidate:where([data-state=picked]) {\n box-shadow: 0 0 0 2px var(--ok);\n}\n.band-project-candidate:where([data-state=unused]) {\n opacity: 0.55;\n}\n.band-project-candidate:where([data-state=unused]:hover, [data-state=unused]:focus-within) {\n opacity: 1;\n}\n.band-project-candidate-art {\n display: flex;\n flex: none;\n aspect-ratio: 16 / 10;\n background: var(--fill);\n cursor: zoom-in;\n}\n.band-project-candidate-art > .band-project-viewer {\n flex: 1;\n min-width: 0;\n}\n.band-project-candidate-empty {\n display: grid;\n flex: none;\n aspect-ratio: 16 / 10;\n place-items: center;\n background: var(--fill);\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-project-candidate-cap {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 8px 10px 10px 12px;\n border-top: var(--hairline) solid var(--rule);\n}\n.band-project-candidate-line {\n display: flex;\n gap: 8px;\n align-items: center;\n min-height: 28px;\n}\n.band-project-candidate-name {\n overflow: hidden;\n font-size: var(--fs-body);\n font-weight: 500;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.band-project-candidate-ver {\n color: var(--muted);\n font-size: var(--fs-meta);\n}\n.band-project-candidate-count {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n color: var(--muted);\n font-size: var(--fs-meta);\n}\n.band-project-candidate-count .band-project-icon {\n width: 14px;\n height: 14px;\n}\n.band-project-candidate-end {\n display: inline-flex;\n flex: none;\n gap: 6px;\n align-items: center;\n margin-left: auto;\n}\n.band-project-candidate-voters {\n display: inline-flex;\n}\n.band-project-candidate-voters > .av + .av {\n margin-left: -4px;\n}\n.band-project-candidate-open {\n display: inline-grid;\n place-items: center;\n padding: 5px;\n}\n.band-project-candidate-meta {\n overflow: hidden;\n font-size: var(--fs-dense);\n line-height: 18px;\n color: var(--muted);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n@media (max-width: 860px) {\n .band-project-candidate-grid {\n grid-template-columns: minmax(0, 1fr);\n }\n}\n.band-project-open-artifact {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n.band-project-icon {\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.4;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.band-project-artifact-body {\n display: grid;\n flex: 1;\n grid-template-columns: minmax(0, 1fr) 352px;\n gap: 8px;\n min-width: 0;\n min-height: 0;\n padding: 0 12px 12px;\n}\n.band-project-artifact-body:not(:has(> .band-project-artifact-side)) {\n grid-template-columns: minmax(0, 1fr);\n}\n.band-project-artifact-main {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n border-radius: 12px;\n background: var(--sunk);\n}\n.band-project-artifact-side {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n}\n.band-project-artifact-tabs {\n flex: none;\n padding: 6px 6px 6px 0;\n}\n.band-project-artifact-count {\n color: var(--muted);\n font-variant-numeric: tabular-nums;\n}\n.band-project-artifact-tabpanel {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-project-artifact-tabpanel:where([hidden]) {\n display: none;\n}\n.band-project-readonly {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 12px 10px;\n padding: 8px 14px;\n border-radius: 12px;\n background: var(--fill);\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-project-readonly b {\n color: var(--ink);\n font-weight: 500;\n}\n.band-project-readonly > :where(svg) {\n flex: none;\n}\n.band-project-state {\n display: grid;\n flex: 1;\n place-content: center;\n justify-items: center;\n gap: 6px;\n margin: 0 12px 12px;\n padding: 40px 20px;\n border-radius: 12px;\n background: var(--sunk);\n color: var(--muted);\n font-size: var(--fs-ui);\n text-align: center;\n}\n.band-project-state b {\n color: var(--ink);\n font-size: var(--fs-lead);\n font-weight: 600;\n}\n.band-project-state-row {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n.band-project-state-spin {\n width: 18px;\n height: 18px;\n border: 2px solid var(--rule);\n border-top-color: var(--accent);\n border-radius: 50%;\n animation: band-project-spin 0.9s linear infinite;\n}\n@keyframes band-project-spin {\n to {\n transform: rotate(360deg);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .band-project-state-spin {\n animation-duration: 2.4s;\n }\n}\n.band-project-start {\n box-sizing: border-box;\n width: 100%;\n max-width: 640px;\n margin: 0 auto;\n padding: 56px 20px 24px;\n display: grid;\n gap: 12px;\n align-content: start;\n}\n.band-project-start-title {\n margin: 0 0 4px;\n font-size: var(--fs-title);\n font-weight: 600;\n color: var(--ink);\n}\n.band-project-start textarea:disabled {\n color: var(--muted);\n}\n.band-project-start-hint {\n margin: 0;\n padding: 0 18px;\n font-size: var(--fs-meta);\n color: var(--muted);\n}\n.band-project-start-err {\n color: var(--bad);\n}\n@media (max-width: 860px) {\n .band-project-start {\n padding: 24px 12px 12px;\n }\n}\n.band-project-rehearsal {\n margin-bottom: 6px;\n}\n@media (max-width: 1180px) {\n .band-project-artifact-body {\n grid-template-columns: minmax(0, 1fr) 320px;\n }\n}\n@media (max-width: 860px) {\n .band-project-artifact-body {\n grid-template-columns: minmax(0, 1fr);\n padding: 0 12px 12px;\n }\n .band-project-artifact-main {\n min-height: min(70vh, 620px);\n }\n .band-project-artifact-main:where([data-mpane=right] *),\n .band-project-artifact-side:where([data-mpane=center] *) {\n display: none;\n }\n}\n.band-project-stage {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n padding: 4px 14px 14px;\n}\n.band-project-stage-head {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n.band-project-stage-head > .glyph {\n margin-top: 3px;\n}\n.band-project-stage-title {\n flex: 1;\n min-width: 0;\n}\n.band-project-stage-title h2 {\n margin: 0;\n color: var(--ink);\n font-size: var(--fs-lead);\n font-weight: 600;\n}\n.band-project-stage-title p {\n margin: 2px 0 0;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-project-stage-badge {\n flex: none;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--ok-soft);\n color: var(--ok);\n font-size: var(--fs-meta);\n}\n.band-project-stage-bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n.band-project-stage-sub {\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-project-stage-ro {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--fill-2);\n color: var(--muted);\n font-size: var(--fs-meta);\n}\n.band-project-stage-ro::before {\n content: "";\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--muted);\n}\n.band-project-stage-body {\n display: grid;\n gap: 12px;\n align-content: start;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-project-awaiting-view {\n display: grid;\n flex: 1;\n min-height: 0;\n align-content: start;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-project-stage-params {\n display: grid;\n gap: 0;\n margin: 0;\n padding: 8px 20px;\n border: 1px solid var(--rule);\n border-radius: 12px;\n background: var(--panel);\n}\n.band-project-stage-params > div {\n display: grid;\n grid-template-columns: 88px minmax(0, 1fr);\n gap: 16px;\n padding: 9px 0;\n}\n.band-project-stage-params > div + div {\n border-top: 1px solid var(--rule);\n}\n.band-project-stage-params dt {\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-project-stage-params dd {\n margin: 0;\n color: var(--ink);\n font-size: var(--fs-body);\n overflow-wrap: anywhere;\n}\n.band-project-stage-note {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-dense);\n line-height: 1.7;\n}\n.band-project-dialog {\n width: min(1280px, calc(100vw - 64px));\n max-width: none;\n height: min(900px, calc(100vh - 64px));\n max-height: none;\n margin: auto;\n padding: 0;\n border: 0;\n border-radius: var(--r-xl);\n background: var(--panel);\n color: var(--ink);\n box-shadow: var(--shadow-pop);\n overflow: hidden;\n}\n.band-project-dialog::backdrop {\n background: var(--scrim);\n}\n.band-project-dialog-root,\n.band-project-dialog-root > * {\n height: 100%;\n}\n.band-project-dialog-frame {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n animation: band-project-dialog-in var(--eighth) var(--ease);\n}\n@keyframes band-project-dialog-in {\n from {\n opacity: 0;\n transform: scale(0.98);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .band-project-dialog-frame {\n animation: none;\n }\n}\n.band-project-dialog-head {\n display: flex;\n flex: none;\n align-items: center;\n gap: 10px;\n padding: 12px 12px 10px 20px;\n}\n.band-project-dialog-title {\n flex: 1;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n font-size: var(--fs-lead);\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-project-dialog-role {\n flex: none;\n}\n.band-project-dialog-actions > a.btn {\n text-decoration: none;\n}\n.band-project-icon[data-state=ok] {\n color: var(--ok);\n}\n.band-project-icon[data-state=failed] {\n color: var(--warn);\n}\n.band-project-dialog-actions {\n display: flex;\n flex: none;\n align-items: center;\n gap: 4px;\n}\n.band-project-dialog-close {\n display: inline-grid;\n place-items: center;\n width: 30px;\n height: 30px;\n border: 0;\n border-radius: var(--r);\n background: none;\n color: var(--muted);\n cursor: pointer;\n transition: background var(--sixteenth) var(--ease), color var(--sixteenth) var(--ease);\n}\n.band-project-dialog-close:hover {\n background: var(--fill-2);\n color: var(--ink);\n}\n.band-project-dialog-close:focus-visible {\n outline: 2px solid var(--accent);\n outline-offset: 1px;\n}\n.band-project-dialog-head > .band-project-dialog-close {\n order: 1;\n}\n.band-project-dialog-body {\n display: grid;\n flex: 1;\n grid-template-columns: minmax(0, 1fr) 360px;\n grid-auto-rows: minmax(0, 1fr);\n gap: 8px;\n min-width: 0;\n min-height: 0;\n padding: 0 12px 12px;\n}\n.band-project-dialog-body.is-solo {\n grid-template-columns: minmax(0, 1fr);\n}\n.band-project-dialog-main {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n border-radius: 12px;\n background: var(--sunk);\n outline: none;\n}\n.band-project-dialog-state {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n@media (max-width: 1180px) {\n .band-project-dialog-body {\n grid-template-columns: minmax(0, 1fr) 320px;\n }\n}\n@media (max-width: 860px) {\n .band-project-dialog {\n width: 100vw;\n height: 100dvh;\n border-radius: 0;\n }\n .band-project-dialog-head {\n flex-wrap: wrap;\n row-gap: 6px;\n padding: 8px 12px 8px 8px;\n }\n .band-project-dialog-actions {\n margin-left: auto;\n }\n .band-project-dialog-head > .band-project-dialog-close {\n order: -1;\n }\n .band-project-dialog-label {\n display: none;\n }\n .band-project-dialog-body {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-project-dialog-main:where([data-mpane=right] *),\n .band-project-artifact-side:where(.band-project-dialog-frame[data-mpane=center] *) {\n display: none;\n }\n}\n.band-project-import {\n width: min(340px, 100%);\n padding: 4px;\n background: var(--panel);\n border: 1px solid var(--rule);\n border-radius: var(--r-lg);\n text-align: left;\n}\n.band-project-import-done {\n color: var(--ok);\n font-size: var(--fs-ui);\n}\n.band-project-preview {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n padding: 6px 12px;\n background: var(--fill-2);\n color: var(--ink);\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-project-preview-hash {\n color: var(--muted);\n font-family: var(--mono);\n font-weight: 400;\n}\n.band-project-preview > .btn {\n margin-left: auto;\n}\n.band-project-upgrade {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n padding: 6px 12px;\n background: var(--warn-soft);\n color: var(--ink);\n font-size: var(--fs-ui);\n}\n.band-project-upgrade-text {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n gap: 2px 12px;\n min-width: 0;\n}\n.band-project-upgrade-text > :where(span)::before {\n content: "";\n display: inline-block;\n width: 6px;\n height: 6px;\n margin-right: 6px;\n border-radius: 50%;\n background: var(--warn);\n vertical-align: middle;\n}\n.band-project-upgrade-ask {\n color: var(--ink);\n white-space: nowrap;\n}\n.band-project-upgrade > .btn {\n margin-left: auto;\n}\n.band-project-model-needs {\n display: flex;\n align-items: flex-start;\n flex-wrap: wrap;\n gap: 6px 10px;\n margin: 0;\n padding: 6px 12px;\n background: var(--warn-soft);\n color: var(--ink);\n font-size: var(--fs-ui);\n}\n.band-project-model-needs > .glyph {\n margin-top: 3px;\n}\n.band-project-model-needs-text {\n flex: 1 1 18em;\n min-width: 0;\n}\n.band-project-model-needs > .btn:first-of-type {\n margin-left: auto;\n}\n@media (pointer: coarse) {\n .band-project-seg-option,\n .band-project-head-actions :where(.btn, .seg button, .tabs [role=tab], select) {\n position: relative;\n }\n .band-project-seg-option::after,\n .band-project-head-actions :where(.btn, .seg button, .tabs [role=tab])::after {\n content: "";\n position: absolute;\n inset: 50% 0 auto;\n min-height: 44px;\n transform: translateY(-50%);\n }\n}\n.band-project-trial {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n color: var(--muted);\n font-size: var(--fs-caption);\n}\n.band-project-upgrade-records {\n max-height: 25dvh;\n overflow: auto;\n padding: 8px 16px;\n color: var(--muted);\n font-size: var(--fs-ui);\n flex-shrink: 0;\n}\n.band-project-delivery {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 2px 10px;\n margin: 0;\n padding: 6px 12px;\n background: var(--ok-soft);\n color: var(--ink);\n font-size: var(--fs-ui);\n}\n.band-project-delivery-text {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.band-project-delivery > .btn {\n margin-left: auto;\n white-space: nowrap;\n}\n.band-project-dialog-context {\n color: var(--muted);\n font-size: var(--fs-meta);\n}\n@media (max-width: 860px) {\n .band-project-dialog-head {\n flex-wrap: wrap;\n }\n .band-project-dialog-context {\n flex-basis: 100%;\n order: 1;\n }\n}\n.band-project-param-markdown :where(p, ul, ol, pre, blockquote) {\n margin: 0 0 8px;\n}\n.band-project-param-markdown :where(h3, h4, h5, h6) {\n margin: 8px 0;\n font-size: var(--fs-body);\n}\n.band-project-param-markdown :where(ul, ol) {\n padding-left: 22px;\n}\n.band-project-param-markdown :where(pre, .band-plugin-react-markdown-table) {\n max-width: 100%;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-project-param-markdown :where(pre) {\n padding: 8px;\n background: var(--sunk);\n}\n.band-project-param-markdown > :where(:last-child) {\n margin-bottom: 0;\n}\n@media (max-width: 600px) {\n .band-project-stage-params > div {\n grid-template-columns: minmax(0, 1fr);\n gap: 4px;\n }\n}\n:root[data-band-embed] .band-project-upgrade-records,\n:root[data-band-embed] .band-project-preview,\n:root[data-band-embed] .band-project-trial {\n display: none;\n}\n';let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-project"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-project");document.head.prepend(el)}el.textContent=css}function copyRequest(req){if("materialVersion"in req){if(Object.keys(req).some(k=>k!=="materialVersion")||!req.materialVersion||Object.keys(req.materialVersion).some(k=>!["artifactId","versionId"].includes(k))||typeof req.materialVersion.artifactId!=="string"||!req.materialVersion.artifactId||typeof req.materialVersion.versionId!=="string"||!req.materialVersion.versionId)throw new Error("\u7D20\u6750\u67E5\u770B\u8981\u7ED9\u552F\u4E00\u7684 artifactId \u548C versionId");return{materialVersion:{...req.materialVersion}}}if(!req.artifactId)throw new Error("artifact-dialog.open \u8981\u7ED9 artifactId");return{...req}}function createArtifactDialog(){let current=null;let opener=null;const listeners=new Set;const emit=()=>{for(const fn of[...listeners])fn()};return{supportsMaterialVersion:true,open(req){const copied=copyRequest(req);if(!current&&typeof document!=="undefined")opener=document.activeElement;current=copied;emit()},close(){if(!current)return;current=null;emit()},current:()=>current?copyRequest(current):null,opener:()=>opener,subscribe(fn){listeners.add(fn);return()=>{listeners.delete(fn)}}}}function hostArtifactDialog(ctx,dialog,slot2){if(typeof document==="undefined")return()=>{};let el=null;let content=null;let seq=0;const onKey=withImeGuard(e=>{if(e.key!=="Escape"||e.defaultPrevented)return;if(topLayerElement()!==el)return;e.preventDefault();dialog.close()});const unmountContent=()=>{if(!content)return;content.off();content.root.remove();content=null};const teardown=()=>{seq+=1;unmountContent();if(!el)return;window.removeEventListener("keydown",onKey);if(el.open&&typeof el.close==="function")el.close();el.remove();el=null;const back=dialog.opener();if(back instanceof HTMLElement&&back.isConnected)back.focus()};const ensureDialog=()=>{if(el)return el;const d=document.createElement("dialog");d.className="band-project-dialog";d.dataset.bandLayer="dialog";d.setAttribute("aria-label","\u4EA7\u7269\u8BE6\u60C5");d.addEventListener("cancel",e=>e.preventDefault());d.addEventListener("close",()=>{if(el===d)dialog.close()});let downOnBackdrop=false;d.addEventListener("mousedown",e=>{downOnBackdrop=e.target===d});d.addEventListener("click",e=>{if(downOnBackdrop&&e.target===d)dialog.close();downOnBackdrop=false});document.body.append(d);if(typeof d.showModal==="function")d.showModal();else d.setAttribute("open","");window.addEventListener("keydown",onKey);el=d;return d};const sync=()=>{const req=dialog.current();if(!req)return teardown();const material="materialVersion"in req;const key=JSON.stringify(req);if(content?.key===key)return;const host=ensureDialog();const mine=++seq;const pinned=!material&&req.versionId?ctx.version.list(req.artifactId).then(vs=>vs.find(v=>v.id===req.versionId)).catch(()=>void 0):Promise.resolve(void 0);void pinned.then(version=>{if(mine!==seq||!el)return;unmountContent();const root=document.createElement("div");root.className="band-project-dialog-root";host.append(root);const off2=ctx.slots.mount(root,slot2,{owner:{projectId:ctx.project.id,request:req,close:()=>dialog.close()},...!material?{focus:{selection:{kind:"artifact",artifactId:req.artifactId},...version?{version}:{}}}:{}});content={key,root,off:off2}})};const off=dialog.subscribe(sync);return()=>{off();teardown()}}function topLayerElement(){if(typeof document==="undefined")return null;const all=document.querySelectorAll("[data-band-layer]");return all[all.length-1]??null}function artifactCaps(i){const process=i.process===true;const threads=i.canReadThreads&&!process;const write=threads&&i.access==="member"&&i.isLatest;return{threads,write,handToAgent:write&&i.canSubmit,edit:!process&&i.editBinding&&i.canSubmit&&i.isLatest,search:process}}var COLLECT_DELIVER_LABEL="\u5230\u4EA7\u7269\u9875\u4EA4\u65B0\u7248\u672C";var COLLECT_DELIVER_NO_PERMISSION="\u6CA1\u6709\u63D0\u4EA4\u4FEE\u6539\u7684\u6743\u9650\uFF0C\u8BF7\u627E\u9879\u76EE\u7BA1\u7406\u5458\u5F00\u901A";function collectDeliver(ctx,stage,artifacts){if(stage.kind!=="human"||stage.status!=="ready"||ctx.project.access!=="member"){return{draw:false}}const targets=(artifacts??[]).filter(a=>a.stage===stage.stage&&!a.unused&&a.latest&&(a.storage===void 0||a.storage==="store")).map(a=>({id:a.id,name:a.name}));if(targets.length===0)return{draw:false};if(!ctx.member.can("submit-change")){return{draw:true,can:false,note:COLLECT_DELIVER_NO_PERMISSION}}return{draw:true,can:true,targets}}function deliveryText(who,receipt,artifactName,versionLabel2){const took=receipt.receipt?.durationMs!==void 0?` \xB7 \u7528\u65F6 ${durationText(receipt.receipt.durationMs)}`:"";return`${who} \u5728 ${shortTime(receipt.createdAt)} \u4EA4\u51FA${artifactName}${versionLabel2?` ${versionLabel2}`:""}${took}`}function DeliveryStrip({ctx,artifact,isLatest}){const members=useMembers(ctx);const latestId=artifact.latest?.versionId;const{data}=useCtxData(ctx,async()=>{if(!ctx.project.canReadThreads)return null;const threads=await ctx.threads.list({artifactId:artifact.id});const waiting=threads.filter(t=>t.status==="awaiting_confirm").sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt));for(const thread of waiting){const comments=await ctx.threads.comments(thread.id);const receipt=[...comments].reverse().find(c=>c.kind==="receipt"&&(c.receipt?.outcome==="changed"||c.receipt?.outcome===void 0)&&(c.receipt?.versionId===void 0||c.receipt.versionId===latestId));if(receipt)return{threadId:thread.id,receipt}}return null},[artifact.id,latestId],THREAD_EVENTS);const latest=artifact.latest;if(!isLatest||!data||!latest)return null;const delivered=data.receipt.receipt?.versionId;if(delivered!==void 0&&delivered!==latest.versionId)return null;return jsxs6("output",{className:"band-project-delivery",children:[jsx9("span",{className:"band-project-delivery-text",children:deliveryText(memberName(members,data.receipt.author.id),data.receipt,artifact.name,latest.label)}),jsx9("button",{type:"button",className:"btn ghost sm",onClick:()=>ctx.threads.open(data.threadId),children:"\u67E5\u770B\u56DE\u6267"})]})}var stageDockKey=stage=>`stage:${stage}`;function createDockService(hasStageView=()=>false){const listeners=new Set;const emit=key=>{if(listeners.size===0)throw new Error(`\u505C\u9760\u533A\u8FD8\u6CA1\u6302\u4E0A\uFF0C\u6253\u4E0D\u5F00 ${key}`);for(const fn of[...listeners])fn(key)};return{open:emit,openStage(stage,{hasParams}){if(!hasParams&&!hasStageView(stage))return false;emit(stageDockKey(stage));return true},hasStageView,onOpen(fn){listeners.add(fn);return()=>{listeners.delete(fn)}}}}var LABELS={emptyPane:"\u4ECE\u5DE5\u5177\u680F\u6253\u5F00\u4E00\u4E2A\u9762\u677F",splitPane:"\u5411\u53F3\u62C6\u5206",splitPaneDisabled:"\u5DF2\u7ECF\u62C6\u5230\u4E0A\u9650",splitPaneNarrow:"\u592A\u7A84\uFF0C\u62C6\u4E0D\u5F00",closeTab:"\u5173\u95ED",addTab:"\u65B0\u6807\u7B7E",dockFloat:"\u505C\u9760\u56DE\u53BB",closeFloat:"\u5173\u95ED\u6D6E\u7A97",dropZone:{center:"\u653E\u5230\u8FD9\u91CC",left:"\u62C6\u5230\u5DE6\u8FB9",right:"\u62C6\u5230\u53F3\u8FB9",top:"\u62C6\u5230\u4E0A\u9762",bottom:"\u62C6\u5230\u4E0B\u9762"}};var DOCKS="@kanyun-ai-infra/band-project/docks";var STAGE_VIEWS="@kanyun-ai-infra/band-project/stage-views";var STAGE_FALLBACK="@kanyun-ai-infra/band-project/stage-fallback";var STAGE_PREFIX=stageDockKey("");var SERVICE="@kanyun-ai-infra/band-project/dock";function DockArea({ctx}){const[controller]=useState6(()=>new DockController);const entries=useSlotEntries(ctx,DOCKS);const stages=useCtxData2(ctx,()=>ctx.stages.list(),[],STAGE_EVENTS).data;const stagesRef=useRef7([]);stagesRef.current=stages??[];const snapshot=useSyncExternalStore(fn=>controller.subscribe(fn),()=>controller.getSnapshot());useEffect5(()=>{const service=ctx.services.find(SERVICE);if(!service)return;return service.onOpen(key=>{if(key.startsWith(STAGE_PREFIX)){const stage=key.slice(STAGE_PREFIX.length);const s=stagesRef.current.find(x=>x.stage===stage);controller.openContent({kind:"dock",contentId:key,title:s?.name??stage});return}const entry=entries.find(e=>e.key===key);if(!entry){ctx.report(new Error(`\u6CA1\u6709\u505C\u9760\u4F4D ${key}`));return}const title=typeof entry.meta.title==="string"?entry.meta.title:entry.id;controller.openContent({kind:"dock",contentId:key,title})})},[ctx,controller,entries]);const empty=Object.keys(snapshot.state.tabs).length===0;return jsx22("div",{className:"band-project-dock","data-empty":empty||void 0,children:jsx22(DockSurface,{state:snapshot.state,canSplit:snapshot.canSplit,canAddTab:()=>false,intents:controller,labels:LABELS,renderTab:tab=>tab.contentId.startsWith(STAGE_PREFIX)?jsx22(StageTab,{ctx,stage:tab.contentId.slice(STAGE_PREFIX.length)}):jsx22(Mount,{className:"band-project-dock-item",mount:el=>ctx.slots.mount(el,DOCKS,{key:tab.contentId,owner:{projectId:ctx.project.id,key:tab.contentId}}),deps:[ctx,tab.contentId]})})})}function StageTab({ctx,stage}){const views=useSlotEntries(ctx,STAGE_VIEWS);const stages=useCtxData2(ctx,()=>ctx.stages.list(),[],STAGE_EVENTS);const viewKey=views.find(e=>e.meta.stage===stage)?.key;const summary=stages.data?.find(x=>x.stage===stage);const hasParams=summary?.paramsSchema!==void 0;const ready=stages.data!==void 0||stages.error!==null&&viewKey!==void 0;if(stages.error&&!viewKey)return jsx22(ErrorNote,{retry:stages.reload,children:stages.error});if(!ready)return null;const owner={projectId:ctx.project.id,stage,hasParams};return jsx22(Mount,{className:"band-project-dock-item","data-band-stage":stage,mount:el=>viewKey?ctx.slots.mount(el,STAGE_VIEWS,{key:viewKey,owner}):ctx.slots.mount(el,STAGE_FALLBACK,{owner,fallback:target=>{const p=document.createElement("p");p.className="band-project-missing";p.textContent="\u8FD9\u4E2A\u9636\u6BB5\u6CA1\u6709\u8981\u586B\u7684\u53C2\u6570\uFF0C\u4E5F\u6CA1\u6709\u4E13\u95E8\u7684\u754C\u9762";target.appendChild(p);return()=>p.remove()}}),deps:viewKey?[ctx,stage,viewKey]:[ctx,stage,hasParams]})}function stageProduces(detail,stage){if(!detail)return[];const defs=detail.workflows.flatMap(w=>w.stages).filter(s=>s.id===stage);if(defs.length!==1)return[];return defs[0]?.produces??[]}function externalFirstImports(detail,stage,artifacts){if(stage.kind!=="human"||artifacts===void 0)return{all:false,types:[]};const produces=stageProduces(detail,stage.stage);if(produces.length===0)return{all:false,types:[]};const storageOf=new Map((detail?.artifactTypes??[]).map(t=>[t.name,t.storage]));const external=produces.filter(t=>storageOf.get(t)==="external");const versioned=new Set(artifacts.filter(a=>a.stage===stage.stage&&external.includes(a.artifactType)).map(a=>a.artifactType));return{all:external.length===produces.length,types:external.filter(t=>!versioned.has(t))}}var VIEWERS="@kanyun-ai-infra/band-project/viewers";var FALLBACK="@kanyun-ai-infra/band-project/viewer-fallback";function viewerKey(ctx,ref){return resolveViewer(ctx.slots.entries(VIEWERS),ref)?.key??ref}function mountArtifactViewer(ctx,el,opts){const{version,binding,bindingConfig,config,live}=opts;const owner={...opts.owner,versionId:version.id,entryMimes:version.entries.map(e=>e.mime)};const mount=(target,ref,workshop)=>ctx.slots.mount(target,VIEWERS,{key:viewerKey(ctx,ref),owner,version,config:workshop?{...workshop,...config}:config,...live?{live:true}:{}});if(binding){return ctx.slots.entries(VIEWERS).some(entry=>entry.key===viewerKey(ctx,binding))?mount(el,binding,bindingConfig):mountMissingPlugin(ctx,el,{...opts,owner})}return ctx.slots.mount(el,FALLBACK,{owner,version,fallback:target=>{const ref=defaultViewer(owner.entryMimes??[]);const key=viewerKey(ctx,ref);return ctx.slots.entries(VIEWERS).some(entry=>entry.key===key)?mount(target,ref):unbound(target,owner.artifactType)}})}function mountMissingPlugin(ctx,el,fixed,panelRef3){const notice=document.createElement("p");notice.className="band-project-missing";notice.setAttribute("role","status");notice.textContent=panelRef3?`\u8FD9\u4E2A\u9762\u677F\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF08${panelRef3}\uFF09`:"\u63D2\u4EF6\u672A\u88C5\u4E0A";if(panelRef3)notice.dataset.bandMissing=panelRef3;const container=document.createElement("section");container.className="band-project-item";const body=document.createElement("div");body.className="band-project-item";container.append(notice,body);el.appendChild(container);let unmount;const render=()=>{unmount?.();unmount=void 0;body.replaceChildren();const version=fixed?.version??ctx.version.current();if(!version)return;const ref=defaultViewer(version.entries.map(entry=>entry.mime));const key=viewerKey(ctx,ref);if(!ctx.slots.entries(VIEWERS).some(entry=>entry.key===key))return;unmount=ctx.slots.mount(body,VIEWERS,{key,owner:fixed?.owner??{projectId:ctx.project.id,artifactId:version.artifactId,artifactType:"",versionId:version.id},version,config:fixed?.config??{compare:true,edit:false},...fixed?.live?{live:true}:{}})};render();const unsubscribe=fixed?void 0:ctx.version.subscribe(render);return()=>{unsubscribe?.();unmount?.();container.remove()}}function defaultViewer(mimes){if(mimes.includes("text/html"))return"web";if(mimes.some(mime=>mime.startsWith("image/")))return"image";if(mimes.some(mime=>mime.startsWith("video/")||mime.startsWith("audio/")))return"media";if(mimes.includes(LINK_CARD_MIME))return"external";return"text"}function unbound(el,artifactType){const p=document.createElement("p");p.className="band-project-missing";p.textContent=`\u5DE5\u574A\u6CA1\u6709\u7ED9\u4EA7\u7269\u7C7B\u578B ${artifactType} \u7ED1\u5B9A\u67E5\u770B\u5668\uFF08views.artifactTypes\uFF09`;el.appendChild(p);return()=>p.remove()}function needsNewTab(ctx,a){const ref=materialViewer(a);if(!ref)return true;if(!resolveViewer(ctx.slots.entries(VIEWERS),ref))return true;return ref==="material-text"&&a.size>MATERIAL_TEXT_MAX_BYTES}function mountMaterialViewer(ctx,el,source){const ref=materialViewer(source.attachment);const entry=ref?resolveViewer(ctx.slots.entries(VIEWERS),ref):void 0;if(!entry){const p=document.createElement("p");p.className="band-project-missing";p.setAttribute("role","status");p.textContent=ref?"\u8FD9\u4E2A\u9875\u9762\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u7D20\u6750\u67E5\u770B\u5668\uFF0C\u8BF7\u7528\u300C\u5728\u65B0\u6807\u7B7E\u6253\u5F00\u300D\u6216\u300C\u4E0B\u8F7D\u539F\u6587\u4EF6\u300D":"\u8FD9\u4E2A\u6587\u4EF6\u6682\u4E0D\u652F\u6301\u7AD9\u5185\u67E5\u770B\uFF0C\u8BF7\u7528\u300C\u5728\u65B0\u6807\u7B7E\u6253\u5F00\u300D\u6216\u4E0B\u8F7D\u539F\u6587\u4EF6";el.appendChild(p);return()=>p.remove()}return ctx.slots.mount(el,VIEWERS,{key:entry.key,owner:{projectId:ctx.project.id,artifactId:source.artifactId,artifactType:"attachment",versionId:source.versionId,materialVersion:source},config:{edit:false}})}function MaterialDialog({ctx,request,close}){const[source,setSource]=useState22(null);const[error,setError]=useState22("");const[attempt,setAttempt]=useState22(0);const[downloading,setDownloading]=useState22(false);const[downloadError,setDownloadError]=useState22("");const[discussionsAvailable,setDiscussionsAvailable]=useState22(false);const[discussionError,setDiscussionError]=useState22(null);const[openingDiscussions,setOpeningDiscussions]=useState22(false);const[openingTab,setOpeningTab]=useState22(false);const[tabError,setTabError]=useState22("");const[discussionAttempt,setDiscussionAttempt]=useState22(0);const frame=useRef22(null);const title=useId();useEffect22(()=>{let active=true;setSource(null);setError("");setDownloadError("");void resolveMaterialSource(ctx,request).then(s=>{if(active)setSource(s)},error2=>{if(active)setError(materialError(error2))});return()=>{active=false}},[ctx,request,attempt]);useEffect22(()=>{let active=true;setDiscussionsAvailable(false);setDiscussionError(null);const api=ctx.materialDiscussions;if(!api)return()=>{active=false};void api.available().then(available=>{if(active)setDiscussionsAvailable(available)},()=>{if(active)setDiscussionError({stage:"probe",text:"\u8BC4\u8BBA\u6682\u65F6\u6CA1\u8BFB\u5230\uFF0C\u8BF7\u91CD\u8BD5"})});return()=>{active=false}},[ctx,discussionAttempt]);useEffect22(()=>{const dialog=frame.current?.closest("dialog");dialog?.removeAttribute("aria-label");dialog?.setAttribute("aria-labelledby",title);frame.current?.querySelector("main")?.focus()},[title]);const download=async()=>{if(!source||downloading)return;setDownloading(true);setDownloadError("");try{const fresh=await resolveMaterialSource(ctx,request);const href=await materialObjectUrl(ctx,fresh);const a=document.createElement("a");a.href=href;a.download=fresh.attachment.name;a.rel="noopener";document.body.append(a);a.click();a.remove()}catch(error2){setDownloadError(`\u4E0B\u8F7D\u6CA1\u6210\u529F\u3002${materialError(error2)}`)}finally{setDownloading(false)}};const openInNewTab=()=>{if(!source||openingTab)return;const w=window.open("","_blank");if(!w){setTabError("\u6D4F\u89C8\u5668\u62E6\u4E0B\u4E86\u65B0\u6807\u7B7E\uFF0C\u8BF7\u5141\u8BB8\u5F39\u51FA\u7A97\u53E3\u540E\u91CD\u8BD5\uFF0C\u6216\u76F4\u63A5\u4E0B\u8F7D\u539F\u6587\u4EF6");return}w.opener=null;setTabError("");setOpeningTab(true);void(async()=>{try{const fresh=await resolveMaterialSource(ctx,request);w.location.href=await materialObjectUrl(ctx,fresh)}catch(error2){w.close();setTabError(`\u5728\u7AD9\u5185\u6253\u4E0D\u5F00\uFF0C\u4E5F\u6CA1\u80FD\u5728\u65B0\u6807\u7B7E\u6253\u5F00\uFF1A${materialError(error2)}`)}finally{setOpeningTab(false)}})()};const openDiscussions=async()=>{const api=ctx.materialDiscussions;if(!api||openingDiscussions)return;setOpeningDiscussions(true);setDiscussionError(null);try{await api.open({artifactId:request.artifactId,versionId:request.versionId})}catch{setDiscussionError({stage:"open",text:"\u8BC4\u8BBA\u6682\u65F6\u6253\u4E0D\u5F00\uFF0C\u8BF7\u91CD\u8BD5"})}finally{setOpeningDiscussions(false)}};return jsxs22("div",{className:"band-project-dialog-frame",ref:frame,"data-material-version":request.versionId,children:[jsxs22("header",{className:"band-project-dialog-head",children:[jsx32("h2",{className:"band-project-dialog-title",id:title,children:source?.attachment.name??"\u7D20\u6750\u7248\u672C"}),source&&jsxs22("span",{className:"chip plain",children:["v",source.number," \xB7 \u5185\u5BB9\u53EA\u8BFB"]}),jsx32("button",{type:"button",className:"band-project-dialog-close","aria-label":"\u5173\u95ED",onClick:close,children:"\xD7"}),(source||discussionsAvailable)&&jsxs22("div",{className:"band-project-dialog-actions",children:[discussionsAvailable&&jsx32("button",{type:"button",className:"btn ghost sm",disabled:openingDiscussions,onClick:()=>void openDiscussions(),children:openingDiscussions?"\u6B63\u5728\u6253\u5F00\u8BC4\u8BBA\u2026":"\u8BC4\u8BBA"}),source&&needsNewTab(ctx,source.attachment)&&jsx32("button",{type:"button",className:"btn ghost sm",disabled:openingTab,onClick:()=>void openInNewTab(),children:openingTab?"\u6B63\u5728\u6253\u5F00\u2026":"\u5728\u65B0\u6807\u7B7E\u6253\u5F00"}),source&&jsx32("button",{type:"button",className:"btn ghost sm",disabled:downloading,onClick:()=>void download(),children:downloading?"\u6B63\u5728\u51C6\u5907\u4E0B\u8F7D\u2026":"\u4E0B\u8F7D\u539F\u6587\u4EF6"})]}),discussionError&&(discussionError.stage==="open"||source)&&jsxs22("div",{className:"band-project-missing",role:"alert",children:[jsx32("p",{children:discussionError.text}),jsx32("button",{type:"button",className:"btn sm",onClick:()=>{if(discussionError.stage==="open")void openDiscussions();else setDiscussionAttempt(n=>n+1)},children:"\u91CD\u8BD5\u8BC4\u8BBA"})]})]}),tabError&&jsxs22("div",{className:"band-project-missing",role:"alert",children:[jsx32("p",{children:tabError}),jsx32("button",{type:"button",className:"btn sm",disabled:openingTab,onClick:openInNewTab,children:"\u518D\u8BD5\u4E00\u6B21"})]}),downloadError&&jsxs22("div",{className:"band-project-missing",role:"alert",children:[jsx32("p",{children:downloadError}),jsx32("button",{type:"button",className:"btn sm",disabled:downloading,onClick:()=>void download(),children:"\u91CD\u8BD5\u4E0B\u8F7D"})]}),jsx32("main",{className:"band-project-dialog-body is-solo",tabIndex:-1,"aria-label":"\u7D20\u6750\u5185\u5BB9",children:error?jsxs22("div",{className:"band-project-missing",role:"alert",children:[jsx32("p",{children:error}),jsx32("button",{type:"button",className:"btn sm",onClick:()=>setAttempt(n=>n+1),children:"\u91CD\u8BD5"})]}):source?jsx32(Mount2,{className:"band-project-dialog-main",deps:[ctx,source],mount:el=>mountMaterialViewer(ctx,el,source)}):jsx32("output",{children:"\u6B63\u5728\u6253\u5F00\u6307\u5B9A\u7D20\u6750\u7248\u672C\u2026"})})]})}var SETTINGS_PAGE="@kanyun-ai-infra/band-settings/settings";function ModelNeedsBar({ctx}){const api=ctx.app.data.write?.projectAgentModels;if(!api||ctx.project.access!=="member")return null;return jsx42(ModelNeedsBody,{ctx,api})}function ModelNeedsBody({ctx,api}){const{data}=useCtxData3(ctx,async()=>{try{return await api.list(ctx.project.id)}catch{return null}},[ctx.project.id,api],["turn.delivered","turn.failed"]);if(!data||!data.canManage||data.policy==="off")return null;const needs=projectModelNeedsOf(data.agents);const text=projectModelNeedsText(needs);if(text===null)return null;return jsxs32("output",{className:"band-project-model-needs","aria-label":PROJECT_MODEL_NEEDS_ME,children:[jsx42("span",{className:"glyph needs","aria-hidden":"true"}),jsx42("span",{className:"band-project-model-needs-text",children:text}),jsx42("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:SETTINGS_PAGE,params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},tab:"models"}}),children:MODEL_NEEDS_SETTINGS}),jsx42("button",{type:"button",className:"btn ghost sm",onClick:()=>ctx.app.navigate({page:PERSONAL_MODELS_PAGE}),children:MODEL_NEEDS_PERSONAL})]})}function withNotices(el,notices,mount,deleted){const missing=notices?.missingPlugins??[];const lines=notices?.plugins??[];const restore=canRestoreProject(deleted)?deleted?.restore:void 0;if(missing.length===0&&lines.length===0&¬ices?.preview===void 0&&restore===void 0)return mount(el);const container=document.createElement("div");container.className="band-project-item";if(notices?.preview!==void 0)container.appendChild(previewNotice(notices.preview));const content=document.createElement("div");container.appendChild(content);el.appendChild(container);const unmount=mount(content);if(missing.length>0){const notice=document.createElement("p");notice.className="band-project-missing";notice.setAttribute("role","status");notice.textContent=`\u5DE5\u574A\u63D2\u4EF6 ${missing.join("\u3001")} \u672A\u88C5\u4E0A\uFF0C\u5DF2\u7528\u5B98\u65B9\u7EC4\u4EF6\u4EE3\u66FF`;container.appendChild(notice)}if(lines.length>0){const list=document.createElement("div");list.setAttribute("role","status");list.dataset.bandPluginNotice="";for(const line of lines){const item=document.createElement("p");item.className="band-project-missing";item.textContent=line;list.appendChild(item)}container.appendChild(list)}if(restore)container.appendChild(restoreRow(restore));return()=>{unmount();container.remove()}}function previewNotice(hash){const bar=document.createElement("p");bar.className="band-project-preview";bar.setAttribute("role","status");const text=document.createElement("span");text.textContent="\u9884\u89C8\u4E2D \xB7 \u5199\u5165\u4F1A\u843D\u5230\u8FD9\u4E2A\u9879\u76EE";const snap=document.createElement("span");snap.className="band-project-preview-hash";snap.textContent=`\u5FEB\u7167 ${hash.slice(0,8)}`;snap.title=hash;const exit=document.createElement("button");exit.type="button";exit.className="btn sm";exit.textContent="\u9000\u51FA\u9884\u89C8";exit.addEventListener("click",()=>window.location.assign(window.location.pathname));bar.append(text,snap,exit);return bar}function restoreRow(restore){const row=document.createElement("p");row.className="band-project-missing band-project-restore";const button=document.createElement("button");button.type="button";button.className="btn sm";button.textContent="\u6062\u590D\u9879\u76EE";const note=document.createElement("span");note.setAttribute("role","alert");button.addEventListener("click",()=>{button.disabled=true;note.textContent="";restore().then(()=>{note.textContent="\u5DF2\u6062\u590D\uFF0C\u6B63\u5728\u91CD\u65B0\u6253\u5F00\u2026"},e=>{button.disabled=false;note.textContent=`\u6CA1\u6062\u590D\u6210\uFF1A${e instanceof Error?e.message:String(e)}`})});row.append(button,note);return row}var KEYS=new Set(["PageDown","PageUp","Home","End"]);var PAGE_RATIO=.9;function scrollable(el){if(!(el instanceof HTMLElement))return false;const y=getComputedStyle(el).overflowY;return(y==="auto"||y==="scroll")&&el.scrollHeight>el.clientHeight+1}function viewerScroller(doc){const top=topLayerElement();const viewers=[...doc.querySelectorAll(".band-project-viewer")].filter(v=>(v.closest("[data-band-layer]")??null)===top&&v.dataset.bandCompare!=="against"&&v.closest(".band-project-candidate")===null);for(const v of viewers){const candidates=[v,...v.querySelectorAll("*")].filter(scrollable);if(candidates.length===0)continue;return candidates.reduce((a,b)=>b.clientHeight>a.clientHeight?b:a)}return null}function installViewerPageKeys(doc){const onKey=withImeGuard2(e=>{if(!KEYS.has(e.key)||e.defaultPrevented)return;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const active=doc.activeElement;if(active&&active!==doc.body&&active!==doc.documentElement)return;const el=viewerScroller(doc);if(!el)return;e.preventDefault();const page=Math.round(el.clientHeight*PAGE_RATIO);if(e.key==="PageDown")el.scrollTop+=page;else if(e.key==="PageUp")el.scrollTop=Math.max(0,el.scrollTop-page);else if(e.key==="Home")el.scrollTop=0;else el.scrollTop=el.scrollHeight});doc.addEventListener("keydown",onKey);return()=>doc.removeEventListener("keydown",onKey)}var shared=new WeakMap;function retainViewerPageKeys(doc){const cur=shared.get(doc);if(cur)cur.count+=1;else shared.set(doc,{count:1,off:installViewerPageKeys(doc)});let released=false;return()=>{if(released)return;released=true;const s=shared.get(doc);if(!s)return;s.count-=1;if(s.count===0){s.off();shared.delete(doc)}}}var READONLY="\u8FD9\u4E2A\u9879\u76EE\u73B0\u5728\u53EA\u80FD\u67E5\u770B\u3002";function readonlyNote(readThreads,versionCount){if(readThreads)return`${READONLY}\u80FD\u770B\u5185\u5BB9\u548C\u610F\u89C1\uFF0C\u4E0D\u80FD\u53C2\u4E0E\u8BA8\u8BBA\u3002`;if(versionCount===1)return`${READONLY}\u4F60\u80FD\u770B\u8FD9\u4E00\u7248\u7684\u5185\u5BB9\uFF0C\u770B\u4E0D\u5230\u610F\u89C1\u3002`;if(versionCount!==void 0&&versionCount>1)return`${READONLY}\u4F60\u80FD\u770B\u5185\u5BB9\u548C\u5404\u4E2A\u7248\u672C\uFF0C\u770B\u4E0D\u5230\u610F\u89C1\u3002`;return`${READONLY}\u4F60\u80FD\u770B\u5185\u5BB9\uFF0C\u770B\u4E0D\u5230\u610F\u89C1\u3002`}var REGIONS=["left","right","top","bottom"];var APPROVAL="approval";var COMPOSER="comment/chat-composer";var CHAT="chat";var CHAT_REFS=new Set([CHAT,"chat/chat","@kanyun-ai-infra/band-chat/chat"]);function overlay(preset,views,memberRoles){let out={...preset,...views.panels};for(const[role,def]of Object.entries(views.roles??{})){if(memberRoles.includes(role))out={...out,...def.panels}}return out}function withLocked(input){const regions=Object.fromEntries(REGIONS.map(r2=>[r2,[...input[r2]??[]]]));const placed=new Set(REGIONS.flatMap(r2=>regions[r2].map(x=>LOCKED_REFS[panelRef(x)])));const insertAfter=(ref,item,accept,refs=new Set([ref]))=>{for(const r2 of REGIONS){const items=regions[r2];const i=items.findIndex(x=>refs.has(panelRef(x))&&accept(r2,x));if(i>=0){items.splice(i+1,0,item);return true}}return false};if(!placed.has(LOCKED_REFS[COMPOSER])){const hasChat=REGIONS.some(r2=>regions[r2].some(x=>CHAT_REFS.has(panelRef(x))));if(hasChat)insertAfter(CHAT,COMPOSER,()=>true,CHAT_REFS);else{regions.right.unshift(CHAT);regions.right.push(COMPOSER)}}const fullStages=(r2,x)=>r2!=="top"&&panelConfig(x)?.compact!==true;if(!placed.has(LOCKED_REFS[APPROVAL]))insertAfter("stages",APPROVAL,fullStages);return regions}function approvalPlaced(placed){return approvalRegion(placed)!==void 0}function approvalRegion(placed){return REGIONS.find(r2=>placed[r2].some(x=>x.kind==="locked"&&x.slot===LOCKED_REFS[APPROVAL]))}function composerRegion(placed){return REGIONS.find(r2=>placed[r2].some(x=>x.kind==="locked"&&x.slot===LOCKED_REFS[COMPOSER]))}function place(preset,views,memberRoles,panels){const input=overlay(preset,views,memberRoles);const regions=withLocked(input);const autoChat=!REGIONS.some(r2=>input[r2]?.some(x=>CHAT_REFS.has(panelRef(x))));const chatRef=REGIONS.flatMap(r2=>regions[r2].map(panelRef)).find(x=>CHAT_REFS.has(x));const chat=chatRef?resolvePanel(panels,chatRef):void 0;const out={};for(const r2 of REGIONS){out[r2]=regions[r2].flatMap(item=>{const ref=panelRef(item);const config=panelConfig(item);const locked=LOCKED_REFS[ref];if(locked){const follows=locked===LOCKED_REFS[COMPOSER]?chat?.key:void 0;return[{kind:"locked",ref,slot:locked,...config?{config}:{},...follows?{follows}:{}}]}const entry=resolvePanel(panels,ref);if(!entry)return autoChat&&ref===CHAT?[]:[{kind:"missing",ref}];return[{kind:"panel",ref,key:entry.key,title:typeof entry.meta.title==="string"?entry.meta.title:entry.id,...config?{config}:{}}]})}return out}var REDUCE="(prefers-reduced-motion: reduce)";function prefersStill(){return typeof window!=="undefined"&&window.matchMedia?.(REDUCE).matches===true}var NOTES=[{x:14,y:32},{x:34,y:22},{x:54,y:27},{x:74,y:17}];function Rehearsal({still=prefersStill()}){const[first]=NOTES;return jsxs42("svg",{className:"rehearsal band-project-rehearsal",viewBox:"0 0 88 55","aria-hidden":"true","data-still":still||void 0,children:[[12,22,32,42,52].map(y=>jsx52("line",{x1:"0",y1:y,x2:"88",y2:y},y)),NOTES.map(n=>jsx52("ellipse",{className:"note",cx:n.x,cy:n.y,rx:"4.6",ry:"3.1",transform:`rotate(-20 ${n.x} ${n.y})`},n.x)),jsx52("g",{className:"head",children:jsx52("ellipse",{cx:first.x,cy:first.y,rx:"5.6",ry:"3.7",transform:`rotate(-20 ${first.x} ${first.y})`})})]})}function startOf(ctx){const start=ctx.app.data.write?.startProject;return start&&ctx.member.can("comment")?start:void 0}function startErrorText(e){const{status,code}=typeof e==="object"&&e!==null?e:{};if(code==="INPUT_REQUIRED")return"\u8BF7\u5148\u5199\u4E0B\u8FD9\u4E2A\u9879\u76EE\u8981\u505A\u4EC0\u4E48\uFF0C\u518D\u5F00\u59CB\u6D41\u7A0B";if(status===409||code==="CONFLICT")return"\u8FD9\u4E2A\u9879\u76EE\u5DF2\u7ECF\u5F00\u59CB\u4E86\uFF0C\u5237\u65B0\u4E00\u4E0B\u5C31\u80FD\u770B\u5230";if(status===403||status===404||code==="FORBIDDEN"||code==="NOT_FOUND")return"\u4F60\u6CA1\u6709\u6743\u9650\u5F00\u59CB\u8FD9\u4E2A\u9879\u76EE";if(status===400||code==="VALIDATION_ERROR")return"\u8FD9\u4E2A\u5DE5\u574A\u7684\u6D41\u7A0B\u63A5\u4E0D\u4E86\u9700\u6C42\uFF0C\u6CA1\u6CD5\u4ECE\u8FD9\u91CC\u5F00\u59CB";return"\u6CA1\u80FD\u5F00\u59CB\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"}function StartProject({ctx,start,onStarted}){const[draft,setDraft]=useState32("");useUnsavedGuard(draft.trim().length>0);const[busy,setBusy]=useState32(false);const[error,setError]=useState32(null);const titleId=useId2();const body=draft.trim();const tooLong=body.length>FIRST_MESSAGE_MAX;const ready=!busy&&body!==""&&!tooLong;const submit=async()=>{if(!ready)return;setBusy(true);setError(null);try{await start({project:ctx.project.id,firstMessage:{body}})}catch(e){console.error("[band-project] \u5F00\u59CB\u9879\u76EE\u5931\u8D25",e);setError(startErrorText(e));setBusy(false);return}onStarted()};return jsxs52("section",{className:"band-project-start","aria-labelledby":titleId,children:[jsx62("h2",{id:titleId,className:"band-project-start-title",children:"\u8FD9\u4E2A\u9879\u76EE\u8981\u505A\u4EC0\u4E48\uFF1F"}),jsxs52("form",{className:"composer",onSubmit:e=>{e.preventDefault();void submit()},children:[jsx62("textarea",{rows:3,"aria-required":"true","aria-labelledby":titleId,placeholder:"\u5199\u4E0B\u9700\u6C42\uFF0C\u6BD4\u5982\u300C\u7ED9\u5C0F\u533A\u505A\u4E00\u5F20\u505C\u6C34\u901A\u77E5\u6D77\u62A5\uFF0C\u5468\u516D 9 \u70B9\u5230 17 \u70B9\u505C\u6C34\u300D",value:draft,disabled:busy,"aria-invalid":error||tooLong?true:void 0,onChange:e=>setDraft(e.target.value),onKeyDown:withImeGuard3(e=>{if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();void submit()}})}),jsxs52("div",{className:"composer-bar",children:[jsx62("span",{className:"grow"}),jsx62("button",{type:"submit",className:"btn primary sm",disabled:!ready,children:busy?"\u6B63\u5728\u4EA4\u7ED9 Rondo\u2026":"\u4EA4\u7ED9 Rondo \u5F00\u59CB"})]})]}),jsx62("p",{className:"band-project-start-hint","aria-live":"polite",children:error?jsxs52("span",{className:"band-project-start-err",children:["\u6CA1\u5F00\u59CB\u6210\uFF1A",error]}):tooLong?jsx62("span",{className:"band-project-start-err",children:"\u9700\u6C42\u592A\u957F\u4E86\uFF0C\u5220\u77ED\u4E00\u4E9B\u518D\u4EA4"}):"\u8FD9\u6BB5\u8BDD\u4F1A\u6210\u4E3A\u9879\u76EE\u7684\u7B2C\u4E00\u6761\u610F\u89C1\uFF0CRondo \u7167\u7740\u505A\u7B2C\u4E00\u7248\u3002"})]})}function TrialMark({ctx}){const api=ctx.app.data.write?.trialProjects;const{data,error,reload}=useAppData(ctx,()=>api?api.status(ctx.project.id):Promise.resolve(null),[api,ctx.project.id]);if(!api)return null;if(error)return jsxs62(ErrorNote2,{retry:reload,children:["\u8BD5\u7528\u72B6\u6001\u6CA1\u8BFB\u51FA\u6765\uFF1A",error]});if(data===void 0)return jsx72("output",{className:"sr-only","aria-busy":"true",children:"\u6B63\u5728\u8BFB\u53D6\u8BD5\u7528\u72B6\u6001\u2026"});if(!data?.trial)return null;return jsxs62("div",{className:"band-project-trial",role:"note","aria-label":"\u8BD5\u7528\u9879\u76EE",children:[jsx72("span",{className:"chip plain",children:"\u8BD5\u7528\u9879\u76EE \xB7 test \u69FD"}),jsx72("span",{children:"Agent \u8DDF\u968F test \u69FD\u66F4\u65B0\u3002\u7531\u5DE5\u574A\u521B\u5EFA\u4EBA\u6216\u7BA1\u7406\u5458\u5728\u5DE5\u574A\u8BBE\u7F6E\u7ED3\u675F\u8BD5\u7528\u3002"})]})}var keptByStructure=u=>u.reason==="structure_changed"||u.reason==="plan_differs";var keptKey=projectId=>`band-upgrade-kept:${projectId}`;function saveKept(projectId,n){try{if(n>0)globalThis.sessionStorage?.setItem(keptKey(projectId),String(n))}catch{}}function takeKept(projectId){try{const raw=globalThis.sessionStorage?.getItem(keptKey(projectId));globalThis.sessionStorage?.removeItem(keptKey(projectId));const n=Number(raw);return Number.isInteger(n)&&n>0?n:0}catch{return 0}}function upgradeSummary(status){const union=pick=>[...new Set(status.pins.flatMap(pick))];return{outdated:union(p=>p.outdatedRoles),incompatible:union(p=>p.incompatibleRoles),rolledBack:union(p=>p.rolledBackRoles),workshopPlugins:union(p=>p.outdatedWorkshopPlugins??[]),officialPlugins:union(p=>p.outdatedOfficialPlugins??[])}}function UpgradeBar({ctx}){const upgrade=ctx.project.upgrade;if(!upgrade)return null;return jsxs7(Fragment5,{children:[jsx82(KeptNote,{projectId:ctx.project.id}),jsx82(UpgradeBarBody,{ctx,upgrade})]})}function KeptNote({projectId}){const[n,setN]=useState42(0);useEffect32(()=>{const v=takeKept(projectId);if(v>0)setN(v)},[projectId]);if(n<=0)return null;return jsx82("output",{className:"band-project-upgrade","data-upgrade":"kept",children:jsx82("span",{children:UPGRADE_TEXT.keptInstances(n)})})}function useUpgradeRefresh(upgrade){const[refresh,setRefresh]=useState42(null);const ownRun=useRef32(false);const eventEarly=useRef32(false);const refreshing=useRef32(false);const startRefresh=own=>{if(refreshing.current)return;refreshing.current=true;setRefresh({own,stuck:false});if(!flushAllDrafts()){setRefresh({own,stuck:true});return}requestAnimationFrame(()=>window.location.reload())};const startRefreshRef=useRef32(startRefresh);startRefreshRef.current=startRefresh;useEffect32(()=>upgrade.subscribe(()=>{if(ownRun.current)eventEarly.current=true;else startRefreshRef.current(false)}),[upgrade]);return{refresh,startRefresh,ownRun,eventEarly}}function RefreshNote({refresh,kept=0}){return jsxs7("output",{className:"band-project-upgrade","data-upgrade":refresh.stuck?"refresh-stuck":"refreshing",children:[jsx82("span",{children:refresh.stuck?UPGRADE_TEXT.refreshStuck(refresh.own):refresh.own?UPGRADE_TEXT.upgraded:UPGRADE_TEXT.refreshingOthers}),kept>0&&jsx82("span",{children:UPGRADE_TEXT.keptInstances(kept)}),refresh.stuck&&jsx82("button",{type:"button",className:"btn sm",onClick:()=>window.location.reload(),children:"\u5237\u65B0"})]})}function UpgradeRefresh({ctx}){const upgrade=ctx.project.upgrade;if(!upgrade)return null;return jsx82(UpgradeRefreshBody,{upgrade})}function UpgradeRefreshBody({upgrade}){const{refresh}=useUpgradeRefresh(upgrade);return refresh?jsx82(RefreshNote,{refresh}):null}function UpgradeBarBody({ctx,upgrade}){const{data,error:loadError,reload}=useCtxData4(ctx,()=>upgrade.status(),[upgrade],"project.upgraded");const[busy,setBusy]=useState42(false);const[error,setError]=useState42(null);const{refresh,startRefresh,ownRun,eventEarly}=useUpgradeRefresh(upgrade);const[kept,setKept]=useState42(0);if(refresh)return jsx82(RefreshNote,{refresh,kept});if(!data&&loadError)return jsxs7(ErrorNote3,{retry:reload,children:["\u5347\u7EA7\u72B6\u6001\u6CA1\u8BFB\u51FA\u6765\uFF1A",loadError]});if(!data||data.archived)return null;const{outdated,incompatible,rolledBack,workshopPlugins,officialPlugins}=upgradeSummary(data);if(!data.outdated&&outdated.length===0&&incompatible.length===0&&workshopPlugins.length===0&&officialPlugins.length===0)return null;const canDecide=data.canUpgrade&&ctx.member.can("admin");const blocked=incompatible.length>0;if(!canDecide&&!blocked)return null;const run=()=>{setBusy(true);setError(null);ownRun.current=true;eventEarly.current=false;upgrade.run().then(r2=>{setKept((r2.unchanged??[]).filter(keptByStructure).length);setBusy(false);if(r2.result==="upgraded"){saveKept(ctx.project.id,(r2.unchanged??[]).filter(keptByStructure).length);startRefresh(true)}else{ownRun.current=false;if(eventEarly.current)startRefresh(true);else reload()}},e=>{ownRun.current=false;setBusy(false);if(eventEarly.current)startRefresh(true);else setError(upgradeErrorText(e))})};const behind=outdated.filter(r2=>!incompatible.includes(r2)).length+workshopPlugins.length+officialPlugins.length>0||data.outdated&&incompatible.length===0;return jsxs7("output",{className:"band-project-upgrade","data-upgrade":incompatible.length>0?"incompatible":"outdated","aria-live":"polite",children:[jsxs7("span",{className:"band-project-upgrade-text",children:[busy?jsx82("span",{children:UPGRADE_TEXT.busy}):jsxs7(Fragment5,{children:[incompatible.length>0&&jsx82("span",{children:UPGRADE_TEXT.incompatible(incompatible)}),canDecide&&behind&&jsx82("span",{children:UPGRADE_TEXT.outdated}),canDecide&&rolledBack.length>0&&jsx82("span",{children:UPGRADE_TEXT.rolledBack})]}),error&&jsx82("span",{role:"alert",children:error})]}),canDecide?jsx82("button",{type:"button",className:"btn sm",disabled:busy,onClick:run,children:busy?UPGRADE_TEXT.busyShort:UPGRADE_TEXT.button}):jsx82("span",{className:"band-project-upgrade-ask",children:UPGRADE_TEXT.askAdmin})]})}var LABEL={pending:"\u672A\u9A8C",verified:"\u5DF2\u9A8C",rolled_back:"\u5DF2\u56DE\u6EDA"};function recordLabel(record2){return record2.state==="verified"&&(record2.kept??[]).length>0?"\u90E8\u5206\u5347\u7EA7":LABEL[record2.state]}var KEPT_WHY={structure_changed:"\u9636\u6BB5\u7ED3\u6784\u4E0E\u5F53\u524D\u7248\u672C\u4E0D\u540C",plan_differs:"\u9636\u6BB5\u7ED3\u6784\u4E0E\u5F53\u524D\u7248\u672C\u4E0D\u540C",unpinned:"\u9489\u70B9\u6307\u5411\u7684\u5DE5\u574A\u5FEB\u7167\u4E0D\u5B58\u5728",check_failed:"\u5347\u7EA7\u68C0\u67E5\u6CA1\u8FC7",rolled_back:"\u4E0A\u6B21\u5347\u7EA7\u540E\u88AB\u56DE\u6EDA\u8FC7\uFF0C\u81EA\u52A8\u5347\u7EA7\u4E0D\u518D\u52A8\u5B83"};function keptGroups(record2){const counts=new Map;for(const k of record2.kept??[]){const why=KEPT_WHY[k.reason]??"\u6CA1\u6709\u8DDF\u4E0A";counts.set(why,(counts.get(why)??0)+1)}return[...counts]}function UpgradeRecordList({records}){if(records.length===0)return null;return jsxs8("details",{className:"band-project-upgrade-records",children:[jsxs8("summary",{children:["\u5347\u7EA7\u8BB0\u5F55 \xB7 \u6700\u8FD1\u4E00\u6B21",records[0]?recordLabel(records[0]):LABEL.pending]}),jsx92("ol",{"aria-label":"\u5347\u7EA7\u8BB0\u5F55",children:records.map(record2=>jsxs8("li",{"data-upgrade-state":record2.state,children:[jsx92("time",{dateTime:record2.at,children:new Date(record2.at).toLocaleString("zh-CN")})," \xB7 ",jsx92("strong",{children:recordLabel(record2)}),jsxs8("ul",{children:[record2.pins.map(p=>jsxs8("li",{children:[p.pin==="project"?"\u9879\u76EE":`\u6D41\u7A0B\u5B9E\u4F8B ${record2.pins.filter(x=>x.pin!=="project").findIndex(x=>x.pin===p.pin)+1}`,"\uFF1A",LABEL[p.state],p.state==="pending"&&"\uFF0C\u7B49\u5F85\u9875\u9762\u52A0\u8F7D\u6838\u5BF9",p.state==="rolled_back"&&`\uFF0C\u63D2\u4EF6${p.failure?.phase==="assembly"?"\u88C5\u914D":"\u52A0\u8F7D"}\u5931\u8D25\uFF0C\u5DF2\u6062\u590D\u5347\u7EA7\u524D\u7248\u672C`]},p.pin)),keptGroups(record2).map(([why,n])=>jsxs8("li",{"data-upgrade-kept":true,children:["\u53E6\u6709 ",n," \u4E2A\u6D41\u7A0B\u5B9E\u4F8B\u6CA1\u8DDF\u4E0A\uFF1A",why,"\uFF0C\u7559\u5728\u539F\u7248\u672C"]},why))]})]},record2.id))})]})}function UpgradeRecords({ctx}){if(!ctx.project.upgrade)return null;return jsx92(Records,{ctx,upgrade:ctx.project.upgrade})}function Records({ctx,upgrade}){const{data}=useCtxData5(ctx,()=>upgrade.status(),[upgrade],"project.upgraded");return jsx92(UpgradeRecordList,{records:data?.records??[]})}function useWideThreadsConfig(openDeclared,highlightDeclared){return useMemo(()=>{const cfg={...openDeclared?{openOnly:true}:{},...highlightDeclared?{highlightCurrent:true}:{}};return Object.keys(cfg).length>0?cfg:void 0},[openDeclared,highlightDeclared])}var ARTIFACT_DIALOG="@kanyun-ai-infra/band-project/artifact-dialog";var PROJECT_HEAD="@kanyun-ai-infra/band-project/project-head";var PROJECT="@kanyun-ai-infra/band-project";var slot=local=>`${PROJECT}/${local}`;var SLOTS={header:slot("header"),headerActions:slot("header.actions"),layout:slot("layout"),panels:slot("panels"),viewers:slot("viewers"),viewerFallback:slot("viewer-fallback"),docks:slot("docks"),stageViews:slot("stage-views"),stageFallback:slot("stage-fallback"),dialog:slot("dialog"),comment:slot("collab.comment"),composer:slot("collab.composer"),approval:slot("collab.approval"),turn:slot("collab.turn"),queue:slot("collab.queue"),version:slot("collab.version")};function compareLabel(v){return typeof v.meta?.note==="string"?`${versionLabel(v)} \xB7 ${v.meta.note}`:versionLabel(v)}function activePair(pair,shown){if(!pair||!shown)return null;return pair.with===shown.id&&pair.against.artifactId===shown.artifactId&&pair.against.id!==shown.id?pair:null}var DEFAULT_LAYOUT="flow";var src_default=definePlugin({activate(ctx){return ctx.services.provide("artifact-preview",{mount:(el,owner)=>ctx.slots.mount(el,"@kanyun-ai-infra/band-project/preview",{owner})})},scopes:{project(ctx){const offDock=ctx.services.provide("dock",createDockService(stage=>ctx.slots.entries(SLOTS.stageViews).some(e=>e.meta.stage===stage)));const dialog=createArtifactDialog();const offDialog=ctx.services.provide("artifact-dialog",dialog);const offHost=hostArtifactDialog(ctx,dialog,SLOTS.dialog);const offHead=ctx.services.provide("project-head",{mount:el=>reactMount(c=>jsx10(ProjectHead,{ctx:c}))(ctx,el,{})});return()=>{offHead();offHost();offDialog();offDock()}}},surfaces:{preview:reactMount((ctx,props)=>jsx10(LibraryArtifactPreview,{ctx,owner:props.owner})),project:reactMount((ctx,props)=>jsx10(ProjectPage,{ctx,thread:props.owner.params.thread})),review:reactMount(ctx=>jsx10(ReviewPage,{ctx})),artifact:reactMount((ctx,props)=>jsx10(ArtifactPage,{ctx,artifact:props.owner.params.artifact??""})),dialog:reactMount((ctx,props)=>jsx10(ArtifactDialogView,{ctx,owner:props.owner}))}});function ProjectPage({ctx,thread:initialThread}){const projectId=ctx.project.id;const thread=useThreadParam(ctx,initialThread);const views=ctx.project.views;const layouts=useSlotEntries2(ctx,SLOTS.layout);const panels=useSlotEntries2(ctx,SLOTS.panels);const layoutRef=views.layout??DEFAULT_LAYOUT;const layout=layouts.find(e=>e.key===layoutRef)??layouts.find(e=>e.id===layoutRef);const[compare]=useState52(()=>createState(null));const[pane,setPane]=useState52("center");const[shape,setShape]=useState52(DEFAULT_SHAPE);const[shapeReady,setShapeReady]=useState52(false);const roleKey=ctx.member.roles.join(",");useEffect42(()=>{setShape(layout?DEFAULT_SHAPE:NO_LAYOUT_SHAPE);setShapeReady(!layout)},[layout?.key,views,roleKey]);const panes=PANES.filter(p=>p==="center"||shape[p]);const approvalPane=useRef42(shape.approvalPane);approvalPane.current=shape.approvalPane;const settledPane=useRef42(false);const choosePane=p=>{settledPane.current=true;setPane(p)};const revealApproval=()=>{const to=approvalPane.current;if(to&&window.matchMedia?.(NARROW).matches)choosePane(to)};useEffect42(()=>ctx.selection.subscribe(({value,source})=>{const fromStage=value?.kind==="stage"||value?.kind==="artifact"&&source==="@kanyun-ai-infra/band-stages";if(fromStage&&window.matchMedia?.(NARROW).matches){choosePane("center")}}),[ctx]);useEffect42(()=>{if(pane!=="center"&&!shape[pane])setPane("center")},[shape,pane]);const chatLayout2=layout?.id==="chat";const{data:versionless}=useCtxData6(ctx,async()=>chatLayout2?(await ctx.artifacts.list()).every(a=>a.latest===void 0)&&!(startOf(ctx)&&(await ctx.stages.list()).length===0):false,[chatLayout2],"version.*");const{data:attention}=useCtxData6(ctx,async()=>{if((await ctx.turns.state().catch(()=>void 0))?.current)return true;return(await ctx.threads.list({status:UNRESOLVED}).catch(()=>[])).length>0},[],THREAD_EVENTS2);const chatPaneKey=shape.chatPane;useEffect42(()=>{if(settledPane.current||!shapeReady)return;if(versionless===void 0||attention===void 0)return;settledPane.current=true;if(!window.matchMedia?.(NARROW).matches)return;if(versionless&&shape.left)setPane("left");else if(attention&&chatPaneKey)setPane(chatPaneKey)},[versionless,attention,shapeReady,shape.left,chatPaneKey]);const root=useRef42(null);useEffect42(()=>{const el=root.current;if(!el)return;const onReveal=e=>{if(!window.matchMedia?.(NARROW).matches)return;const region=e.target?.closest("[data-band-region]")?.getAttribute("data-band-region");const to=PANES.find(p=>p===region);if(to)flushSync(()=>choosePane(to))};el.addEventListener(REVEAL_EVENT,onReveal);return()=>el.removeEventListener(REVEAL_EVENT,onReveal)},[]);useEffect42(()=>{if(!thread)return;try{ctx.threads.open(thread)}catch(e){ctx.report(e)}},[ctx,thread]);const owner={projectId,place:preset=>{const placed=place(preset,views,ctx.member.roles,panels);const next=shapeOf(placed);queueMicrotask(()=>{setShape(s=>sameShape(s,next)?s:next);setShapeReady(true)});return placed},mountItem:(el,item,tab)=>mountItem(ctx,el,item,tab),mountMain:el=>reactMount(c=>jsx10(Main,{ctx:c,variant:"project",compare,onGateOpen:revealApproval}))(ctx,el,{}),mountDock:el=>reactMount(c=>jsx10(DockArea,{ctx:c}))(ctx,el,{})};return jsxs9("div",{ref:root,className:"band-project-page","data-band-page":"project","data-band-project":projectId,"data-layout":layout?.id??layoutRef,"data-mpane":pane,children:[jsx10(UpgradeBar,{ctx}),jsx10(UpgradeRecords,{ctx}),jsx10(ModelNeedsBar,{ctx}),jsxs9(ProjectHead,{ctx,children:[jsx10(OpenArtifactPage,{ctx}),jsx10(HeaderVersion,{ctx,compare}),!shape.approval&&jsx10(LockedMount,{ctx,name:SLOTS.approval,config:{compact:true},className:"band-project-head-approval"})]}),layout&&jsx10(PaneSwitch,{meta:layout.meta,panes,chatPane:shape.chatPane,pane,onPane:choosePane}),jsx10("div",{className:"band-project-body",children:layout?jsx10(Mount3,{className:"band-project-layout","data-band-layout":layout.id,mount:el=>ctx.slots.mount(el,SLOTS.layout,{key:layout.key,owner}),deps:[ctx,layout.key,panels,views,roleKey]}):jsxs9("p",{className:"band-project-missing","data-band-missing":layoutRef,children:["\u6CA1\u6709\u5E03\u5C40 ",layoutRef]})}),jsxs9("section",{className:"band-project-turnbar","aria-label":"\u56DE\u5408",children:[jsx10(LockedMount,{ctx,name:SLOTS.turn,className:"band-project-locked band-project-turn"}),jsx10(LockedMount,{ctx,name:SLOTS.queue})]}),jsx10(LockedMount,{ctx,name:SLOTS.comment,className:"band-project-comment-host"})]})}function useThreadParam(ctx,initial){const[thread,setThread]=useState52(initial);useEffect42(()=>ctx.app.subscribeRoute(r2=>{if(r2.page===`${PROJECT}/project`&&r2.params.project===ctx.project.id){setThread(r2.params.thread)}}),[ctx]);return thread}function ProjectHead({ctx,children}){return jsxs9(Fragment22,{children:[jsx10(TrialMark,{ctx}),jsxs9("div",{className:"band-project-head",children:[jsx10(Header,{ctx,page:"project"}),jsxs9("div",{className:"band-project-head-actions",children:[children,jsx10(SlotList,{ctx,name:SLOTS.headerActions,owner:{projectId:ctx.project.id}})]})]})]})}function Header({ctx,page,artifact,version}){const projectId=ctx.project.id;const owner={projectId,page,...artifact?{artifact}:{},...version?{version}:{}};const mountHeader=el=>ctx.slots.mount(el,SLOTS.header,{owner,fallback:target=>{const h=document.createElement("h1");h.className="band-project-title";h.textContent=projectId;target.appendChild(h);return()=>h.remove()}});return jsx10(Mount3,{className:"band-project-header",mount:el=>withNotices(el,ctx.project.notices,mountHeader,ctx.project.deleted),deps:[ctx,projectId,page,artifact?.id,artifact?.name,version?.id]})}var REVEAL_EVENT="band-reveal";var PANES=["left","center","right"];var DEFAULT_SHAPE={approval:true,left:true,right:true};var NO_LAYOUT_SHAPE={approval:false,left:false,right:false};function shapeOf(placed){const region=approvalRegion(placed);const chat=composerRegion(placed);return{approval:approvalPlaced(placed),...region==="left"||region==="right"?{approvalPane:region}:{},...chat==="left"||chat==="right"?{chatPane:chat}:{},left:placed.left.length>0,right:placed.right.length>0}}function sameShape(a,b){return a.approval===b.approval&&a.approvalPane===b.approvalPane&&a.chatPane===b.chatPane&&a.left===b.left&&a.right===b.right}var PANE_DEFAULTS={left:"\u5DE6\u680F",center:"\u4EA7\u7269",right:"\u53F3\u680F"};var CHAT_PANE="\u5BF9\u8BDD";function PaneSwitch({meta,panes,chatPane,pane,onPane}){const nameOf=k=>{if(k===chatPane)return CHAT_PANE;const label=meta[`pane-${k}`];return typeof label==="string"&&!(chatPane&&label===CHAT_PANE)?label:PANE_DEFAULTS[k]};return jsx10("div",{className:"band-project-mswitch",children:jsx10("div",{className:"band-project-seg",role:"group","aria-label":"\u5207\u6362\u680F",children:panes.map(k=>jsx10("button",{type:"button",className:"band-project-seg-option","aria-pressed":pane===k,onClick:()=>onPane(k),children:nameOf(k)},k))})})}function LockedMount({ctx,name,className,config}){return jsx10(Mount3,{className:className??"band-project-locked","data-band-slot":name,mount:el=>ctx.slots.mount(el,name,{owner:{projectId:ctx.project.id},...config?{config}:{}}),deps:[ctx,name,JSON.stringify(config??null)]})}function SlotList({ctx,name,owner}){const entries=useSlotEntries2(ctx,name);return jsx10(Fragment22,{children:entries.map(e=>jsx10(Mount3,{className:"band-project-slot-item","data-band-slot":name,"data-band-item":e.key,mount:el=>ctx.slots.mount(el,name,{key:e.key,owner}),deps:[ctx,e.key,owner.projectId]},e.key))})}function OpenArtifactPage({ctx}){const current=useCurrentVersion(ctx);const{data:artifacts}=useCtxData6(ctx,()=>ctx.artifacts.list(),[],"version.*");const artifact=artifacts?.find(a=>a.id===current?.artifactId);if(!artifact)return null;return jsxs9("button",{type:"button",className:"btn ghost sm band-project-open-artifact",title:`\u5355\u72EC\u6253\u5F00\u300C${artifact.name}\u300D\uFF0C\u5730\u5740\u53EF\u4EE5\u53D1\u7ED9\u522B\u7684\u6210\u5458`,onClick:()=>ctx.app.navigate({page:`${PROJECT}/artifact`,params:projectParams(ctx,{artifact:artifact.id})}),children:[jsx10("svg",{viewBox:"0 0 16 16",className:"band-project-icon","aria-hidden":"true",children:jsx10("path",{d:"M9.5 2.5h4v4M13.5 2.5L8 8M12 9.5v3a1 1 0 0 1-1 1H3.5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h3"})}),"\u4EA7\u7269\u9875"]})}function HeaderVersion({ctx,compare,onVersionChange,showName=true}){const current=useCurrentVersion(ctx);const artifactId=current?.artifactId;const{data:artifacts}=useCtxData6(ctx,()=>ctx.artifacts.list(),[],"version.*");const artifactName=showName&&artifacts&&artifacts.length>1?artifacts.find(a=>a.id===artifactId)?.name??"":"";const outer=useRef42(onVersionChange);outer.current=onVersionChange;if(!artifactId)return null;return jsx10(Mount3,{className:"band-project-head-version","data-band-slot":SLOTS.version,mount:el=>ctx.slots.mount(el,SLOTS.version,{owner:{projectId:ctx.project.id,artifactId,artifactName,onVersionChange:versionId=>{if(ctx.selection.get()?.kind==="stage")ctx.selection.set({kind:"artifact",artifactId});outer.current?.(versionId)},...compare?{compare}:{}},config:{compact:true}}),deps:[ctx,artifactId,artifactName,compare]})}function ViewerTitle({name}){return jsx10("h2",{className:"band-project-viewer-title","data-band-viewer-title":"",children:name})}function reviewTabs(artifacts,pickStages){const tabs=[];const seen=new Set;for(const a of artifacts){if(seen.has(a.id))continue;const group=a.stage&&pickStages.has(a.stage)?candidateGroup(artifacts,a):null;if(!group){tabs.push({label:a.name,open:a,members:[a]});continue}for(const g of group)seen.add(g.id);const first=group[0]??a;tabs.push({label:candidateGroupLabel(first),open:pickedOf(group)??first,members:group})}return tabs}var REVIEW_SEG="band-project-seg band-project-review-seg";var NARROW="(max-width: 860px)";function useNarrow(){return useSyncExternalStore2(fn=>{const m=window.matchMedia?.(NARROW);m?.addEventListener?.("change",fn);return()=>m?.removeEventListener?.("change",fn)},()=>window.matchMedia?.(NARROW).matches??false)}var SWIPE_PX=24;function ReviewDrawer({ctx,artifactId,counted,open,onOpen,children,dock:dock2,onHeight}){const bodyId=useId3();const handle=useRef42(null);const start=useRef42(null);const swiped=useRef42(false);const{data:list}=useCtxData6(ctx,()=>counted&&artifactId?ctx.threads.list({artifactId}):Promise.resolve(void 0),[artifactId,counted],THREAD_EVENTS2);const count=list?.filter(t=>t.status!=="resolved").length;const section=useRef42(null);const content=useRef42(null);const toggle=next=>{const active=content.current?.ownerDocument.activeElement;if(!next&&active&&content.current?.contains(active))handle.current?.focus();onOpen(next)};const toggleRef=useRef42(toggle);toggleRef.current=toggle;const heightRef=useRef42(onHeight);heightRef.current=onHeight;useEffect42(()=>{const el=section.current;if(!open||!el||typeof ResizeObserver==="undefined")return;const observer=new ResizeObserver(()=>heightRef.current?.(Math.round(el.getBoundingClientRect().height)));observer.observe(el);return()=>{observer.disconnect();heightRef.current?.(void 0)}},[open]);useEffect42(()=>{if(!open)return;const onDrawerKey=withImeGuard4(e=>{if(e.key!=="Escape"||e.defaultPrevented)return;if(!(e.target instanceof Node)||!section.current?.contains(e.target))return;e.preventDefault();toggleRef.current(false);handle.current?.focus()});window.addEventListener("keydown",onDrawerKey);return()=>window.removeEventListener("keydown",onDrawerKey)},[open]);return jsxs9("section",{ref:section,className:"band-project-review-drawer","data-band-drawer":open?"open":"collapsed","aria-label":"\u610F\u89C1\u4E0E\u6279\u51C6",onFocus:e=>{if(open||e.target===handle.current)return;onOpen(true)},children:[jsxs9("button",{ref:handle,type:"button",className:"band-project-review-handle","aria-expanded":open,"aria-controls":bodyId,onPointerDown:e=>{start.current=e.clientY;swiped.current=false;e.currentTarget.setPointerCapture?.(e.pointerId)},onPointerCancel:()=>{start.current=null},onPointerUp:e=>{const from=start.current;start.current=null;if(from===null)return;const dy=e.clientY-from;if(Math.abs(dy)<SWIPE_PX)return;swiped.current=true;toggle(dy<0)},onClick:()=>{if(swiped.current){swiped.current=false;return}toggle(!open)},children:[jsx10("span",{className:"band-project-review-grab","aria-hidden":"true"}),jsxs9("b",{children:[count===void 0?"\u610F\u89C1":`\u610F\u89C1 ${count}`,jsxs9("span",{className:"band-project-review-hint",children:[" \xB7 ",open?"\u4E0B\u6ED1\u6536\u8D77":"\u4E0A\u6ED1\u67E5\u770B"]})]})]}),jsxs9("div",{ref:content,id:bodyId,className:"band-project-review-drawer-content",children:[jsx10("div",{className:"band-project-review-drawer-body",children}),dock2&&jsx10("div",{className:"band-project-review-dock",children:dock2})]})]})}var REVIEW_THREADS_CONFIG={openOnly:true};var FIRST_SCREEN_GAP_PX=12;function useFirstScreen(page,on){const[px2,setPx]=useState52();useLayoutEffect6(()=>{const root=page.current;const win=root?.ownerDocument.defaultView;if(!on||!root||!win||typeof ResizeObserver==="undefined"){setPx(void 0);return}const measure=()=>{const viewer=root.querySelector(".band-project-review-viewer");if(!viewer)return;const scrolled=root.ownerDocument.scrollingElement?.scrollTop??0;const room=Math.floor(win.innerHeight-(viewer.getBoundingClientRect().top+scrolled)-FIRST_SCREEN_GAP_PX);setPx(old=>room<=0?void 0:old===room?old:room)};const measureRail=()=>{const cols=root.querySelector(".band-project-review-cols");if(!cols)return;const sticky=Number.parseFloat(win.getComputedStyle(root).getPropertyValue("--band-review-rail-top"));if(!Number.isFinite(sticky))return;const top=Math.max(sticky,cols.getBoundingClientRect().top);const room=Math.floor(win.innerHeight-top-FIRST_SCREEN_GAP_PX);if(room>0)root.style.setProperty("--band-review-rail-h",`${room}px`)};const measureAll=()=>{measure();measureRail()};measureAll();const observer=new ResizeObserver(measureAll);observer.observe(root);win.addEventListener("resize",measureAll);win.addEventListener("scroll",measureRail,{passive:true});return()=>{observer.disconnect();win.removeEventListener("resize",measureAll);win.removeEventListener("scroll",measureRail);root.style.removeProperty("--band-review-rail-h")}},[page,on]);return px2}function ReviewPage({ctx}){const projectId=ctx.project.id;const current=useCurrentVersion(ctx);const{data:artifacts}=useCtxData6(ctx,()=>ctx.artifacts.list(),[],"version.*");const panels=useSlotEntries2(ctx,SLOTS.panels);const threads=resolvePanel2(panels,"threads");const threadsConfig=threads&&checkConfig(threads.config,REVIEW_THREADS_CONFIG).length===0?REVIEW_THREADS_CONFIG:void 0;const openDeclared=threadsConfig!==void 0;const highlightDeclared=!!threads&&checkConfig(threads.config,{highlightCurrent:true}).length===0;const wideThreadsConfig=useWideThreadsConfig(openDeclared,highlightDeclared);const artifact=artifacts?.find(a=>a.id===current?.artifactId);const fanned=[...new Set((artifacts??[]).flatMap(a=>a.stage&&a.key!==void 0?[a.stage]:[]))];const{data:pickStages}=useCtxData6(ctx,async()=>{const states=await Promise.all(fanned.map(st=>ctx.gate.state(st).catch(()=>null)));return new Set(states.flatMap(g=>g?.per==="pick"?[g.stage]:[]))},[fanned.join(" ")],["gate.*","stage.*"],{keepPrevious:true});const reviewed=artifacts?.filter(a=>a.role!=="process");const tabs=reviewed?reviewTabs(reviewed,pickStages??new Set):[];const narrow=useNarrow();const[drawer,setDrawer]=useState52(false);const[drawerHeight,setDrawerHeight]=useState52();const page=useRef42(null);const firstScreen=useFirstScreen(page,!narrow);useEffect42(()=>{if(!narrow||!drawer)return;const viewer=page.current?.querySelector(".band-project-review-viewer");const scroller=page.current?.ownerDocument.scrollingElement;if(!viewer||!scroller)return;scroller.scrollTop+=viewer.getBoundingClientRect().top-8},[narrow,drawer]);const panelConfig2=narrow?threadsConfig:wideThreadsConfig;const threadsPanel=threads?jsx10(Mount3,{className:"band-project-item","data-band-item":threads.key,mount:el=>ctx.slots.mount(el,SLOTS.panels,{key:threads.key,owner:{projectId},...panelConfig2?{config:panelConfig2}:{}}),deps:[ctx,threads.key,panelConfig2]}):jsx10("p",{className:"band-project-missing","data-band-missing":"threads",children:"\u8FD9\u4E2A\u9762\u677F\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF08threads\uFF09"});const approval=jsx10("div",{className:"band-project-review-actions",children:jsx10(LockedMount,{ctx,name:SLOTS.approval})});const links=jsx10("div",{className:"band-project-review-links",children:jsx10("button",{type:"button",className:"btn ghost sm",onClick:()=>ctx.app.navigate({page:`${PROJECT}/project`,params:projectParams(ctx)}),children:"\u6253\u5F00\u5B8C\u6574\u9879\u76EE"})});return jsxs9("main",{ref:page,className:"band-project-review","data-band-page":"review","data-band-project":projectId,"data-drawer":narrow?drawer?"open":"collapsed":void 0,"data-comment-inline":!narrow?"":void 0,"data-first-screen":!narrow&&firstScreen!==void 0?"":void 0,style:narrow&&drawerHeight!==void 0?{"--band-review-drawer-h":`${drawerHeight}px`}:!narrow&&firstScreen!==void 0?{"--band-review-first-screen":`${firstScreen}px`}:void 0,children:[jsxs9("div",{className:"band-project-review-head",children:[jsx10(Header,{ctx,page:"review",artifact:artifact&&{id:artifact.id,name:artifact.name},version:current}),jsx10("div",{className:"band-project-head-actions",children:jsx10(HeaderVersion,{ctx,showName:false})})]}),tabs.length>1&&jsx10("div",{className:REVIEW_SEG,role:"group","aria-label":"\u5207\u6362\u4EA7\u7269",children:tabs.map(tab=>jsx10("button",{type:"button",className:"band-project-seg-option","aria-pressed":tab.members.some(a=>a.id===current?.artifactId),onClick:()=>ctx.selection.set({kind:"artifact",artifactId:tab.open.id}),children:tab.label},tab.open.id))}),narrow?jsxs9(Fragment22,{children:[jsx10(Main,{ctx,variant:"review"}),links,jsxs9(ReviewDrawer,{ctx,artifactId:artifact?.id,counted:threadsConfig!==void 0,open:drawer,onOpen:setDrawer,onHeight:setDrawerHeight,dock:jsx10(LockedMount,{ctx,name:SLOTS.comment,className:"band-project-review-composer"}),children:[approval,threadsPanel]})]}):jsxs9("div",{className:"band-project-review-cols",children:[jsxs9("div",{className:"band-project-review-main",children:[jsx10(Main,{ctx,variant:"review"}),links]}),jsxs9("aside",{className:"band-project-review-rail","aria-label":"\u6279\u51C6\u4E0E\u610F\u89C1",children:[approval,jsx10("div",{className:"band-project-review-threads",children:threadsPanel}),jsx10("div",{className:"band-project-review-compose",children:jsx10(LockedMount,{ctx,name:SLOTS.comment,className:"band-project-review-composer"})})]})]})]})}function ArtifactPage({ctx,artifact:initial}){const projectId=ctx.project.id;const artifactId=useArtifactParam(ctx,initial);const member=ctx.project.access==="member";const readThreads=ctx.project.canReadThreads;const{data:artifacts,error}=useCtxData6(ctx,()=>ctx.artifacts.list(),[],["version.*","gate.*","stage.*"]);const artifact=artifacts?.find(a=>a.id===artifactId);const current=useCurrentVersion(ctx);const versionCount=useVersionCount(ctx,artifact?.id);const[pane,setPane]=useState52("center");const[compare]=useState52(()=>createState(null));const found=artifact?.id;useEffect42(()=>{if(!found)return;ctx.selection.set({kind:"artifact",artifactId:found});let timer;const off=ctx.selection.subscribe(({value})=>{if(value?.kind!=="artifact"||value.artifactId===found)return;const next=value.artifactId;clearTimeout(timer);timer=setTimeout(()=>ctx.app.navigate({page:`${PROJECT}/artifact`,params:projectParams(ctx,{artifact:next})}))});return()=>{clearTimeout(timer);off()}},[ctx,found]);const shown=current?.artifactId===artifact?.id?current:null;const side=!!artifact&&artifactCaps({access:ctx.project.access,canReadThreads:readThreads,canSubmit:false,isLatest:true,editBinding:false,process:artifact?.role==="process"}).threads;const state=error?{kind:"error",message:error}:!artifacts?{kind:"loading"}:!artifact?{kind:"missing"}:!artifact.latest?{kind:"empty"}:null;return jsxs9("div",{className:"band-project-page band-project-artifact","data-band-page":"artifact","data-band-project":projectId,"data-mpane":pane,children:[jsx10(UpgradeRefresh,{ctx}),jsxs9("div",{className:"band-project-head",children:[jsx10(Header,{ctx,page:"artifact",artifact:artifact&&{id:artifact.id,name:artifact.name},version:shown}),jsx10("div",{className:"band-project-head-actions",children:jsx10(HeaderVersion,{ctx,...member?{compare}:{}})})]}),!member&&jsxs9("p",{className:"band-project-readonly",role:"note",children:[jsx10(EyeIcon,{}),jsxs9("span",{children:[jsx10("b",{children:"\u53EA\u8BFB"})," \xB7 ",readonlyNote(readThreads,versionCount)]})]}),state?jsx10(ArtifactState,{state}):jsxs9(Fragment22,{children:[side&&jsx10("div",{className:"band-project-mswitch",children:jsx10("div",{className:"band-project-seg",role:"group","aria-label":"\u5207\u6362\u680F",children:["center","right"].map(k=>jsx10("button",{type:"button",className:"band-project-seg-option","aria-pressed":pane===k,onClick:()=>setPane(k),children:k==="center"?"\u4EA7\u7269":"\u610F\u89C1"},k))})}),jsxs9("div",{className:"band-project-artifact-body",children:[jsx10("section",{className:"band-project-artifact-main","aria-label":artifact?.name??"\u4EA7\u7269",children:shown&&jsx10(Main,{ctx,variant:"artifact",...member?{compare}:{}})}),side&&jsx10(ArtifactSide,{ctx})]})]}),side&&!state&&jsx10(LockedMount,{ctx,name:SLOTS.comment,className:"band-project-comment-host"})]})}function LibraryArtifactPreview({ctx,owner}){const request=owner.request;const artifactId=request.artifactId??"";const versionId=request.versionId;const{data,error}=useCtxData6(ctx,async()=>{const version=versionId?(await ctx.version.list(artifactId)).find(v=>v.id===versionId):void 0;return{version}},[artifactId,versionId]);if(error)return jsxs9(ErrorNote4,{children:["\u8FD9\u4E00\u7248\u6CA1\u80FD\u6253\u5F00\uFF1A",error]});if(!data)return jsx10("output",{children:"\u6B63\u5728\u6253\u5F00\u4EA7\u7269\u2026"});return jsx10(Mount3,{className:"band-project-dialog-root",mount:el=>ctx.slots.mount(el,SLOTS.dialog,{owner,focus:{selection:{kind:"artifact",artifactId},...data.version?{version:data.version}:{}}}),deps:[ctx,artifactId,versionId,data.version]})}function ArtifactDialogView({ctx,owner}){return"materialVersion"in owner.request?jsx10(MaterialDialog,{ctx,request:owner.request.materialVersion,close:owner.close}):jsx10(StageArtifactDialogView,{ctx,owner:{...owner,request:owner.request}})}function StageArtifactDialogView({ctx,owner}){const{request,close}=owner;const members=useMembers2(ctx);const selected=useSelectedArtifact(ctx)??request.artifactId;const{data:artifacts,error}=useCtxData6(ctx,()=>ctx.artifacts.list(),[],["version.*","gate.*","stage.*"]);const artifact=artifacts?.find(a=>a.id===selected);const current=useCurrentVersion(ctx);const shown=current?.artifactId===artifact?.id?current:null;const[pane,setPane]=useState52("center");const side=!!artifact&&artifactCaps({access:ctx.project.access,canReadThreads:ctx.project.canReadThreads,canSubmit:ctx.member.can("submit-change"),isLatest:true,editBinding:false,process:artifact?.role==="process"}).threads;const state=error?{kind:"error",message:error}:!artifacts?{kind:"loading"}:!artifact?{kind:"missing"}:!artifact.latest?{kind:"empty"}:null;const frame=useRef42(null);const[compare]=useState52(()=>createState(null));const compareOk=ctx.project.access==="member";const titleId=useId3();useEffect42(()=>{const d=frame.current?.closest("dialog");if(!d)return;d.removeAttribute("aria-label");d.setAttribute("aria-labelledby",titleId)},[titleId]);const ready=state===null;useEffect42(()=>{if(!ready)return;const f=frame.current;const active=document.activeElement;const inChrome=!active||active===document.body||!f?.contains(active)||!!active.closest(".band-project-dialog-head");if(inChrome)f?.querySelector(".band-project-dialog-main")?.focus()},[ready,artifact?.id]);const threadOpened=useRef42(false);useEffect42(()=>{if(!request.threadId||!shown||threadOpened.current)return;threadOpened.current=true;try{ctx.threads.open(request.threadId)}catch(e){ctx.report(e)}},[ctx,request.threadId,shown]);const href=artifactPageHref(ctx,selected);const[copied,setCopied]=useState52(null);useEffect42(()=>{if(!copied)return;const t=setTimeout(()=>setCopied(null),2e3);return()=>clearTimeout(t)},[copied]);const copyStatus=copied==="ok"?"\u5DF2\u590D\u5236":copied==="failed"?"\u6CA1\u590D\u5236\u4E0A":"";const copyLabel=copyStatus||"\u590D\u5236\u94FE\u63A5";const copy=()=>{const url=new URL(href,window.location.href).toString();const write=navigator.clipboard?.writeText(url);if(!write)return setCopied("failed");write.then(()=>setCopied("ok"),()=>setCopied("failed"))};return jsxs9("div",{className:"band-project-dialog-frame","data-band-preview-chrome":"",ref:frame,"data-mpane":pane,children:[jsxs9("header",{className:"band-project-dialog-head",children:[jsx10("h2",{className:"band-project-dialog-title",id:titleId,children:artifact?.name??(state?.kind==="loading"?"\u6B63\u5728\u6253\u5F00\u2026":"\u4EA7\u7269")}),jsxs9("span",{className:"band-project-dialog-context",children:[ctx.project.name,shown?` \xB7 ${versionLabel(shown)}`:""]}),artifact?.role==="process"&&jsx10("span",{className:"chip plain band-project-dialog-role",title:`${agentLabel(members,ctx.project.agent)} \u505A\u7684\u4E2D\u95F4\u7A3F\uFF1A\u80FD\u770B\u80FD\u641C\uFF0C\u4E0D\u8BC4\u5BA1\u3001\u4E0D\u80FD\u63D0\u610F\u89C1\uFF1B\u8981\u6539\u5B83\uFF0C\u5230\u4EA7\u7269\u6216\u5BF9\u8BDD\u91CC\u8BF4`,children:"\u8FC7\u7A0B\u6587\u6863"}),jsx10("button",{type:"button",className:"band-project-dialog-close","aria-label":"\u5173\u95ED",title:"\u5173\u95ED\uFF08Esc\uFF09",onClick:close,children:jsx10(CloseIcon,{})}),jsxs9("div",{className:"band-project-dialog-actions",children:[jsx10(HeaderVersion,{ctx,...compareOk?{compare}:{},onVersionChange:owner.onVersionChange}),artifact&&jsxs9(Fragment22,{children:[jsx10("a",{className:"btn ghost sm",href:projectPath(ctx.project),onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)return;e.preventDefault();ctx.selection.set({kind:"artifact",artifactId:selected});ctx.app.navigate({page:`${PROJECT}/project`,params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}})},children:"\u53BB\u9879\u76EE\u91CC\u770B"}),jsxs9("a",{className:"btn ghost sm",href,target:"_blank",rel:"noreferrer noopener","aria-label":"\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00",title:"\u5355\u72EC\u6253\u5F00\u8FD9\u4EFD\u4EA7\u7269\uFF0C\u5730\u5740\u53EF\u4EE5\u53D1\u7ED9\u522B\u7684\u6210\u5458",children:[jsx10("svg",{viewBox:"0 0 16 16",className:"band-project-icon","aria-hidden":"true",children:jsx10("path",{d:"M9.5 2.5h4v4M13.5 2.5L8 8M12 9.5v3a1 1 0 0 1-1 1H3.5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h3"})}),jsx10("span",{className:"band-project-dialog-label",children:"\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00"})]}),jsxs9("button",{type:"button",className:"btn ghost sm",onClick:copy,"aria-label":"\u590D\u5236\u94FE\u63A5",title:"\u590D\u5236\u8FD9\u4EFD\u4EA7\u7269\u7684\u4EA7\u7269\u9875\u5730\u5740",children:[jsx10("svg",{viewBox:"0 0 16 16",className:"band-project-icon","aria-hidden":"true","data-state":copied??"idle",children:jsx10("path",{d:copied==="ok"?"M3 8.5l3.2 3L13 4.5":copied==="failed"?"M8 2.5l6 10.5H2zM8 6.5v3M8 11.2v.1":"M6.5 9.5l3-3M7 4.5l1.2-1.2a2.5 2.5 0 0 1 3.5 3.5L10.5 8M9 11.5l-1.2 1.2a2.5 2.5 0 0 1-3.5-3.5L5.5 8"})}),jsx10("span",{className:"band-project-dialog-label","aria-hidden":"true",children:copyLabel}),jsx10("output",{className:"sr-only","aria-live":"polite",children:copyStatus})]})]})]})]}),state?jsx10("div",{className:"band-project-dialog-state",children:jsx10(ArtifactState,{state})}):jsxs9(Fragment22,{children:[side&&jsx10("div",{className:"band-project-mswitch",children:jsx10("div",{className:"band-project-seg",role:"group","aria-label":"\u5207\u6362\u680F",children:["center","right"].map(k=>jsx10("button",{type:"button",className:"band-project-seg-option","aria-pressed":pane===k,onClick:()=>setPane(k),children:k==="center"?"\u5185\u5BB9":"\u610F\u89C1"},k))})}),jsxs9("div",{className:`band-project-dialog-body${side?"":" is-solo"}`,children:[jsx10("section",{className:"band-project-dialog-main","aria-label":artifact?.name??"\u4EA7\u7269",tabIndex:-1,children:shown&&jsx10(Main,{ctx,variant:"artifact",...compareOk?{compare}:{}})}),side&&jsx10(ArtifactSide,{ctx})]})]}),side&&!state&&jsx10(LockedMount,{ctx,name:SLOTS.comment,className:"band-project-comment-host"})]})}function useSelectedArtifact(ctx){const read=()=>{const v=ctx.selection.get();return v?.kind==="artifact"?v.artifactId:void 0};const[id,setId]=useState52(read);useEffect42(()=>{setId(read());return ctx.selection.subscribe(({value})=>{if(value?.kind==="artifact")setId(value.artifactId)})},[ctx]);return id}function artifactPageHref(ctx,artifactId){return projectPath(ctx.project,"a",artifactId)}function CloseIcon(){return jsx10("svg",{viewBox:"0 0 16 16",className:"band-project-icon","aria-hidden":"true",children:jsx10("path",{d:"M4 4l8 8M12 4l-8 8"})})}function projectParams(ctx,extra={}){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},...extra}}function ArtifactState({state}){switch(state.kind){case"loading":return jsxs9("output",{className:"band-project-state",children:[jsx10("span",{className:"band-project-state-spin","aria-hidden":"true"}),"\u6B63\u5728\u53D6\u8FD9\u4EFD\u4EA7\u7269"]});case"error":return jsxs9("div",{className:"band-project-state",role:"alert",children:[jsx10("b",{children:"\u8FD9\u4EFD\u4EA7\u7269\u6253\u4E0D\u5F00"}),jsx10("span",{children:state.message})]});case"missing":return jsxs9("output",{className:"band-project-state",children:[jsx10("b",{children:"\u8FD9\u4E2A\u9879\u76EE\u91CC\u6CA1\u6709\u8FD9\u4EFD\u4EA7\u7269"}),jsx10("span",{children:"\u94FE\u63A5\u53EF\u80FD\u5199\u9519\u4E86\uFF0C\u6216\u8005\u4EA7\u7269\u5C5E\u4E8E\u522B\u7684\u9879\u76EE\u3002"})]});case"empty":return jsxs9("output",{className:"band-project-state",children:[jsx10("b",{children:"\u8FD8\u6CA1\u6709\u7248\u672C"}),jsx10("span",{children:"\u8FD9\u4EFD\u4EA7\u7269\u8FD8\u6CA1\u4EA4\u4ED8\u7B2C\u4E00\u7248\u3002"})]})}}function FirstVersion({ctx}){const turn=useCtxData6(ctx,()=>ctx.turns.state(),[],THREAD_EVENTS2);const stages=useCtxData6(ctx,()=>ctx.stages.list(),[],STAGE_EVENTS2);const members=useMembers2(ctx);const start=startOf(ctx);const doing=turn.data?.current;const last=turn.data?.last;const end=firstTurnEnd(turn.data);const queued=(turn.data?.queue.length??0)>0;if(start&&stages.data?.length===0)return jsx10(StartProject,{ctx,start,onStarted:()=>{stages.reload();turn.reload()}});if(turn.data===void 0&&!turn.error||start&&stages.data===void 0&&!stages.error)return null;return doing?jsxs9("output",{className:"band-project-state",children:[jsx10(Rehearsal,{}),jsxs9("b",{children:[memberName2(members,doing.agent)," \u6B63\u5728\u505A\u7B2C\u4E00\u7248"]}),jsx10(WaitingFor,{declared:doing.stage===void 0?void 0:stages.data?.find(x=>x.stage===doing.stage)?.estimateMinutes,usualMs:doing.usualMs,notifiesNobody:doing.deliveryNotifiesNobody===true})]}):last&&queued?jsxs9("output",{className:"band-project-state",children:[jsx10("b",{children:"\u6B63\u5728\u91CD\u65B0\u5F00\u59CB\u2026"}),jsxs9("span",{children:[agentLabel(members,ctx.project.agent)," \u9A6C\u4E0A\u63A5\u7740\u505A\u7B2C\u4E00\u7248\u3002"]})]}):end?jsx10("output",{className:"band-project-state",children:jsx10(TurnEnded,{ctx,end,agent:agentLabel(members,ctx.project.agent)})}):jsxs9("output",{className:"band-project-state",children:[jsx10("b",{children:"\u8FD8\u6CA1\u6709\u7248\u672C"}),jsxs9("span",{children:["\u4EA4\u7ED9 ",agentLabel(members,ctx.project.agent)," \u4E4B\u540E\uFF0C\u7B2C\u4E00\u7248\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002"]})]})}function WaitingFor({declared,usualMs,notifiesNobody}){const text=estimateMinutesText(declared,usualMs);return jsxs9(Fragment22,{children:[text&&jsxs9("span",{children:[text,"\u3002"]}),jsx10("span",{children:notifiesNobody?"\u505A\u597D\u4E86\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002":"\u53EF\u4EE5\u5148\u53BB\u5FD9\uFF0C\u505A\u597D\u4E86\u4F1A\u5728\u300C\u5F85\u6211\u5904\u7406\u300D\u63D0\u9192\u4F60\u3002"})]})}function TurnEnded({ctx,end,agent}){return jsxs9(Fragment22,{children:[jsx10("b",{children:end.how==="stopped"?stoppedTurnText(end.number):`${agent} \u6CA1\u80FD\u505A\u51FA\u7B2C\u4E00\u7248`}),end.how==="failed"&&end.reason&&jsx10("span",{children:end.reason}),end.retryStage&&jsxs9("span",{className:"band-project-state-row",children:["\u70B9\u300C\u91CD\u8BD5\u300D\u518D\u505A\u4E00\u6B21",jsx10(Retry,{ctx,stage:end.retryStage})]})]})}function ArtifactSide({ctx}){const projectId=ctx.project.id;const panels=useSlotEntries2(ctx,SLOTS.panels);const items=[{ref:"threads",title:"\u610F\u89C1",entry:resolvePanel2(panels,"threads")},{ref:"activity",title:"\u52A8\u6001",entry:resolvePanel2(panels,"activity")}];const[active,setActive]=useState52(0);const[counts,setCounts]=useState52({});const tabs=useRef42([]);const base=useId3();const setCount=useMemo2(()=>{const make=ref=>n=>setCounts(c=>c[ref]===n?c:{...c,[ref]:n});return{threads:make("threads"),activity:make("activity")}},[]);const go=i=>{const to=(i+items.length)%items.length;setActive(to);tabs.current[to]?.focus()};const onTabKey=withImeGuard4(e=>{const move={ArrowRight:active+1,ArrowLeft:active-1,Home:0,End:items.length-1};const to=move[e.key];if(to===void 0)return;e.preventDefault();go(to)});return jsxs9("aside",{className:"band-project-artifact-side","aria-label":"\u8FD9\u4EFD\u4EA7\u7269\u7684\u610F\u89C1",children:[jsx10("div",{className:"tabs plain band-project-artifact-tabs",role:"tablist","aria-label":"\u610F\u89C1\u4E0E\u52A8\u6001",children:items.map((x,i)=>{const count=counts[x.ref];return jsxs9("button",{ref:el=>{tabs.current[i]=el},type:"button",role:"tab",id:`${base}-tab-${x.ref}`,"aria-controls":`${base}-panel-${x.ref}`,"aria-selected":i===active,tabIndex:i===active?0:-1,onClick:()=>setActive(i),onKeyDown:onTabKey,children:[x.title,typeof count==="number"&&count>0&&jsxs9("span",{className:"band-project-artifact-count",children:[" ",count]})]},x.ref)})}),items.map((x,i)=>jsx10("div",{className:"band-project-artifact-tabpanel",role:"tabpanel",id:`${base}-panel-${x.ref}`,"aria-labelledby":`${base}-tab-${x.ref}`,hidden:i!==active,children:x.entry?jsx10(Mount3,{className:"band-project-item","data-band-item":x.entry.key,mount:el=>ctx.slots.mount(el,SLOTS.panels,{key:x.entry?.key??"",owner:{projectId,tab:{setCount:setCount[x.ref]}}}),deps:[ctx,x.entry.key]}):jsxs9("p",{className:"band-project-missing","data-band-missing":x.ref,children:["\u8FD9\u4E2A\u9762\u677F\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF08",x.ref,"\uFF09"]})},x.ref))]})}function EyeIcon(){return jsxs9("svg",{viewBox:"0 0 16 16",className:"band-project-icon","aria-hidden":"true",children:[jsx10("path",{d:"M2 8s2.2-4.5 6-4.5S14 8 14 8s-2.2 4.5-6 4.5S2 8 2 8z"}),jsx10("circle",{cx:"8",cy:"8",r:"1.8"})]})}function useArtifactParam(ctx,initial){const[artifact,setArtifact]=useState52(initial);useEffect42(()=>ctx.app.subscribeRoute(r2=>{if(r2.page===`${PROJECT}/artifact`&&r2.params.project===ctx.project.id){setArtifact(r2.params.artifact??"")}}),[ctx]);return artifact}function mountItem(ctx,el,item,tab){const owner={projectId:ctx.project.id};switch(item.kind){case"panel":return ctx.slots.mount(el,SLOTS.panels,{key:item.key,owner:tab?{...owner,tab}:owner,...item.config?{config:item.config}:{}});case"locked":return ctx.slots.mount(el,`${PROJECT}/${item.slot}`,{owner,...item.config?{config:item.config}:{}});case"missing":{return mountMissingPlugin(ctx,el,void 0,item.ref)}}}function useLatest(ctx,artifactId){const{data}=useCtxData6(ctx,async()=>artifactId?{artifactId,latest:(await ctx.version.list(artifactId)).at(-1)??null}:void 0,[artifactId],"version.*");return data&&data.artifactId===artifactId?data.latest:void 0}function useVersionCount(ctx,artifactId){const{data}=useCtxData6(ctx,async()=>artifactId?{artifactId,count:(await ctx.version.list(artifactId)).length}:void 0,[artifactId],"version.*");return data&&data.artifactId===artifactId?data.count:void 0}function isLatestVersion(shown,latest){if(latest===void 0)return void 0;if(latest===null)return true;return shown.id===latest.id||shown.createdAt>latest.createdAt}function useCurrentVersion(ctx){const[v,setV]=useState52(()=>ctx.version.current());useEffect42(()=>{setV(ctx.version.current());return ctx.version.subscribe(setV)},[ctx]);return v}function Main({ctx,variant,compare,onGateOpen}){const review=variant==="review";const current=useCurrentVersion(ctx);const stageSel=useStageSelection(ctx);const{data:stages}=useCtxData6(ctx,()=>ctx.stages.list(),[],STAGE_EVENTS2);const selected=variant==="project"&&stageSel?stages?.find(s=>s.stage===stageSel):void 0;const replay=selected&&!ACTIVE_STAGE.has(selected.status)?selected:void 0;const{data:artifacts}=useCtxData6(ctx,()=>ctx.artifacts.list(),[],["version.*","gate.*","stage.*"]);const currentArtifact=artifacts?.find(a=>a.id===current?.artifactId);const group=variant==="artifact"?null:candidateGroup(artifacts??[],currentArtifact);const pickStage=group?currentArtifact?.stage:void 0;const{data:gate}=useCtxData6(ctx,async()=>pickStage?await ctx.gate.state(pickStage).catch(()=>null):null,[pickStage],["gate.*","stage.*","version.*"]);const pick=group&&gate?.per==="pick"&&gate.stage===pickStage?{group,gate}:null;const[gridChoice,setGridChoice]=useState52(null);const pickGateStage=pick?.gate.stage;const pickInReview=pick?.gate.status==="in_review";const gridOn=pick&&!review?gridChoice?.stage===pick.gate.stage?gridChoice.on:pickInReview:false;useEffect42(()=>{if(pickGateStage&&gridChoice?.stage!==pickGateStage){setGridChoice({stage:pickGateStage,on:pickInReview})}},[pickGateStage]);const latest=useLatest(ctx,currentArtifact?.id);const known=current?isLatestVersion(current,latest):void 0;const comparable=!!compare&&!gridOn;const[fallback]=useState52(()=>createState(null));const compareState=compare??fallback;const pair=useStateOf(compareState);const settled=useRef42(null);if(!current)settled.current=null;else if(currentArtifact&&known!==void 0){settled.current={shown:current,artifact:currentArtifact,isLatest:known}}const left=comparable?activePair(pair,settled.current?.shown??null)?.against:void 0;const compareEl=useRef42(null);useEffect42(()=>retainViewerPageKeys(document),[]);useEffect42(()=>{if(!left)return;const onKey=withImeGuard4(e=>{if(e.key!=="Escape"||e.defaultPrevented)return;const t=e.target instanceof Element?e.target:null;const pop=t?.closest('dialog, [role="dialog"]');if(pop&&!pop.hasAttribute("data-band-layer"))return;if((compareEl.current?.closest("[data-band-layer]")??null)!==topLayerElement())return;e.preventDefault();compareState.set(null)});document.addEventListener("keydown",onKey);return()=>document.removeEventListener("keydown",onKey)},[left,compareState]);useEffect42(()=>{if(gridOn)compareState.set(null)},[gridOn,compareState]);if(replay&&stages){return jsx10(StageReplay,{ctx,stage:replay,stages,artifacts},replay.stage)}if(!settled.current){const none=!current&&artifacts?.every(a=>a.latest===void 0);return none?jsx10(FirstVersion,{ctx}):null}const{shown,artifact,isLatest}=settled.current;const projectId=ctx.project.id;const awaiting=!review?stages?.find(s=>s.awaitingFile!==void 0&&s.stage===artifact.stage):void 0;if(awaiting?.awaitingFile){return jsx10(AwaitingFile,{ctx,stage:awaiting,artifact,name:awaiting.name??awaiting.stage})}const binding=ctx.project.views.artifactTypes?.[artifact.artifactType];const edit=!review&&artifactCaps({access:ctx.project.access,canReadThreads:ctx.project.canReadThreads,canSubmit:ctx.member.can("submit-change"),isLatest,editBinding:binding?.edit===true,process:artifact.role==="process"}).edit;const live=!review&&binding?.live==="preview"&&isLatest&&ctx.project.access==="member";const titled=variant==="project"&&(artifacts?.length??0)>1;const owner={projectId,artifactId:artifact.id,artifactType:artifact.artifactType,versionId:shown.id};const viewer=(v,opts)=>el=>mountArtifactViewer(ctx,el,{owner,version:v,binding:binding?.viewer,bindingConfig:binding?.config,config:{edit:opts.edit,compare:opts.compare===true},live:opts.live});const bar=pick?jsx10(CandidateBar,{ctx,group:pick.group,gate:pick.gate,current:artifact.id,gridOn,grid:!review,onPick:onGateOpen,onGrid:on=>setGridChoice({stage:pick.gate.stage,on})}):null;if(pick&&gridOn){return jsxs9(Fragment22,{children:[bar,jsx10(CandidateGrid,{ctx,group:pick.group,gate:pick.gate,binding:binding?.viewer,bindingConfig:binding?.config,onPick:onGateOpen,onOpen:id=>{setGridChoice({stage:pick.gate.stage,on:false});ctx.selection.set({kind:"artifact",artifactId:id})}})]})}return jsxs9(Fragment22,{children:[bar,!review&&jsx10(DeliveryStrip,{ctx,artifact,isLatest}),titled&&jsx10(ViewerTitle,{name:artifact.name}),left?jsx10("section",{ref:compareEl,className:"band-project-compare","aria-label":`\u5BF9\u6BD4 ${versionLabel(left)} \u4E0E ${versionLabel(shown)}`,children:[left,shown].map(v=>jsxs9("figure",{className:"band-project-compare-pane",children:[jsx10("figcaption",{className:"band-project-compare-label",title:compareLabel(v),children:compareLabel(v)}),jsx10(Mount3,{className:"band-project-viewer","data-band-viewer":binding?.viewer??"fallback","data-band-compare":v.id===shown.id?"current":"against",mount:viewer(v,{edit:false,live:false,compare:true}),deps:[ctx,v.id,artifact.artifactType,binding?.viewer]})]},v.id))}):jsx10(Mount3,{className:review?"band-project-viewer band-project-review-viewer":"band-project-viewer","data-band-viewer":binding?.viewer??"fallback","data-band-guide-work":"",mount:viewer(shown,{edit,live}),deps:[ctx,shown.id,artifact.artifactType,binding?.viewer,edit,live]})]})}var ACTIVE_STAGE=new Set(["in_progress","in_review"]);function useStageSelection(ctx){const[stage,setStage]=useState52(()=>{const s=ctx.selection.get();return s?.kind==="stage"?s.stage:null});useEffect42(()=>{const s=ctx.selection.get();setStage(s?.kind==="stage"?s.stage:null);return ctx.selection.subscribe(({value})=>{setStage(value?.kind==="stage"?value.stage:null)})},[ctx]);return stage}function stageDoer(kind,agentName,via={},stageName=""){if(kind==="agent")return`${agentName} \u6765\u505A`;if(kind==="human")return"\u4EBA\u6765\u505A";if(kind==="external"||kind==="job")return via.viaMissing?`${stageName} \xB7 \u6682\u4E0D\u53EF\u7528`:via.viaDisplayName??"";return""}function stageOutputs(stage,artifacts){if(stage.outputs?.length)return{list:stage.outputs,pinned:true};const list=artifacts.flatMap(a=>a.stage===stage.stage&&a.latest&&!a.unused?[{artifactId:a.id,versionId:a.latest.versionId}]:[]);return{list,pinned:false}}function StageReplay({ctx,stage,stages,artifacts}){const name=stage.name??stage.stage;const at=stages.findIndex(x=>x.stage===stage.stage);const prev=at>0?stages[at-1]:void 0;const next=at>=0?stages[at+1]:void 0;const notStarted=stage.status==="blocked"||stage.status==="ready";const members=useMembers2(ctx);const turn=useCtxData6(ctx,()=>ctx.turns.state(),[],THREAD_EVENTS2);const kind=stageDoer(stage.kind,memberName2(members,ctx.project.agent),stage,stage.name??stage.stage);const end=firstTurnEnd(turn.data,stage);if(end){return jsxs9("section",{className:"band-project-stage","aria-label":`\u9636\u6BB5\uFF1A${name}`,children:[jsx10(StageHead,{gated:stage.gated??false,name,status:end.how==="failed"?"failed":"blocked",sub:[turnEndWord(end),kind].filter(Boolean).join(" \xB7 ")}),jsx10("div",{className:"band-project-state",children:jsx10(TurnEnded,{ctx,end,agent:agentLabel(members,ctx.project.agent)})})]})}if(notStarted&&turn.data===void 0&&!turn.error)return null;if(notStarted){return jsx10(StageNotStarted,{ctx,stage,prev,name,kind,agent:memberName2(members,ctx.project.agent),artifacts})}if(stage.paramsSchema){return jsx10(StageParams,{ctx,stage,name,kind,next})}return jsx10(StageOutputs,{ctx,stage,name,kind,artifacts})}function AwaitingFile({ctx,stage,artifact,name}){const viewKey=useSlotEntries2(ctx,SLOTS.stageViews).find(e=>e.meta.stage===stage.stage)?.key;return jsxs9("section",{className:"band-project-stage","aria-label":`\u9636\u6BB5\uFF1A${name}`,children:[jsx10(StageHead,{gated:stage.gated??false,name,status:"ready",sub:"\u4EBA\u6765\u505A"}),viewKey?jsx10(Mount3,{className:"band-project-awaiting-view","data-band-awaiting-file":stage.awaitingFile,mount:el=>ctx.slots.mount(el,SLOTS.stageViews,{key:viewKey,owner:{projectId:ctx.project.id,stage:stage.stage,hasParams:stage.paramsSchema!==void 0}}),deps:[ctx,viewKey,stage.stage]}):jsxs9("div",{className:"band-project-state",children:[jsxs9("b",{children:["\u8FD8\u5DEE",stage.awaitingFile]}),jsxs9("span",{children:["\u300C",name,"\u300D\u8981\u7B49",stage.awaitingFile,"\u4EA4\u4E0A\u6765\u624D\u7B97\u505A\u5B8C\u3002\u8FD9\u4E00\u6B65\u7531\u4EBA\u6765\u505A\uFF0C\u4EA4\u5B8C\u4E0B\u9762\u7684\u9636\u6BB5\u624D\u4F1A\u5F00\u59CB\u3002"]}),jsx10("div",{className:"band-project-state-row",children:jsxs9("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:`${PROJECT}/artifact`,params:projectParams(ctx,{artifact:artifact.id})}),children:["\u5230\u4EA7\u7269\u9875\u4EA4",stage.awaitingFile]})})]})]})}function StageNotStarted({ctx,stage,prev,name,kind,agent,artifacts}){const ready=stage.status==="ready";const wantsDetail=ready&&stage.kind==="human";const{data:detail,error:detailError,reload:reloadDetail}=useAppData2(ctx,data=>wantsDetail&&ctx.project.workshop?data.workshop(ctx.project.workshop):Promise.resolve(null),[ctx.project.workshop,wantsDetail]);const first=ready?externalFirstImports(detail??void 0,stage,artifacts):{all:false,types:[]};const importExternal=ctx.attachments.importExternal;const connections=ctx.app.data.write?.personalConnections;const viaOf=type=>importConnector(detail?.artifactTypes.find(t=>t.name===type)?.source);const importable=first.types.filter(t=>connections!==void 0||viaOf(t).exchange);const canImport=ready&&importable.length>0&&ctx.project.access==="member"&&ctx.member.can("submit-change")&&importExternal!==void 0;const deliver=collectDeliver(ctx,stage,artifacts);const[openType,setOpenType]=useState52(null);const[busy,setBusy]=useState52(false);const[imported,setImported]=useState52(false);const source=useMemo2(()=>{if(!openType||!importExternal)return void 0;const via=importConnector(detail?.artifactTypes.find(t=>t.name===openType)?.source);if(!connections&&!via.exchange)return void 0;const target={stage:stage.stage,type:openType};return{label:via.label,connected:async()=>via.exchange||connections!==void 0&&(await connections.list()).some(c=>c.connector===via.connector&&c.status==="active"),manage:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-settings/connections"}),read:async ref=>{const result=await importExternal({connector:via.connector,ref,target});if(result.kind!=="versions"||result.versions.length===0)throw new Error("\u5BFC\u5165\u6CA1\u6709\u4EA7\u751F\u7248\u672C\uFF0C\u8BF7\u68C0\u67E5\u94FE\u63A5\u540E\u91CD\u65B0\u5BFC\u5165");const version=result.versions.at(-1);if(!version)throw new Error("\u5BFC\u5165\u6CA1\u6709\u4EA7\u751F\u7248\u672C\uFF0C\u8BF7\u68C0\u67E5\u94FE\u63A5\u540E\u91CD\u65B0\u5BFC\u5165");return version}}},[ctx,openType,detail,importExternal,connections,stage.stage]);const waiting=stage.status==="ready"?first.all&&first.types.length>0?"\u4E0A\u6E38\u5DF2\u7ECF\u5C31\u7EEA\uFF1B":"\u4E0A\u6E38\u5DF2\u7ECF\u5C31\u7EEA\uFF0C\u7B49\u542F\u52A8\uFF1B":prev&&prev.status!=="approved"?`\u7B49\u300C${prev.name??prev.stage}\u300D\u901A\u8FC7\u540E\u5F00\u59CB\uFF1B`:"\u7B49\u4E0A\u6E38\u9636\u6BB5\u901A\u8FC7\u540E\u5F00\u59CB\uFF1B";const who=stage.kind==="agent"?`\u7136\u540E\u7531 ${agent} \u5F00\u5DE5\u3002`:stage.kind==="external"?stage.viaMissing?"\u8FD9\u4E00\u6B65\u6682\u65F6\u7528\u4E0D\u4E86\uFF0C\u8BF7\u8054\u7CFB\u5DE5\u574A\u7BA1\u7406\u5458\u3002":"\u7136\u540E\u7531\u6709\u53D1\u5E03\u6743\u9650\u7684\u4EBA\u4EA4\u7ED9\u5916\u90E8\u5E73\u53F0\uFF0C\u7B49\u5E73\u53F0\u56DE\u6267\u3002":stage.kind==="human"?first.all&&first.types.length>0?`\u4E0B\u4E00\u6B65\uFF1A${[...new Set(first.types.map(t=>importFrom(viaOf(t).label,"\u5BFC\u5165\u9996\u7248")))].join("\uFF0C\u6216")}\u3002`:"\u7136\u540E\u7531\u4EBA\u6765\u505A\u3002":"";const typeLabel=type=>{const types=detail?.artifactTypes??[];const i=types.findIndex(t=>t.name===type);return i>=0?artifactTypeDisplayName(type,types[i]?.label,i):"\u4EA7\u7269"};const word=ready?"\u5C31\u7EEA":"\u7B49\u4E0A\u6E38";return jsxs9("section",{className:"band-project-stage","aria-label":`\u9636\u6BB5\uFF1A${name}`,children:[jsx10(StageHead,{gated:stage.gated??false,name,status:"blocked",sub:[word,kind].filter(Boolean).join(" \xB7 ")}),jsxs9("div",{className:"band-project-state",children:[jsx10("b",{children:word}),jsxs9("span",{children:[waiting,who]}),canImport&&jsx10("div",{className:"band-project-state-row",children:importable.map(t=>jsx10("button",{type:"button",className:"btn sm",disabled:busy,title:importable.length>1?typeLabel(t):void 0,"aria-label":importable.length>1?importFrom(viaOf(t).label,`\u5BFC\u5165${typeLabel(t)}\u9996\u7248`):void 0,onClick:()=>setOpenType(t),children:importFrom(viaOf(t).label,"\u5BFC\u5165\u9996\u7248")},t))}),deliver.draw&&(deliver.can?jsx10("div",{className:"band-project-state-row",children:deliver.targets.map(t=>jsx10("button",{type:"button",className:"btn sm",title:deliver.targets.length>1?t.name:void 0,"aria-label":deliver.targets.length>1?`${COLLECT_DELIVER_LABEL}\uFF1A${t.name}`:void 0,onClick:()=>ctx.app.navigate({page:`${PROJECT}/artifact`,params:projectParams(ctx,{artifact:t.id})}),children:COLLECT_DELIVER_LABEL},t.id))}):jsx10("span",{children:deliver.note})),imported&&jsx10("output",{className:"band-project-import-done",children:"\u9996\u7248\u5DF2\u5BFC\u5165"}),openType&&source&&jsx10("div",{className:"band-project-import",children:jsx10(ExternalImportPanel,{source,onAdd:()=>{setImported(true);setOpenType(null)},onClose:()=>setOpenType(null),onBusy:setBusy})}),ready&&stage.kind==="human"&&detailError&&jsx10(ErrorNote4,{retry:reloadDetail,children:detailError})]})]})}function StageHead({name,status,sub,badge,gated}){const glyph2=status==="approved"?"done":status==="failed"?"failed":"queued";return jsxs9("header",{className:"band-project-stage-head",children:[jsx10("span",{className:`glyph ${glyph2}`,"aria-hidden":"true"}),jsxs9("div",{className:"band-project-stage-title",children:[jsx10("h2",{children:name}),jsx10("p",{children:sub}),gated===false&&jsx10("p",{className:"band-project-stage-gate",children:"\u4E0D\u8BBE\u95E8\u7981"})]}),badge&&jsx10("span",{className:"band-project-stage-badge",children:badge})]})}function chatLayout(ctx){const layout=ctx.project.views.layout??"flow";return layout==="chat"||layout.endsWith("/chat")}var blank=v=>v===void 0||v==="";async function readStageForm(ctx,versionId){try{const bytes=await ctx.version.readFile("form.json",{versionId});const parsed=JSON.parse(new TextDecoder().decode(bytes));return parsed&&typeof parsed==="object"&&!Array.isArray(parsed)?parsed:{}}catch{return{}}}function StageParams({ctx,stage,name,kind,next}){const fields=Object.entries(stage.paramsSchema?.properties??{});const versionId=stage.versionId??stage.outputs?.[0]?.versionId;const missing=fields.some(([key])=>blank(stage.params?.[key]));const form=useCtxData6(ctx,async()=>versionId&&missing?readStageForm(ctx,versionId):{},[versionId,missing]).data;const values={...form};for(const[key,v]of Object.entries(stage.params??{}))if(!blank(v))values[key]=v;const handed=next&&next.status!=="blocked"&&next.status!=="ready";return jsxs9("section",{className:"band-project-stage","aria-label":`\u9636\u6BB5\uFF1A${name}`,children:[jsx10(StageHead,{gated:stage.gated??false,name,status:stage.status,sub:[kind,"\u53EA\u8BFB"].filter(Boolean).join(" \xB7 "),...handed?{badge:`\u5DF2\u4EA4\u7ED9\u300C${next.name??next.stage}\u300D`}:{}}),jsxs9("div",{className:"band-project-stage-body",children:[jsx10("dl",{className:"band-project-stage-params",children:fields.map(([key,f])=>{const v=values[key];const i=f.enum?.findIndex(x=>x===v)??-1;const text=v===void 0||v===""?"\u2014":i>=0&&f.enumNames?.[i]?f.enumNames[i]:typeof v==="boolean"?v?"\u662F":"\u5426":String(v);return jsxs9("div",{children:[jsx10("dt",{children:f.title??key}),jsx10("dd",{children:typeof v==="string"&&!f.enum&&(v.includes("\n")||v.length>120)?jsx10("div",{className:"band-project-param-markdown",children:jsx10(Markdown,{text:v,breaks:true})}):text})]},key)})}),jsx10("p",{className:"band-project-stage-note",children:"\u4EBA\u5DE5\u9636\u6BB5\u7684\u754C\u9762\u662F\u5DE5\u574A\u7684\u53C2\u6570\u8868\u5355\uFF1B\u7ED3\u675F\u540E\u53EA\u8BFB\uFF0C\u8981\u6539\u9700\u6C42\u5C31\u5728\u9879\u76EE\u91CC\u5F00\u4E00\u6761\u610F\u89C1\u3002"})]})]})}function StageOutputs({ctx,stage,name,kind,artifacts}){const{list,pinned}=stageOutputs(stage,artifacts??[]);const[tab,setTab]=useState52(null);const chosen=list.find(o=>o.artifactId===tab)??list[0];const artifact=artifacts?.find(a=>a.id===chosen?.artifactId);const{data:versions}=useCtxData6(ctx,async()=>chosen?{id:chosen.artifactId,list:await ctx.version.list(chosen.artifactId)}:null,[chosen?.artifactId],"version.*");const all=versions&&versions.id===chosen?.artifactId?versions.list:void 0;const shown=all?.find(v=>v.id===chosen?.versionId);const later=shown&&all?all.filter(v=>v.createdAt>shown.createdAt):[];const latest=all?.at(-1);const backTo=latest?.artifactId??chosen?.artifactId;if(artifacts&&list.length===0){return jsxs9("section",{className:"band-project-stage","aria-label":`\u9636\u6BB5\uFF1A${name}`,children:[jsx10(StageHead,{gated:stage.gated??false,name,status:stage.status,sub:[kind,"\u8FD9\u4E2A\u9636\u6BB5\u6CA1\u6709\u4EA4\u51FA\u4EA7\u7269"].filter(Boolean).join(" \xB7 ")}),jsxs9("div",{className:"band-project-state",children:[jsx10("b",{children:"\u6CA1\u6709\u4EA7\u7269"}),jsx10("span",{children:"\u8FD9\u4E2A\u9636\u6BB5\u6CA1\u6709\u4EA4\u51FA\u8981\u770B\u7684\u4E1C\u897F\u3002"})]})]})}const sub=shown?`${shortTime2(shown.createdAt)} \u4EA4\u4ED8 \xB7 \u56DE\u770B\u5F53\u65F6\u4EA4\u51FA\u7684${artifact?.name??""} ${versionLabel(shown)}`:"";const binding=artifact?ctx.project.views.artifactTypes?.[artifact.artifactType]:void 0;return jsxs9("section",{className:"band-project-stage","aria-label":`\u9636\u6BB5\uFF1A${name}`,children:[!chatLayout(ctx)&&jsx10(StageHead,{gated:stage.gated??false,name,status:stage.status,sub:[kind,sub].filter(Boolean).join(" \xB7 ")}),jsxs9("div",{className:"band-project-stage-bar",children:[jsx10("span",{className:"band-project-stage-ro",children:"\u53EA\u8BFB"}),chatLayout(ctx)&&jsx10("span",{className:"band-project-stage-sub",children:[kind,sub].filter(Boolean).join(" \xB7 ")}),chatLayout(ctx)&&!stage.gated&&jsx10("span",{className:"band-project-stage-gate band-project-stage-sub",children:"\u4E0D\u8BBE\u95E8\u7981"}),list.length>1&&jsx10("div",{className:"band-project-seg",role:"group","aria-label":"\u4EA4\u51FA\u7684\u4EA7\u7269",children:list.map(o=>{const a=artifacts?.find(x=>x.id===o.artifactId);return jsx10("button",{type:"button",className:"band-project-seg-option","aria-pressed":o.artifactId===chosen?.artifactId,onClick:()=>setTab(o.artifactId),children:a?.name??o.artifactId},o.artifactId)})}),backTo&&jsx10("button",{type:"button",className:"btn sm",title:latest?`\u6700\u65B0\u662F ${versionLabel(latest)}`:void 0,onClick:()=>ctx.selection.set({kind:"artifact",artifactId:backTo}),children:"\u56DE\u5230\u73B0\u5728"})]}),shown&&artifact?jsx10(Mount3,{className:"band-project-viewer","data-band-viewer":binding?.viewer??"fallback",mount:el=>{const owner={projectId:ctx.project.id,artifactId:artifact.id,artifactType:artifact.artifactType,versionId:shown.id};return mountArtifactViewer(ctx,el,{owner,version:shown,binding:binding?.viewer,bindingConfig:binding?.config,config:{edit:false,compare:true}})},deps:[ctx,shown.id,artifact.artifactType,binding?.viewer]}):jsx10("div",{className:"band-project-viewer"}),shown&&jsx10("p",{className:"band-project-stage-note",children:!pinned?"\u8FD9\u662F\u8FD9\u4EFD\u4EA7\u7269\u73B0\u5728\u7684\u7248\u672C\uFF1A\u9636\u6BB5\u7ED3\u675F\u65F6\u4EA4\u51FA\u7684\u662F\u54EA\u4E00\u7248\u8FD8\u6CA1\u6709\u8BB0\u5F55\u3002":later.length>0?`\u4E4B\u540E\u53C8\u6539\u4E86 ${later.length} \u7248\uFF08${later.map(versionLabel).join("\u3001")}\uFF09\u3002\u8FD9\u91CC\u662F\u9636\u6BB5\u7ED3\u675F\u65F6\u7684\u6837\u5B50\uFF0C\u53EA\u80FD\u770B\uFF1B\u8981\u63D0\u610F\u89C1\u5148\u56DE\u5230\u73B0\u5728\u3002`:"\u8FD9\u91CC\u662F\u9636\u6BB5\u7ED3\u675F\u65F6\u7684\u6837\u5B50\uFF0C\u4E4B\u540E\u6CA1\u518D\u6539\u8FC7\u3002"})]})}function candidateGroup(artifacts,current){if(!current?.stage||current.key===void 0)return null;const group=artifacts.filter(a=>a.stage===current.stage&&a.artifactType===current.artifactType&&a.key!==void 0);return group.length>1?group:null}function candidateLabel(a){const i=a.name.lastIndexOf(" \xB7 ");return i>=0?a.name.slice(i+3):a.key??a.name}function candidateGroupLabel(a){const i=a.name.lastIndexOf(" \xB7 ");return i>=0?a.name.slice(0,i):a.artifactType}function pickedOf(group){return group.some(a=>a.unused)?group.find(a=>!a.unused):void 0}function myVote(ctx,gate){return gate.approvals?.find(v=>v.userId===ctx.member.id)?.key}function canVote(ctx,gate){const roles=gate.approveBy??[];return(gate.status==="in_review"||gate.status==="approved")&&ctx.member.can("approve")&&(roles.length===0||ctx.member.roles.some(r2=>roles.includes(r2)))}function CandidateBar({ctx,group,gate,current,gridOn,grid=true,onGrid,onPick}){const picked=pickedOf(group);const hint=gate.status==="in_review"?`${group.length} \u4EFD\u5019\u9009\uFF0C\u9009\u4E00\u4EFD`:picked?`\u5DF2\u9009\u300C${candidateLabel(picked)}\u300D`:`${group.length} \u4EFD\u5019\u9009`;return jsxs9("div",{className:"band-project-candidates",children:[jsxs9("div",{className:"tabs plain",role:"tablist","aria-label":"\u5019\u9009",children:[grid&&jsx10("button",{type:"button",role:"tab","aria-selected":gridOn,onClick:()=>onGrid(true),children:"\u5168\u90E8"}),group.map(a=>jsxs9("button",{type:"button",role:"tab","aria-selected":!gridOn&&a.id===current,onClick:()=>{onGrid(false);ctx.selection.set({kind:"artifact",artifactId:a.id})},children:[a.id===picked?.id&&jsx10("span",{className:"band-project-candidate-tick","aria-label":"\u5DF2\u9009",children:"\u2713"}),a.unused?jsx10("span",{className:"band-project-candidate-unused",title:"\u4E0D\u7528\u4E86",children:candidateLabel(a)}):candidateLabel(a)]},a.id))]}),jsx10("span",{className:"band-project-candidates-hint",children:hint}),!gridOn&&canVote(ctx,gate)&¤t!==picked?.id&&group.find(x=>x.id===current)?.key!==myVote(ctx,gate)&&jsx10("button",{type:"button",className:"btn sm",onClick:()=>{const a=group.find(x=>x.id===current);if(a?.key===void 0)return;ctx.gate.open(gate.stage,a.key);onPick?.()},children:"\u9009\u8FD9\u4EFD"})]})}function CandidateGrid({ctx,group,gate,binding,bindingConfig,onOpen,onPick}){const ids=group.map(a=>a.id).join(" ");const{data:latest}=useCtxData6(ctx,()=>Promise.all(group.map(a=>ctx.version.list(a.id).then(l=>[a.id,l.at(-1)]))),[ids],"version.*",{keepPrevious:true});const{data:open}=useCtxData6(ctx,async()=>{const list=await ctx.threads.list({status:UNRESOLVED});const n=new Map;for(const t of list){if(t.artifactId!==void 0)n.set(t.artifactId,(n.get(t.artifactId)??0)+1)}return n},[],"thread.*");const members=useMembers2(ctx);const order=memberOrder(members);const nameOf=id=>members.find(m=>m.actor.id===id)?.displayName??id;const picked=pickedOf(group);const vote=canVote(ctx,gate);const mine=myVote(ctx,gate);const versions=new Map(latest??[]);const counts=open??new Map;return jsx10("section",{className:"band-project-candidate-grid","aria-label":"\u5019\u9009",children:group.map(a=>{const v=versions.get(a.id);const voters=(gate.approvals??[]).filter(x=>x.key===a.key).map(x=>x.userId);const isPicked=a.id===picked?.id;const note=typeof v?.meta?.note==="string"?v.meta.note:void 0;const label=candidateLabel(a);const count=counts.get(a.id)??0;return jsxs9("figure",{className:"band-project-candidate","data-state":isPicked?"picked":a.unused?"unused":void 0,children:[v?jsx10("div",{className:"band-project-candidate-art",onClick:e=>{const t=e.target instanceof Element?e.target:null;if(t?.closest("button, a, input, video, audio, [role='button']"))return;onOpen(a.id)},children:jsx10(Mount3,{className:"band-project-viewer","data-band-viewer":binding??"fallback",mount:el=>binding?mountArtifactViewer(ctx,el,{binding,bindingConfig,owner:{projectId:ctx.project.id,artifactId:a.id,artifactType:a.artifactType,versionId:v.id},config:{edit:false,compare:true,thumbnail:true},version:v}):unbound(el,a.artifactType),deps:[ctx,v.id,binding]})}):jsx10("div",{className:"band-project-candidate-empty",children:"\u8FD8\u6CA1\u6709\u7248\u672C"}),jsxs9("figcaption",{className:"band-project-candidate-cap",children:[jsxs9("div",{className:"band-project-candidate-line",children:[jsx10("strong",{className:"band-project-candidate-name",children:label}),v&&jsx10("span",{className:"band-project-candidate-ver",children:versionLabel(v)}),count>0&&jsxs9("span",{className:"band-project-candidate-count",title:`${count} \u6761\u610F\u89C1\u8FD8\u6CA1\u4E86\u7ED3`,"aria-label":`${count} \u6761\u610F\u89C1`,children:[jsx10(CommentIcon,{}),count]}),isPicked&&jsx10("span",{className:"chip s-approved",children:"\u5DF2\u9009"}),a.unused&&jsx10("span",{className:"chip",children:"\u4E0D\u7528\u4E86"}),jsxs9("span",{className:"band-project-candidate-end",children:[!isPicked&&voters.length>0&&jsx10("span",{className:"band-project-candidate-voters",children:voters.map(id=>jsx10(Avatar,{id,name:`${nameOf(id)} \u9009\u4E86`,size:"xs",order},id))}),vote&&!isPicked&&a.key!==void 0&&a.key!==mine&&jsx10("button",{type:"button",className:"btn sm",onClick:()=>{if(a.key===void 0)return;ctx.gate.open(gate.stage,a.key);onPick?.()},children:"\u9009\u8FD9\u4EFD"}),v&&jsx10("button",{type:"button",className:"btn ghost sm icon band-project-candidate-open","aria-label":`\u5355\u72EC\u770B\u300C${label}\u300D`,title:`\u5355\u72EC\u770B\u300C${label}\u300D\uFF0C\u53EF\u4EE5\u6807\u6CE8\u3001\u5168\u5C4F`,onClick:()=>onOpen(a.id),children:jsx10(ExpandIcon,{})})]})]}),note&&jsx10("div",{className:"band-project-candidate-meta",children:note})]})]},a.id)})})}function CommentIcon(){return jsx10("svg",{viewBox:"0 0 16 16",className:"band-project-icon","aria-hidden":"true",children:jsx10("path",{d:"M3 3.5h10a1 1 0 0 1 1 1V10a1 1 0 0 1-1 1H7l-3 2.5V11H3a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1z"})})}function ExpandIcon(){return jsx10("svg",{viewBox:"0 0 16 16",className:"band-project-icon","aria-hidden":"true",children:jsx10("path",{d:"M9.5 2.5h4v4M13.5 2.5l-4.5 4.5M6.5 13.5h-4v-4M2.5 13.5L7 9"})})}var UNRESOLVED=["open","queued","running","awaiting_confirm"];export{artifactCaps,LOCKED_REFS2,resolvePanel2,shortName,approvalPlaced,place,ARTIFACT_DIALOG,PROJECT_HEAD,PROJECT,SLOTS,activePair,DEFAULT_LAYOUT,src_default,ProjectPage,HeaderVersion,ReviewPage,ArtifactPage,FirstVersion,isLatestVersion,stageDoer,stageOutputs,StageReplay,AwaitingFile,readStageForm,candidateGroup,candidateLabel,candidateGroupLabel,pickedOf};
|