@kanyun-ai-infra/band-cli 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/bundled/examples/aitutor-tool/band/views/release/package.json +1 -1
  2. package/bundled/examples/aitutor-tool/band/views/tool-preview/package.json +1 -1
  3. package/bundled/examples/analysis/band/views/intake/package.json +1 -1
  4. package/bundled/examples/compliance/band/views/compliance/package.json +1 -1
  5. package/bundled/examples/content-review/band/views/checklist/package.json +1 -1
  6. package/bundled/examples/rush-site/band/views/rush-db/package.json +1 -1
  7. package/bundled/examples/rush-site/band/views/rush-deploy/package.json +1 -1
  8. package/bundled/examples/video/band/views/timeline/package.json +1 -1
  9. package/bundled/kernel/fixture.js +1 -1
  10. package/bundled/kernel/index.js +1 -1
  11. package/bundled/official/activity/package.json +4 -4
  12. package/bundled/official/approval/package.json +4 -4
  13. package/bundled/official/artifacts/package.json +4 -4
  14. package/bundled/official/chat/package.json +4 -4
  15. package/bundled/official/chunks/{chunk-SB74RUTN.js → chunk-DIL5YSVK.js} +1 -1
  16. package/bundled/official/comment/dist/index.js +1 -1
  17. package/bundled/official/comment/package.json +4 -4
  18. package/bundled/official/header/package.json +4 -4
  19. package/bundled/official/home/package.json +4 -4
  20. package/bundled/official/layouts/package.json +4 -4
  21. package/bundled/official/library/dist/index.js +1 -1
  22. package/bundled/official/library/package.json +4 -4
  23. package/bundled/official/members/package.json +4 -4
  24. package/bundled/official/memory/package.json +4 -4
  25. package/bundled/official/native/package.json +2 -2
  26. package/bundled/official/params-form/package.json +4 -4
  27. package/bundled/official/plugins/package.json +4 -4
  28. package/bundled/official/project/dist/index.js +1 -1
  29. package/bundled/official/project/package.json +4 -4
  30. package/bundled/official/queue/package.json +4 -4
  31. package/bundled/official/settings/package.json +4 -4
  32. package/bundled/official/shell/dist/index.js +1 -1
  33. package/bundled/official/shell/package.json +4 -4
  34. package/bundled/official/stages/package.json +4 -4
  35. package/bundled/official/threads/package.json +4 -4
  36. package/bundled/official/turn-bar/package.json +4 -4
  37. package/bundled/official/turn-trace/package.json +4 -4
  38. package/bundled/official/version-switch/dist/index.js +1 -1
  39. package/bundled/official/version-switch/package.json +4 -4
  40. package/bundled/official/viewer-entity/package.json +2 -2
  41. package/bundled/official/viewer-external/package.json +2 -2
  42. package/bundled/official/viewer-image/package.json +2 -2
  43. package/bundled/official/viewer-media/package.json +2 -2
  44. package/bundled/official/viewer-storyboard/package.json +2 -2
  45. package/bundled/official/viewer-text/package.json +4 -4
  46. package/bundled/official/viewer-tool/package.json +2 -2
  47. package/bundled/official/viewer-web/package.json +2 -2
  48. package/bundled/official/viewer-web-app/package.json +2 -2
  49. package/bundled/official/workshops/dist/index.js +2 -2
  50. package/bundled/official/workshops/package.json +4 -4
  51. package/bundled/official/workshops/plugin.yaml +2 -2
  52. package/bundled/skills/band-plugin/references/code.md +2 -2
  53. package/bundled/skills/band-plugin/references/manifest.md +2 -2
  54. package/bundled/skills/band-plugin/references/rules.md +1 -0
  55. package/bundled/skills/band-plugin/references/testing-publish.md +1 -1
  56. package/bundled/skills/band-plugin/templates/panel/package.json +1 -1
  57. package/dev-host/app.tsx +9 -5
  58. package/dist/bin.js +3 -3
  59. package/dist/build-plugin.d.ts +1 -1
  60. package/dist/build-plugin.js +1 -1
  61. package/dist/{chunk-TQHHHXXU.js → chunk-LGYGWMSY.js} +18 -16
  62. package/dist/{chunk-VTAJX7NN.js → chunk-Q2XJXNVH.js} +16 -9
  63. package/dist/{chunk-JWZU3NOD.js → chunk-XPLYTHNX.js} +1 -1
  64. package/dist/{dev-server-SB5FMSVP.js → dev-server-Q7NTJ3QD.js} +19 -4
  65. package/dist/fixture.d.ts +11 -0
  66. package/dist/index.d.ts +2 -2
  67. package/dist/index.js +3 -3
  68. package/dist/vite.d.ts +1 -1
  69. package/dist/vite.js +2 -2
  70. package/dist/{workshop-repo-Uq6blxyt.d.ts → workshop-repo-DqoVdcGu.d.ts} +9 -9
  71. package/package.json +9 -7
  72. package/src/dev-managers.ts +16 -0
@@ -1 +1 @@
1
- import"../../chunks/chunk-JFPQMFKF.js";import{Avatar as Avatar2,ErrorNote as ErrorNote3,Mount as Mount3,WorkshopIcon as WorkshopIcon2,isForbidden,memberName as memberName2,memberOrder,reactMount,useCtxData as useCtxData2,useMembers,useSettledText as useSettledText2,withImeGuard as withImeGuard3}from"@kanyun-ai-infra/band-plugin-react";import{definePlugin,defineScopeState,projectPath as projectPath3}from"@kanyun-ai-infra/band-plugin-sdk";import{Fragment as Fragment5,useEffect as useEffect5,useMemo as useMemo2,useRef as useRef5,useState as useState5}from"react";import{Mount,withImeGuard}from"@kanyun-ai-infra/band-plugin-react";import{projectPath}from"@kanyun-ai-infra/band-plugin-sdk";import{useEffect as useEffect2,useRef}from"react";import{createPortal}from"react-dom";import{useEffect,useState}from"react";import{jsx,jsxs}from"react/jsx-runtime";import{ErrorNote,fileSizeText,memberName,useCtxData}from"@kanyun-ai-infra/band-plugin-react";import{useRef as useRef2,useState as useState2}from"react";import{Fragment,jsx as jsx2,jsxs as jsxs2}from"react/jsx-runtime";import{gateRule}from"@kanyun-ai-infra/band-plugin-react";import{agentDisplayName}from"@kanyun-ai-infra/band-contracts";import{Avatar,ErrorNote as ErrorNote2,Mount as Mount2,WorkshopIcon,useAppData,useSettledText,withImeGuard as withImeGuard2}from"@kanyun-ai-infra/band-plugin-react";import{projectPath as projectPath2}from"@kanyun-ai-infra/band-plugin-sdk";import{Fragment as Fragment3,useEffect as useEffect4,useMemo,useRef as useRef4,useState as useState4}from"react";import{useEffect as useEffect3,useRef as useRef3,useState as useState3}from"react";import{Fragment as Fragment2,jsx as jsx3,jsxs as jsxs3}from"react/jsx-runtime";import{Fragment as Fragment4,jsx as jsx4,jsxs as jsxs4}from"react/jsx-runtime";import{Fragment as Fragment6,jsx as jsx5,jsxs as jsxs5}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css='/* src/my-artifacts/my-artifacts.css */\n.band-library-my {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.band-library-mymain {\n box-sizing: border-box;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n width: 100%;\n padding: 8px 18px 64px;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 12px;\n align-content: start;\n}\n.band-library-myhead {\n display: grid;\n gap: 10px;\n padding-top: 4px;\n}\n.band-library-myhead h1 {\n margin: 0;\n font-size: var(--fs-h2);\n font-weight: 600;\n letter-spacing: -0.005em;\n}\n.band-library-mytabs {\n justify-self: start;\n max-width: 100%;\n overflow-x: auto;\n overscroll-behavior-x: contain;\n}\n.band-library-mytabnum {\n margin-left: 5px;\n color: var(--muted);\n font-weight: 400;\n font-variant-numeric: tabular-nums;\n}\n.band-library-mybar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n.band-library-mysels {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.band-library-mygrow {\n flex: 1;\n}\n.band-library-myfind {\n display: flex;\n align-items: center;\n gap: 6px;\n box-sizing: border-box;\n width: 200px;\n padding: 4px 9px;\n border-radius: 7px;\n background: var(--fill-2);\n color: var(--muted);\n}\n.band-library-myfind > svg {\n width: 14px;\n height: 14px;\n flex: none;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n}\n.band-library-myfind input {\n width: 100%;\n border: 0;\n outline: none;\n background: none;\n color: var(--ink);\n font: inherit;\n font-size: var(--fs-ui);\n}\n.band-library-myfind input::placeholder {\n color: var(--muted);\n}\n.band-library-myfind input::-webkit-search-cancel-button {\n display: none;\n}\n.band-library-myfind:focus-within {\n background: var(--panel);\n box-shadow: inset 0 0 0 1px var(--accent), 0 0 0 3px var(--accent-soft);\n}\n.band-library-myfilter {\n display: none;\n}\n.band-library-mynote {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-library-mytable {\n --cols: minmax(0, 1fr) 172px 64px 104px 168px 64px 156px 32px;\n display: block;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n font-size: var(--fs-row);\n}\n.band-library-mytable[data-comments=off] {\n --cols: minmax(0, 1fr) 172px 64px 104px 168px 156px 32px;\n}\n.band-library-mytable[data-group=project] {\n --cols: minmax(0, 1fr) 64px 104px 168px 64px 156px 32px;\n}\n.band-library-mytable[data-group=project][data-comments=off] {\n --cols: minmax(0, 1fr) 64px 104px 168px 156px 32px;\n}\n.band-library-mytable thead,\n.band-library-mytable tbody {\n display: block;\n}\n.band-library-mytable th,\n.band-library-mytable td {\n display: block;\n padding: 0;\n border: 0;\n font-weight: inherit;\n text-align: left;\n vertical-align: middle;\n}\n.band-library-mytable thead tr,\n.band-library-mytable tbody tr:not(.band-library-mygrouprow) {\n display: grid;\n grid-template-columns: var(--cols);\n align-items: center;\n gap: 12px;\n padding: 0 10px;\n}\n.band-library-mytable thead tr {\n padding-bottom: 8px;\n border-bottom: var(--hairline) solid var(--rule);\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-mytable tbody tr:not(.band-library-mygrouprow) {\n min-height: 44px;\n border-radius: var(--r);\n cursor: pointer;\n}\n.band-library-mytable tbody tr:not(.band-library-mygrouprow):hover {\n background: var(--fill);\n}\n.band-library-mytable tbody tr:not(.band-library-mygrouprow):focus-visible {\n outline: 2px solid var(--accent);\n outline-offset: -2px;\n}\n.band-library-mytable .c-name {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.band-library-star {\n flex: none;\n border: 0;\n background: none;\n padding: 2px;\n border-radius: 5px;\n color: var(--muted);\n line-height: 0;\n cursor: pointer;\n}\n.band-library-star:hover {\n color: var(--ink);\n background: var(--fill-2);\n}\n.band-library-star[aria-pressed=true] {\n color: var(--warn);\n}\n.band-library-star svg {\n width: 15px;\n height: 15px;\n}\n.band-library-mytable .c-project,\n.band-library-mytable .c-type,\n.band-library-mytable .c-acc,\n.band-library-mytable .c-at {\n color: var(--muted);\n font-size: var(--fs-ui);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-mytable .c-status {\n display: flex;\n align-items: center;\n gap: 4px;\n min-width: 0;\n}\n.band-library-mytable .c-comments {\n color: var(--ink);\n font-size: var(--fs-ui);\n}\n.band-library-mytable .c-more {\n display: flex;\n justify-content: flex-end;\n}\n.band-library-myneeds {\n width: 14px;\n height: 14px;\n transform: scale(0.86);\n}\n.band-library-myproj {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-mywho {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n.band-library-mygrouprow td {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 14px 10px 4px;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-mygrouprow td > span {\n font-variant-numeric: tabular-nums;\n}\n.band-library-myfoot {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-myfoot button {\n margin-left: 10px;\n}\n.band-library-mytable tbody tr:hover .band-library-morebtn,\n.band-library-mytable tbody tr:focus-within .band-library-morebtn,\n.band-library-mymrow:hover .band-library-morebtn,\n.band-library-mymrow:focus-within .band-library-morebtn {\n opacity: 1;\n}\n.band-library-myrest {\n padding: 56px 16px;\n}\n.band-library-myrest b {\n color: var(--ink);\n font-weight: 500;\n font-size: var(--fs-body);\n}\n.band-library-myrest span {\n max-width: 44ch;\n}\n.band-library-myskel {\n display: grid;\n gap: 8px;\n padding-top: 8px;\n}\n.band-library-mytoast {\n position: fixed;\n left: 50%;\n bottom: 24px;\n transform: translateX(-50%);\n padding: 7px 14px;\n border-radius: var(--r);\n background: var(--primary);\n color: var(--primary-ink);\n font-size: var(--fs-ui);\n z-index: var(--layer-pop);\n}\n.band-library-mymlist {\n display: none;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.band-library-mymrow {\n position: relative;\n display: grid;\n grid-template-columns: 40px minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 10px;\n padding: 8px 4px;\n border-radius: var(--r);\n cursor: pointer;\n}\n.band-library-mymrow:hover {\n background: var(--fill);\n}\n.band-library-mymtext {\n display: grid;\n gap: 2px;\n min-width: 0;\n}\n.band-library-mymname {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n min-width: 0;\n}\n.band-library-mymname a {\n color: var(--ink);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-mymname a:hover {\n text-decoration: underline;\n}\n.band-library-mymname .band-library-star {\n margin-left: 2px;\n}\n.band-library-mymmeta {\n color: var(--muted);\n font-size: var(--fs-meta);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-mymstatus {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: none;\n}\n.band-library-thumb:where([data-size=mobile]) {\n width: 40px;\n height: 40px;\n border-radius: 9px;\n}\n.band-library-myscrim {\n position: fixed;\n inset: 0;\n display: grid;\n place-items: end center;\n background: var(--scrim);\n z-index: var(--layer-pop);\n}\n.band-library-mysheet {\n box-sizing: border-box;\n width: 100%;\n max-width: 520px;\n padding: 14px 16px calc(16px + env(safe-area-inset-bottom, 0px));\n border-radius: var(--r-xl) var(--r-xl) 0 0;\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n display: grid;\n gap: 12px;\n}\n.band-library-mysheet h2 {\n margin: 0;\n font-size: var(--fs-title);\n font-weight: 600;\n}\n.band-library-mysheetbody {\n display: grid;\n gap: 10px;\n}\n.band-library-mysheetbody label {\n display: grid;\n gap: 4px;\n color: var(--muted);\n font-size: var(--fs-meta);\n}\n.band-library-mysheetbody .select {\n width: 100%;\n}\n.band-library-mysheet footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n}\n@media (max-width: 1180px) {\n .band-library-mytable {\n --cols: minmax(0, 1fr) 140px 56px 96px 108px 132px 32px;\n }\n .band-library-mytable[data-comments=off] {\n --cols: minmax(0, 1fr) 140px 56px 96px 132px 32px;\n }\n .band-library-mytable[data-group=project] {\n --cols: minmax(0, 1fr) 56px 96px 108px 132px 32px;\n }\n .band-library-mytable[data-group=project][data-comments=off] {\n --cols: minmax(0, 1fr) 56px 96px 132px 32px;\n }\n .band-library-mytable .c-acc {\n display: none;\n }\n}\n@media (max-width: 980px) {\n .band-library-mytable {\n --cols: minmax(0, 1fr) 140px 96px 108px 132px 32px;\n }\n .band-library-mytable[data-comments=off] {\n --cols: minmax(0, 1fr) 140px 96px 132px 32px;\n }\n .band-library-mytable[data-group=project] {\n --cols: minmax(0, 1fr) 96px 108px 132px 32px;\n }\n .band-library-mytable[data-group=project][data-comments=off] {\n --cols: minmax(0, 1fr) 96px 132px 32px;\n }\n .band-library-mytable .c-type {\n display: none;\n }\n}\n@media (max-width: 860px) {\n .band-library-mymain {\n padding: 4px 16px 48px;\n gap: 10px;\n }\n .band-library-myhead h1 {\n font-size: var(--fs-title);\n }\n .band-library-mybar {\n gap: 6px;\n }\n .band-library-mysels,\n .band-library-mygroupby {\n display: none;\n }\n .band-library-myfind {\n flex: 1;\n width: auto;\n }\n .band-library-myfilter {\n display: inline-flex;\n }\n .band-library-mytable {\n display: none;\n }\n .band-library-mymlist {\n display: grid;\n gap: 2px;\n }\n}\n\n/* src/library.css */\n.band-library-page {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.band-library-projecthead,\n.band-library-projecthead > :where(.band-react-surface) {\n display: contents;\n}\n.band-library {\n box-sizing: border-box;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n width: 100%;\n padding: 8px 18px 64px;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 14px;\n align-content: start;\n}\n.band-library-head {\n padding: 12px 18px 4px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n min-height: 32px;\n}\n.band-library-crumb {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n font-size: var(--fs-ui);\n color: var(--muted);\n}\n.band-library-ws {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--muted);\n white-space: nowrap;\n}\n.band-library-crumb button {\n border: 0;\n padding: 0 2px;\n background: none;\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n border-radius: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-crumb button:hover {\n text-decoration: underline;\n}\n.band-library-switch {\n flex: none;\n}\n.band-library-titlebar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n.band-library-titlebar > :is(h1, h2) {\n margin: 0;\n display: flex;\n align-items: baseline;\n gap: 8px;\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--fs-h2);\n line-height: 1.3;\n}\n.band-library-count {\n font-family: var(--font);\n font-size: var(--fs-lead);\n font-weight: 400;\n color: var(--muted);\n}\n.band-library-readonly {\n align-self: center;\n font-family: var(--font);\n}\n.band-library-tools {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n.band-library-search {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 240px;\n box-sizing: border-box;\n padding: 4px 6px 4px 10px;\n border-radius: var(--r);\n background: var(--fill);\n color: var(--muted);\n font-size: var(--fs-row);\n transition: background var(--sixteenth) var(--ease), box-shadow var(--sixteenth) var(--ease);\n}\n.band-library-search:focus-within {\n background: var(--panel);\n box-shadow: var(--shadow-float-focus);\n}\n.band-library-search > svg,\n.band-library-viewseg svg,\n.band-library-glyph,\n.band-library-cicon,\n.band-library-chev,\n.band-library-morebtn svg {\n fill: none;\n stroke: currentColor;\n stroke-width: 1.4;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.band-library-search > svg {\n width: 15px;\n height: 15px;\n flex: none;\n}\n.band-library-search input {\n flex: 1;\n min-width: 0;\n border: 0;\n padding: 3px 0;\n background: none;\n color: var(--ink);\n font: inherit;\n outline: none;\n}\n.band-library-search input::placeholder {\n color: var(--muted);\n}\n.band-library-search input::-webkit-search-cancel-button {\n display: none;\n}\n.band-library-key {\n font-family: var(--mono);\n font-size: var(--fs-badge);\n padding: 0 5px;\n border-radius: 4px;\n box-shadow: inset 0 0 0 1px var(--rule-strong);\n}\n.band-library-search:focus-within .band-library-key {\n display: none;\n}\n.band-library-viewseg button {\n display: grid;\n place-items: center;\n padding: 4px 8px;\n}\n.band-library-viewseg svg {\n width: 15px;\n height: 15px;\n}\n.band-library-filters {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n flex-wrap: wrap;\n}\n.band-library-chips {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n}\n.band-library-chips button {\n border: 0;\n padding: 4px 11px;\n border-radius: 999px;\n background: none;\n color: var(--muted);\n font: inherit;\n font-size: var(--fs-row);\n cursor: pointer;\n transition: background var(--sixteenth) var(--ease), color var(--sixteenth) var(--ease);\n}\n.band-library-chips button span {\n margin-left: 5px;\n color: var(--muted);\n}\n.band-library-chips button:hover {\n color: var(--ink);\n background: var(--fill);\n}\n.band-library-chips button[aria-pressed=true] {\n background: var(--fill-2);\n color: var(--ink);\n font-weight: 500;\n}\n.band-library-chips button[aria-pressed=true] span {\n color: var(--muted);\n}\n.band-library-chips button:focus-visible,\n.band-library-sort:focus-visible,\n.band-library-crumb button:focus-visible,\n.band-library-link:focus-visible,\n.band-library-card > a:focus-visible,\n.band-library-menu button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--accent);\n}\n.band-library-selects {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.band-library-selects label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-note,\n.band-library-foot {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-link {\n border: 0;\n padding: 0;\n background: none;\n color: var(--accent-text);\n font: inherit;\n cursor: pointer;\n border-radius: 4px;\n}\n.band-library-link:hover {\n text-decoration: underline;\n}\n.band-library-rest {\n padding: 56px 16px;\n}\n.band-library-rest b {\n color: var(--ink);\n font-weight: 500;\n font-size: var(--fs-body);\n}\n.band-library-rest span {\n max-width: 44ch;\n}\n.band-library-table {\n --cols: minmax(0, 1fr) 92px 64px 132px 112px 72px 32px;\n --indent: 22px;\n display: block;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n font-size: var(--fs-row);\n}\n.band-library-table thead,\n.band-library-table tbody {\n display: block;\n}\n.band-library-table th,\n.band-library-table td {\n display: block;\n padding: 0;\n border: 0;\n font-weight: inherit;\n text-align: left;\n vertical-align: middle;\n}\n.band-library-table[data-comments=off] {\n --cols: minmax(0, 1fr) 92px 132px 112px 72px 32px;\n}\n.band-library-tr {\n display: grid;\n grid-template-columns: var(--cols);\n align-items: center;\n gap: 12px;\n padding: 0 12px;\n}\n.band-library-th {\n padding-bottom: 8px;\n border-bottom: var(--hairline) solid var(--rule);\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-sort {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n border: 0;\n padding: 0;\n background: none;\n color: inherit;\n font: inherit;\n cursor: pointer;\n border-radius: 4px;\n}\n.band-library-sort[aria-sort=ascending],\n.band-library-sort[aria-sort=descending] {\n color: var(--ink);\n}\n.band-library-th .c-name {\n padding-left: 18px;\n}\n.band-library-folder {\n min-height: 40px;\n border-radius: 10px;\n cursor: pointer;\n transition: background var(--sixteenth) var(--ease);\n}\n.band-library-folder:hover {\n background: var(--fill);\n}\n.band-library-folder:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--accent);\n background: var(--fill);\n}\n.band-library-table .c-folder {\n grid-column: 1 / -1;\n display: flex;\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n padding-left: calc((var(--level, 1) - 1) * var(--indent));\n white-space: nowrap;\n}\n.band-library-chev {\n flex: none;\n width: 13px;\n height: 13px;\n align-self: center;\n color: var(--muted);\n transition: transform var(--sixteenth) var(--ease);\n}\n.band-library-folder[aria-expanded=false] .band-library-chev {\n transform: rotate(-90deg);\n}\n.band-library-folder b {\n font-weight: 600;\n}\n.band-library-gcount,\n.band-library-gsum {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-gsum {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-row {\n min-height: 52px;\n border-radius: 10px;\n cursor: pointer;\n transition: background var(--sixteenth) var(--ease);\n}\n.band-library-row:hover,\n.band-library-row:focus-within {\n background: var(--fill);\n}\n.band-library-row:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--accent);\n background: var(--fill);\n}\n.band-library-row.is-unused > :not(.c-more) {\n opacity: 0.5;\n}\n.band-library-row .c-name {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n padding-left: calc((var(--level, 1) - 1) * var(--indent) + 18px);\n}\n.band-library-namecol {\n display: flex;\n align-items: baseline;\n gap: 8px;\n min-width: 0;\n}\n.band-library-namecol a {\n color: var(--ink);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-namecol a:hover {\n text-decoration: underline;\n}\n.band-library-attached {\n flex: none;\n max-width: 50%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-sub {\n display: none;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-row .c-type {\n color: var(--muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-ver {\n flex: none;\n font-family: var(--mono);\n font-size: var(--fs-meta);\n color: var(--muted);\n}\n.band-library-row .c-author {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-library-author {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-row .c-at {\n display: flex;\n align-items: center;\n gap: 6px;\n white-space: nowrap;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-library-ccount {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--ink);\n}\n.band-library-cicon {\n width: 14px;\n height: 14px;\n}\n.band-library-more {\n position: relative;\n display: inline-flex;\n}\n.band-library-morebtn {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n border: 0;\n padding: 0;\n background: none;\n color: var(--muted);\n border-radius: 6px;\n cursor: pointer;\n opacity: 0;\n}\n.band-library-row:hover .band-library-morebtn,\n.band-library-row:focus-within .band-library-morebtn,\n.band-library-morebtn[aria-expanded=true] {\n opacity: 1;\n}\n.band-library-morebtn:hover {\n background: var(--fill-2);\n color: var(--ink);\n}\n.band-library-morebtn svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n stroke: none;\n}\n.band-library-menu {\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n z-index: 20;\n min-width: 190px;\n padding: 5px;\n display: grid;\n border-radius: var(--r-lg);\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n}\n.band-library-menu button {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n border: 0;\n padding: 7px 10px;\n border-radius: 7px;\n background: none;\n color: var(--ink);\n font: inherit;\n font-size: var(--fs-row);\n text-align: left;\n cursor: pointer;\n}\n.band-library-menu button:hover,\n.band-library-menu button:focus-visible {\n background: var(--fill);\n}\n.band-library-menu kbd {\n font-family: var(--mono);\n font-size: var(--fs-badge);\n color: var(--muted);\n}\n.band-library-thumb {\n flex: none;\n display: grid;\n place-items: center;\n overflow: hidden;\n background: var(--fill-2);\n color: var(--muted);\n}\n.band-library-thumb:where([data-size=row]) {\n width: 28px;\n height: 28px;\n border-radius: 7px;\n}\n.band-library-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.band-library-glyph {\n width: 15px;\n height: 15px;\n}\n.band-library-skel {\n display: grid;\n gap: 8px;\n padding-top: 8px;\n}\n.band-library-skelrow {\n height: 44px;\n border-radius: 10px;\n background: var(--fill);\n animation: band-library-breathe 1.6s var(--ease) infinite alternate;\n}\n@keyframes band-library-breathe {\n to {\n opacity: 0.5;\n }\n}\n.band-library-grid {\n margin: 0;\n padding: 0;\n list-style: none;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));\n gap: 16px;\n}\n.band-library-card {\n display: grid;\n border-radius: 12px;\n background: var(--panel);\n box-shadow: var(--shadow-card);\n overflow: visible;\n transition: background var(--sixteenth) var(--ease);\n}\n.band-library-card:hover {\n box-shadow: var(--shadow-pop);\n}\n.band-library-card.is-unused {\n opacity: 0.5;\n}\n.band-library-card.is-skeleton {\n aspect-ratio: 4 / 4.2;\n animation: band-library-breathe 1.6s var(--ease) infinite alternate;\n}\n.band-library-card > a {\n display: grid;\n color: inherit;\n text-decoration: none;\n border-radius: 12px;\n overflow: hidden;\n}\n.band-library-thumb:where([data-size=card]) {\n aspect-ratio: 16 / 10;\n width: 100%;\n background: var(--sunk);\n}\n.band-library-thumb:where([data-size=card]) .band-library-glyph {\n width: 28px;\n height: 28px;\n stroke-width: 1.1;\n}\n.band-library-cardt {\n display: grid;\n gap: 3px;\n padding: 10px 12px 12px;\n min-width: 0;\n}\n.band-library-cardname {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-width: 0;\n}\n.band-library-cardname b {\n font-size: var(--fs-row);\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-card .band-library-sub {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n@media (prefers-reduced-motion: reduce) {\n .band-library-skelrow,\n .band-library-card.is-skeleton {\n animation: none;\n }\n}\n@container band-library (max-width: 1000px) {\n .band-library-table .c-type {\n display: none;\n }\n .band-library-table {\n --cols: minmax(0, 1fr) 92px 64px 132px 112px 32px;\n }\n .band-library-table[data-comments=off] {\n --cols: minmax(0, 1fr) 92px 132px 112px 32px;\n }\n}\n@container band-library (max-width: 820px) {\n .band-library-table .c-author {\n display: none;\n }\n .band-library-table {\n --cols: minmax(0, 1fr) 92px 64px 112px 32px;\n }\n .band-library-table[data-comments=off] {\n --cols: minmax(0, 1fr) 92px 112px 32px;\n }\n}\n@media (max-width: 600px) {\n .band-library {\n padding: 4px 16px 48px;\n gap: 12px;\n }\n .band-library-head .band-library-crumb {\n display: none;\n }\n .band-library-head {\n justify-content: flex-end;\n }\n .band-library-tools {\n width: 100%;\n }\n .band-library-search {\n flex: 1;\n width: auto;\n min-width: 0;\n }\n .band-library-chips button,\n .band-library-selects label {\n flex: none;\n white-space: nowrap;\n }\n .band-library-table {\n --indent: 12px;\n }\n .band-library-th {\n display: none;\n }\n .band-library-table .band-library-tr.band-library-row {\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-areas: "name status" "name comments";\n row-gap: 2px;\n padding: 8px;\n }\n .band-library-row .c-type,\n .band-library-row .c-author,\n .band-library-row .c-at,\n .band-library-row .c-more {\n display: none;\n }\n .band-library-row .c-name {\n grid-area: name;\n }\n .band-library-row .c-status {\n grid-area: status;\n justify-self: end;\n }\n .band-library-row .c-comments {\n grid-area: comments;\n justify-self: end;\n font-size: var(--fs-dense);\n }\n .band-library-row .c-comments .faint {\n display: none;\n }\n .band-library-thumb:where([data-size=row]) {\n width: 40px;\n height: 40px;\n border-radius: 9px;\n }\n .band-library-namecol {\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n }\n .band-library-attached {\n display: none;\n }\n .band-library-namecol .band-library-sub {\n display: block;\n }\n .band-library-namecol .band-library-ver {\n display: none;\n }\n .band-library-grid {\n grid-template-columns: 1fr;\n gap: 12px;\n }\n}\n.band-library:where(:has(.band-library-materials)) {\n grid-template-columns: minmax(0, 1fr) minmax(240px, 300px);\n gap: 24px;\n}\n.band-library-artifacts {\n container: band-library / inline-size;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 14px;\n min-width: 0;\n align-content: start;\n}\n.band-library-materials {\n min-width: 0;\n}\n.band-library-materials h2 {\n margin: 0;\n font-size: var(--fs-h2);\n}\n.band-library-materials-hint,\n.band-library-material-meta {\n color: var(--muted);\n font-size: var(--fs-caption);\n}\n.band-library-material-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.band-library-material-list li {\n display: grid;\n gap: 6px;\n padding: 12px 0;\n}\n.band-library-material-name {\n border: 0;\n background: none;\n padding: 0;\n color: var(--ink);\n font: inherit;\n text-align: left;\n text-decoration: none;\n overflow-wrap: anywhere;\n cursor: pointer;\n text-autospace: no-autospace;\n}\n.band-library-material-name:hover {\n text-decoration: underline;\n}\n.band-library-material-name:focus-visible {\n outline: 2px solid var(--accent);\n outline-offset: 3px;\n}\n.band-library-material-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 10px;\n}\n.band-library-material-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px 10px;\n}\n.band-library-material-version {\n font-variant-numeric: tabular-nums;\n color: var(--ink);\n}\n.band-library-material-latest {\n color: var(--accent-text);\n font-size: var(--fs-dense);\n}\n.band-library-material-note {\n margin: 0;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-material-history {\n display: grid;\n gap: 6px;\n padding: 8px 0 0 12px;\n border-left: 2px solid var(--hairline);\n}\n.band-library-material-versions {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.band-library-material-versions li {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 4px 10px;\n padding: 6px 0;\n}\n.band-library-material-actions .band-library-material-note {\n flex-basis: 100%;\n}\n.band-library-material-confirm {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 0;\n border: 0;\n font-size: var(--fs-dense);\n}\n.band-library-material-confirm p {\n margin: 0;\n}\n@media (max-width: 1100px) {\n .band-library:where(:has(.band-library-materials)) {\n grid-template-columns: minmax(0, 1fr);\n }\n}\n.band-library-preview {\n width: min(1180px, calc(100vw - 56px));\n height: calc(100dvh - 56px);\n max-width: none;\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-library-preview::backdrop {\n background: var(--scrim);\n}\n.band-library-preview-content,\n.band-library-preview-content > * {\n height: 100%;\n min-height: 0;\n}\n.band-library-preview-exit {\n position: absolute;\n top: 12px;\n right: 12px;\n}\n.band-library-preview-exit:where(.band-library-preview:has([data-band-preview-chrome]) > *) {\n visibility: hidden;\n pointer-events: none;\n}\n@media (max-width: 600px) {\n .band-library-preview {\n width: 100vw;\n height: 100dvh;\n border-radius: 0;\n }\n}\n.band-library-appthumb {\n aspect-ratio: 16 / 10;\n overflow: hidden;\n}\n.band-library-cardacts {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 0 12px 10px;\n}\n.band-library-mygrids {\n display: grid;\n gap: 20px;\n}\n.band-library-mygrouphead {\n font-size: var(--fs-row);\n margin: 0 0 12px;\n}\n.band-library-mygrouphead > span {\n color: var(--muted);\n font-weight: 400;\n}\n@media (max-width: 600px) {\n .band-library-grid {\n grid-template-columns: 1fr;\n gap: 12px;\n }\n}\n.band-library:where([data-view=grid]):where(:has(.band-library-materials)) {\n grid-template-columns: minmax(0, 1fr);\n}\n.band-library-morebtn:where(.band-library-card:hover *, .band-library-card:focus-within *, [aria-expanded=true]) {\n opacity: 1;\n}\n';let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-library"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-library");document.head.prepend(el)}el.textContent=css}function readView(key,search){const explicit=new URLSearchParams(search).get("view");if(explicit==="list"||explicit==="grid")return explicit;try{return window.localStorage.getItem(`band-library-view:${key}`)==="list"?"list":"grid"}catch{return"grid"}}function rememberView(key,view){try{window.localStorage.setItem(`band-library-view:${key}`,view)}catch{}}function useBrowseView(key){const[view,setView]=useState(()=>readView(key,window.location.search));useEffect(()=>{const pop=()=>setView(readView(key,window.location.search));window.addEventListener("popstate",pop);return()=>window.removeEventListener("popstate",pop)},[key]);return[view,next=>{rememberView(key,next);const url=new URL(window.location.href);url.searchParams.set("view",next);window.history.replaceState(window.history.state,"",url);setView(next)}]}function readPreview(search,projectId){const q=new URLSearchParams(search);const artifactId=q.get("artifact");const project=q.get("artifactProject")||projectId;if(!artifactId||!project)return null;const versionId=q.get("artifactVersion");return{projectId:project,artifactId,...versionId?{versionId}:{}}}function previewSearch(search,target){const q=new URLSearchParams(search);for(const key of["artifact","artifactProject","artifactVersion"])q.delete(key);if(target){q.set("artifact",target.artifactId);q.set("artifactProject",target.projectId);if(target.versionId)q.set("artifactVersion",target.versionId)}return q.size?`?${q}`:""}function useArtifactPreview(projectId){const[target,setTarget]=useState(()=>readPreview(window.location.search,projectId));useEffect(()=>{const pop=()=>setTarget(readPreview(window.location.search,projectId));window.addEventListener("popstate",pop);return()=>window.removeEventListener("popstate",pop)},[projectId]);const close=()=>{if(window.history.state?.bandArtifactPreview===window.location.pathname){window.history.back()}else{window.history.replaceState(window.history.state,"",`${window.location.pathname}${previewSearch(window.location.search,null)}${window.location.hash}`);setTarget(null)}};const open=next=>{const url=`${window.location.pathname}${previewSearch(window.location.search,next)}${window.location.hash}`;if(target)window.history.replaceState(window.history.state,"",url);else window.history.pushState({...window.history.state,bandArtifactPreview:window.location.pathname},"",url);setTarget(next)};return{target,open,close}}function ArtifactPreview({ctx,target,onClose}){const dialog=useRef(null);const close=useRef(onClose);close.current=onClose;useEffect2(()=>{const el=dialog.current;if(!el)return;const opener=document.activeElement;if(typeof el.showModal==="function")el.showModal();else el.setAttribute("open","");const key=withImeGuard(e=>{if(e.key!=="Escape"||e.defaultPrevented)return;const layers=document.querySelectorAll("[data-band-layer]");if(layers[layers.length-1]!==el)return;e.preventDefault();close.current()});window.addEventListener("keydown",key);return()=>{window.removeEventListener("keydown",key);if(typeof el.close==="function"&&el.open)el.close();if(opener instanceof HTMLElement&&opener.isConnected)opener.focus()}},[]);const down=useRef(false);return createPortal(jsxs("dialog",{ref:dialog,className:"band-library-preview","data-band-layer":"dialog","aria-label":"\u4EA7\u7269\u8BE6\u60C5",onCancel:e=>{e.preventDefault();close.current()},onMouseDown:e=>{down.current=e.target===e.currentTarget},onClick:e=>{if(down.current&&e.target===e.currentTarget)close.current();down.current=false},children:[jsx("button",{type:"button",className:"iconbtn band-library-preview-exit","aria-label":"\u5173\u95ED\u4EA7\u7269\u8BE6\u60C5",onClick:()=>close.current(),children:"\xD7"}),jsx(Mount,{className:"band-library-preview-content",mount:el=>{const service=ctx.services.find("@kanyun-ai-infra/band-project/artifact-preview");if(!service){const message=document.createElement("p");message.textContent="\u8FD9\u4E2A\u7248\u672C\u7684 Band \u8FD8\u6CA1\u6709\u4EA7\u7269\u9884\u89C8";const link=document.createElement("a");link.href=projectPath({id:target.projectId},"a",target.artifactId);link.textContent="\u53BB\u4EA7\u7269\u9875\u67E5\u770B";el.append(message,link);return()=>{message.remove();link.remove()}}return service.mount(el,{projectId:target.projectId,request:{artifactId:target.artifactId,...target.versionId?{versionId:target.versionId}:{}},close:()=>close.current(),onVersionChange:versionId=>{const search=previewSearch(window.location.search,{...target,versionId});window.history.replaceState(window.history.state,"",`${window.location.pathname}${search}${window.location.hash}`)}})},deps:[ctx,target.projectId,target.artifactId,target.versionId]})]}),document.body)}function materialOf(r){return r.artifactId&&r.versionId?{artifactId:r.artifactId,versionId:r.versionId}:null}function VersionBadge({r}){if(r.versionNumber===void 0)return null;return jsxs2("span",{className:"band-library-material-version",title:"\u7D20\u6750\u7684\u7B2C\u51E0\u7248",children:["v",r.versionNumber]})}function problemText(e){const code=e?.code;const msg=e instanceof Error?e.message:String(e);if(code==="CONFLICT")return`${msg}\uFF08\u5DF2\u5237\u65B0\uFF09`;return msg}function ReplaceButton({ctx,r,onChanged}){const m=materialOf(r);const input=useRef2(null);const[busy,setBusy]=useState2(false);const[note,setNote]=useState2(null);if(!m||!ctx.attachments.replace)return null;if(note?.forVersionId!==void 0&&note.forVersionId!==m.versionId)setNote(null);const replace=ctx.attachments.replace;const pick=file=>{if(!file)return;setBusy(true);setNote(null);replace(m.artifactId,file,{expectedVersionId:m.versionId}).then(res=>{setBusy(false);setNote(res.unchanged?{text:"\u548C\u73B0\u5728\u7684\u6700\u65B0\u7248\u4E00\u6837\uFF0C\u6CA1\u6709\u65B0\u7248\u672C",forVersionId:m.versionId}:null);onChanged()},e=>{setBusy(false);setNote({text:`\u300C${r.name}\u300D\u6CA1\u6362\u6210\uFF1A${problemText(e)}`});onChanged()})};return jsxs2(Fragment,{children:[jsx2("button",{type:"button",className:"btn ghost sm",disabled:busy,"aria-label":`\u66FF\u6362 ${r.name} \u4E3A\u65B0\u7248\u672C`,onClick:()=>input.current?.click(),children:busy?"\u6B63\u5728\u66FF\u6362\u2026":"\u66FF\u6362\u4E3A\u65B0\u7248\u672C"}),jsx2("input",{ref:input,type:"file",hidden:true,tabIndex:-1,onChange:e=>{pick(e.currentTarget.files?.[0]);e.currentTarget.value=""}}),note&&jsx2("output",{className:"band-library-material-note",children:note.text})]})}function MaterialHistory({ctx,r,members,canReplace,whenText:whenText2,now,preview,onChanged}){const m=materialOf(r);const versions=ctx.attachments.versions;const history=useCtxData(ctx,()=>m&&versions?versions(m.artifactId):Promise.resolve(null),[m?.artifactId,m?.versionId],"version.*");const[busy,setBusy]=useState2(null);const[note,setNote]=useState2(null);if(!m)return null;const data=history.data;const revert=(sha256,number)=>{const replace=ctx.attachments.replace;if(!replace||!data)return;setBusy(sha256);setNote(null);replace(m.artifactId,{sha256},{expectedVersionId:data.latestVersionId}).then(()=>{setBusy(null);onChanged();history.reload()},e=>{setBusy(null);setNote(`\u6CA1\u80FD\u8BBE\u4E3A v${number}\uFF1A${problemText(e)}`);history.reload();onChanged()})};return jsxs2("section",{className:"band-library-material-history","aria-label":`${r.name} \u7684\u7248\u672C\u5386\u53F2`,children:[history.error&&jsxs2(ErrorNote,{retry:history.reload,children:["\u7248\u672C\u5386\u53F2\u6CA1\u53D6\u5230\uFF1A",history.error]}),data===void 0&&!history.error&&jsx2("output",{children:"\u6B63\u5728\u8BFB\u53D6\u7248\u672C\u2026"}),note&&jsx2("output",{className:"band-library-material-note",children:note}),jsx2("ol",{className:"band-library-material-versions",children:data?.versions.map(v=>{const latest=v.versionId===data.latestVersionId;return jsxs2("li",{children:[jsxs2("span",{className:"band-library-material-version",children:["v",v.number]}),latest&&jsx2("span",{className:"band-library-material-latest",children:"\u6700\u65B0"}),jsxs2("span",{className:"band-library-material-meta",children:[jsx2("span",{children:fileSizeText(v.attachment.size)}),jsx2("span",{children:memberName(members,v.author.id)}),jsx2("time",{dateTime:v.createdAt,title:v.createdAt,children:whenText2(v.createdAt,now)})]}),jsxs2("span",{className:"band-library-material-actions",children:[jsx2("button",{type:"button",className:"btn ghost sm","aria-label":`\u67E5\u770B v${v.number}`,onClick:()=>preview({id:v.attachment.id,name:v.attachment.name,artifactId:m.artifactId,versionId:v.versionId}),children:"\u67E5\u770B"}),canReplace&&!latest&&ctx.attachments.replace&&jsx2("button",{type:"button",className:"btn ghost sm",disabled:busy!==null,"aria-label":`\u628A v${v.number} \u8BBE\u4E3A\u6700\u65B0`,onClick:()=>revert(v.attachment.sha256,v.number),children:busy===v.attachment.sha256?"\u6B63\u5728\u8BBE\u7F6E\u2026":"\u8BBE\u4E3A\u6700\u65B0"})]})]},v.versionId)})})]})}var STATUS={not_started:{key:"not_started",label:"\u672A\u5F00\u59CB",chip:"s-blocked"},rerun:{key:"rerun",label:"\u5F85\u91CD\u8DD1",chip:"s-blocked"},running:{key:"running",label:"\u751F\u6210\u4E2D",chip:"s-running"},review:{key:"review",label:"\u5F85\u8BC4\u5BA1",chip:"s-awaiting"},approved:{key:"approved",label:"\u5DF2\u6279\u51C6",chip:"s-approved"},completed:{key:"completed",label:"\u5DF2\u5B8C\u6210",chip:"s-approved"},picked:{key:"picked",label:"\u5DF2\u9009",chip:"s-approved"},unused:{key:"unused",label:"\u4E0D\u7528\u4E86",chip:"plain"},stale:{key:"stale",label:"\u5F85\u66F4\u65B0",chip:"s-stale"},failed:{key:"failed",label:"\u5931\u8D25",chip:"s-failed"},delivered:{key:"delivered",label:"\u5DF2\u4EA4\u4ED8",chip:"plain"},process:{key:"process",label:"\u8FC7\u7A0B",chip:"plain"}};function statusOfKey(key){return STATUS[key]}function noGate(stage){return stage?.gated===false}function statusOf(a,stage,gate){if(a.role==="process")return STATUS.process;if(a.unused)return STATUS.unused;const s=stage?.status;const hasVersion=a.latest!==void 0;if(s==="failed")return STATUS.failed;if(s==="stale")return STATUS.stale;if(s==="in_progress")return STATUS.running;if(s==="approved"&&noGate(stage))return STATUS.completed;if(s==="approved")return gate?.per==="pick"?STATUS.picked:STATUS.approved;if(s==="in_review"){if(gate?.per==="key"&&a.key&&gate.approvals?.some(v=>v.key===a.key)){return STATUS.approved}return STATUS.review}if(s===void 0)return hasVersion?STATUS.delivered:STATUS.not_started;return hasVersion?STATUS.rerun:STATUS.not_started}var TYPE_TEXT={web:"\u7F51\u9875",doc:"\u6587\u6863",image:"\u56FE\u7247",video:"\u89C6\u9891",audio:"\u97F3\u9891",external:"\u5916\u90E8",other:"\u5176\u4ED6"};function artifactTypeOf(artifactType,views){const viewer=views.artifactTypes?.[artifactType]?.viewer??"";const short=viewer.replace(/^@[^/]+\/band-viewer-/,"").replace(/^viewer-/,"");if(short==="web")return"web";if(short==="text")return"doc";if(short==="image")return"image";if(short==="media")return"video";if(short==="external")return"external";return"other"}function attachmentTypeOf(a){if(a.mime.startsWith("image/"))return"image";if(a.mime.startsWith("video/"))return"video";if(a.mime.startsWith("audio/"))return"audio";return a.kind==="document"||a.kind==="code"||a.kind==="notebook"?"doc":"other"}var OPEN_STATUSES=["open","queued","running","awaiting_confirm"];function artifactRows(artifacts,opts){const counts=new Map;for(const t of opts.threads??[]){if(t.artifactId!==void 0)counts.set(t.artifactId,(counts.get(t.artifactId)??0)+1)}return artifacts.map((a,order)=>{const stage=a.stage?opts.stages.find(s=>s.stage===a.stage):void 0;return{kind:"artifact",id:a.id,name:a.name,type:artifactTypeOf(a.artifactType,opts.views),artifactType:a.artifactType,...a.stage?{stage:a.stage}:{},...a.key?{key:a.key}:{},...a.role==="process"?{process:true}:{},order,...a.latest?.number!==void 0?{version:a.latest.number}:{},...a.latest?{versionId:a.latest.versionId,at:a.latest.at}:{},...a.latest?.author?{author:a.latest.author.id,authorAgent:a.latest.author.kind==="agent"}:{},status:statusOf(a,stage,a.stage?opts.gates[a.stage]:void 0),...opts.threads?{comments:counts.get(a.id)??0}:{}}})}var DEFAULT_FILTERS={status:"all",type:"all",q:""};function matchesStatus(r,f){if(f==="review")return r.status.key==="review";if(f==="comments")return(r.comments??0)>0;if(f==="approved")return r.status.key==="approved"||r.status.key==="picked";return true}function matchesQuery(r,q){const needle=q.trim().toLowerCase();if(needle==="")return true;return r.name.toLowerCase().includes(needle)}function applyFilters(rows,f){return rows.filter(r=>{if(!matchesStatus(r,f.status))return false;if(f.type!=="all"&&r.type!==f.type)return false;return matchesQuery(r,f.q)})}function isFiltering(f){return f.status!=="all"||f.type!=="all"||f.q.trim()!==""}function statusCounts(rows){return{all:rows.length,review:rows.filter(r=>matchesStatus(r,"review")).length,comments:rows.filter(r=>matchesStatus(r,"comments")).length,approved:rows.filter(r=>matchesStatus(r,"approved")).length}}function typesPresent(rows){const have=new Set(rows.map(r=>r.type));return Object.keys(TYPE_TEXT).filter(t=>have.has(t))}function emptyReason(f){const parts=[];if(f.status!=="all")parts.push(`\u300C${STATUS_FILTER_TEXT[f.status]}\u300D\u91CC`);if(f.type!=="all")parts.push(`\u300C${TYPE_TEXT[f.type]}\u300D\u91CC`);const q=f.q.trim();return`${parts.join("")}\u6CA1\u6709${q?`\u540D\u5B57\u542B\u300C${q}\u300D\u7684`:""}\u4EA7\u7269`}var STATUS_FILTER_TEXT={all:"\u5168\u90E8",review:"\u5F85\u8BC4\u5BA1",comments:"\u6709\u610F\u89C1",approved:"\u5DF2\u6279\u51C6"};var DEFAULT_SORT={key:"updated",dir:"desc"};function compare(a,b,sort){const sign=sort.dir==="asc"?1:-1;if(sort.key==="name")return sign*a.name.localeCompare(b.name,"zh");const ta=a.at??"";const tb=b.at??"";return sign*(ta<tb?-1:ta>tb?1:0)}function sortRows(rows,sort){const clusters=new Map;const singles=[];for(const a of rows){if(a.stage&&a.key&&a.key!=="main"){const id=`${a.stage}:${a.artifactType}`;const c=clusters.get(id);if(c)c.push(a);else{const list=[a];clusters.set(id,list);singles.push(list)}}else singles.push([a])}for(const c of clusters.values())c.sort((x,y)=>x.order-y.order);const head=list=>sort.key==="updated"?list.reduce((m,r)=>(r.at??"")>(m.at??"")?r:m):list[0];singles.sort((x,y)=>compare(head(x),head(y),sort));return singles.flat()}function fanNames(rows){const prefix=n=>{const i=n.lastIndexOf(" \xB7 ");return i>0?n.slice(0,i):null};const p=prefix(rows[0]?.name??"");if(p&&rows.every(r=>prefix(r.name)===p))return{label:p,leaf:r=>r.name.slice(p.length+3)};return{label:rows[0]?.artifactType??"",leaf:r=>r.name}}var leafOf=(row,label)=>({kind:"leaf",row,...label!==void 0?{label}:{}});function stageChildren(stage,rows,sort){const fans=new Map;for(const r of rows){if(!r.key||r.key==="main")continue;const list=fans.get(r.artifactType);if(list)list.push(r);else fans.set(r.artifactType,[r])}const groups=[...fans.values()].filter(g=>g.length>1);const flat=groups.length===1&&groups[0]?.length===rows.length;const inFan=new Set(groups.flat());const blocks=[];for(const g of groups){const members=[...g].sort((a,b)=>a.order-b.order);const names=fanNames(members);const leaves=members.map(r=>{const short=names.leaf(r);return leafOf(r,short===r.name?void 0:short)});const head=sort.key==="updated"?members.reduce((m,r)=>(r.at??"")>(m.at??"")?r:m):members[0];blocks.push({head,node:flat?leaves:{kind:"folder",id:`fan:${stage}:${g[0]?.artifactType}`,label:names.label,count:members.length,children:leaves}})}for(const r of rows)if(!inFan.has(r))blocks.push({head:r,node:leafOf(r)});blocks.sort((x,y)=>compare(x.head,y.head,sort));return blocks.flatMap(b=>b.node)}function buildTree(rows,opts){const arts=rows.filter(r=>r.process!==true);const process=rows.filter(r=>r.process===true);const out=[];const placed=new Set;const known=new Set(opts.stages.map(s=>s.stage));const extra=[...new Set(arts.flatMap(r=>r.stage!==void 0&&!known.has(r.stage)?[r.stage]:[]))].map(stage=>({stage}));for(const s of[...opts.stages,...extra]){const list=arts.filter(r=>r.stage===s.stage);if(list.length===0)continue;for(const r of list)placed.add(r);out.push({kind:"folder",id:`stage:${s.stage}`,label:s.name??s.stage,stage:s.stage,count:list.length,children:stageChildren(s.stage,list,opts.sort)})}const rest=arts.filter(r=>!placed.has(r));if(rest.length>0)out.push({kind:"folder",id:"other",label:"\u5176\u4ED6",count:rest.length,children:sortRows(rest,opts.sort).map(r=>leafOf(r))});if(process.length>0)out.push({kind:"folder",id:"process",label:"\u8FC7\u7A0B\u6587\u6863",process:true,count:process.length,children:sortRows(process,opts.sort).map(r=>leafOf(r))});return out}function defaultExpanded(f){return f.id!=="process"}function visibleNodes(tree,expanded){const out=[];const walk=(nodes,level,parent)=>{nodes.forEach((node,i)=>{out.push({node,level,setsize:nodes.length,posinset:i+1,...parent!==void 0?{parent}:{}});if(node.kind==="folder"&&expanded(node))walk(node.children,level+1,node.id)})};walk(tree,1);return out}function gateSummary(stage,gate,opts={}){if(!stage)return void 0;const role=opts.roleLabel??(r=>r);const who=ids=>ids.map(opts.memberName??(x=>x)).join("\u3001");if(stage.status==="approved"){if(noGate(stage))return"\u5DF2\u5B8C\u6210";if(gate?.per==="pick"&&opts.picked)return`\u5DF2\u9009\u300C${opts.picked}\u300D`;return gate?.approvedBy.length?`\u5DF2\u6279\u51C6 \xB7 ${who(gate.approvedBy)}`:"\u5DF2\u901A\u8FC7"}if(stage.status==="in_review"){if(gate?.per==="pick")return"\u6311\u9009\u4E2D \xB7 \u6BCF\u4EBA\u4E00\u7968";const roles=gate?.approveBy?.map(role)??[];if(!roles.length)return"\u5F85\u8BC4\u5BA1";return`\u5F85\u8BC4\u5BA1 \xB7 ${gateRule(roles,gate?.mode).trimStart()}`}if(stage.status==="in_progress")return"\u751F\u6210\u4E2D";if(stage.status==="stale")return"\u4E0A\u6E38\u6709\u4E86\u65B0\u7248\u672C";if(stage.status==="failed")return"\u5931\u8D25";return"\u7B49\u4E0A\u6E38"}function whenText(iso,now){const t=new Date(iso);const mins=Math.floor((now.getTime()-t.getTime())/6e4);const hm=`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`;if(mins<1)return"\u521A\u521A";if(mins<60)return`${mins} \u5206\u949F\u524D`;if(mins<60*6)return`${Math.floor(mins/60)} \u5C0F\u65F6\u524D`;const day=d=>new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime();const days=Math.round((day(now)-day(t))/864e5);if(days===0)return`\u4ECA\u5929 ${hm}`;if(days===1)return`\u6628\u5929 ${hm}`;return`${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${hm}`}function materialUses(material,rows){const byArtifact=new Map;for(const u of material.usedIn??[])if(!byArtifact.has(u.artifactId))byArtifact.set(u.artifactId,u.number);return rows.flatMap(r=>{const number=byArtifact.get(r.id);return number===void 0?[]:[{artifactId:r.id,name:r.name,number}]})}function TypeGlyph({type}){const d={web:jsxs3(Fragment2,{children:[jsx3("rect",{x:"2.5",y:"3",width:"11",height:"10",rx:"1.5"}),jsx3("path",{d:"M2.5 5.8h11"})]}),doc:jsxs3(Fragment2,{children:[jsx3("path",{d:"M4 2.5h5.5L12 5v8.5H4z"}),jsx3("path",{d:"M6 7.5h4M6 10h4"})]}),image:jsxs3(Fragment2,{children:[jsx3("rect",{x:"2.5",y:"3",width:"11",height:"10",rx:"1.5"}),jsx3("path",{d:"M2.5 11l3.2-3.2 2.6 2.6 1.6-1.6 3.6 3.6"})]}),video:jsxs3(Fragment2,{children:[jsx3("rect",{x:"2.5",y:"3",width:"11",height:"10",rx:"1.5"}),jsx3("path",{d:"M7 6.2v3.6L10 8z"})]}),audio:jsx3("path",{d:"M3 9v-2M5.5 11V5M8 13V3M10.5 11V5M13 9V7"}),external:jsx3("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"}),other:jsxs3(Fragment2,{children:[jsx3("rect",{x:"3",y:"3",width:"10",height:"10",rx:"2"}),jsx3("path",{d:"M6 8h4"})]})};return jsx3("svg",{viewBox:"0 0 16 16",className:"band-library-glyph","aria-hidden":"true",children:d[type]})}var IMAGE_EXT=/\.(png|jpe?g|gif|webp|svg|avif)$/i;function useInView(){const ref=useRef3(null);const[seen,setSeen]=useState3(false);useEffect3(()=>{const el=ref.current;if(!el||seen)return;if(typeof IntersectionObserver==="undefined"){setSeen(true);return}const io=new IntersectionObserver(entries=>{if(entries.some(e=>e.isIntersecting)){setSeen(true);io.disconnect()}});io.observe(el);return()=>io.disconnect()},[seen]);return[ref,seen]}var IMAGE_ENTRY=new Map;function Thumb({ctx,row,size}){const[ref,seen]=useInView();const[src,setSrc]=useState3(null);const[broken,setBroken]=useState3(false);const wantsImage=row.type==="image";const versionId=row.versionId;useEffect3(()=>{if(!seen||!wantsImage)return;let live=true;setBroken(false);const load=async()=>{if(!versionId)return null;let path=IMAGE_ENTRY.get(versionId);if(path===void 0){const versions=await ctx.version.list(row.id);const v=versions.find(x=>x.id===versionId);path=v?.entries.find(e=>IMAGE_EXT.test(e.path))?.path??null;IMAGE_ENTRY.set(versionId,path)}return path?ctx.version.objectUrl(path,{versionId}):null};load().then(url=>{if(live)setSrc(url)},()=>{if(live)setBroken(true)});return()=>{live=false}},[ctx,seen,wantsImage,row.id,versionId]);return jsx3("span",{ref,className:"band-library-thumb","data-size":size,"data-type":row.type,children:src&&!broken?jsx3("img",{src,alt:"",loading:"lazy",onError:()=>setBroken(true)}):jsx3(TypeGlyph,{type:row.type})})}var TABS=["joined","mine","review","starred"];var TAB_TEXT={joined:"\u6211\u53C2\u4E0E\u7684",mine:"\u6211\u4EA7\u51FA\u7684",review:"\u7B49\u6211\u8BC4\u5BA1\u7684",starred:"\u6536\u85CF"};function tabOf(value){return value==="mine"||value==="review"||value==="starred"?value:"joined"}var DEFAULT_FILTERS2={workshop:"",project:"",type:"all",status:"all",q:""};var GROUP_TEXT={none:"\u4E0D\u5206\u7EC4",workshop:"\u6309\u5DE5\u574A",project:"\u6309\u9879\u76EE"};function isFiltering2(f){return f.workshop!==""||f.project!==""||f.type!=="all"||f.status!=="all"||f.q.trim()!==""}function parseQuery(search){const q=new URLSearchParams(search);const type=q.get("type");const status=q.get("status");const group=q.get("group");return{tab:tabOf(q.get("tab")),filters:{workshop:q.get("workshop")??"",project:q.get("project")??"",type:TYPE_KEYS.includes(type)?type:"all",status:STATUS_KEYS.includes(status)?status:"all",q:q.get("q")??""},group:group==="workshop"||group==="project"?group:"none"}}function buildQuery(s){const q=new URLSearchParams;if(s.tab!=="joined")q.set("tab",s.tab);if(s.filters.workshop)q.set("workshop",s.filters.workshop);if(s.filters.project)q.set("project",s.filters.project);if(s.filters.type!=="all")q.set("type",s.filters.type);if(s.filters.status!=="all")q.set("status",s.filters.status);const text=s.filters.q.trim();if(text)q.set("q",text);if(s.group!=="none")q.set("group",s.group);const text2=q.toString();return text2===""?"":`?${text2}`}function queryOf(tab,f){const q={tab};if(f.workshop)q.workshop=f.workshop;if(f.project)q.project=f.project;if(f.type!=="all")q.type=f.type;if(f.status!=="all")q.status=f.status;const text=f.q.trim();if(text)q.q=text;return q}var TYPE_KEYS=["web","doc","image","video","audio","external","other"];var STATUS_OPTIONS=[["not_started","\u672A\u5F00\u59CB"],["rerun","\u5F85\u91CD\u8DD1"],["running","\u751F\u6210\u4E2D"],["review","\u5F85\u8BC4\u5BA1"],["stale","\u5F85\u66F4\u65B0"],["approved","\u5DF2\u6279\u51C6"],["completed","\u5DF2\u5B8C\u6210"],["picked","\u5DF2\u9009"],["unused","\u4E0D\u7528\u4E86"],["failed","\u5931\u8D25"],["delivered","\u5DF2\u4EA4\u4ED8"],["process","\u8FC7\u7A0B"]];var STATUS_KEYS=STATUS_OPTIONS.map(([k])=>k);var VISIBILITY_TEXT={members:"\u53EA\u6709\u9879\u76EE\u6210\u5458",team:"\u8FD9\u4E2A\u5DE5\u574A\u7684\u4EBA",users:"\u9879\u76EE\u6210\u5458\u548C\u6307\u5B9A\u7684\u4EBA",everyone:"\u516C\u53F8\u5185\u6240\u6709\u4EBA"};function accessText(a){const base=VISIBILITY_TEXT[a.visibility]??a.visibility;return a.shared?`${base} \xB7 \u5DF2\u5206\u4EAB`:base}function shownVersion(row,tab){return tab==="mine"?row.mine??row.latest:row.latest}function statusOf2(row){return statusOfKey(row.status)}function groupRows(rows,by){if(by==="none")return[];const out=[];const at=new Map;for(const r of rows){const key=by==="workshop"?r.project.workshop.id:r.project.id;let g=at.get(key);if(!g){g={key,label:by==="workshop"?r.project.workshop.name:r.project.name,...r.project.workshop.icon?{icon:r.project.workshop.icon}:{},rows:[]};at.set(key,g);out.push(g)}g.rows.push(r)}return out}function narrowProject(f,projects){if(!f.project)return f;const p=projects.find(x=>x.id===f.project);if(p&&(!f.workshop||p.workshop.id===f.workshop))return f;return{...f,project:""}}function projectOptions(facets,workshop){return workshop?facets.projects.filter(p=>p.workshop.id===workshop):facets.projects}function emptyOf(tab){if(tab==="mine")return{title:"\u8FD8\u6CA1\u6709\u4F60\u7ECF\u624B\u7684\u4EA7\u7269",hint:"\u4EA4\u7ED9 Rondo \u6216\u4EA4\u4ED8\u4E00\u4E2A\u7248\u672C\u540E\uFF0C\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC"};if(tab==="review")return{title:"\u73B0\u5728\u6CA1\u6709\u7B49\u4F60\u8BC4\u5BA1\u7684\u4EA7\u7269",hint:"\u6709\u4EBA\u8BF7\u4F60\u6279\u51C6\u6216\u786E\u8BA4\u65F6\uFF0C\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC"};if(tab==="starred")return{title:"\u8FD8\u6CA1\u6709\u6536\u85CF",hint:"\u5728\u4EFB\u610F\u4E00\u884C\u70B9\u661F\u5C31\u80FD\u6536\u8FDB\u6765"};return{title:"\u8FD8\u6CA1\u6709\u53C2\u4E0E\u7684\u9879\u76EE",hint:"\u52A0\u5165\u4E00\u4E2A\u9879\u76EE\uFF0C\u6216\u8005\u7528\u5DE5\u574A\u65B0\u5EFA\u4E00\u4E2A",action:"\u53BB\u5DE5\u574A"}}function filteredReason(f,names){const parts=[];if(f.workshop)parts.push(`\u5DE5\u574A\u300C${names.workshop??f.workshop}\u300D`);if(f.project)parts.push(`\u9879\u76EE\u300C${names.project??f.project}\u300D`);if(f.type!=="all")parts.push(`\u7C7B\u578B\u300C${TYPE_TEXT_OF[f.type]}\u300D`);if(f.status!=="all")parts.push(`\u72B6\u6001\u300C${statusOfKey(f.status).label}\u300D`);const q=f.q.trim();if(q)parts.push(`\u540D\u5B57\u542B\u300C${q}\u300D`);return parts.length===0?"\u6CA1\u6709\u7B26\u5408\u6761\u4EF6\u7684\u4EA7\u7269":`${parts.join("\u3001")}\u91CC\u6CA1\u6709\u4EA7\u7269`}var TYPE_TEXT_OF={web:"\u7F51\u9875",doc:"\u6587\u6863",image:"\u56FE\u7247",video:"\u89C6\u9891",audio:"\u97F3\u9891",external:"\u5916\u90E8",other:"\u5176\u4ED6"};var HIDDEN_PROJECT_TEXT="\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE\uFF0C\u6216\u8005\u4F60\u8FD8\u4E0D\u662F\u5B83\u7684\u6210\u5458";function projectUnknown(f,facets){if(!f.project||!facets)return false;return!facets.projects.some(p=>p.id===f.project)}function artifactName(row){const prefix=`${row.project.name} \xB7 `;return row.name.startsWith(prefix)&&row.name.length>prefix.length?row.name.slice(prefix.length):row.name}var PROJECT="@kanyun-ai-infra/band-project";var WORKSHOPS="@kanyun-ai-infra/band-workshops/workshops";function readerOf(data){return data?.myArtifacts}function readUrl(){return parseQuery(typeof window==="undefined"?"":window.location.search)}function writeUrl(state){const query=new URLSearchParams(buildQuery(state));const current=new URLSearchParams(window.location.search);for(const key of["view","artifact","artifactProject","artifactVersion"]){const value=current.get(key);if(value!==null)query.set(key,value)}window.history.replaceState(window.history.state,"",`${window.location.pathname}${query.size?`?${query}`:""}${window.location.hash}`)}function SearchIcon(){return jsxs4("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx4("circle",{cx:"7",cy:"7",r:"4.2"}),jsx4("path",{d:"M10.2 10.2l3 3"})]})}function CommentIcon(){return jsx4("svg",{viewBox:"0 0 16 16",className:"band-library-cicon","aria-hidden":"true",children:jsx4("path",{d:"M3 3.5h10v7H7l-3 2.5v-2.5H3z"})})}function Fermata(){return jsx4("span",{className:"glyph needs band-library-myneeds",role:"img","aria-label":"\u9700\u8981\u4F60"})}function plainClick(e){return!(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)}function needsMe(row,tab){return tab==="review"&&row.status==="review"}function addressOf(row){return{id:row.project.id,slug:row.project.slug,workshop:row.project.workshop.id}}function artifactHref(row){return projectPath2(addressOf(row),"a",row.artifactId)}function useDebounced(value,ms){const[v,setV]=useState4(value);useEffect4(()=>{const t=setTimeout(()=>setV(value),ms);return()=>clearTimeout(t)},[value,ms]);return v}var EMPTY={counts:{joined:0,mine:0,review:0,starred:0},facets:{workshops:[],projects:[],types:[]},rows:[]};function favoritesOf(ctx){return ctx.app.data.write?.artifactFavorites}function StarIcon({on}){return on?jsx4("svg",{viewBox:"0 0 16 16",fill:"currentColor","aria-hidden":"true",children:jsx4("path",{d:"M8 1.6l1.9 4 4.4.5-3.3 3 .9 4.4L8 11.3 4.1 13.5 5 9.1 1.7 6.1l4.4-.5z"})}):jsx4("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.3","aria-hidden":"true",children:jsx4("path",{d:"M8 1.6l1.9 4 4.4.5-3.3 3 .9 4.4L8 11.3 4.1 13.5 5 9.1 1.7 6.1l4.4-.5z"})})}function Star({row,onSet}){return jsx4("button",{type:"button",className:"band-library-star","aria-pressed":row.starred,"aria-label":row.starred?"\u53D6\u6D88\u6536\u85CF":"\u6536\u85CF",title:row.starred?"\u53D6\u6D88\u6536\u85CF":"\u6536\u85CF",onClick:e=>{e.stopPropagation();onSet(row,!row.starred)},children:jsx4(StarIcon,{on:row.starred})})}function MyArtifacts({ctx}){const[viewMode,setViewMode]=useBrowseView(`${ctx.app.member.id}:app`);const preview=useArtifactPreview();const[url,setUrl]=useState4(()=>readUrl());const[filters,setFilters]=useState4(url.filters);const[group,setGroup]=useState4(url.group);const[drawer,setDrawer]=useState4(false);const[menuFor,setMenuFor]=useState4(null);const[toast,setToast]=useState4("");const screen=useRef4(null);const search=useRef4(null);const{settled:q,imeProps}=useSettledText(filters.q);const debounced=useDebounced(q,250);const settled=filters.q===""?"":debounced;const typed=useMemo(()=>({...filters,q}),[filters,q]);const active=useMemo(()=>({...typed,q:settled}),[typed,settled]);const tab=url.tab;useEffect4(()=>{const onPop=()=>{const next=readUrl();setUrl(next);setFilters(next.filters);setGroup(next.group)};window.addEventListener("popstate",onPop);return()=>window.removeEventListener("popstate",onPop)},[]);const commit=next=>{const state={tab:next.tab??tab,filters:next.filters??typed,group:next.group??group};setUrl(state);setFilters(state.filters);setGroup(state.group);writeUrl(state)};const query=queryOf(tab,active);const read=readerOf(ctx.app.data);const{data,error,reload}=useAppData(ctx,async()=>read?read(query):null,[query.tab,query.workshop,query.project,query.type,query.status,query.q]);const view=data??EMPTY;const rows=view.rows;const facets=view.facets;const filtered=isFiltering2(active);const canStar=favoritesOf(ctx)!==void 0;const[pending,setPending]=useState4({});const[starTotal,setStarTotal]=useState4(null);const setStar=async(row,on)=>{const api=favoritesOf(ctx);if(!api)return;setPending(p=>({...p,[row.artifactId]:on}));try{const r=await api.set(row.artifactId,on);setStarTotal(r.total);if(!on&&tab==="starred")reload()}catch{setPending(p=>({...p,[row.artifactId]:!on}));setToast(on?"\u6CA1\u80FD\u6536\u85CF\uFF1A\u4F60\u53EF\u80FD\u5DF2\u7ECF\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE\u7684\u6743\u9650":"\u6CA1\u80FD\u53D6\u6D88\u6536\u85CF\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5")}};const starred=row=>pending[row.artifactId]??row.starred;const counts=starTotal===null||filtered?view.counts:{...view.counts,starred:starTotal};useEffect4(()=>{setPending({});setStarTotal(null)},[data]);useEffect4(()=>{if(filters.q!==""&&debounced!==q)return;if(typed.q===url.filters.q)return;const state={tab,filters:typed,group};writeUrl(state);setUrl(state)},[q,debounced,filters.q,url.filters.q,tab,group]);useEffect4(()=>{const onKey=withImeGuard2(e=>{if(e.key!=="/"||e.metaKey||e.ctrlKey||e.altKey||e.defaultPrevented)return;const t=e.target instanceof HTMLElement?e.target:null;if(t&&t!==document.body&&!screen.current?.contains(t))return;if(t&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName)))return;e.preventDefault();search.current?.focus()});document.addEventListener("keydown",onKey);return()=>document.removeEventListener("keydown",onKey)},[]);useEffect4(()=>{if(!toast)return;const t=setTimeout(()=>setToast(""),2e3);return()=>clearTimeout(t)},[toast]);useEffect4(()=>{if(!active.project||!active.workshop)return;const p=facets.projects.find(x=>x.id===active.project);if(!p||p.workshop.id===active.workshop)return;commit({filters:{...active,project:""}})},[active.project,active.workshop,facets.projects]);const setFilter=patch=>commit({filters:narrowProject({...typed,...patch},facets.projects)});const clearFilters=()=>{setDrawer(false);setFilters(DEFAULT_FILTERS2);commit({filters:DEFAULT_FILTERS2})};const openArtifact=(row,newTab=false)=>{if(newTab){window.open(artifactHref(row),"_blank","noopener");return}if(!ctx.services.find("@kanyun-ai-infra/band-project/artifact-preview")){ctx.app.navigate({page:`${PROJECT}/artifact`,params:{workshop:row.project.workshop.id,project:row.project.id,artifact:row.artifactId}});return}const candidates=[...screen.current?.querySelectorAll("[data-row]")??[]].filter(el=>el.dataset.row===row.artifactId);const origin=(candidates.find(el=>el.getClientRects().length>0)??candidates[0])?.querySelector("a");origin?.focus();const version=tab==="mine"?row.mine:void 0;preview.open({projectId:row.project.id,artifactId:row.artifactId,...version?{versionId:version.versionId}:{}})};const openInProject=row=>ctx.app.navigate({page:`${PROJECT}/project`,params:{workshop:row.project.workshop.id,project:row.project.id}});const copyLink=row=>{const url2=new URL(artifactHref(row),window.location.href).toString();navigator.clipboard?.writeText(url2).catch(()=>{});setToast("\u5DF2\u590D\u5236\u94FE\u63A5")};const hasComments=rows.some(r=>r.comments!==void 0);const unknownProject=projectUnknown(active,facets);const groups=groupRows(rows,group);const options=projectOptions(facets,active.workshop);const loading=data===void 0&&error===null;const empty=data!==null&&data!==void 0&&rows.length===0;const blank=empty&&!filtered&&!projectUnknown(active,facets);const columns=6+(group==="project"?0:1)+(hasComments?1:0);const rowProps=r=>({row:r,tab,by:group,hasComments,starred:starred(r),canStar,onStar:setStar,menuOpen:menuFor===r.artifactId,setMenu:open=>setMenuFor(open?r.artifactId:null),onOpen:openArtifact,onProject:openInProject,onCopy:copyLink});return jsxs4("div",{className:"band-library-my","data-view":viewMode,ref:screen,children:[jsxs4("main",{className:"band-library-mymain",children:[jsxs4("header",{className:"band-library-myhead",children:[jsx4("h1",{children:"\u4EA7\u7269"}),jsx4("div",{className:"tabs band-library-mytabs",role:"tablist","aria-label":"\u8303\u56F4",children:TABS.map(t=>jsxs4("button",{type:"button",role:"tab","aria-selected":tab===t,onClick:()=>commit({tab:t}),children:[TAB_TEXT[t],!blank&&jsx4("span",{className:"band-library-mytabnum",children:counts[t]})]},t))})]}),!blank&&jsxs4("div",{className:"band-library-mybar",children:[jsxs4("span",{className:"band-library-mysels",children:[jsx4(Select,{label:"\u5DE5\u574A",value:active.workshop,onChange:v=>setFilter({workshop:v}),options:[["","\u5168\u90E8\u5DE5\u574A"],...facets.workshops.map(w=>[w.id,w.name])]}),jsx4(Select,{label:"\u9879\u76EE",value:active.project,onChange:v=>setFilter({project:v}),options:[["","\u5168\u90E8\u9879\u76EE"],...options.map(p=>[p.id,p.name])]}),jsx4(Select,{label:"\u7C7B\u578B",value:active.type,onChange:v=>setFilter({type:v}),options:[["all","\u5168\u90E8\u7C7B\u578B"],...facets.types.map(t=>[t,TYPE_TEXT[t]])]}),jsx4(Select,{label:"\u72B6\u6001",value:active.status,onChange:v=>setFilter({status:v}),options:[["all","\u5168\u90E8\u72B6\u6001"],...STATUS_OPTIONS]})]}),jsx4("span",{className:"band-library-mygrow"}),jsxs4("div",{className:"seg sm band-library-viewseg",role:"group","aria-label":"\u663E\u793A\u65B9\u5F0F",children:[jsx4("button",{type:"button","aria-label":"\u7F51\u683C","aria-pressed":viewMode==="grid",onClick:()=>setViewMode("grid"),children:"\u7F51\u683C"}),jsx4("button",{type:"button","aria-label":"\u5217\u8868","aria-pressed":viewMode==="list",onClick:()=>setViewMode("list"),children:"\u5217\u8868"})]}),jsx4(Select,{label:"\u5206\u7EC4",value:group,onChange:v=>commit({group:v}),options:Object.keys(GROUP_TEXT).map(g=>[g,GROUP_TEXT[g]]),className:"band-library-mygroupby"}),jsxs4("label",{className:"band-library-myfind",children:[jsx4(SearchIcon,{}),jsx4("input",{ref:search,type:"search","aria-label":"\u6309\u540D\u79F0\u627E",placeholder:"\u6309\u540D\u79F0\u627E",value:filters.q,onChange:e=>setFilters({...filters,q:e.target.value}),...imeProps,onKeyDown:withImeGuard2(e=>{if(e.key!=="Escape")return;e.preventDefault();if(filters.q){setFilters({...filters,q:""});commit({filters:{...active,q:""}})}else e.currentTarget.blur()})}),jsx4("span",{className:"band-library-key","aria-hidden":"true",children:"/"})]}),jsxs4("button",{type:"button",className:"btn sm band-library-myfilter","aria-haspopup":"dialog","aria-expanded":drawer,onClick:()=>setDrawer(true),children:["\u7B5B\u9009",filtered?" \xB7 \u5DF2\u9009":""]})]}),error&&jsxs4(ErrorNote2,{retry:reload,children:["\u4EA7\u7269\u5217\u8868\u6CA1\u53D6\u5230\uFF1A",error]}),data===null&&jsx4("p",{className:"band-library-mynote",children:"\u8FD9\u4E2A\u7248\u672C\u7684 Band \u8FD8\u6CA1\u6709\u300C\u4EA7\u7269\u300D\u7684\u5E94\u7528\u7EA7\u63A5\u53E3\u3002\u9879\u76EE\u91CC\u7684\u4EA7\u7269\u5E93\u7167\u5E38\u53EF\u7528\u3002"}),loading&&jsx4(Skeleton,{}),empty&&unknownProject&&jsxs4("div",{className:"band-library-myrest rest",children:[jsx4("i",{}),jsx4("b",{children:HIDDEN_PROJECT_TEXT}),jsx4("span",{children:"\u8BF7\u53D1\u94FE\u63A5\u7684\u4EBA\u628A\u4F60\u52A0\u8FDB\u9879\u76EE\uFF0C\u6216\u8005\u6E05\u9664\u8FD9\u4E2A\u7B5B\u9009"}),jsx4("button",{type:"button",className:"btn sm",onClick:clearFilters,children:"\u6E05\u9664\u7B5B\u9009"})]}),empty&&!unknownProject&&filtered&&jsxs4("div",{className:"band-library-myrest rest",children:[jsx4("i",{}),jsx4("b",{children:filteredReason(active,namesOf(facets,active))}),jsx4("button",{type:"button",className:"btn sm",onClick:clearFilters,children:"\u6E05\u9664\u7B5B\u9009"})]}),empty&&!unknownProject&&!filtered&&jsxs4("div",{className:"band-library-myrest rest",children:[jsx4("i",{}),jsx4("b",{children:emptyOf(tab).title}),jsx4("span",{children:emptyOf(tab).hint}),tab==="joined"&&jsx4("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:WORKSHOPS}),children:"\u53BB\u5DE5\u574A\u65B0\u5EFA\u4E00\u4E2A\u9879\u76EE"})]}),data&&rows.length>0&&(viewMode==="grid"?jsx4("div",{className:"band-library-mygrids",children:(group==="none"?[{key:"all",label:"",rows}]:groups).map(g=>jsxs4("section",{children:[g.label&&jsxs4("h2",{className:"band-library-mygrouphead",children:[g.label," ",jsx4("span",{children:g.rows.length})]}),jsx4("ul",{className:"band-library-grid","aria-label":"\u4EA7\u7269",children:g.rows.map(r=>jsx4(GridCard,{ctx,...rowProps(r)},r.artifactId))})]},g.key))}):jsxs4(Fragment4,{children:[jsxs4("table",{className:"band-library-mytable","data-comments":hasComments?"on":"off","data-group":group,children:[jsx4("caption",{className:"sr-only",children:"\u4EA7\u7269"}),jsx4("thead",{children:jsxs4("tr",{children:[jsx4("th",{scope:"col",children:"\u540D\u79F0"}),group!=="project"&&jsx4("th",{scope:"col",children:"\u9879\u76EE"}),jsx4("th",{scope:"col",className:"c-type",children:"\u7C7B\u578B"}),jsx4("th",{scope:"col",children:"\u72B6\u6001"}),jsx4("th",{scope:"col",className:"c-acc",children:"\u8BBF\u95EE"}),hasComments&&jsx4("th",{scope:"col",className:"c-comments",children:"\u610F\u89C1"}),jsx4("th",{scope:"col",children:"\u66F4\u65B0"}),jsx4("th",{scope:"col",children:jsx4("span",{className:"sr-only",children:"\u64CD\u4F5C"})})]})}),jsx4("tbody",{children:group==="none"?rows.map(r=>jsx4(Row,{...rowProps(r)},r.artifactId)):groups.map(g=>jsxs4(Fragment3,{children:[jsx4("tr",{className:"band-library-mygrouprow",children:jsxs4("td",{colSpan:columns,children:[jsx4(WorkshopIcon,{icon:g.icon,size:16}),g.label,jsx4("span",{children:g.rows.length})]})}),g.rows.map(r=>jsx4(Row,{...rowProps(r)},r.artifactId))]},g.key))})]}),jsx4("ul",{className:"band-library-mymlist","aria-label":"\u4EA7\u7269",children:rows.map(r=>jsx4(MobileRow,{...rowProps(r)},r.artifactId))})]})),filtered&&rows.length>0&&jsxs4("p",{className:"band-library-myfoot",children:[rows.length," \u4EFD",jsx4("button",{type:"button",className:"band-library-link",onClick:clearFilters,children:"\u6E05\u9664\u7B5B\u9009"})]})]}),drawer&&jsx4(FilterDrawer,{filters:active,facets,options,onFilter:setFilter,onClear:clearFilters,onClose:()=>setDrawer(false)}),preview.target&&jsx4(ArtifactPreview,{ctx,target:preview.target,onClose:preview.close}),toast&&jsx4("output",{className:"band-library-mytoast",children:toast})]})}function GridCard({ctx,...props}){const{row,tab,starred,canStar,onStar,onOpen,menuOpen,setMenu,onProject,onCopy}=props;const status=statusOf2(row);const version=shownVersion(row,tab);const[ref,seen]=useInView();return jsxs4("li",{ref,className:"band-library-card","data-row":row.artifactId,children:[jsxs4("a",{href:artifactHref(row),title:row.name,"aria-label":row.name,onClick:e=>{if(!plainClick(e))return;e.preventDefault();e.currentTarget.focus();onOpen(row)},children:[seen&&row.type==="image"&&ctx.slots?jsx4(Mount2,{className:"band-library-appthumb",mount:el=>ctx.slots.mount(el,"@kanyun-ai-infra/band-library/thumbnail",{owner:{projectId:row.project.id,id:row.artifactId,type:row.type,versionId:version?.versionId}}),deps:[ctx,row.project.id,row.artifactId,row.type,version?.versionId]}):jsx4("span",{className:"band-library-thumb","data-size":"card","data-type":row.type,children:jsx4(TypeGlyph,{type:row.type})}),jsxs4("span",{className:"band-library-cardt",children:[jsxs4("span",{className:"band-library-cardname",children:[jsx4("b",{title:row.name,children:artifactName(row)}),jsx4("span",{className:`chip ${status.chip}`,children:status.label})]}),jsxs4("span",{className:"band-library-sub",children:[row.project.name," \xB7 ",TYPE_TEXT[row.type],version?.number!==void 0?` \xB7 v${version.number}`:""]}),jsxs4("span",{className:"band-library-sub",children:[version?whenText(version.at,new Date):"\u8FD8\u6CA1\u6709\u7248\u672C",(row.comments??0)>0?` \xB7 ${row.comments} \u6761\u610F\u89C1`:""]})]})]}),jsxs4("div",{className:"band-library-cardacts",children:[canStar&&jsx4(Star,{row:{...row,starred},onSet:onStar}),jsx4(RowMenu,{row,open:menuOpen,setOpen:setMenu,onOpen,onProject,onCopy,starred,canStar,onStar})]})]})}function MobileRow({row,tab,starred,canStar,onStar,onOpen,menuOpen,setMenu,onProject,onCopy}){const status=statusOf2(row);const version=shownVersion(row,tab);const versionText=version?.number!==void 0?`v${version.number}`:void 0;const when=version?whenText(version.at,new Date):void 0;return jsxs4("li",{className:"band-library-mymrow","data-row":row.artifactId,onClick:e=>{if(e.target.closest("a, button, [role='menu']"))return;onOpen(row)},children:[jsx4("span",{className:"band-library-thumb","data-size":"mobile","data-type":row.type,children:jsx4(TypeGlyph,{type:row.type})}),jsxs4("span",{className:"band-library-mymtext",children:[jsxs4("span",{className:"band-library-mymname",children:[jsx4("a",{href:artifactHref(row),title:row.name,onClick:e=>{if(!plainClick(e))return;e.preventDefault();onOpen(row)},children:artifactName(row)}),canStar&&jsx4(Star,{row:{...row,starred},onSet:onStar})]}),jsx4("span",{className:"band-library-mymmeta",children:[versionText,when].filter(Boolean).join(" \xB7 ")})]}),jsxs4("span",{className:"band-library-mymstatus",children:[needsMe(row,tab)&&jsx4(Fermata,{}),jsx4("span",{className:`chip ${status.chip}`,children:status.label})]}),jsx4(RowMenu,{row,open:menuOpen,setOpen:setMenu,onOpen,onProject,onCopy,starred,canStar,onStar})]})}function namesOf(facets,f){return{workshop:facets.workshops.find(w=>w.id===f.workshop)?.name,project:facets.projects.find(p=>p.id===f.project)?.name}}function Select({label,value,onChange,options,className}){return jsx4("select",{className:className?`select ${className}`:"select","aria-label":label,value,onChange:e=>onChange(e.target.value),children:options.map(([v,text])=>jsx4("option",{value:v,children:text},v))})}function Row({row,tab,by,hasComments,starred,canStar,onStar,menuOpen,setMenu,onOpen,onProject,onCopy}){const status=statusOf2(row);const version=shownVersion(row,tab);const author=version?.author;const authorName=author?author.name??(author.kind==="agent"?agentDisplayName(author.id):author.id):void 0;const when=version?whenText(version.at,new Date):void 0;const versionText=version?.number!==void 0?`v${version.number}`:void 0;return jsxs4("tr",{"data-row":row.artifactId,onClick:e=>{if(e.target.closest("a, button, [role='menu']"))return;onOpen(row)},onKeyDown:withImeGuard2(e=>{if(e.target!==e.currentTarget)return;if(e.key==="Enter"){e.preventDefault();onOpen(row,e.metaKey||e.ctrlKey)}}),tabIndex:-1,children:[jsxs4("td",{className:"c-name",children:[jsx4("span",{className:"band-library-thumb","data-size":"row","data-type":row.type,children:jsx4(TypeGlyph,{type:row.type})}),jsxs4("span",{className:"band-library-namecol",children:[jsx4("a",{href:artifactHref(row),title:row.name,onClick:e=>{if(!plainClick(e))return;e.preventDefault();onOpen(row)},children:artifactName(row)}),jsx4("span",{className:"band-library-sub",children:[versionText,when].filter(Boolean).join(" \xB7 ")})]}),canStar&&jsx4(Star,{row:{...row,starred},onSet:onStar})]}),by!=="project"&&jsx4("td",{className:"c-project",children:jsxs4("span",{className:"band-library-myproj",title:row.project.workshop.name,children:[jsx4(WorkshopIcon,{icon:row.project.workshop.icon,size:16}),row.project.name]})}),jsx4("td",{className:"c-type",children:TYPE_TEXT[row.type]}),jsxs4("td",{className:"c-status",children:[needsMe(row,tab)&&jsx4(Fermata,{}),jsx4("span",{className:`chip ${status.chip}`,children:status.label})]}),jsx4("td",{className:"c-acc",children:accessText(row.access)}),hasComments&&jsx4("td",{className:"c-comments",children:(row.comments??0)>0?jsxs4("span",{className:"band-library-ccount","aria-label":`${row.comments} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx4(CommentIcon,{}),row.comments]}):jsx4("span",{className:"faint",children:"\u2014"})}),jsx4("td",{className:"c-at",children:jsxs4("span",{className:"band-library-mywho",children:[author&&authorName?jsx4(Avatar,{id:author.id,name:authorName,agent:author.kind==="agent",size:"xs",decorative:true}):null,versionText?jsxs4("span",{children:[versionText," \xB7 "]}):null,when??jsx4("span",{className:"faint",children:"\u2014"})]})}),jsx4("td",{className:"c-more",children:jsx4(RowMenu,{row,open:menuOpen,setOpen:setMenu,onOpen,onProject,onCopy,starred,canStar,onStar})})]})}function RowMenu({row,open,setOpen,onOpen,onProject,onCopy,starred,canStar,onStar}){const box=useRef4(null);const list=useRef4(null);const setOpenRef=useRef4(setOpen);setOpenRef.current=setOpen;useEffect4(()=>{if(!open)return;list.current?.querySelector("[role='menuitem']")?.focus();const onDown=e=>{if(!box.current?.contains(e.target))setOpenRef.current(false)};document.addEventListener("mousedown",onDown);return()=>document.removeEventListener("mousedown",onDown)},[open]);const close=()=>{setOpen(false);const row2=box.current?.closest("[data-row]");if(!row2)return;if(row2.tabIndex>=0||row2.tagName==="TR")row2.focus();else row2.querySelector("a")?.focus()};const items=[{label:"\u6253\u5F00",hint:"\u21B5",run:()=>onOpen(row)},{label:"\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00",hint:"\u2318\u21B5",run:()=>onOpen(row,true)},{label:"\u5728\u9879\u76EE\u91CC\u770B",run:()=>onProject(row)},{label:"\u590D\u5236\u94FE\u63A5",run:()=>onCopy(row)},...canStar?[{label:starred?"\u53D6\u6D88\u6536\u85CF":"\u6536\u85CF",run:()=>onStar(row,!starred)}]:[]];return jsxs4("span",{className:"band-library-more",ref:box,children:[jsx4("button",{type:"button",className:"band-library-morebtn","aria-haspopup":"menu","aria-expanded":open,"aria-label":`\u300C${row.name}\u300D\u7684\u66F4\u591A\u64CD\u4F5C`,onClick:()=>setOpen(!open),children:jsxs4("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx4("circle",{cx:"4",cy:"8",r:"1"}),jsx4("circle",{cx:"8",cy:"8",r:"1"}),jsx4("circle",{cx:"12",cy:"8",r:"1"})]})}),open&&jsx4("div",{className:"band-library-menu",role:"menu",ref:list,onKeyDown:withImeGuard2(e=>{const els=[...list.current?.querySelectorAll("[role='menuitem']")??[]];const i=els.indexOf(document.activeElement);if(e.key==="Escape"){e.preventDefault();close()}else if(e.key==="ArrowDown"){e.preventDefault();els[(i+1)%els.length]?.focus()}else if(e.key==="ArrowUp"){e.preventDefault();els[(i-1+els.length)%els.length]?.focus()}else if(e.key==="Tab")close()}),children:items.map(it=>jsxs4("button",{type:"button",role:"menuitem",tabIndex:-1,onClick:()=>{setOpen(false);it.run()},children:[it.label,it.hint&&jsx4("kbd",{children:it.hint})]},it.label))})]})}var SKELETON_ROWS=["s1","s2","s3","s4","s5","s6"];function Skeleton(){return jsx4("div",{className:"band-library-myskel","aria-busy":"true","aria-label":"\u6B63\u5728\u8BFB\u53D6\u4EA7\u7269",children:SKELETON_ROWS.map(k=>jsx4("div",{className:"band-library-skelrow"},k))})}function FilterDrawer({filters,facets,options,onFilter,onClear,onClose}){const box=useRef4(null);useEffect4(()=>{box.current?.querySelector("select, button")?.focus();const onEscape=withImeGuard2(e=>{if(e.key!=="Escape")return;e.preventDefault();onClose()});document.addEventListener("keydown",onEscape);return()=>document.removeEventListener("keydown",onEscape)},[onClose]);return jsx4("div",{className:"band-library-myscrim",onClick:e=>{if(e.target===e.currentTarget)onClose()},children:jsxs4("div",{className:"band-library-mysheet",role:"dialog","aria-modal":"true","aria-label":"\u7B5B\u9009",ref:box,children:[jsx4("h2",{children:"\u7B5B\u9009"}),jsxs4("div",{className:"band-library-mysheetbody",children:[jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u5DE5\u574A"}),jsx4(Select,{label:"\u5DE5\u574A",value:filters.workshop,onChange:v=>onFilter({workshop:v}),options:[["","\u5168\u90E8\u5DE5\u574A"],...facets.workshops.map(w=>[w.id,w.name])]})]}),jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u9879\u76EE"}),jsx4(Select,{label:"\u9879\u76EE",value:filters.project,onChange:v=>onFilter({project:v}),options:[["","\u5168\u90E8\u9879\u76EE"],...options.map(p=>[p.id,p.name])]})]}),jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u7C7B\u578B"}),jsx4(Select,{label:"\u7C7B\u578B",value:filters.type,onChange:v=>onFilter({type:v}),options:[["all","\u5168\u90E8\u7C7B\u578B"],...facets.types.map(t=>[t,TYPE_TEXT[t]])]})]}),jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u72B6\u6001"}),jsx4(Select,{label:"\u72B6\u6001",value:filters.status,onChange:v=>onFilter({status:v}),options:[["all","\u5168\u90E8\u72B6\u6001"],...STATUS_OPTIONS]})]})]}),jsxs4("footer",{children:[jsx4("button",{type:"button",className:"btn ghost",onClick:onClear,children:"\u6E05\u9664\u7B5B\u9009"}),jsx4("button",{type:"button",className:"btn primary",onClick:onClose,children:"\u5B8C\u6210"})]})]})})}var SELF="@kanyun-ai-infra/band-library";var EXPANDED=defineScopeState(_ctx=>new Map);var NO_STAGES=[];var PROJECT2="@kanyun-ai-infra/band-project";var PROJECT_HEAD=`${PROJECT2}/project-head`;var src_default=definePlugin({surfaces:{thumbnail:reactMount((ctx,props)=>jsx5(Thumb,{ctx,row:props.owner,size:"card"})),library:reactMount(ctx=>jsx5(Library,{ctx})),"my-artifacts":reactMount(ctx=>jsx5(MyArtifacts,{ctx})),switch:reactMount(ctx=>jsx5(PageSwitch,{ctx,current:ctx.app.route().page===`${SELF}/library`?"library":"project"}))}});function projectParams(ctx,extra={}){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},...extra}}function artifactHref2(ctx,artifactId){return projectPath3(ctx.project,"a",artifactId)}function threadHref(ctx,threadId){return projectPath3(ctx.project,"t",threadId)}function plainClick2(e){return!(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)}function PageSwitch({ctx,current}){const go=to=>{if(to===current)return;ctx.app.navigate({page:to==="project"?`${PROJECT2}/project`:`${SELF}/library`,params:projectParams(ctx)})};return jsxs5("div",{className:"seg sm band-library-switch",role:"group","aria-label":"\u9879\u76EE\u4E0E\u4EA7\u7269\u5E93",children:[jsx5("button",{type:"button","aria-pressed":current==="project",onClick:()=>go("project"),children:"\u9879\u76EE"}),jsx5("button",{type:"button","aria-pressed":current==="library",onClick:()=>go("library"),children:"\u4EA7\u7269\u5E93"})]})}function CommentIcon2(){return jsx5("svg",{viewBox:"0 0 16 16",className:"band-library-cicon","aria-hidden":"true",children:jsx5("path",{d:"M3 3.5h10v7H7l-3 2.5v-2.5H3z"})})}function SearchIcon2(){return jsxs5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx5("circle",{cx:"7",cy:"7",r:"4.2"}),jsx5("path",{d:"M10.2 10.2l3 3"})]})}var STATUS_ORDER=["all","review","comments","approved"];var isOpen=s=>OPEN_STATUSES.includes(s);function Library({ctx}){const member=ctx.project.access==="member";const readThreads=ctx.project.canReadThreads;const members=useMembers(ctx);const agentName=memberName2(members,ctx.project.agent??"rondo");const order=useMemo2(()=>memberOrder(members),[members]);const core=useCtxData2(ctx,async()=>{const[artifacts,stages2]=await Promise.all([ctx.artifacts.list(),ctx.stages.list()]);const gated=stages2.filter(s=>s.gated!==false);const states=await Promise.all(gated.map(s=>ctx.gate.state(s.stage).catch(()=>void 0)));return{artifacts,stages:stages2,gates:Object.fromEntries(gated.map((s,i)=>[s.stage,states[i]]))}},[ctx],["version.*","gate.*","stage.*"]);const threads=useCtxData2(ctx,()=>readThreads?ctx.threads.list({}):Promise.resolve(null),[ctx,readThreads],"thread.*");const attachments=useCtxData2(ctx,()=>readThreads?ctx.attachments.list():Promise.resolve(null),[ctx,readThreads],["thread.*","comment.*","version.*"]);const materialRefs=useMemo2(()=>(attachments.data??[]).filter(r=>r.latest!==false&&r.artifactId&&r.versionId).map(r=>({artifactId:r.artifactId,versionId:r.versionId})),[attachments.data]);const discussionCounts=useCtxData2(ctx,async()=>{const api=ctx.materialDiscussions;if(!api||materialRefs.length===0||!await api.available())return null;const pairs=await Promise.all(materialRefs.map(async ref=>{try{const read=await api.read(ref);return[ref.artifactId,read.threads.filter(t=>t.thread.status==="open").length]}catch{return[ref.artifactId,0]}}));return Object.fromEntries(pairs)},[ctx,materialRefs],["material.discussion.*","attachment.*"]);const[filters,setFilters]=useState5(DEFAULT_FILTERS);const{settled:q,imeProps}=useSettledText2(filters.q);const[view,setView]=useBrowseView(`${ctx.member.id}:${ctx.project.id}`);const preview=useArtifactPreview(ctx.project.id);const[sort,setSort]=useState5(DEFAULT_SORT);const[remembered]=useState5(()=>EXPANDED.of(ctx));const[expanded,setExpanded]=useState5(()=>new Map(remembered));const[whileFiltering,setWhileFiltering]=useState5({key:"",map:new Map});const[refreshedAt,setRefreshedAt]=useState5(null);const search=useRef5(null);const screen=useRef5(null);const now=new Date;useEffect5(()=>{if(core.data&&!core.error)setRefreshedAt(new Date)},[core.data,core.error]);const rows=useMemo2(()=>{if(!core.data)return[];const{artifacts,stages:stages2,gates}=core.data;const arts=artifactRows(artifacts,{views:ctx.project.views,stages:stages2,gates,...threads.data?{threads:threads.data.filter(t=>isOpen(t.status))}:{}});return arts},[core.data,threads.data,ctx.project.views]);const materials=(attachments.data??[]).filter(r=>r.latest!==false);const memory=useCtxData2(ctx,async()=>{try{return{snapshot:readThreads&&ctx.memory?await ctx.memory.current():null,forbidden:false}}catch(error){if(isForbidden(error))return{snapshot:null,forbidden:true};throw error}},[ctx,readThreads],"memory.updated");const memorySnapshot=memory.data?.snapshot;const types=useMemo2(()=>typesPresent(rows),[rows]);const active=useMemo2(()=>filters.type!=="all"&&core.data&&!types.includes(filters.type)?{...filters,q,type:"all"}:{...filters,q},[filters,q,types,core.data]);const shown=useMemo2(()=>applyFilters(rows,active),[rows,active]);const stages=core.data?.stages??NO_STAGES;const tree=useMemo2(()=>buildTree(shown,{stages,sort}),[shown,stages,sort]);const counts=useMemo2(()=>statusCounts(applyFilters(rows,{...active,status:"all"})),[rows,active]);const hasGate=stages.some(s=>s.gated!==false);const statusTabs=STATUS_ORDER.filter(s=>{if(s==="review")return member;if(s==="comments")return readThreads;if(s==="approved")return!core.data||hasGate||filters.status==="approved";return true});const filtered=isFiltering(active);const clear=()=>setFilters(DEFAULT_FILTERS);const filterKey=`${active.status}|${active.type}|${active.q.trim()}`;const filterMap=whileFiltering.key===filterKey?whileFiltering.map:void 0;const isExpanded=f=>filtered?filterMap?.get(f.id)??true:expanded.get(f.id)??defaultExpanded(f);const setFolder=(f,open)=>{if(filtered){setWhileFiltering({key:filterKey,map:new Map(filterMap).set(f.id,open)});return}remembered.set(f.id,open);setExpanded(new Map(remembered))};useEffect5(()=>{const onKey=withImeGuard3(e=>{if(e.key!=="/"||e.metaKey||e.ctrlKey||e.altKey||e.defaultPrevented)return;const t=e.target instanceof HTMLElement?e.target:null;if(t&&t!==document.body&&!screen.current?.contains(t))return;if(t&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName)))return;e.preventDefault();search.current?.focus()});document.addEventListener("keydown",onKey);return()=>document.removeEventListener("keydown",onKey)},[]);const dialog=ctx.services.find("@kanyun-ai-infra/band-project/artifact-dialog");const openArtifact=id=>{if(!ctx.services.find("@kanyun-ai-infra/band-project/artifact-preview")){ctx.app.navigate({page:`${PROJECT2}/artifact`,params:projectParams(ctx,{artifact:id})});return}preview.open({projectId:ctx.project.id,artifactId:id})};const openInProject=id=>{ctx.selection.set({kind:"artifact",artifactId:id});ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)})};const[previewError,setPreviewError]=useState5(null);const previewAttachment=r=>{if(r.artifactId&&r.versionId&&dialog?.supportsMaterialVersion===true){setPreviewError(null);dialog.open({materialVersion:{artifactId:r.artifactId,versionId:r.versionId}});return}const w=window.open("","_blank");if(w)w.opener=null;setPreviewError(null);ctx.attachments.url(r.id).then(url=>{if(w)w.location.href=url;else window.open(url,"_blank","noopener")},e=>{w?.close();setPreviewError(`\u300C${r.name}\u300D\u6CA1\u6253\u5F00\uFF1A${e instanceof Error?e.message:String(e)}`)})};const canDelete=ctx.attachments.available&&ctx.member.can("comment");const[confirming,setConfirming]=useState5(null);const[historyOpen,setHistoryOpen]=useState5(null);const canReplace=ctx.attachments.available&&ctx.member.can("comment");const[deleting,setDeleting]=useState5(false);const[deleteError,setDeleteError]=useState5(null);const deleteAttachment=r=>{setDeleting(true);setDeleteError(null);ctx.attachments.remove(r.id).then(()=>{setDeleting(false);setConfirming(null);attachments.reload()},e=>{setDeleting(false);setDeleteError(`\u300C${r.name}\u300D\u6CA1\u5220\u6389\uFF1A${e instanceof Error?e.message:String(e)}`)})};const activate=(r,newTab=false)=>{if(newTab)window.open(artifactHref2(ctx,r.id),"_blank","noopener");else openArtifact(r.id)};const head=ctx.services.find(PROJECT_HEAD);const Title=head?"h2":"h1";const loading=!core.data&&!core.error;const emptyProject=core.data!==void 0&&rows.length===0;const stageOf=id=>core.data?.stages.find(s=>s.stage===id);return jsxs5("div",{className:"band-library-page",ref:screen,children:[jsx5(PageHead,{ctx,head}),jsxs5("main",{className:"band-library","data-view":view,children:[jsxs5("section",{className:"band-library-artifacts","aria-label":"\u9636\u6BB5\u4EA7\u7269",children:[jsxs5("div",{className:"band-library-titlebar",children:[jsxs5(Title,{children:["\u4EA7\u7269\u5E93",core.data&&!emptyProject&&jsx5("span",{className:"band-library-count",children:rows.length}),!member&&jsx5("span",{className:"chip plain band-library-readonly",children:"\u53EA\u8BFB"})]}),!emptyProject&&jsxs5("div",{className:"band-library-tools",children:[jsxs5("label",{className:"band-library-search",children:[jsx5(SearchIcon2,{}),jsx5("input",{ref:search,type:"search","aria-label":"\u641C\u7D22\u4EA7\u7269",placeholder:"\u641C\u7D22\u4EA7\u7269",value:filters.q,onChange:e=>setFilters({...filters,q:e.target.value}),...imeProps,onKeyDown:withImeGuard3(e=>{if(e.key!=="Escape")return;e.preventDefault();if(filters.q)setFilters({...filters,q:""});else e.currentTarget.blur()})}),jsx5("span",{className:"band-library-key","aria-hidden":"true",children:"/"})]}),jsxs5("div",{className:"seg band-library-viewseg",role:"group","aria-label":"\u663E\u793A\u65B9\u5F0F",children:[jsx5("button",{type:"button","aria-pressed":view==="list","aria-label":"\u5217\u8868",title:"\u5217\u8868",onClick:()=>setView("list"),children:jsx5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:jsx5("path",{d:"M5.5 4h8M5.5 8h8M5.5 12h8M2.5 4h.01M2.5 8h.01M2.5 12h.01"})})}),jsx5("button",{type:"button","aria-pressed":view==="grid","aria-label":"\u7F51\u683C",title:"\u7F51\u683C",onClick:()=>setView("grid"),children:jsxs5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx5("rect",{x:"2.5",y:"2.5",width:"4.5",height:"4.5",rx:"1"}),jsx5("rect",{x:"9",y:"2.5",width:"4.5",height:"4.5",rx:"1"}),jsx5("rect",{x:"2.5",y:"9",width:"4.5",height:"4.5",rx:"1"}),jsx5("rect",{x:"9",y:"9",width:"4.5",height:"4.5",rx:"1"})]})})]})]})]}),!emptyProject&&jsxs5("div",{className:"band-library-filters",children:[jsx5("div",{className:"band-library-chips",role:"group","aria-label":"\u7B5B\u9009",children:statusTabs.map(s=>jsxs5("button",{type:"button","aria-pressed":filters.status===s,onClick:()=>setFilters({...filters,status:s}),children:[STATUS_FILTER_TEXT[s],core.data&&jsx5("span",{children:counts[s]})]},s))}),types.length>1&&jsx5("div",{className:"band-library-selects",children:jsxs5("label",{children:[jsx5("span",{children:"\u7C7B\u578B"}),jsxs5("select",{className:"select",value:filters.type,onChange:e=>setFilters({...filters,type:e.target.value}),children:[jsx5("option",{value:"all",children:"\u5168\u90E8"}),types.map(t=>jsx5("option",{value:t,children:TYPE_TEXT[t]},t))]})]})})]}),core.error&&!core.data&&jsxs5(ErrorNote3,{retry:core.reload,children:["\u4EA7\u7269\u5217\u8868\u6CA1\u53D6\u5230\uFF1A",core.error]}),core.error&&core.data&&jsxs5(ErrorNote3,{retry:core.reload,children:["\u6CA1\u5237\u65B0\u4E0A\uFF0C\u663E\u793A\u7684\u662F ",refreshedAt?whenText(refreshedAt.toISOString(),now):"\u4E0A\u4E00\u6B21"," ","\u7684\u5185\u5BB9\uFF1A",core.error]}),previewError&&jsxs5("output",{className:"band-library-note",children:[previewError,jsx5("button",{type:"button",className:"band-library-link",onClick:()=>setPreviewError(null),children:"\u77E5\u9053\u4E86"})]}),loading&&jsx5(Skeleton2,{view}),emptyProject&&jsxs5("div",{className:"band-library-rest rest",children:[jsx5("i",{}),jsx5("b",{children:"\u8FD8\u6CA1\u6709\u4EA7\u7269"}),jsx5("span",{children:"\u7B2C\u4E00\u4E2A\u9636\u6BB5\u4EA4\u4ED8\u4EE5\u540E\uFF0C\u4EA7\u7269\u4F1A\u6309\u9636\u6BB5\u51FA\u73B0\u5728\u8FD9\u91CC\u3002"}),jsx5("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)}),children:"\u56DE\u5230\u9879\u76EE\u9875"})]}),core.data&&!emptyProject&&shown.length===0&&jsxs5("div",{className:"band-library-rest rest",children:[jsx5("i",{}),jsx5("b",{children:emptyReason(active)}),jsx5("button",{type:"button",className:"btn sm",onClick:clear,children:"\u6E05\u9664\u7B5B\u9009"})]}),core.data&&shown.length>0&&view==="list"&&jsx5(TreeView,{ctx,tree,isExpanded,setFolder,sort,setSort,readThreads,member,now,order,memberLabel:id=>memberName2(members,id),roleLabel:role=>members.find(m=>m.roleLabels?.[role])?.roleLabels?.[role]??role,stageOf,gates:core.data.gates,artifacts:core.data.artifacts,activate,menu:{openInProject}}),core.data&&shown.length>0&&view==="grid"&&jsx5(GridView,{ctx,rows:sortRows(shown,sort),readThreads,now,stageOf,activate}),filtered&&shown.length>0&&jsxs5("p",{className:"band-library-foot",children:[shown.length," / ",rows.length,jsx5("button",{type:"button",className:"band-library-link",onClick:clear,children:"\u6E05\u9664\u7B5B\u9009"})]})]}),readThreads&&jsxs5("section",{className:"band-library-materials","aria-label":"\u7D20\u6750",children:[jsx5("h2",{children:"\u7D20\u6750"}),jsx5("p",{className:"band-library-materials-hint",children:"\u9644\u4EF6\u548C\u9879\u76EE\u8BB0\u5FC6"}),attachments.error&&jsxs5(ErrorNote3,{retry:attachments.reload,children:["\u9644\u4EF6\u6CA1\u53D6\u5230\uFF1A",attachments.error]}),memory.error&&jsxs5(ErrorNote3,{retry:memory.reload,children:["\u8BB0\u5FC6\u6CA1\u53D6\u5230\uFF1A",memory.error]}),memory.data?.forbidden&&jsxs5("div",{className:"band-library-materials-hint",children:[jsx5("p",{children:"\u6CA1\u6709\u6743\u9650\u770B\u9879\u76EE\u8BB0\u5FC6\u3002\u80FD\u8BFB\u9879\u76EE\u610F\u89C1\u7684\u4EBA\u624D\u80FD\u67E5\u770B\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u3002"}),jsx5("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)}),children:"\u56DE\u5230\u9879\u76EE\u9875"})]}),attachments.data===void 0&&!attachments.error&&jsx5("output",{children:"\u6B63\u5728\u8BFB\u53D6\u9644\u4EF6\u2026"}),memory.data===void 0&&!memory.error&&jsx5("output",{children:"\u6B63\u5728\u8BFB\u53D6\u8BB0\u5FC6\u2026"}),materials.length===0&&emptyProject&&!memorySnapshot?.latest&&attachments.data!==void 0&&memory.data!==void 0&&!attachments.error&&!memory.error&&!memory.data?.forbidden&&jsx5("p",{className:"band-library-materials-hint",children:`\u8FD8\u6CA1\u6709\u7D20\u6750\u3002\u5148\u5199\u4E0B\u9700\u6C42\u4EA4\u7ED9 ${agentName}\uFF1B\u9879\u76EE\u6709\u4E86\u7B2C\u4E00\u7248\u4E4B\u540E\uFF0C\u5728\u5BF9\u8BDD\u8F93\u5165\u6846\u7528\u300C\uFF0B\u300D\u9644\u4E0A\u6587\u4EF6\uFF0C\u53D1\u51FA\u6765\u5C31\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002`}),materials.length===0&&!emptyProject&&!memorySnapshot?.latest&&attachments.data!==void 0&&memory.data!==void 0&&!attachments.error&&!memory.error&&!memory.data?.forbidden&&jsx5("p",{className:"band-library-materials-hint",children:"\u8FD8\u6CA1\u6709\u7D20\u6750\u3002\u5728\u5BF9\u8BDD\u8F93\u5165\u6846\u7528\u300C\uFF0B\u300D\u9644\u4E0A\u6587\u4EF6\uFF0C\u53D1\u51FA\u6765\u5C31\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002"}),jsxs5("ul",{className:"band-library-material-list",children:[memorySnapshot?.latest&&jsxs5("li",{children:[jsx5("a",{className:"band-library-material-name",href:projectPath3(ctx.project,"settings","memory"),children:"\u9879\u76EE\u8BB0\u5FC6"}),jsxs5("span",{className:"band-library-material-meta",children:[jsxs5("span",{children:["v",memorySnapshot.version]}),jsx5("span",{children:memberName2(members,memorySnapshot.latest.author.id)}),jsx5("time",{dateTime:memorySnapshot.latest.createdAt,title:memorySnapshot.latest.createdAt,children:whenText(memorySnapshot.latest.createdAt,now)})]})]}),materials.map(r=>jsxs5("li",{children:[jsx5("button",{type:"button",className:"band-library-material-name",onClick:()=>previewAttachment(r),children:r.name}),jsxs5("span",{className:"band-library-material-meta",children:[jsx5(VersionBadge,{r}),jsx5("span",{children:TYPE_TEXT[attachmentTypeOf(r)]}),jsx5("span",{children:memberName2(members,r.createdBy.id)}),jsx5("time",{dateTime:r.createdAt,title:r.createdAt,children:whenText(r.createdAt,now)}),r.artifactId!==void 0&&(discussionCounts.data?.[r.artifactId]??0)>0&&jsxs5("span",{className:"band-library-ccount","aria-label":`${discussionCounts.data?.[r.artifactId]} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx5(CommentIcon2,{}),discussionCounts.data?.[r.artifactId]]})]}),jsx5(MaterialUsedIn,{ctx,uses:materialUses(r,rows)}),jsxs5("span",{className:"band-library-material-actions",children:[jsx5("a",{className:"band-library-link",href:threadHref(ctx,r.source.threadId),children:"\u56DE\u5230\u6240\u5728\u6D88\u606F"}),materialOf(r)&&ctx.attachments.versions&&jsx5("button",{type:"button",className:"btn ghost sm","aria-expanded":historyOpen===(r.artifactId??r.id),"aria-label":`${r.name} \u7684\u7248\u672C\u5386\u53F2`,onClick:()=>setHistoryOpen(historyOpen===(r.artifactId??r.id)?null:r.artifactId??r.id),children:"\u7248\u672C\u5386\u53F2"}),canReplace&&jsx5(ReplaceButton,{ctx,r,onChanged:attachments.reload}),canDelete&&confirming!==r.id&&jsx5("button",{type:"button",className:"btn ghost sm",disabled:deleting,title:deleting?"\u6B63\u5728\u5220\u9664\u53E6\u4E00\u4EFD\u7D20\u6750\uFF0C\u5220\u5B8C\u518D\u5220\u8FD9\u4E00\u4EFD":void 0,"aria-label":`\u5220\u9664 ${r.name}`,onClick:()=>{setDeleteError(null);setConfirming(r.id)},children:"\u5220\u9664"})]}),confirming===r.id&&jsxs5("fieldset",{className:"band-library-material-confirm","aria-label":`\u5220\u9664 ${r.name}`,children:[jsxs5("p",{children:["\u5220\u9664\u300C",r.name,"\u300D\uFF1F\u4E4B\u540E\u7684\u56DE\u5408\u62FF\u4E0D\u5230\u5B83\uFF0C\u6D88\u606F\u91CC\u663E\u793A\u300C\u5DF2\u5220\u9664\u7684\u7D20\u6750\u300D\uFF1B\u7528\u5230\u5B83\u7684\u7248\u672C\u4E0D\u53D7\u5F71\u54CD\u3002"]}),jsx5(ErrorNote3,{children:deleteError}),jsxs5("span",{className:"band-library-material-actions",children:[jsx5("button",{type:"button",className:"btn danger sm",disabled:deleting,onClick:()=>deleteAttachment(r),children:deleting?"\u6B63\u5728\u5220\u9664\u2026":"\u5220\u9664"}),jsx5("button",{type:"button",className:"btn ghost sm",disabled:deleting,onClick:()=>setConfirming(null),children:"\u53D6\u6D88"})]})]}),historyOpen===(r.artifactId??r.id)&&jsx5(MaterialHistory,{ctx,r,members,canReplace,whenText,now,preview:previewAttachment,onChanged:attachments.reload})]},r.artifactId??r.id))]})]})]}),preview.target&&jsx5(ArtifactPreview,{ctx,target:preview.target,onClose:preview.close})]})}function MaterialUsedIn({ctx,uses}){if(uses.length===0)return null;return jsx5("span",{className:"band-library-material-meta",children:jsxs5("span",{children:["\u7528\u5728"," ",uses.map((u,i)=>jsxs5(Fragment5,{children:[i>0&&"\u3001",jsxs5("a",{className:"band-library-link",href:artifactHref2(ctx,u.artifactId),children:[u.name," v",u.number]})]},u.artifactId))]})})}function PageHead({ctx,head}){if(!head)return jsx5(LibraryHead,{ctx});return jsx5(Mount3,{className:"band-library-projecthead",mount:el=>head.mount(el),deps:[head]})}function LibraryHead({ctx}){const{workshop,workshopName,workshopIcon,name}=ctx.project;return jsxs5("div",{className:"band-library-head",children:[jsxs5("nav",{className:"band-library-crumb","aria-label":"\u4F4D\u7F6E",children:[workshop&&jsxs5(Fragment6,{children:[jsxs5("span",{className:"band-library-ws",children:[jsx5(WorkshopIcon2,{icon:workshopIcon,size:16}),workshopName??workshop]}),jsx5("span",{"aria-hidden":"true",children:"\u203A"})]}),jsx5("button",{type:"button",onClick:()=>ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)}),children:name})]}),jsx5(PageSwitch,{ctx,current:"library"})]})}var SKELETON_ROWS2=["s1","s2","s3","s4","s5","s6"];function Skeleton2({view}){return jsx5("div",{className:view==="grid"?"band-library-grid":"band-library-skel","aria-busy":"true","aria-label":"\u6B63\u5728\u8BFB\u53D6\u4EA7\u7269",children:SKELETON_ROWS2.map(k=>jsx5("div",{className:view==="grid"?"band-library-card is-skeleton":"band-library-skelrow"},k))})}var nodeId=n=>n.kind==="folder"?`f:${n.id}`:`${n.row.kind}:${n.row.id}`;function TreeView({ctx,tree,isExpanded,setFolder,sort,setSort,readThreads,member,now,order,memberLabel,roleLabel,stageOf,gates,artifacts,activate,menu}){const visible=visibleNodes(tree,isExpanded);const[activeKey,setActiveKey]=useState5(null);const[menuFor,setMenuFor]=useState5(null);const body=useRef5(null);const active=visible.find(v=>nodeId(v.node)===activeKey)??visible[0];const focusKey=key=>{if(key===void 0)return;setActiveKey(key);const find=()=>[...body.current?.querySelectorAll("[data-node]")??[]].find(el2=>el2.dataset.node===key);const el=find();if(el)el.focus();else requestAnimationFrame(()=>find()?.focus())};const at=i=>visible[Math.max(0,Math.min(visible.length-1,i))];const onTreeKey=(e,v,i)=>{if(e.target!==e.currentTarget)return;const n=v.node;const go=to=>{e.preventDefault();if(to)focusKey(nodeId(to.node))};if(e.key==="ArrowDown")go(at(i+1));else if(e.key==="ArrowUp")go(at(i-1));else if(e.key==="Home")go(visible[0]);else if(e.key==="End")go(visible[visible.length-1]);else if(e.key==="ArrowRight"){e.preventDefault();if(n.kind!=="folder")return;if(!isExpanded(n))setFolder(n,true);else if(n.children[0])focusKey(nodeId(n.children[0]))}else if(e.key==="ArrowLeft"){e.preventDefault();if(n.kind==="folder"&&isExpanded(n))setFolder(n,false);else if(v.parent!==void 0)focusKey(`f:${v.parent}`)}else if(e.key==="Enter"||e.key===" "&&n.kind==="folder"){e.preventDefault();if(n.kind==="folder")setFolder(n,!isExpanded(n));else activate(n.row,e.metaKey||e.ctrlKey)}else if(n.kind==="leaf"&&(e.key==="F10"&&e.shiftKey||e.key==="ContextMenu")){e.preventDefault();setMenuFor(nodeId(n))}};const sortBy=key=>setSort(sort.key===key?{key,dir:sort.dir==="asc"?"desc":"asc"}:{key,dir:key==="name"?"asc":"desc"});const SortHead=({k,children})=>jsxs5("button",{type:"button",className:"band-library-sort","aria-sort":sort.key===k?sort.dir==="asc"?"ascending":"descending":"none",onClick:()=>sortBy(k),children:[children,sort.key===k&&jsx5("span",{"aria-hidden":"true",children:sort.dir==="asc"?"\u2191":"\u2193"})]});const pickedName=stage=>artifacts.find(a=>a.stage===stage&&!a.unused&&a.key&&gates[stage]?.per==="pick")?.name;const summaryOf=f=>f.stage?gateSummary(stageOf(f.stage),gates[f.stage],{...pickedName(f.stage)?{picked:pickedName(f.stage)}:{},memberName:memberLabel,roleLabel}):void 0;return jsxs5("table",{ref:body,className:"band-library-table",role:"treegrid","aria-label":"\u4EA7\u7269","data-comments":readThreads?"on":"off",children:[jsx5("thead",{children:jsxs5("tr",{className:"band-library-tr band-library-th",children:[jsx5("th",{scope:"col",className:"c-name",children:jsx5(SortHead,{k:"name",children:"\u540D\u79F0"})}),jsx5("th",{scope:"col",className:"c-status",children:"\u72B6\u6001"}),readThreads&&jsx5("th",{scope:"col",className:"c-comments",children:"\u610F\u89C1"}),jsx5("th",{scope:"col",className:"c-author",children:"\u4F5C\u8005"}),jsx5("th",{scope:"col",className:"c-at",children:jsx5(SortHead,{k:"updated",children:"\u4FEE\u6539\u65F6\u95F4"})}),jsx5("th",{scope:"col",className:"c-type",children:"\u7C7B\u578B"}),jsx5("td",{className:"c-more"})]})}),jsx5("tbody",{children:visible.map((v,i)=>{const key=nodeId(v.node);const common={nodeKey:key,level:v.level,setsize:v.setsize,posinset:v.posinset,tabbable:active!==void 0&&nodeId(active.node)===key,onFocus:()=>setActiveKey(key),onKeyDown:withImeGuard3(e=>onTreeKey(e,v,i))};if(v.node.kind==="folder"){const f=v.node;return jsx5(FolderRow,{...common,folder:f,open:isExpanded(f),summary:summaryOf(f),toggle:()=>setFolder(f,!isExpanded(f))},key)}const r=v.node.row;return jsx5(ListRow,{...common,ctx,row:r,...v.node.label!==void 0?{label:v.node.label}:{},readThreads,member,now,order,memberLabel,activate,menuOpen:menuFor===key,setMenu:open=>setMenuFor(open?key:null),menu},key)})})]})}function FolderRow({nodeKey,level,setsize,posinset,tabbable,onFocus,onKeyDown,folder:f,open,summary,toggle}){return jsx5("tr",{tabIndex:tabbable?0:-1,"data-node":nodeKey,className:"band-library-tr band-library-folder","aria-level":level,"aria-setsize":setsize,"aria-posinset":posinset,"aria-expanded":open,"aria-label":`${f.label}\uFF0C${f.count} \u4EFD${summary?`\uFF0C${summary}`:""}`,style:{"--level":level},onFocus:e=>{if(e.target===e.currentTarget)onFocus()},onKeyDown,onClick:toggle,children:jsxs5("td",{className:"c-folder",children:[jsx5("svg",{viewBox:"0 0 16 16",className:"band-library-chev","aria-hidden":"true",children:jsx5("path",{d:"M4.5 6.5L8 10l3.5-3.5"})}),jsx5("b",{children:f.label}),jsx5("span",{className:"band-library-gcount",children:f.count}),summary&&jsxs5("span",{className:"band-library-gsum",children:["\xB7 ",summary]})]})})}function ListRow({ctx,nodeKey,level,setsize,posinset,tabbable,onFocus,onKeyDown,row:r,label,readThreads,member,now,order,memberLabel,activate,menuOpen,setMenu,menu}){const href=artifactHref2(ctx,r.id);const unused=r.status.key==="unused";const author=r.author;const authorName=author?memberLabel(author):void 0;const verText=r.version!==void 0?`v${r.version}`:void 0;return jsxs5("tr",{tabIndex:tabbable?0:-1,"data-node":nodeKey,"data-row":r.id,"data-kind":r.kind,className:`band-library-tr band-library-row${unused?" is-unused":""}`,"aria-level":level,"aria-setsize":setsize,"aria-posinset":posinset,"aria-label":r.name,style:{"--level":level},onFocus:e=>{if(e.target===e.currentTarget)onFocus()},onKeyDown,onClick:e=>{if(e.target.closest("a, button, [role='menu']"))return;activate(r,e.metaKey||e.ctrlKey)},children:[jsxs5("td",{className:"c-name",children:[jsx5(Thumb,{ctx,row:r,size:"row"}),jsxs5("span",{className:"band-library-namecol",children:[jsx5("a",{href,tabIndex:-1,onClick:e=>{if(!plainClick2(e))return;e.preventDefault();activate(r)},children:label??r.name}),verText&&jsx5("span",{className:"band-library-ver",children:verText}),jsx5("span",{className:"band-library-sub",children:[verText,r.at?whenText(r.at,now):void 0].filter(Boolean).join(" \xB7 ")})]})]}),jsx5("td",{className:"c-status",children:jsx5("span",{className:`chip ${r.status.chip}`,children:r.status.label})}),readThreads&&jsx5("td",{className:"c-comments",children:(r.comments??0)>0?jsxs5("span",{className:"band-library-ccount","aria-label":`${r.comments} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx5(CommentIcon2,{}),r.comments]}):jsx5("span",{className:"faint",children:"\u2014"})}),jsx5("td",{className:"c-author",children:author&&authorName?jsxs5(Fragment6,{children:[jsx5(Avatar2,{id:author,name:authorName,agent:r.authorAgent===true,size:"xs",decorative:true,order}),jsx5("span",{className:"band-library-author",children:authorName})]}):jsx5("span",{className:"faint",children:"\u2014"})}),jsx5("td",{className:"c-at",children:r.at?whenText(r.at,now):jsx5("span",{className:"faint",children:"\u2014"})}),jsx5("td",{className:"c-type",children:TYPE_TEXT[r.type]}),jsx5("td",{className:"c-more",children:jsx5(RowMenu2,{row:r,open:menuOpen,setOpen:setMenu,member,href,activate,menu})})]})}function RowMenu2({row:r,open,setOpen,member,href,activate,menu}){const box=useRef5(null);const list=useRef5(null);const setOpenRef=useRef5(setOpen);setOpenRef.current=setOpen;useEffect5(()=>{if(!open)return;list.current?.querySelector("[role='menuitem']")?.focus();const onDown=e=>{if(!box.current?.contains(e.target))setOpenRef.current(false)};document.addEventListener("mousedown",onDown);return()=>document.removeEventListener("mousedown",onDown)},[open]);const close=()=>{setOpen(false);box.current?.closest("[data-row]")?.focus()};const copy=()=>{const url=new URL(href,window.location.href).toString();navigator.clipboard?.writeText(url).catch(()=>{})};const items=[{label:"\u6253\u5F00",hint:"\u21B5",run:()=>activate(r)},{label:"\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00",hint:"\u2318\u21B5",run:()=>activate(r,true)},...member?[{label:"\u5728\u9879\u76EE\u9875\u91CC\u770B",run:()=>menu.openInProject(r.id)}]:[],{label:"\u590D\u5236\u94FE\u63A5",run:copy}];return jsxs5("span",{className:"band-library-more",ref:box,children:[jsx5("button",{type:"button",className:"band-library-morebtn","aria-haspopup":"menu","aria-expanded":open,"aria-label":`\u300C${r.name}\u300D\u7684\u66F4\u591A\u64CD\u4F5C`,tabIndex:-1,onClick:()=>setOpen(!open),children:jsxs5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx5("circle",{cx:"4",cy:"8",r:"1"}),jsx5("circle",{cx:"8",cy:"8",r:"1"}),jsx5("circle",{cx:"12",cy:"8",r:"1"})]})}),open&&jsx5("div",{className:"band-library-menu",role:"menu",ref:list,onKeyDown:withImeGuard3(e=>{const els=[...list.current?.querySelectorAll("[role='menuitem']")??[]];const i=els.indexOf(document.activeElement);if(e.key==="Escape"){e.preventDefault();close()}else if(e.key==="ArrowDown"){e.preventDefault();els[(i+1)%els.length]?.focus()}else if(e.key==="ArrowUp"){e.preventDefault();els[(i-1+els.length)%els.length]?.focus()}else if(e.key==="Tab")close()}),children:items.map(it=>jsxs5("button",{type:"button",role:"menuitem",tabIndex:-1,onClick:()=>{setOpen(false);it.run()},children:[it.label,it.hint&&jsx5("kbd",{children:it.hint})]},it.label))})]})}function GridView({ctx,rows,readThreads,now,stageOf,activate}){return jsx5("ul",{className:"band-library-grid","aria-label":"\u4EA7\u7269",children:rows.map(r=>{const unused=r.status.key==="unused";const href=artifactHref2(ctx,r.id);const stage=stageOf(r.stage)?.name??r.stage;return jsx5("li",{className:`band-library-card${unused?" is-unused":""}`,children:jsxs5("a",{href,"aria-label":r.name,onClick:e=>{if(!plainClick2(e))return;e.preventDefault();e.currentTarget.focus();activate(r)},children:[jsx5(Thumb,{ctx,row:r,size:"card"}),jsxs5("span",{className:"band-library-cardt",children:[jsxs5("span",{className:"band-library-cardname",children:[jsx5("b",{children:r.name}),jsx5("span",{className:`chip ${r.status.chip}`,children:r.status.label})]}),jsxs5("span",{className:"band-library-sub",children:[[stage,TYPE_TEXT[r.type],r.version!==void 0?`v${r.version}`:void 0,r.at?whenText(r.at,now):void 0].filter(Boolean).join(" \xB7 "),readThreads&&(r.comments??0)>0&&jsxs5("span",{className:"band-library-ccount","aria-label":`${r.comments} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx5(CommentIcon2,{}),r.comments]})]})]})]})},`${r.kind}:${r.id}`)})})}export{Library,PageSwitch,src_default as default};
1
+ import"../../chunks/chunk-JFPQMFKF.js";import{Avatar as Avatar2,ErrorNote as ErrorNote3,Mount as Mount3,WorkshopIcon as WorkshopIcon2,isForbidden,memberName as memberName2,memberOrder,reactMount,useCtxData as useCtxData2,useMembers,useSettledText as useSettledText2,withImeGuard as withImeGuard3}from"@kanyun-ai-infra/band-plugin-react";import{definePlugin,defineScopeState,projectPath as projectPath3}from"@kanyun-ai-infra/band-plugin-sdk";import{Fragment as Fragment5,useEffect as useEffect5,useMemo as useMemo2,useRef as useRef5,useState as useState5}from"react";import{Mount,withImeGuard}from"@kanyun-ai-infra/band-plugin-react";import{projectPath}from"@kanyun-ai-infra/band-plugin-sdk";import{useEffect as useEffect2,useRef}from"react";import{createPortal}from"react-dom";import{useEffect,useState}from"react";import{jsx,jsxs}from"react/jsx-runtime";import{ErrorNote,fileSizeText,memberName,useCtxData}from"@kanyun-ai-infra/band-plugin-react";import{useRef as useRef2,useState as useState2}from"react";import{Fragment,jsx as jsx2,jsxs as jsxs2}from"react/jsx-runtime";import{gateRule}from"@kanyun-ai-infra/band-plugin-react";import{agentDisplayName}from"@kanyun-ai-infra/band-contracts";import{Avatar,ErrorNote as ErrorNote2,Mount as Mount2,WorkshopIcon,toast,useAppData,useSettledText,withImeGuard as withImeGuard2}from"@kanyun-ai-infra/band-plugin-react";import{projectPath as projectPath2}from"@kanyun-ai-infra/band-plugin-sdk";import{Fragment as Fragment3,useEffect as useEffect4,useMemo,useRef as useRef4,useState as useState4}from"react";import{useEffect as useEffect3,useRef as useRef3,useState as useState3}from"react";import{Fragment as Fragment2,jsx as jsx3,jsxs as jsxs3}from"react/jsx-runtime";import{Fragment as Fragment4,jsx as jsx4,jsxs as jsxs4}from"react/jsx-runtime";import{Fragment as Fragment6,jsx as jsx5,jsxs as jsxs5}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css='/* src/my-artifacts/my-artifacts.css */\n.band-library-my {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.band-library-mymain {\n box-sizing: border-box;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n width: 100%;\n padding: 8px 18px 64px;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 12px;\n align-content: start;\n}\n.band-library-myhead {\n display: grid;\n gap: 10px;\n padding-top: 4px;\n}\n.band-library-myhead h1 {\n margin: 0;\n font-size: var(--fs-h2);\n font-weight: 600;\n letter-spacing: -0.005em;\n}\n.band-library-mytabs {\n justify-self: start;\n max-width: 100%;\n overflow-x: auto;\n overscroll-behavior-x: contain;\n}\n.band-library-mytabnum {\n margin-left: 5px;\n color: var(--muted);\n font-weight: 400;\n font-variant-numeric: tabular-nums;\n}\n.band-library-mybar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n.band-library-mysels {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.band-library-mygrow {\n flex: 1;\n}\n.band-library-myfind {\n display: flex;\n align-items: center;\n gap: 6px;\n box-sizing: border-box;\n width: 200px;\n padding: 4px 9px;\n border-radius: 7px;\n background: var(--fill-2);\n color: var(--muted);\n}\n.band-library-myfind > svg {\n width: 14px;\n height: 14px;\n flex: none;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n}\n.band-library-myfind input {\n width: 100%;\n border: 0;\n outline: none;\n background: none;\n color: var(--ink);\n font: inherit;\n font-size: var(--fs-ui);\n}\n.band-library-myfind input::placeholder {\n color: var(--muted);\n}\n.band-library-myfind input::-webkit-search-cancel-button {\n display: none;\n}\n.band-library-myfind:focus-within {\n background: var(--panel);\n box-shadow: inset 0 0 0 1px var(--accent), 0 0 0 3px var(--accent-soft);\n}\n.band-library-myfilter {\n display: none;\n}\n.band-library-mynote {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-library-mytable {\n --cols: minmax(0, 1fr) 172px 64px 104px 168px 64px 156px 32px;\n display: block;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n font-size: var(--fs-row);\n}\n.band-library-mytable[data-comments=off] {\n --cols: minmax(0, 1fr) 172px 64px 104px 168px 156px 32px;\n}\n.band-library-mytable[data-group=project] {\n --cols: minmax(0, 1fr) 64px 104px 168px 64px 156px 32px;\n}\n.band-library-mytable[data-group=project][data-comments=off] {\n --cols: minmax(0, 1fr) 64px 104px 168px 156px 32px;\n}\n.band-library-mytable thead,\n.band-library-mytable tbody {\n display: block;\n}\n.band-library-mytable th,\n.band-library-mytable td {\n display: block;\n padding: 0;\n border: 0;\n font-weight: inherit;\n text-align: left;\n vertical-align: middle;\n}\n.band-library-mytable thead tr,\n.band-library-mytable tbody tr:not(.band-library-mygrouprow) {\n display: grid;\n grid-template-columns: var(--cols);\n align-items: center;\n gap: 12px;\n padding: 0 10px;\n}\n.band-library-mytable thead tr {\n padding-bottom: 8px;\n border-bottom: var(--hairline) solid var(--rule);\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-mytable tbody tr:not(.band-library-mygrouprow) {\n min-height: 44px;\n border-radius: var(--r);\n cursor: pointer;\n}\n.band-library-mytable tbody tr:not(.band-library-mygrouprow):hover {\n background: var(--fill);\n}\n.band-library-mytable tbody tr:not(.band-library-mygrouprow):focus-visible {\n outline: 2px solid var(--accent);\n outline-offset: -2px;\n}\n.band-library-mytable .c-name {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.band-library-star {\n flex: none;\n border: 0;\n background: none;\n padding: 2px;\n border-radius: 5px;\n color: var(--muted);\n line-height: 0;\n cursor: pointer;\n}\n.band-library-star:hover {\n color: var(--ink);\n background: var(--fill-2);\n}\n.band-library-star[aria-pressed=true] {\n color: var(--warn);\n}\n.band-library-star svg {\n width: 15px;\n height: 15px;\n}\n.band-library-mytable .c-project,\n.band-library-mytable .c-type,\n.band-library-mytable .c-acc,\n.band-library-mytable .c-at {\n color: var(--muted);\n font-size: var(--fs-ui);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-mytable .c-status {\n display: flex;\n align-items: center;\n gap: 4px;\n min-width: 0;\n}\n.band-library-mytable .c-comments {\n color: var(--ink);\n font-size: var(--fs-ui);\n}\n.band-library-mytable .c-more {\n display: flex;\n justify-content: flex-end;\n}\n.band-library-myneeds {\n width: 14px;\n height: 14px;\n transform: scale(0.86);\n}\n.band-library-myproj {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-mywho {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n.band-library-mygrouprow td {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 14px 10px 4px;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-mygrouprow td > span {\n font-variant-numeric: tabular-nums;\n}\n.band-library-myfoot {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-myfoot button {\n margin-left: 10px;\n}\n.band-library-mytable tbody tr:hover .band-library-morebtn,\n.band-library-mytable tbody tr:focus-within .band-library-morebtn,\n.band-library-mymrow:hover .band-library-morebtn,\n.band-library-mymrow:focus-within .band-library-morebtn {\n opacity: 1;\n}\n.band-library-myrest {\n padding: 56px 16px;\n}\n.band-library-myrest b {\n color: var(--ink);\n font-weight: 500;\n font-size: var(--fs-body);\n}\n.band-library-myrest span {\n max-width: 44ch;\n}\n.band-library-myskel {\n display: grid;\n gap: 8px;\n padding-top: 8px;\n}\n.band-library-mymlist {\n display: none;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.band-library-mymrow {\n position: relative;\n display: grid;\n grid-template-columns: 40px minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 10px;\n padding: 8px 4px;\n border-radius: var(--r);\n cursor: pointer;\n}\n.band-library-mymrow:hover {\n background: var(--fill);\n}\n.band-library-mymtext {\n display: grid;\n gap: 2px;\n min-width: 0;\n}\n.band-library-mymname {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n min-width: 0;\n}\n.band-library-mymname a {\n color: var(--ink);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-mymname a:hover {\n text-decoration: underline;\n}\n.band-library-mymname .band-library-star {\n margin-left: 2px;\n}\n.band-library-mymmeta {\n color: var(--muted);\n font-size: var(--fs-meta);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-mymstatus {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: none;\n}\n.band-library-thumb:where([data-size=mobile]) {\n width: 40px;\n height: 40px;\n border-radius: 9px;\n}\n.band-library-myscrim {\n position: fixed;\n inset: 0;\n display: grid;\n place-items: end center;\n background: var(--scrim);\n z-index: var(--layer-pop);\n}\n.band-library-mysheet {\n box-sizing: border-box;\n width: 100%;\n max-width: 520px;\n padding: 14px 16px calc(16px + env(safe-area-inset-bottom, 0px));\n border-radius: var(--r-xl) var(--r-xl) 0 0;\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n display: grid;\n gap: 12px;\n}\n.band-library-mysheet h2 {\n margin: 0;\n font-size: var(--fs-title);\n font-weight: 600;\n}\n.band-library-mysheetbody {\n display: grid;\n gap: 10px;\n}\n.band-library-mysheetbody label {\n display: grid;\n gap: 4px;\n color: var(--muted);\n font-size: var(--fs-meta);\n}\n.band-library-mysheetbody .select {\n width: 100%;\n}\n.band-library-mysheet footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n}\n@media (max-width: 1180px) {\n .band-library-mytable {\n --cols: minmax(0, 1fr) 140px 56px 96px 108px 132px 32px;\n }\n .band-library-mytable[data-comments=off] {\n --cols: minmax(0, 1fr) 140px 56px 96px 132px 32px;\n }\n .band-library-mytable[data-group=project] {\n --cols: minmax(0, 1fr) 56px 96px 108px 132px 32px;\n }\n .band-library-mytable[data-group=project][data-comments=off] {\n --cols: minmax(0, 1fr) 56px 96px 132px 32px;\n }\n .band-library-mytable .c-acc {\n display: none;\n }\n}\n@media (max-width: 980px) {\n .band-library-mytable {\n --cols: minmax(0, 1fr) 140px 96px 108px 132px 32px;\n }\n .band-library-mytable[data-comments=off] {\n --cols: minmax(0, 1fr) 140px 96px 132px 32px;\n }\n .band-library-mytable[data-group=project] {\n --cols: minmax(0, 1fr) 96px 108px 132px 32px;\n }\n .band-library-mytable[data-group=project][data-comments=off] {\n --cols: minmax(0, 1fr) 96px 132px 32px;\n }\n .band-library-mytable .c-type {\n display: none;\n }\n}\n@media (max-width: 860px) {\n .band-library-mymain {\n padding: 4px 16px 48px;\n gap: 10px;\n }\n .band-library-myhead h1 {\n font-size: var(--fs-title);\n }\n .band-library-mybar {\n gap: 6px;\n }\n .band-library-mysels,\n .band-library-mygroupby {\n display: none;\n }\n .band-library-myfind {\n flex: 1;\n width: auto;\n }\n .band-library-myfilter {\n display: inline-flex;\n }\n .band-library-mytable {\n display: none;\n }\n .band-library-mymlist {\n display: grid;\n gap: 2px;\n }\n}\n\n/* src/library.css */\n.band-library-page {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.band-library-projecthead,\n.band-library-projecthead > :where(.band-react-surface) {\n display: contents;\n}\n.band-library {\n box-sizing: border-box;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n width: 100%;\n padding: 8px 18px 64px;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 14px;\n align-content: start;\n}\n.band-library-head {\n padding: 12px 18px 4px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n min-height: 32px;\n}\n.band-library-crumb {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n font-size: var(--fs-ui);\n color: var(--muted);\n}\n.band-library-ws {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--muted);\n white-space: nowrap;\n}\n.band-library-crumb button {\n border: 0;\n padding: 0 2px;\n background: none;\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n border-radius: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-crumb button:hover {\n text-decoration: underline;\n}\n.band-library-switch {\n flex: none;\n}\n.band-library-titlebar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n}\n.band-library-titlebar > :is(h1, h2) {\n margin: 0;\n display: flex;\n align-items: baseline;\n gap: 8px;\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--fs-h2);\n line-height: 1.3;\n}\n.band-library-count {\n font-family: var(--font);\n font-size: var(--fs-lead);\n font-weight: 400;\n color: var(--muted);\n}\n.band-library-readonly {\n align-self: center;\n font-family: var(--font);\n}\n.band-library-tools {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n.band-library-search {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 240px;\n box-sizing: border-box;\n padding: 4px 6px 4px 10px;\n border-radius: var(--r);\n background: var(--fill);\n color: var(--muted);\n font-size: var(--fs-row);\n transition: background var(--sixteenth) var(--ease), box-shadow var(--sixteenth) var(--ease);\n}\n.band-library-search:focus-within {\n background: var(--panel);\n box-shadow: var(--shadow-float-focus);\n}\n.band-library-search > svg,\n.band-library-viewseg svg,\n.band-library-glyph,\n.band-library-cicon,\n.band-library-chev,\n.band-library-morebtn svg {\n fill: none;\n stroke: currentColor;\n stroke-width: 1.4;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.band-library-search > svg {\n width: 15px;\n height: 15px;\n flex: none;\n}\n.band-library-search input {\n flex: 1;\n min-width: 0;\n border: 0;\n padding: 3px 0;\n background: none;\n color: var(--ink);\n font: inherit;\n outline: none;\n}\n.band-library-search input::placeholder {\n color: var(--muted);\n}\n.band-library-search input::-webkit-search-cancel-button {\n display: none;\n}\n.band-library-key {\n font-family: var(--mono);\n font-size: var(--fs-badge);\n padding: 0 5px;\n border-radius: 4px;\n box-shadow: inset 0 0 0 1px var(--rule-strong);\n}\n.band-library-search:focus-within .band-library-key {\n display: none;\n}\n.band-library-viewseg button {\n display: grid;\n place-items: center;\n padding: 4px 8px;\n}\n.band-library-viewseg svg {\n width: 15px;\n height: 15px;\n}\n.band-library-filters {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n flex-wrap: wrap;\n}\n.band-library-chips {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n}\n.band-library-chips button {\n border: 0;\n padding: 4px 11px;\n border-radius: 999px;\n background: none;\n color: var(--muted);\n font: inherit;\n font-size: var(--fs-row);\n cursor: pointer;\n transition: background var(--sixteenth) var(--ease), color var(--sixteenth) var(--ease);\n}\n.band-library-chips button span {\n margin-left: 5px;\n color: var(--muted);\n}\n.band-library-chips button:hover {\n color: var(--ink);\n background: var(--fill);\n}\n.band-library-chips button[aria-pressed=true] {\n background: var(--fill-2);\n color: var(--ink);\n font-weight: 500;\n}\n.band-library-chips button[aria-pressed=true] span {\n color: var(--muted);\n}\n.band-library-chips button:focus-visible,\n.band-library-sort:focus-visible,\n.band-library-crumb button:focus-visible,\n.band-library-link:focus-visible,\n.band-library-card > a:focus-visible,\n.band-library-menu button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--accent);\n}\n.band-library-selects {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.band-library-selects label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-note,\n.band-library-foot {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-link {\n border: 0;\n padding: 0;\n background: none;\n color: var(--accent-text);\n font: inherit;\n cursor: pointer;\n border-radius: 4px;\n}\n.band-library-link:hover {\n text-decoration: underline;\n}\n.band-library-rest {\n padding: 56px 16px;\n}\n.band-library-rest b {\n color: var(--ink);\n font-weight: 500;\n font-size: var(--fs-body);\n}\n.band-library-rest span {\n max-width: 44ch;\n}\n.band-library-table {\n --cols: minmax(0, 1fr) 92px 64px 132px 112px 72px 32px;\n --indent: 22px;\n display: block;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n font-size: var(--fs-row);\n}\n.band-library-table thead,\n.band-library-table tbody {\n display: block;\n}\n.band-library-table th,\n.band-library-table td {\n display: block;\n padding: 0;\n border: 0;\n font-weight: inherit;\n text-align: left;\n vertical-align: middle;\n}\n.band-library-table[data-comments=off] {\n --cols: minmax(0, 1fr) 92px 132px 112px 72px 32px;\n}\n.band-library-tr {\n display: grid;\n grid-template-columns: var(--cols);\n align-items: center;\n gap: 12px;\n padding: 0 12px;\n}\n.band-library-th {\n padding-bottom: 8px;\n border-bottom: var(--hairline) solid var(--rule);\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-sort {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n border: 0;\n padding: 0;\n background: none;\n color: inherit;\n font: inherit;\n cursor: pointer;\n border-radius: 4px;\n}\n.band-library-sort[aria-sort=ascending],\n.band-library-sort[aria-sort=descending] {\n color: var(--ink);\n}\n.band-library-th .c-name {\n padding-left: 18px;\n}\n.band-library-folder {\n min-height: 40px;\n border-radius: 10px;\n cursor: pointer;\n transition: background var(--sixteenth) var(--ease);\n}\n.band-library-folder:hover {\n background: var(--fill);\n}\n.band-library-folder:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--accent);\n background: var(--fill);\n}\n.band-library-table .c-folder {\n grid-column: 1 / -1;\n display: flex;\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n padding-left: calc((var(--level, 1) - 1) * var(--indent));\n white-space: nowrap;\n}\n.band-library-chev {\n flex: none;\n width: 13px;\n height: 13px;\n align-self: center;\n color: var(--muted);\n transition: transform var(--sixteenth) var(--ease);\n}\n.band-library-folder[aria-expanded=false] .band-library-chev {\n transform: rotate(-90deg);\n}\n.band-library-folder b {\n font-weight: 600;\n}\n.band-library-gcount,\n.band-library-gsum {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-library-gsum {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-row {\n min-height: 52px;\n border-radius: 10px;\n cursor: pointer;\n transition: background var(--sixteenth) var(--ease);\n}\n.band-library-row:hover,\n.band-library-row:focus-within {\n background: var(--fill);\n}\n.band-library-row:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--accent);\n background: var(--fill);\n}\n.band-library-row.is-unused > :not(.c-more) {\n opacity: 0.5;\n}\n.band-library-row .c-name {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n padding-left: calc((var(--level, 1) - 1) * var(--indent) + 18px);\n}\n.band-library-namecol {\n display: flex;\n align-items: baseline;\n gap: 8px;\n min-width: 0;\n}\n.band-library-namecol a {\n color: var(--ink);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-namecol a:hover {\n text-decoration: underline;\n}\n.band-library-attached {\n flex: none;\n max-width: 50%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-sub {\n display: none;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-row .c-type {\n color: var(--muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-library-ver {\n flex: none;\n font-family: var(--mono);\n font-size: var(--fs-meta);\n color: var(--muted);\n}\n.band-library-row .c-author {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-library-author {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-row .c-at {\n display: flex;\n align-items: center;\n gap: 6px;\n white-space: nowrap;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-library-ccount {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--ink);\n}\n.band-library-cicon {\n width: 14px;\n height: 14px;\n}\n.band-library-more {\n position: relative;\n display: inline-flex;\n}\n.band-library-morebtn {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n border: 0;\n padding: 0;\n background: none;\n color: var(--muted);\n border-radius: 6px;\n cursor: pointer;\n opacity: 0;\n}\n.band-library-row:hover .band-library-morebtn,\n.band-library-row:focus-within .band-library-morebtn,\n.band-library-morebtn[aria-expanded=true] {\n opacity: 1;\n}\n.band-library-morebtn:hover {\n background: var(--fill-2);\n color: var(--ink);\n}\n.band-library-morebtn svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n stroke: none;\n}\n.band-library-menu {\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n z-index: 20;\n min-width: 190px;\n padding: 5px;\n display: grid;\n border-radius: var(--r-lg);\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n}\n.band-library-menu button {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n border: 0;\n padding: 7px 10px;\n border-radius: 7px;\n background: none;\n color: var(--ink);\n font: inherit;\n font-size: var(--fs-row);\n text-align: left;\n cursor: pointer;\n}\n.band-library-menu button:hover,\n.band-library-menu button:focus-visible {\n background: var(--fill);\n}\n.band-library-menu kbd {\n font-family: var(--mono);\n font-size: var(--fs-badge);\n color: var(--muted);\n}\n.band-library-thumb {\n flex: none;\n display: grid;\n place-items: center;\n overflow: hidden;\n background: var(--fill-2);\n color: var(--muted);\n}\n.band-library-thumb:where([data-size=row]) {\n width: 28px;\n height: 28px;\n border-radius: 7px;\n}\n.band-library-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.band-library-glyph {\n width: 15px;\n height: 15px;\n}\n.band-library-skel {\n display: grid;\n gap: 8px;\n padding-top: 8px;\n}\n.band-library-skelrow {\n height: 44px;\n border-radius: 10px;\n background: var(--fill);\n animation: band-library-breathe 1.6s var(--ease) infinite alternate;\n}\n@keyframes band-library-breathe {\n to {\n opacity: 0.5;\n }\n}\n.band-library-grid {\n margin: 0;\n padding: 0;\n list-style: none;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));\n gap: 16px;\n}\n.band-library-card {\n display: grid;\n border-radius: 12px;\n background: var(--panel);\n box-shadow: var(--shadow-card);\n overflow: visible;\n transition: background var(--sixteenth) var(--ease);\n}\n.band-library-card:hover {\n box-shadow: var(--shadow-pop);\n}\n.band-library-card.is-unused {\n opacity: 0.5;\n}\n.band-library-card.is-skeleton {\n aspect-ratio: 4 / 4.2;\n animation: band-library-breathe 1.6s var(--ease) infinite alternate;\n}\n.band-library-card > a {\n display: grid;\n color: inherit;\n text-decoration: none;\n border-radius: 12px;\n overflow: hidden;\n}\n.band-library-thumb:where([data-size=card]) {\n aspect-ratio: 16 / 10;\n width: 100%;\n background: var(--sunk);\n}\n.band-library-thumb:where([data-size=card]) .band-library-glyph {\n width: 28px;\n height: 28px;\n stroke-width: 1.1;\n}\n.band-library-cardt {\n display: grid;\n gap: 3px;\n padding: 10px 12px 12px;\n min-width: 0;\n}\n.band-library-cardname {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-width: 0;\n}\n.band-library-cardname b {\n font-size: var(--fs-row);\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-library-card .band-library-sub {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n@media (prefers-reduced-motion: reduce) {\n .band-library-skelrow,\n .band-library-card.is-skeleton {\n animation: none;\n }\n}\n@container band-library (max-width: 1000px) {\n .band-library-table .c-type {\n display: none;\n }\n .band-library-table {\n --cols: minmax(0, 1fr) 92px 64px 132px 112px 32px;\n }\n .band-library-table[data-comments=off] {\n --cols: minmax(0, 1fr) 92px 132px 112px 32px;\n }\n}\n@container band-library (max-width: 820px) {\n .band-library-table .c-author {\n display: none;\n }\n .band-library-table {\n --cols: minmax(0, 1fr) 92px 64px 112px 32px;\n }\n .band-library-table[data-comments=off] {\n --cols: minmax(0, 1fr) 92px 112px 32px;\n }\n}\n@media (max-width: 600px) {\n .band-library {\n padding: 4px 16px 48px;\n gap: 12px;\n }\n .band-library-head .band-library-crumb {\n display: none;\n }\n .band-library-head {\n justify-content: flex-end;\n }\n .band-library-tools {\n width: 100%;\n }\n .band-library-search {\n flex: 1;\n width: auto;\n min-width: 0;\n }\n .band-library-chips button,\n .band-library-selects label {\n flex: none;\n white-space: nowrap;\n }\n .band-library-table {\n --indent: 12px;\n }\n .band-library-th {\n display: none;\n }\n .band-library-table .band-library-tr.band-library-row {\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-areas: "name status" "name comments";\n row-gap: 2px;\n padding: 8px;\n }\n .band-library-row .c-type,\n .band-library-row .c-author,\n .band-library-row .c-at,\n .band-library-row .c-more {\n display: none;\n }\n .band-library-row .c-name {\n grid-area: name;\n }\n .band-library-row .c-status {\n grid-area: status;\n justify-self: end;\n }\n .band-library-row .c-comments {\n grid-area: comments;\n justify-self: end;\n font-size: var(--fs-dense);\n }\n .band-library-row .c-comments .faint {\n display: none;\n }\n .band-library-thumb:where([data-size=row]) {\n width: 40px;\n height: 40px;\n border-radius: 9px;\n }\n .band-library-namecol {\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n }\n .band-library-attached {\n display: none;\n }\n .band-library-namecol .band-library-sub {\n display: block;\n }\n .band-library-namecol .band-library-ver {\n display: none;\n }\n .band-library-grid {\n grid-template-columns: 1fr;\n gap: 12px;\n }\n}\n.band-library:where(:has(.band-library-materials)) {\n grid-template-columns: minmax(0, 1fr) minmax(240px, 300px);\n gap: 24px;\n}\n.band-library-artifacts {\n container: band-library / inline-size;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 14px;\n min-width: 0;\n align-content: start;\n}\n.band-library-materials {\n min-width: 0;\n}\n.band-library-materials h2 {\n margin: 0;\n font-size: var(--fs-h2);\n}\n.band-library-materials-hint,\n.band-library-material-meta {\n color: var(--muted);\n font-size: var(--fs-caption);\n}\n.band-library-material-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.band-library-material-list li {\n display: grid;\n gap: 6px;\n padding: 12px 0;\n}\n.band-library-material-name {\n border: 0;\n background: none;\n padding: 0;\n color: var(--ink);\n font: inherit;\n text-align: left;\n text-decoration: none;\n overflow-wrap: anywhere;\n cursor: pointer;\n text-autospace: no-autospace;\n}\n.band-library-material-name:hover {\n text-decoration: underline;\n}\n.band-library-material-name:focus-visible {\n outline: 2px solid var(--accent);\n outline-offset: 3px;\n}\n.band-library-material-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 10px;\n}\n.band-library-material-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px 10px;\n}\n.band-library-material-version {\n font-variant-numeric: tabular-nums;\n color: var(--ink);\n}\n.band-library-material-latest {\n color: var(--accent-text);\n font-size: var(--fs-dense);\n}\n.band-library-material-note {\n margin: 0;\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-library-material-history {\n display: grid;\n gap: 6px;\n padding: 8px 0 0 12px;\n border-left: 2px solid var(--hairline);\n}\n.band-library-material-versions {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.band-library-material-versions li {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 4px 10px;\n padding: 6px 0;\n}\n.band-library-material-actions .band-library-material-note {\n flex-basis: 100%;\n}\n.band-library-material-confirm {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 0;\n border: 0;\n font-size: var(--fs-dense);\n}\n.band-library-material-confirm p {\n margin: 0;\n}\n@media (max-width: 1100px) {\n .band-library:where(:has(.band-library-materials)) {\n grid-template-columns: minmax(0, 1fr);\n }\n}\n.band-library-preview {\n width: min(1180px, calc(100vw - 56px));\n height: calc(100dvh - 56px);\n max-width: none;\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-library-preview::backdrop {\n background: var(--scrim);\n}\n.band-library-preview-content,\n.band-library-preview-content > * {\n height: 100%;\n min-height: 0;\n}\n.band-library-preview-exit {\n position: absolute;\n top: 12px;\n right: 12px;\n}\n.band-library-preview-exit:where(.band-library-preview:has([data-band-preview-chrome]) > *) {\n visibility: hidden;\n pointer-events: none;\n}\n@media (max-width: 600px) {\n .band-library-preview {\n width: 100vw;\n height: 100dvh;\n border-radius: 0;\n }\n}\n.band-library-appthumb {\n aspect-ratio: 16 / 10;\n overflow: hidden;\n}\n.band-library-cardacts {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 0 12px 10px;\n}\n.band-library-mygrids {\n display: grid;\n gap: 20px;\n}\n.band-library-mygrouphead {\n font-size: var(--fs-row);\n margin: 0 0 12px;\n}\n.band-library-mygrouphead > span {\n color: var(--muted);\n font-weight: 400;\n}\n@media (max-width: 600px) {\n .band-library-grid {\n grid-template-columns: 1fr;\n gap: 12px;\n }\n}\n.band-library:where([data-view=grid]):where(:has(.band-library-materials)) {\n grid-template-columns: minmax(0, 1fr);\n}\n.band-library-morebtn:where(.band-library-card:hover *, .band-library-card:focus-within *, [aria-expanded=true]) {\n opacity: 1;\n}\n';let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-library"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-library");document.head.prepend(el)}el.textContent=css}function readView(key,search){const explicit=new URLSearchParams(search).get("view");if(explicit==="list"||explicit==="grid")return explicit;try{return window.localStorage.getItem(`band-library-view:${key}`)==="list"?"list":"grid"}catch{return"grid"}}function rememberView(key,view){try{window.localStorage.setItem(`band-library-view:${key}`,view)}catch{}}function useBrowseView(key){const[view,setView]=useState(()=>readView(key,window.location.search));useEffect(()=>{const pop=()=>setView(readView(key,window.location.search));window.addEventListener("popstate",pop);return()=>window.removeEventListener("popstate",pop)},[key]);return[view,next=>{rememberView(key,next);const url=new URL(window.location.href);url.searchParams.set("view",next);window.history.replaceState(window.history.state,"",url);setView(next)}]}function readPreview(search,projectId){const q=new URLSearchParams(search);const artifactId=q.get("artifact");const project=q.get("artifactProject")||projectId;if(!artifactId||!project)return null;const versionId=q.get("artifactVersion");return{projectId:project,artifactId,...versionId?{versionId}:{}}}function previewSearch(search,target){const q=new URLSearchParams(search);for(const key of["artifact","artifactProject","artifactVersion"])q.delete(key);if(target){q.set("artifact",target.artifactId);q.set("artifactProject",target.projectId);if(target.versionId)q.set("artifactVersion",target.versionId)}return q.size?`?${q}`:""}function useArtifactPreview(projectId){const[target,setTarget]=useState(()=>readPreview(window.location.search,projectId));useEffect(()=>{const pop=()=>setTarget(readPreview(window.location.search,projectId));window.addEventListener("popstate",pop);return()=>window.removeEventListener("popstate",pop)},[projectId]);const close=()=>{if(window.history.state?.bandArtifactPreview===window.location.pathname){window.history.back()}else{window.history.replaceState(window.history.state,"",`${window.location.pathname}${previewSearch(window.location.search,null)}${window.location.hash}`);setTarget(null)}};const open=next=>{const url=`${window.location.pathname}${previewSearch(window.location.search,next)}${window.location.hash}`;if(target)window.history.replaceState(window.history.state,"",url);else window.history.pushState({...window.history.state,bandArtifactPreview:window.location.pathname},"",url);setTarget(next)};return{target,open,close}}function ArtifactPreview({ctx,target,onClose}){const dialog=useRef(null);const close=useRef(onClose);close.current=onClose;useEffect2(()=>{const el=dialog.current;if(!el)return;const opener=document.activeElement;if(typeof el.showModal==="function")el.showModal();else el.setAttribute("open","");const key=withImeGuard(e=>{if(e.key!=="Escape"||e.defaultPrevented)return;const layers=document.querySelectorAll("[data-band-layer]");if(layers[layers.length-1]!==el)return;e.preventDefault();close.current()});window.addEventListener("keydown",key);return()=>{window.removeEventListener("keydown",key);if(typeof el.close==="function"&&el.open)el.close();if(opener instanceof HTMLElement&&opener.isConnected)opener.focus()}},[]);const down=useRef(false);return createPortal(jsxs("dialog",{ref:dialog,className:"band-library-preview","data-band-layer":"dialog","aria-label":"\u4EA7\u7269\u8BE6\u60C5",onCancel:e=>{e.preventDefault();close.current()},onMouseDown:e=>{down.current=e.target===e.currentTarget},onClick:e=>{if(down.current&&e.target===e.currentTarget)close.current();down.current=false},children:[jsx("button",{type:"button",className:"iconbtn band-library-preview-exit","aria-label":"\u5173\u95ED\u4EA7\u7269\u8BE6\u60C5",onClick:()=>close.current(),children:"\xD7"}),jsx(Mount,{className:"band-library-preview-content",mount:el=>{const service=ctx.services.find("@kanyun-ai-infra/band-project/artifact-preview");if(!service){const message=document.createElement("p");message.textContent="\u8FD9\u4E2A\u7248\u672C\u7684 Band \u8FD8\u6CA1\u6709\u4EA7\u7269\u9884\u89C8";const link=document.createElement("a");link.href=projectPath({id:target.projectId},"a",target.artifactId);link.textContent="\u53BB\u4EA7\u7269\u9875\u67E5\u770B";el.append(message,link);return()=>{message.remove();link.remove()}}return service.mount(el,{projectId:target.projectId,request:{artifactId:target.artifactId,...target.versionId?{versionId:target.versionId}:{}},close:()=>close.current(),onVersionChange:versionId=>{const search=previewSearch(window.location.search,{...target,versionId});window.history.replaceState(window.history.state,"",`${window.location.pathname}${search}${window.location.hash}`)}})},deps:[ctx,target.projectId,target.artifactId,target.versionId]})]}),document.body)}function materialOf(r){return r.artifactId&&r.versionId?{artifactId:r.artifactId,versionId:r.versionId}:null}function VersionBadge({r}){if(r.versionNumber===void 0)return null;return jsxs2("span",{className:"band-library-material-version",title:"\u7D20\u6750\u7684\u7B2C\u51E0\u7248",children:["v",r.versionNumber]})}function problemText(e){const code=e?.code;const msg=e instanceof Error?e.message:String(e);if(code==="CONFLICT")return`${msg}\uFF08\u5DF2\u5237\u65B0\uFF09`;return msg}function ReplaceButton({ctx,r,onChanged}){const m=materialOf(r);const input=useRef2(null);const[busy,setBusy]=useState2(false);const[note,setNote]=useState2(null);if(!m||!ctx.attachments.replace)return null;if(note?.forVersionId!==void 0&&note.forVersionId!==m.versionId)setNote(null);const replace=ctx.attachments.replace;const pick=file=>{if(!file)return;setBusy(true);setNote(null);replace(m.artifactId,file,{expectedVersionId:m.versionId}).then(res=>{setBusy(false);setNote(res.unchanged?{text:"\u548C\u73B0\u5728\u7684\u6700\u65B0\u7248\u4E00\u6837\uFF0C\u6CA1\u6709\u65B0\u7248\u672C",forVersionId:m.versionId}:null);onChanged()},e=>{setBusy(false);setNote({text:`\u300C${r.name}\u300D\u6CA1\u6362\u6210\uFF1A${problemText(e)}`});onChanged()})};return jsxs2(Fragment,{children:[jsx2("button",{type:"button",className:"btn ghost sm",disabled:busy,"aria-label":`\u66FF\u6362 ${r.name} \u4E3A\u65B0\u7248\u672C`,onClick:()=>input.current?.click(),children:busy?"\u6B63\u5728\u66FF\u6362\u2026":"\u66FF\u6362\u4E3A\u65B0\u7248\u672C"}),jsx2("input",{ref:input,type:"file",hidden:true,tabIndex:-1,onChange:e=>{pick(e.currentTarget.files?.[0]);e.currentTarget.value=""}}),note&&jsx2("output",{className:"band-library-material-note",children:note.text})]})}function MaterialHistory({ctx,r,members,canReplace,whenText:whenText2,now,preview,onChanged}){const m=materialOf(r);const versions=ctx.attachments.versions;const history=useCtxData(ctx,()=>m&&versions?versions(m.artifactId):Promise.resolve(null),[m?.artifactId,m?.versionId],"version.*");const[busy,setBusy]=useState2(null);const[note,setNote]=useState2(null);if(!m)return null;const data=history.data;const revert=(sha256,number)=>{const replace=ctx.attachments.replace;if(!replace||!data)return;setBusy(sha256);setNote(null);replace(m.artifactId,{sha256},{expectedVersionId:data.latestVersionId}).then(()=>{setBusy(null);onChanged();history.reload()},e=>{setBusy(null);setNote(`\u6CA1\u80FD\u8BBE\u4E3A v${number}\uFF1A${problemText(e)}`);history.reload();onChanged()})};return jsxs2("section",{className:"band-library-material-history","aria-label":`${r.name} \u7684\u7248\u672C\u5386\u53F2`,children:[history.error&&jsxs2(ErrorNote,{retry:history.reload,children:["\u7248\u672C\u5386\u53F2\u6CA1\u53D6\u5230\uFF1A",history.error]}),data===void 0&&!history.error&&jsx2("output",{children:"\u6B63\u5728\u8BFB\u53D6\u7248\u672C\u2026"}),note&&jsx2("output",{className:"band-library-material-note",children:note}),jsx2("ol",{className:"band-library-material-versions",children:data?.versions.map(v=>{const latest=v.versionId===data.latestVersionId;return jsxs2("li",{children:[jsxs2("span",{className:"band-library-material-version",children:["v",v.number]}),latest&&jsx2("span",{className:"band-library-material-latest",children:"\u6700\u65B0"}),jsxs2("span",{className:"band-library-material-meta",children:[jsx2("span",{children:fileSizeText(v.attachment.size)}),jsx2("span",{children:memberName(members,v.author.id)}),jsx2("time",{dateTime:v.createdAt,title:v.createdAt,children:whenText2(v.createdAt,now)})]}),jsxs2("span",{className:"band-library-material-actions",children:[jsx2("button",{type:"button",className:"btn ghost sm","aria-label":`\u67E5\u770B v${v.number}`,onClick:()=>preview({id:v.attachment.id,name:v.attachment.name,artifactId:m.artifactId,versionId:v.versionId}),children:"\u67E5\u770B"}),canReplace&&!latest&&ctx.attachments.replace&&jsx2("button",{type:"button",className:"btn ghost sm",disabled:busy!==null,"aria-label":`\u628A v${v.number} \u8BBE\u4E3A\u6700\u65B0`,onClick:()=>revert(v.attachment.sha256,v.number),children:busy===v.attachment.sha256?"\u6B63\u5728\u8BBE\u7F6E\u2026":"\u8BBE\u4E3A\u6700\u65B0"})]})]},v.versionId)})})]})}var STATUS={not_started:{key:"not_started",label:"\u672A\u5F00\u59CB",chip:"s-blocked"},rerun:{key:"rerun",label:"\u5F85\u91CD\u8DD1",chip:"s-blocked"},running:{key:"running",label:"\u751F\u6210\u4E2D",chip:"s-running"},review:{key:"review",label:"\u5F85\u8BC4\u5BA1",chip:"s-awaiting"},approved:{key:"approved",label:"\u5DF2\u6279\u51C6",chip:"s-approved"},completed:{key:"completed",label:"\u5DF2\u5B8C\u6210",chip:"s-approved"},picked:{key:"picked",label:"\u5DF2\u9009",chip:"s-approved"},unused:{key:"unused",label:"\u4E0D\u7528\u4E86",chip:"plain"},stale:{key:"stale",label:"\u5F85\u66F4\u65B0",chip:"s-stale"},failed:{key:"failed",label:"\u5931\u8D25",chip:"s-failed"},delivered:{key:"delivered",label:"\u5DF2\u4EA4\u4ED8",chip:"plain"},process:{key:"process",label:"\u8FC7\u7A0B",chip:"plain"}};function statusOfKey(key){return STATUS[key]}function noGate(stage){return stage?.gated===false}function statusOf(a,stage,gate){if(a.role==="process")return STATUS.process;if(a.unused)return STATUS.unused;const s=stage?.status;const hasVersion=a.latest!==void 0;if(s==="failed")return STATUS.failed;if(s==="stale")return STATUS.stale;if(s==="in_progress")return STATUS.running;if(s==="approved"&&noGate(stage))return STATUS.completed;if(s==="approved")return gate?.per==="pick"?STATUS.picked:STATUS.approved;if(s==="in_review"){if(gate?.per==="key"&&a.key&&gate.approvals?.some(v=>v.key===a.key)){return STATUS.approved}return STATUS.review}if(s===void 0)return hasVersion?STATUS.delivered:STATUS.not_started;return hasVersion?STATUS.rerun:STATUS.not_started}var TYPE_TEXT={web:"\u7F51\u9875",doc:"\u6587\u6863",image:"\u56FE\u7247",video:"\u89C6\u9891",audio:"\u97F3\u9891",external:"\u5916\u90E8",other:"\u5176\u4ED6"};function artifactTypeOf(artifactType,views){const viewer=views.artifactTypes?.[artifactType]?.viewer??"";const short=viewer.replace(/^@[^/]+\/band-viewer-/,"").replace(/^viewer-/,"");if(short==="web")return"web";if(short==="text")return"doc";if(short==="image")return"image";if(short==="media")return"video";if(short==="external")return"external";return"other"}function attachmentTypeOf(a){if(a.mime.startsWith("image/"))return"image";if(a.mime.startsWith("video/"))return"video";if(a.mime.startsWith("audio/"))return"audio";return a.kind==="document"||a.kind==="code"||a.kind==="notebook"?"doc":"other"}var OPEN_STATUSES=["open","queued","running","awaiting_confirm"];function artifactRows(artifacts,opts){const counts=new Map;for(const t of opts.threads??[]){if(t.artifactId!==void 0)counts.set(t.artifactId,(counts.get(t.artifactId)??0)+1)}return artifacts.map((a,order)=>{const stage=a.stage?opts.stages.find(s=>s.stage===a.stage):void 0;return{kind:"artifact",id:a.id,name:a.name,type:artifactTypeOf(a.artifactType,opts.views),artifactType:a.artifactType,...a.stage?{stage:a.stage}:{},...a.key?{key:a.key}:{},...a.role==="process"?{process:true}:{},order,...a.latest?.number!==void 0?{version:a.latest.number}:{},...a.latest?{versionId:a.latest.versionId,at:a.latest.at}:{},...a.latest?.author?{author:a.latest.author.id,authorAgent:a.latest.author.kind==="agent"}:{},status:statusOf(a,stage,a.stage?opts.gates[a.stage]:void 0),...opts.threads?{comments:counts.get(a.id)??0}:{}}})}var DEFAULT_FILTERS={status:"all",type:"all",q:""};function matchesStatus(r,f){if(f==="review")return r.status.key==="review";if(f==="comments")return(r.comments??0)>0;if(f==="approved")return r.status.key==="approved"||r.status.key==="picked";return true}function matchesQuery(r,q){const needle=q.trim().toLowerCase();if(needle==="")return true;return r.name.toLowerCase().includes(needle)}function applyFilters(rows,f){return rows.filter(r=>{if(!matchesStatus(r,f.status))return false;if(f.type!=="all"&&r.type!==f.type)return false;return matchesQuery(r,f.q)})}function isFiltering(f){return f.status!=="all"||f.type!=="all"||f.q.trim()!==""}function statusCounts(rows){return{all:rows.length,review:rows.filter(r=>matchesStatus(r,"review")).length,comments:rows.filter(r=>matchesStatus(r,"comments")).length,approved:rows.filter(r=>matchesStatus(r,"approved")).length}}function typesPresent(rows){const have=new Set(rows.map(r=>r.type));return Object.keys(TYPE_TEXT).filter(t=>have.has(t))}function emptyReason(f){const parts=[];if(f.status!=="all")parts.push(`\u300C${STATUS_FILTER_TEXT[f.status]}\u300D\u91CC`);if(f.type!=="all")parts.push(`\u300C${TYPE_TEXT[f.type]}\u300D\u91CC`);const q=f.q.trim();return`${parts.join("")}\u6CA1\u6709${q?`\u540D\u5B57\u542B\u300C${q}\u300D\u7684`:""}\u4EA7\u7269`}var STATUS_FILTER_TEXT={all:"\u5168\u90E8",review:"\u5F85\u8BC4\u5BA1",comments:"\u6709\u610F\u89C1",approved:"\u5DF2\u6279\u51C6"};var DEFAULT_SORT={key:"updated",dir:"desc"};function compare(a,b,sort){const sign=sort.dir==="asc"?1:-1;if(sort.key==="name")return sign*a.name.localeCompare(b.name,"zh");const ta=a.at??"";const tb=b.at??"";return sign*(ta<tb?-1:ta>tb?1:0)}function sortRows(rows,sort){const clusters=new Map;const singles=[];for(const a of rows){if(a.stage&&a.key&&a.key!=="main"){const id=`${a.stage}:${a.artifactType}`;const c=clusters.get(id);if(c)c.push(a);else{const list=[a];clusters.set(id,list);singles.push(list)}}else singles.push([a])}for(const c of clusters.values())c.sort((x,y)=>x.order-y.order);const head=list=>sort.key==="updated"?list.reduce((m,r)=>(r.at??"")>(m.at??"")?r:m):list[0];singles.sort((x,y)=>compare(head(x),head(y),sort));return singles.flat()}function fanNames(rows){const prefix=n=>{const i=n.lastIndexOf(" \xB7 ");return i>0?n.slice(0,i):null};const p=prefix(rows[0]?.name??"");if(p&&rows.every(r=>prefix(r.name)===p))return{label:p,leaf:r=>r.name.slice(p.length+3)};return{label:rows[0]?.artifactType??"",leaf:r=>r.name}}var leafOf=(row,label)=>({kind:"leaf",row,...label!==void 0?{label}:{}});function stageChildren(stage,rows,sort){const fans=new Map;for(const r of rows){if(!r.key||r.key==="main")continue;const list=fans.get(r.artifactType);if(list)list.push(r);else fans.set(r.artifactType,[r])}const groups=[...fans.values()].filter(g=>g.length>1);const flat=groups.length===1&&groups[0]?.length===rows.length;const inFan=new Set(groups.flat());const blocks=[];for(const g of groups){const members=[...g].sort((a,b)=>a.order-b.order);const names=fanNames(members);const leaves=members.map(r=>{const short=names.leaf(r);return leafOf(r,short===r.name?void 0:short)});const head=sort.key==="updated"?members.reduce((m,r)=>(r.at??"")>(m.at??"")?r:m):members[0];blocks.push({head,node:flat?leaves:{kind:"folder",id:`fan:${stage}:${g[0]?.artifactType}`,label:names.label,count:members.length,children:leaves}})}for(const r of rows)if(!inFan.has(r))blocks.push({head:r,node:leafOf(r)});blocks.sort((x,y)=>compare(x.head,y.head,sort));return blocks.flatMap(b=>b.node)}function buildTree(rows,opts){const arts=rows.filter(r=>r.process!==true);const process=rows.filter(r=>r.process===true);const out=[];const placed=new Set;const known=new Set(opts.stages.map(s=>s.stage));const extra=[...new Set(arts.flatMap(r=>r.stage!==void 0&&!known.has(r.stage)?[r.stage]:[]))].map(stage=>({stage}));for(const s of[...opts.stages,...extra]){const list=arts.filter(r=>r.stage===s.stage);if(list.length===0)continue;for(const r of list)placed.add(r);out.push({kind:"folder",id:`stage:${s.stage}`,label:s.name??s.stage,stage:s.stage,count:list.length,children:stageChildren(s.stage,list,opts.sort)})}const rest=arts.filter(r=>!placed.has(r));if(rest.length>0)out.push({kind:"folder",id:"other",label:"\u5176\u4ED6",count:rest.length,children:sortRows(rest,opts.sort).map(r=>leafOf(r))});if(process.length>0)out.push({kind:"folder",id:"process",label:"\u8FC7\u7A0B\u6587\u6863",process:true,count:process.length,children:sortRows(process,opts.sort).map(r=>leafOf(r))});return out}function defaultExpanded(f){return f.id!=="process"}function visibleNodes(tree,expanded){const out=[];const walk=(nodes,level,parent)=>{nodes.forEach((node,i)=>{out.push({node,level,setsize:nodes.length,posinset:i+1,...parent!==void 0?{parent}:{}});if(node.kind==="folder"&&expanded(node))walk(node.children,level+1,node.id)})};walk(tree,1);return out}function gateSummary(stage,gate,opts={}){if(!stage)return void 0;const role=opts.roleLabel??(r=>r);const who=ids=>ids.map(opts.memberName??(x=>x)).join("\u3001");if(stage.status==="approved"){if(noGate(stage))return"\u5DF2\u5B8C\u6210";if(gate?.per==="pick"&&opts.picked)return`\u5DF2\u9009\u300C${opts.picked}\u300D`;return gate?.approvedBy.length?`\u5DF2\u6279\u51C6 \xB7 ${who(gate.approvedBy)}`:"\u5DF2\u901A\u8FC7"}if(stage.status==="in_review"){if(gate?.per==="pick")return"\u6311\u9009\u4E2D \xB7 \u6BCF\u4EBA\u4E00\u7968";const roles=gate?.approveBy?.map(role)??[];if(!roles.length)return"\u5F85\u8BC4\u5BA1";return`\u5F85\u8BC4\u5BA1 \xB7 ${gateRule(roles,gate?.mode).trimStart()}`}if(stage.status==="in_progress")return"\u751F\u6210\u4E2D";if(stage.status==="stale")return"\u4E0A\u6E38\u6709\u4E86\u65B0\u7248\u672C";if(stage.status==="failed")return"\u5931\u8D25";return"\u7B49\u4E0A\u6E38"}function whenText(iso,now){const t=new Date(iso);const mins=Math.floor((now.getTime()-t.getTime())/6e4);const hm=`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`;if(mins<1)return"\u521A\u521A";if(mins<60)return`${mins} \u5206\u949F\u524D`;if(mins<60*6)return`${Math.floor(mins/60)} \u5C0F\u65F6\u524D`;const day=d=>new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime();const days=Math.round((day(now)-day(t))/864e5);if(days===0)return`\u4ECA\u5929 ${hm}`;if(days===1)return`\u6628\u5929 ${hm}`;return`${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${hm}`}function materialUses(material,rows){const byArtifact=new Map;for(const u of material.usedIn??[])if(!byArtifact.has(u.artifactId))byArtifact.set(u.artifactId,u.number);return rows.flatMap(r=>{const number=byArtifact.get(r.id);return number===void 0?[]:[{artifactId:r.id,name:r.name,number}]})}function TypeGlyph({type}){const d={web:jsxs3(Fragment2,{children:[jsx3("rect",{x:"2.5",y:"3",width:"11",height:"10",rx:"1.5"}),jsx3("path",{d:"M2.5 5.8h11"})]}),doc:jsxs3(Fragment2,{children:[jsx3("path",{d:"M4 2.5h5.5L12 5v8.5H4z"}),jsx3("path",{d:"M6 7.5h4M6 10h4"})]}),image:jsxs3(Fragment2,{children:[jsx3("rect",{x:"2.5",y:"3",width:"11",height:"10",rx:"1.5"}),jsx3("path",{d:"M2.5 11l3.2-3.2 2.6 2.6 1.6-1.6 3.6 3.6"})]}),video:jsxs3(Fragment2,{children:[jsx3("rect",{x:"2.5",y:"3",width:"11",height:"10",rx:"1.5"}),jsx3("path",{d:"M7 6.2v3.6L10 8z"})]}),audio:jsx3("path",{d:"M3 9v-2M5.5 11V5M8 13V3M10.5 11V5M13 9V7"}),external:jsx3("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"}),other:jsxs3(Fragment2,{children:[jsx3("rect",{x:"3",y:"3",width:"10",height:"10",rx:"2"}),jsx3("path",{d:"M6 8h4"})]})};return jsx3("svg",{viewBox:"0 0 16 16",className:"band-library-glyph","aria-hidden":"true",children:d[type]})}var IMAGE_EXT=/\.(png|jpe?g|gif|webp|svg|avif)$/i;function useInView(){const ref=useRef3(null);const[seen,setSeen]=useState3(false);useEffect3(()=>{const el=ref.current;if(!el||seen)return;if(typeof IntersectionObserver==="undefined"){setSeen(true);return}const io=new IntersectionObserver(entries=>{if(entries.some(e=>e.isIntersecting)){setSeen(true);io.disconnect()}});io.observe(el);return()=>io.disconnect()},[seen]);return[ref,seen]}var IMAGE_ENTRY=new Map;function Thumb({ctx,row,size}){const[ref,seen]=useInView();const[src,setSrc]=useState3(null);const[broken,setBroken]=useState3(false);const wantsImage=row.type==="image";const versionId=row.versionId;useEffect3(()=>{if(!seen||!wantsImage)return;let live=true;setBroken(false);const load=async()=>{if(!versionId)return null;let path=IMAGE_ENTRY.get(versionId);if(path===void 0){const versions=await ctx.version.list(row.id);const v=versions.find(x=>x.id===versionId);path=v?.entries.find(e=>IMAGE_EXT.test(e.path))?.path??null;IMAGE_ENTRY.set(versionId,path)}return path?ctx.version.objectUrl(path,{versionId}):null};load().then(url=>{if(live)setSrc(url)},()=>{if(live)setBroken(true)});return()=>{live=false}},[ctx,seen,wantsImage,row.id,versionId]);return jsx3("span",{ref,className:"band-library-thumb","data-size":size,"data-type":row.type,children:src&&!broken?jsx3("img",{src,alt:"",loading:"lazy",onError:()=>setBroken(true)}):jsx3(TypeGlyph,{type:row.type})})}var TABS=["joined","mine","review","starred"];var TAB_TEXT={joined:"\u6211\u53C2\u4E0E\u7684",mine:"\u6211\u4EA7\u51FA\u7684",review:"\u7B49\u6211\u8BC4\u5BA1\u7684",starred:"\u6536\u85CF"};function tabOf(value){return value==="mine"||value==="review"||value==="starred"?value:"joined"}var DEFAULT_FILTERS2={workshop:"",project:"",type:"all",status:"all",q:""};var GROUP_TEXT={none:"\u4E0D\u5206\u7EC4",workshop:"\u6309\u5DE5\u574A",project:"\u6309\u9879\u76EE"};function isFiltering2(f){return f.workshop!==""||f.project!==""||f.type!=="all"||f.status!=="all"||f.q.trim()!==""}function parseQuery(search){const q=new URLSearchParams(search);const type=q.get("type");const status=q.get("status");const group=q.get("group");return{tab:tabOf(q.get("tab")),filters:{workshop:q.get("workshop")??"",project:q.get("project")??"",type:TYPE_KEYS.includes(type)?type:"all",status:STATUS_KEYS.includes(status)?status:"all",q:q.get("q")??""},group:group==="workshop"||group==="project"?group:"none"}}function buildQuery(s){const q=new URLSearchParams;if(s.tab!=="joined")q.set("tab",s.tab);if(s.filters.workshop)q.set("workshop",s.filters.workshop);if(s.filters.project)q.set("project",s.filters.project);if(s.filters.type!=="all")q.set("type",s.filters.type);if(s.filters.status!=="all")q.set("status",s.filters.status);const text=s.filters.q.trim();if(text)q.set("q",text);if(s.group!=="none")q.set("group",s.group);const text2=q.toString();return text2===""?"":`?${text2}`}function queryOf(tab,f){const q={tab};if(f.workshop)q.workshop=f.workshop;if(f.project)q.project=f.project;if(f.type!=="all")q.type=f.type;if(f.status!=="all")q.status=f.status;const text=f.q.trim();if(text)q.q=text;return q}var TYPE_KEYS=["web","doc","image","video","audio","external","other"];var STATUS_OPTIONS=[["not_started","\u672A\u5F00\u59CB"],["rerun","\u5F85\u91CD\u8DD1"],["running","\u751F\u6210\u4E2D"],["review","\u5F85\u8BC4\u5BA1"],["stale","\u5F85\u66F4\u65B0"],["approved","\u5DF2\u6279\u51C6"],["completed","\u5DF2\u5B8C\u6210"],["picked","\u5DF2\u9009"],["unused","\u4E0D\u7528\u4E86"],["failed","\u5931\u8D25"],["delivered","\u5DF2\u4EA4\u4ED8"],["process","\u8FC7\u7A0B"]];var STATUS_KEYS=STATUS_OPTIONS.map(([k])=>k);var VISIBILITY_TEXT={members:"\u53EA\u6709\u9879\u76EE\u6210\u5458",team:"\u8FD9\u4E2A\u5DE5\u574A\u7684\u4EBA",users:"\u9879\u76EE\u6210\u5458\u548C\u6307\u5B9A\u7684\u4EBA",everyone:"\u516C\u53F8\u5185\u6240\u6709\u4EBA"};function accessText(a){const base=VISIBILITY_TEXT[a.visibility]??a.visibility;return a.shared?`${base} \xB7 \u5DF2\u5206\u4EAB`:base}function shownVersion(row,tab){return tab==="mine"?row.mine??row.latest:row.latest}function statusOf2(row){return statusOfKey(row.status)}function groupRows(rows,by){if(by==="none")return[];const out=[];const at=new Map;for(const r of rows){const key=by==="workshop"?r.project.workshop.id:r.project.id;let g=at.get(key);if(!g){g={key,label:by==="workshop"?r.project.workshop.name:r.project.name,...r.project.workshop.icon?{icon:r.project.workshop.icon}:{},rows:[]};at.set(key,g);out.push(g)}g.rows.push(r)}return out}function narrowProject(f,projects){if(!f.project)return f;const p=projects.find(x=>x.id===f.project);if(p&&(!f.workshop||p.workshop.id===f.workshop))return f;return{...f,project:""}}function projectOptions(facets,workshop){return workshop?facets.projects.filter(p=>p.workshop.id===workshop):facets.projects}function emptyOf(tab){if(tab==="mine")return{title:"\u8FD8\u6CA1\u6709\u4F60\u7ECF\u624B\u7684\u4EA7\u7269",hint:"\u4EA4\u7ED9 Rondo \u6216\u4EA4\u4ED8\u4E00\u4E2A\u7248\u672C\u540E\uFF0C\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC"};if(tab==="review")return{title:"\u73B0\u5728\u6CA1\u6709\u7B49\u4F60\u8BC4\u5BA1\u7684\u4EA7\u7269",hint:"\u6709\u4EBA\u8BF7\u4F60\u6279\u51C6\u6216\u786E\u8BA4\u65F6\uFF0C\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC"};if(tab==="starred")return{title:"\u8FD8\u6CA1\u6709\u6536\u85CF",hint:"\u5728\u4EFB\u610F\u4E00\u884C\u70B9\u661F\u5C31\u80FD\u6536\u8FDB\u6765"};return{title:"\u8FD8\u6CA1\u6709\u53C2\u4E0E\u7684\u9879\u76EE",hint:"\u52A0\u5165\u4E00\u4E2A\u9879\u76EE\uFF0C\u6216\u8005\u7528\u5DE5\u574A\u65B0\u5EFA\u4E00\u4E2A",action:"\u53BB\u5DE5\u574A"}}function filteredReason(f,names){const parts=[];if(f.workshop)parts.push(`\u5DE5\u574A\u300C${names.workshop??f.workshop}\u300D`);if(f.project)parts.push(`\u9879\u76EE\u300C${names.project??f.project}\u300D`);if(f.type!=="all")parts.push(`\u7C7B\u578B\u300C${TYPE_TEXT_OF[f.type]}\u300D`);if(f.status!=="all")parts.push(`\u72B6\u6001\u300C${statusOfKey(f.status).label}\u300D`);const q=f.q.trim();if(q)parts.push(`\u540D\u5B57\u542B\u300C${q}\u300D`);return parts.length===0?"\u6CA1\u6709\u7B26\u5408\u6761\u4EF6\u7684\u4EA7\u7269":`${parts.join("\u3001")}\u91CC\u6CA1\u6709\u4EA7\u7269`}var TYPE_TEXT_OF={web:"\u7F51\u9875",doc:"\u6587\u6863",image:"\u56FE\u7247",video:"\u89C6\u9891",audio:"\u97F3\u9891",external:"\u5916\u90E8",other:"\u5176\u4ED6"};var HIDDEN_PROJECT_TEXT="\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE\uFF0C\u6216\u8005\u4F60\u8FD8\u4E0D\u662F\u5B83\u7684\u6210\u5458";function projectUnknown(f,facets){if(!f.project||!facets)return false;return!facets.projects.some(p=>p.id===f.project)}function artifactName(row){const prefix=`${row.project.name} \xB7 `;return row.name.startsWith(prefix)&&row.name.length>prefix.length?row.name.slice(prefix.length):row.name}var PROJECT="@kanyun-ai-infra/band-project";var WORKSHOPS="@kanyun-ai-infra/band-workshops/workshops";function readerOf(data){return data?.myArtifacts}function readUrl(){return parseQuery(typeof window==="undefined"?"":window.location.search)}function writeUrl(state){const query=new URLSearchParams(buildQuery(state));const current=new URLSearchParams(window.location.search);for(const key of["view","artifact","artifactProject","artifactVersion"]){const value=current.get(key);if(value!==null)query.set(key,value)}window.history.replaceState(window.history.state,"",`${window.location.pathname}${query.size?`?${query}`:""}${window.location.hash}`)}function SearchIcon(){return jsxs4("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx4("circle",{cx:"7",cy:"7",r:"4.2"}),jsx4("path",{d:"M10.2 10.2l3 3"})]})}function CommentIcon(){return jsx4("svg",{viewBox:"0 0 16 16",className:"band-library-cicon","aria-hidden":"true",children:jsx4("path",{d:"M3 3.5h10v7H7l-3 2.5v-2.5H3z"})})}function Fermata(){return jsx4("span",{className:"glyph needs band-library-myneeds",role:"img","aria-label":"\u9700\u8981\u4F60"})}function plainClick(e){return!(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)}function needsMe(row,tab){return tab==="review"&&row.status==="review"}function addressOf(row){return{id:row.project.id,slug:row.project.slug,workshop:row.project.workshop.id}}function artifactHref(row){return projectPath2(addressOf(row),"a",row.artifactId)}function useDebounced(value,ms){const[v,setV]=useState4(value);useEffect4(()=>{const t=setTimeout(()=>setV(value),ms);return()=>clearTimeout(t)},[value,ms]);return v}var EMPTY={counts:{joined:0,mine:0,review:0,starred:0},facets:{workshops:[],projects:[],types:[]},rows:[]};function favoritesOf(ctx){return ctx.app.data.write?.artifactFavorites}function StarIcon({on}){return on?jsx4("svg",{viewBox:"0 0 16 16",fill:"currentColor","aria-hidden":"true",children:jsx4("path",{d:"M8 1.6l1.9 4 4.4.5-3.3 3 .9 4.4L8 11.3 4.1 13.5 5 9.1 1.7 6.1l4.4-.5z"})}):jsx4("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.3","aria-hidden":"true",children:jsx4("path",{d:"M8 1.6l1.9 4 4.4.5-3.3 3 .9 4.4L8 11.3 4.1 13.5 5 9.1 1.7 6.1l4.4-.5z"})})}function Star({row,onSet}){return jsx4("button",{type:"button",className:"band-library-star","aria-pressed":row.starred,"aria-label":row.starred?"\u53D6\u6D88\u6536\u85CF":"\u6536\u85CF",title:row.starred?"\u53D6\u6D88\u6536\u85CF":"\u6536\u85CF",onClick:e=>{e.stopPropagation();onSet(row,!row.starred)},children:jsx4(StarIcon,{on:row.starred})})}function MyArtifacts({ctx}){const[viewMode,setViewMode]=useBrowseView(`${ctx.app.member.id}:app`);const preview=useArtifactPreview();const[url,setUrl]=useState4(()=>readUrl());const[filters,setFilters]=useState4(url.filters);const[group,setGroup]=useState4(url.group);const[drawer,setDrawer]=useState4(false);const[menuFor,setMenuFor]=useState4(null);const screen=useRef4(null);const search=useRef4(null);const{settled:q,imeProps}=useSettledText(filters.q);const debounced=useDebounced(q,250);const settled=filters.q===""?"":debounced;const typed=useMemo(()=>({...filters,q}),[filters,q]);const active=useMemo(()=>({...typed,q:settled}),[typed,settled]);const tab=url.tab;useEffect4(()=>{const onPop=()=>{const next=readUrl();setUrl(next);setFilters(next.filters);setGroup(next.group)};window.addEventListener("popstate",onPop);return()=>window.removeEventListener("popstate",onPop)},[]);const commit=next=>{const state={tab:next.tab??tab,filters:next.filters??typed,group:next.group??group};setUrl(state);setFilters(state.filters);setGroup(state.group);writeUrl(state)};const query=queryOf(tab,active);const read=readerOf(ctx.app.data);const{data,error,reload}=useAppData(ctx,async()=>read?read(query):null,[query.tab,query.workshop,query.project,query.type,query.status,query.q]);const view=data??EMPTY;const rows=view.rows;const facets=view.facets;const filtered=isFiltering2(active);const canStar=favoritesOf(ctx)!==void 0;const[pending,setPending]=useState4({});const[starTotal,setStarTotal]=useState4(null);const setStar=async(row,on)=>{const api=favoritesOf(ctx);if(!api)return;setPending(p=>({...p,[row.artifactId]:on}));try{const r=await api.set(row.artifactId,on);setStarTotal(r.total);if(!on&&tab==="starred")reload()}catch{setPending(p=>({...p,[row.artifactId]:!on}));toast(on?{kind:"bad",text:"\u6CA1\u80FD\u6536\u85CF",detail:"\u4F60\u53EF\u80FD\u5DF2\u7ECF\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE\u7684\u6743\u9650"}:{kind:"bad",text:"\u6CA1\u80FD\u53D6\u6D88\u6536\u85CF",detail:"\u8BF7\u7A0D\u540E\u518D\u8BD5"})}};const starred=row=>pending[row.artifactId]??row.starred;const counts=starTotal===null||filtered?view.counts:{...view.counts,starred:starTotal};useEffect4(()=>{setPending({});setStarTotal(null)},[data]);useEffect4(()=>{if(filters.q!==""&&debounced!==q)return;if(typed.q===url.filters.q)return;const state={tab,filters:typed,group};writeUrl(state);setUrl(state)},[q,debounced,filters.q,url.filters.q,tab,group]);useEffect4(()=>{const onKey=withImeGuard2(e=>{if(e.key!=="/"||e.metaKey||e.ctrlKey||e.altKey||e.defaultPrevented)return;const t=e.target instanceof HTMLElement?e.target:null;if(t&&t!==document.body&&!screen.current?.contains(t))return;if(t&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName)))return;e.preventDefault();search.current?.focus()});document.addEventListener("keydown",onKey);return()=>document.removeEventListener("keydown",onKey)},[]);useEffect4(()=>{if(!active.project||!active.workshop)return;const p=facets.projects.find(x=>x.id===active.project);if(!p||p.workshop.id===active.workshop)return;commit({filters:{...active,project:""}})},[active.project,active.workshop,facets.projects]);const setFilter=patch=>commit({filters:narrowProject({...typed,...patch},facets.projects)});const clearFilters=()=>{setDrawer(false);setFilters(DEFAULT_FILTERS2);commit({filters:DEFAULT_FILTERS2})};const openArtifact=(row,newTab=false)=>{if(newTab){window.open(artifactHref(row),"_blank","noopener");return}if(!ctx.services.find("@kanyun-ai-infra/band-project/artifact-preview")){ctx.app.navigate({page:`${PROJECT}/artifact`,params:{workshop:row.project.workshop.id,project:row.project.id,artifact:row.artifactId}});return}const candidates=[...screen.current?.querySelectorAll("[data-row]")??[]].filter(el=>el.dataset.row===row.artifactId);const origin=(candidates.find(el=>el.getClientRects().length>0)??candidates[0])?.querySelector("a");origin?.focus();const version=tab==="mine"?row.mine:void 0;preview.open({projectId:row.project.id,artifactId:row.artifactId,...version?{versionId:version.versionId}:{}})};const openInProject=row=>ctx.app.navigate({page:`${PROJECT}/project`,params:{workshop:row.project.workshop.id,project:row.project.id}});const copyLink=row=>{const url2=new URL(artifactHref(row),window.location.href).toString();navigator.clipboard?.writeText(url2).catch(()=>{});toast({text:"\u5DF2\u590D\u5236\u94FE\u63A5"})};const hasComments=rows.some(r=>r.comments!==void 0);const unknownProject=projectUnknown(active,facets);const groups=groupRows(rows,group);const options=projectOptions(facets,active.workshop);const loading=data===void 0&&error===null;const empty=data!==null&&data!==void 0&&rows.length===0;const blank=empty&&!filtered&&!projectUnknown(active,facets);const columns=6+(group==="project"?0:1)+(hasComments?1:0);const rowProps=r=>({row:r,tab,by:group,hasComments,starred:starred(r),canStar,onStar:setStar,menuOpen:menuFor===r.artifactId,setMenu:open=>setMenuFor(open?r.artifactId:null),onOpen:openArtifact,onProject:openInProject,onCopy:copyLink});return jsxs4("div",{className:"band-library-my","data-view":viewMode,ref:screen,children:[jsxs4("main",{className:"band-library-mymain",children:[jsxs4("header",{className:"band-library-myhead",children:[jsx4("h1",{children:"\u4EA7\u7269"}),jsx4("div",{className:"tabs band-library-mytabs",role:"tablist","aria-label":"\u8303\u56F4",children:TABS.map(t=>jsxs4("button",{type:"button",role:"tab","aria-selected":tab===t,onClick:()=>commit({tab:t}),children:[TAB_TEXT[t],!blank&&jsx4("span",{className:"band-library-mytabnum",children:counts[t]})]},t))})]}),!blank&&jsxs4("div",{className:"band-library-mybar",children:[jsxs4("span",{className:"band-library-mysels",children:[jsx4(Select,{label:"\u5DE5\u574A",value:active.workshop,onChange:v=>setFilter({workshop:v}),options:[["","\u5168\u90E8\u5DE5\u574A"],...facets.workshops.map(w=>[w.id,w.name])]}),jsx4(Select,{label:"\u9879\u76EE",value:active.project,onChange:v=>setFilter({project:v}),options:[["","\u5168\u90E8\u9879\u76EE"],...options.map(p=>[p.id,p.name])]}),jsx4(Select,{label:"\u7C7B\u578B",value:active.type,onChange:v=>setFilter({type:v}),options:[["all","\u5168\u90E8\u7C7B\u578B"],...facets.types.map(t=>[t,TYPE_TEXT[t]])]}),jsx4(Select,{label:"\u72B6\u6001",value:active.status,onChange:v=>setFilter({status:v}),options:[["all","\u5168\u90E8\u72B6\u6001"],...STATUS_OPTIONS]})]}),jsx4("span",{className:"band-library-mygrow"}),jsxs4("div",{className:"seg sm band-library-viewseg",role:"group","aria-label":"\u663E\u793A\u65B9\u5F0F",children:[jsx4("button",{type:"button","aria-label":"\u7F51\u683C","aria-pressed":viewMode==="grid",onClick:()=>setViewMode("grid"),children:"\u7F51\u683C"}),jsx4("button",{type:"button","aria-label":"\u5217\u8868","aria-pressed":viewMode==="list",onClick:()=>setViewMode("list"),children:"\u5217\u8868"})]}),jsx4(Select,{label:"\u5206\u7EC4",value:group,onChange:v=>commit({group:v}),options:Object.keys(GROUP_TEXT).map(g=>[g,GROUP_TEXT[g]]),className:"band-library-mygroupby"}),jsxs4("label",{className:"band-library-myfind",children:[jsx4(SearchIcon,{}),jsx4("input",{ref:search,type:"search","aria-label":"\u6309\u540D\u79F0\u627E",placeholder:"\u6309\u540D\u79F0\u627E",value:filters.q,onChange:e=>setFilters({...filters,q:e.target.value}),...imeProps,onKeyDown:withImeGuard2(e=>{if(e.key!=="Escape")return;e.preventDefault();if(filters.q){setFilters({...filters,q:""});commit({filters:{...active,q:""}})}else e.currentTarget.blur()})}),jsx4("span",{className:"band-library-key","aria-hidden":"true",children:"/"})]}),jsxs4("button",{type:"button",className:"btn sm band-library-myfilter","aria-haspopup":"dialog","aria-expanded":drawer,onClick:()=>setDrawer(true),children:["\u7B5B\u9009",filtered?" \xB7 \u5DF2\u9009":""]})]}),error&&jsxs4(ErrorNote2,{retry:reload,children:["\u4EA7\u7269\u5217\u8868\u6CA1\u53D6\u5230\uFF1A",error]}),data===null&&jsx4("p",{className:"band-library-mynote",children:"\u8FD9\u4E2A\u7248\u672C\u7684 Band \u8FD8\u6CA1\u6709\u300C\u4EA7\u7269\u300D\u7684\u5E94\u7528\u7EA7\u63A5\u53E3\u3002\u9879\u76EE\u91CC\u7684\u4EA7\u7269\u5E93\u7167\u5E38\u53EF\u7528\u3002"}),loading&&jsx4(Skeleton,{}),empty&&unknownProject&&jsxs4("div",{className:"band-library-myrest rest",children:[jsx4("i",{}),jsx4("b",{children:HIDDEN_PROJECT_TEXT}),jsx4("span",{children:"\u8BF7\u53D1\u94FE\u63A5\u7684\u4EBA\u628A\u4F60\u52A0\u8FDB\u9879\u76EE\uFF0C\u6216\u8005\u6E05\u9664\u8FD9\u4E2A\u7B5B\u9009"}),jsx4("button",{type:"button",className:"btn sm",onClick:clearFilters,children:"\u6E05\u9664\u7B5B\u9009"})]}),empty&&!unknownProject&&filtered&&jsxs4("div",{className:"band-library-myrest rest",children:[jsx4("i",{}),jsx4("b",{children:filteredReason(active,namesOf(facets,active))}),jsx4("button",{type:"button",className:"btn sm",onClick:clearFilters,children:"\u6E05\u9664\u7B5B\u9009"})]}),empty&&!unknownProject&&!filtered&&jsxs4("div",{className:"band-library-myrest rest",children:[jsx4("i",{}),jsx4("b",{children:emptyOf(tab).title}),jsx4("span",{children:emptyOf(tab).hint}),tab==="joined"&&jsx4("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:WORKSHOPS}),children:"\u53BB\u5DE5\u574A\u65B0\u5EFA\u4E00\u4E2A\u9879\u76EE"})]}),data&&rows.length>0&&(viewMode==="grid"?jsx4("div",{className:"band-library-mygrids",children:(group==="none"?[{key:"all",label:"",rows}]:groups).map(g=>jsxs4("section",{children:[g.label&&jsxs4("h2",{className:"band-library-mygrouphead",children:[g.label," ",jsx4("span",{children:g.rows.length})]}),jsx4("ul",{className:"band-library-grid","aria-label":"\u4EA7\u7269",children:g.rows.map(r=>jsx4(GridCard,{ctx,...rowProps(r)},r.artifactId))})]},g.key))}):jsxs4(Fragment4,{children:[jsxs4("table",{className:"band-library-mytable","data-comments":hasComments?"on":"off","data-group":group,children:[jsx4("caption",{className:"sr-only",children:"\u4EA7\u7269"}),jsx4("thead",{children:jsxs4("tr",{children:[jsx4("th",{scope:"col",children:"\u540D\u79F0"}),group!=="project"&&jsx4("th",{scope:"col",children:"\u9879\u76EE"}),jsx4("th",{scope:"col",className:"c-type",children:"\u7C7B\u578B"}),jsx4("th",{scope:"col",children:"\u72B6\u6001"}),jsx4("th",{scope:"col",className:"c-acc",children:"\u8BBF\u95EE"}),hasComments&&jsx4("th",{scope:"col",className:"c-comments",children:"\u610F\u89C1"}),jsx4("th",{scope:"col",children:"\u66F4\u65B0"}),jsx4("th",{scope:"col",children:jsx4("span",{className:"sr-only",children:"\u64CD\u4F5C"})})]})}),jsx4("tbody",{children:group==="none"?rows.map(r=>jsx4(Row,{...rowProps(r)},r.artifactId)):groups.map(g=>jsxs4(Fragment3,{children:[jsx4("tr",{className:"band-library-mygrouprow",children:jsxs4("td",{colSpan:columns,children:[jsx4(WorkshopIcon,{icon:g.icon,size:16}),g.label,jsx4("span",{children:g.rows.length})]})}),g.rows.map(r=>jsx4(Row,{...rowProps(r)},r.artifactId))]},g.key))})]}),jsx4("ul",{className:"band-library-mymlist","aria-label":"\u4EA7\u7269",children:rows.map(r=>jsx4(MobileRow,{...rowProps(r)},r.artifactId))})]})),filtered&&rows.length>0&&jsxs4("p",{className:"band-library-myfoot",children:[rows.length," \u4EFD",jsx4("button",{type:"button",className:"band-library-link",onClick:clearFilters,children:"\u6E05\u9664\u7B5B\u9009"})]})]}),drawer&&jsx4(FilterDrawer,{filters:active,facets,options,onFilter:setFilter,onClear:clearFilters,onClose:()=>setDrawer(false)}),preview.target&&jsx4(ArtifactPreview,{ctx,target:preview.target,onClose:preview.close})]})}function GridCard({ctx,...props}){const{row,tab,starred,canStar,onStar,onOpen,menuOpen,setMenu,onProject,onCopy}=props;const status=statusOf2(row);const version=shownVersion(row,tab);const[ref,seen]=useInView();return jsxs4("li",{ref,className:"band-library-card","data-row":row.artifactId,children:[jsxs4("a",{href:artifactHref(row),title:row.name,"aria-label":row.name,onClick:e=>{if(!plainClick(e))return;e.preventDefault();e.currentTarget.focus();onOpen(row)},children:[seen&&row.type==="image"&&ctx.slots?jsx4(Mount2,{className:"band-library-appthumb",mount:el=>ctx.slots.mount(el,"@kanyun-ai-infra/band-library/thumbnail",{owner:{projectId:row.project.id,id:row.artifactId,type:row.type,versionId:version?.versionId}}),deps:[ctx,row.project.id,row.artifactId,row.type,version?.versionId]}):jsx4("span",{className:"band-library-thumb","data-size":"card","data-type":row.type,children:jsx4(TypeGlyph,{type:row.type})}),jsxs4("span",{className:"band-library-cardt",children:[jsxs4("span",{className:"band-library-cardname",children:[jsx4("b",{title:row.name,children:artifactName(row)}),jsx4("span",{className:`chip ${status.chip}`,children:status.label})]}),jsxs4("span",{className:"band-library-sub",children:[row.project.name," \xB7 ",TYPE_TEXT[row.type],version?.number!==void 0?` \xB7 v${version.number}`:""]}),jsxs4("span",{className:"band-library-sub",children:[version?whenText(version.at,new Date):"\u8FD8\u6CA1\u6709\u7248\u672C",(row.comments??0)>0?` \xB7 ${row.comments} \u6761\u610F\u89C1`:""]})]})]}),jsxs4("div",{className:"band-library-cardacts",children:[canStar&&jsx4(Star,{row:{...row,starred},onSet:onStar}),jsx4(RowMenu,{row,open:menuOpen,setOpen:setMenu,onOpen,onProject,onCopy,starred,canStar,onStar})]})]})}function MobileRow({row,tab,starred,canStar,onStar,onOpen,menuOpen,setMenu,onProject,onCopy}){const status=statusOf2(row);const version=shownVersion(row,tab);const versionText=version?.number!==void 0?`v${version.number}`:void 0;const when=version?whenText(version.at,new Date):void 0;return jsxs4("li",{className:"band-library-mymrow","data-row":row.artifactId,onClick:e=>{if(e.target.closest("a, button, [role='menu']"))return;onOpen(row)},children:[jsx4("span",{className:"band-library-thumb","data-size":"mobile","data-type":row.type,children:jsx4(TypeGlyph,{type:row.type})}),jsxs4("span",{className:"band-library-mymtext",children:[jsxs4("span",{className:"band-library-mymname",children:[jsx4("a",{href:artifactHref(row),title:row.name,onClick:e=>{if(!plainClick(e))return;e.preventDefault();onOpen(row)},children:artifactName(row)}),canStar&&jsx4(Star,{row:{...row,starred},onSet:onStar})]}),jsx4("span",{className:"band-library-mymmeta",children:[versionText,when].filter(Boolean).join(" \xB7 ")})]}),jsxs4("span",{className:"band-library-mymstatus",children:[needsMe(row,tab)&&jsx4(Fermata,{}),jsx4("span",{className:`chip ${status.chip}`,children:status.label})]}),jsx4(RowMenu,{row,open:menuOpen,setOpen:setMenu,onOpen,onProject,onCopy,starred,canStar,onStar})]})}function namesOf(facets,f){return{workshop:facets.workshops.find(w=>w.id===f.workshop)?.name,project:facets.projects.find(p=>p.id===f.project)?.name}}function Select({label,value,onChange,options,className}){return jsx4("select",{className:className?`select ${className}`:"select","aria-label":label,value,onChange:e=>onChange(e.target.value),children:options.map(([v,text])=>jsx4("option",{value:v,children:text},v))})}function Row({row,tab,by,hasComments,starred,canStar,onStar,menuOpen,setMenu,onOpen,onProject,onCopy}){const status=statusOf2(row);const version=shownVersion(row,tab);const author=version?.author;const authorName=author?author.name??(author.kind==="agent"?agentDisplayName(author.id):author.id):void 0;const when=version?whenText(version.at,new Date):void 0;const versionText=version?.number!==void 0?`v${version.number}`:void 0;return jsxs4("tr",{"data-row":row.artifactId,onClick:e=>{if(e.target.closest("a, button, [role='menu']"))return;onOpen(row)},onKeyDown:withImeGuard2(e=>{if(e.target!==e.currentTarget)return;if(e.key==="Enter"){e.preventDefault();onOpen(row,e.metaKey||e.ctrlKey)}}),tabIndex:-1,children:[jsxs4("td",{className:"c-name",children:[jsx4("span",{className:"band-library-thumb","data-size":"row","data-type":row.type,children:jsx4(TypeGlyph,{type:row.type})}),jsxs4("span",{className:"band-library-namecol",children:[jsx4("a",{href:artifactHref(row),title:row.name,onClick:e=>{if(!plainClick(e))return;e.preventDefault();onOpen(row)},children:artifactName(row)}),jsx4("span",{className:"band-library-sub",children:[versionText,when].filter(Boolean).join(" \xB7 ")})]}),canStar&&jsx4(Star,{row:{...row,starred},onSet:onStar})]}),by!=="project"&&jsx4("td",{className:"c-project",children:jsxs4("span",{className:"band-library-myproj",title:row.project.workshop.name,children:[jsx4(WorkshopIcon,{icon:row.project.workshop.icon,size:16}),row.project.name]})}),jsx4("td",{className:"c-type",children:TYPE_TEXT[row.type]}),jsxs4("td",{className:"c-status",children:[needsMe(row,tab)&&jsx4(Fermata,{}),jsx4("span",{className:`chip ${status.chip}`,children:status.label})]}),jsx4("td",{className:"c-acc",children:accessText(row.access)}),hasComments&&jsx4("td",{className:"c-comments",children:(row.comments??0)>0?jsxs4("span",{className:"band-library-ccount","aria-label":`${row.comments} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx4(CommentIcon,{}),row.comments]}):jsx4("span",{className:"faint",children:"\u2014"})}),jsx4("td",{className:"c-at",children:jsxs4("span",{className:"band-library-mywho",children:[author&&authorName?jsx4(Avatar,{id:author.id,name:authorName,agent:author.kind==="agent",size:"xs",decorative:true}):null,versionText?jsxs4("span",{children:[versionText," \xB7 "]}):null,when??jsx4("span",{className:"faint",children:"\u2014"})]})}),jsx4("td",{className:"c-more",children:jsx4(RowMenu,{row,open:menuOpen,setOpen:setMenu,onOpen,onProject,onCopy,starred,canStar,onStar})})]})}function RowMenu({row,open,setOpen,onOpen,onProject,onCopy,starred,canStar,onStar}){const box=useRef4(null);const list=useRef4(null);const setOpenRef=useRef4(setOpen);setOpenRef.current=setOpen;useEffect4(()=>{if(!open)return;list.current?.querySelector("[role='menuitem']")?.focus();const onDown=e=>{if(!box.current?.contains(e.target))setOpenRef.current(false)};document.addEventListener("mousedown",onDown);return()=>document.removeEventListener("mousedown",onDown)},[open]);const close=()=>{setOpen(false);const row2=box.current?.closest("[data-row]");if(!row2)return;if(row2.tabIndex>=0||row2.tagName==="TR")row2.focus();else row2.querySelector("a")?.focus()};const items=[{label:"\u6253\u5F00",hint:"\u21B5",run:()=>onOpen(row)},{label:"\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00",hint:"\u2318\u21B5",run:()=>onOpen(row,true)},{label:"\u5728\u9879\u76EE\u91CC\u770B",run:()=>onProject(row)},{label:"\u590D\u5236\u94FE\u63A5",run:()=>onCopy(row)},...canStar?[{label:starred?"\u53D6\u6D88\u6536\u85CF":"\u6536\u85CF",run:()=>onStar(row,!starred)}]:[]];return jsxs4("span",{className:"band-library-more",ref:box,children:[jsx4("button",{type:"button",className:"band-library-morebtn","aria-haspopup":"menu","aria-expanded":open,"aria-label":`\u300C${row.name}\u300D\u7684\u66F4\u591A\u64CD\u4F5C`,onClick:()=>setOpen(!open),children:jsxs4("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx4("circle",{cx:"4",cy:"8",r:"1"}),jsx4("circle",{cx:"8",cy:"8",r:"1"}),jsx4("circle",{cx:"12",cy:"8",r:"1"})]})}),open&&jsx4("div",{className:"band-library-menu",role:"menu",ref:list,onKeyDown:withImeGuard2(e=>{const els=[...list.current?.querySelectorAll("[role='menuitem']")??[]];const i=els.indexOf(document.activeElement);if(e.key==="Escape"){e.preventDefault();close()}else if(e.key==="ArrowDown"){e.preventDefault();els[(i+1)%els.length]?.focus()}else if(e.key==="ArrowUp"){e.preventDefault();els[(i-1+els.length)%els.length]?.focus()}else if(e.key==="Tab")close()}),children:items.map(it=>jsxs4("button",{type:"button",role:"menuitem",tabIndex:-1,onClick:()=>{setOpen(false);it.run()},children:[it.label,it.hint&&jsx4("kbd",{children:it.hint})]},it.label))})]})}var SKELETON_ROWS=["s1","s2","s3","s4","s5","s6"];function Skeleton(){return jsx4("div",{className:"band-library-myskel","aria-busy":"true","aria-label":"\u6B63\u5728\u8BFB\u53D6\u4EA7\u7269",children:SKELETON_ROWS.map(k=>jsx4("div",{className:"band-library-skelrow"},k))})}function FilterDrawer({filters,facets,options,onFilter,onClear,onClose}){const box=useRef4(null);useEffect4(()=>{box.current?.querySelector("select, button")?.focus();const onEscape=withImeGuard2(e=>{if(e.key!=="Escape")return;e.preventDefault();onClose()});document.addEventListener("keydown",onEscape);return()=>document.removeEventListener("keydown",onEscape)},[onClose]);return jsx4("div",{className:"band-library-myscrim",onClick:e=>{if(e.target===e.currentTarget)onClose()},children:jsxs4("div",{className:"band-library-mysheet",role:"dialog","aria-modal":"true","aria-label":"\u7B5B\u9009",ref:box,children:[jsx4("h2",{children:"\u7B5B\u9009"}),jsxs4("div",{className:"band-library-mysheetbody",children:[jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u5DE5\u574A"}),jsx4(Select,{label:"\u5DE5\u574A",value:filters.workshop,onChange:v=>onFilter({workshop:v}),options:[["","\u5168\u90E8\u5DE5\u574A"],...facets.workshops.map(w=>[w.id,w.name])]})]}),jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u9879\u76EE"}),jsx4(Select,{label:"\u9879\u76EE",value:filters.project,onChange:v=>onFilter({project:v}),options:[["","\u5168\u90E8\u9879\u76EE"],...options.map(p=>[p.id,p.name])]})]}),jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u7C7B\u578B"}),jsx4(Select,{label:"\u7C7B\u578B",value:filters.type,onChange:v=>onFilter({type:v}),options:[["all","\u5168\u90E8\u7C7B\u578B"],...facets.types.map(t=>[t,TYPE_TEXT[t]])]})]}),jsxs4("div",{className:"band-library-mysheetfield",children:[jsx4("span",{children:"\u72B6\u6001"}),jsx4(Select,{label:"\u72B6\u6001",value:filters.status,onChange:v=>onFilter({status:v}),options:[["all","\u5168\u90E8\u72B6\u6001"],...STATUS_OPTIONS]})]})]}),jsxs4("footer",{children:[jsx4("button",{type:"button",className:"btn ghost",onClick:onClear,children:"\u6E05\u9664\u7B5B\u9009"}),jsx4("button",{type:"button",className:"btn primary",onClick:onClose,children:"\u5B8C\u6210"})]})]})})}var SELF="@kanyun-ai-infra/band-library";var EXPANDED=defineScopeState(_ctx=>new Map);var NO_STAGES=[];var PROJECT2="@kanyun-ai-infra/band-project";var PROJECT_HEAD=`${PROJECT2}/project-head`;var src_default=definePlugin({surfaces:{thumbnail:reactMount((ctx,props)=>jsx5(Thumb,{ctx,row:props.owner,size:"card"})),library:reactMount(ctx=>jsx5(Library,{ctx})),"my-artifacts":reactMount(ctx=>jsx5(MyArtifacts,{ctx})),switch:reactMount(ctx=>jsx5(PageSwitch,{ctx,current:ctx.app.route().page===`${SELF}/library`?"library":"project"}))}});function projectParams(ctx,extra={}){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},...extra}}function artifactHref2(ctx,artifactId){return projectPath3(ctx.project,"a",artifactId)}function threadHref(ctx,threadId){return projectPath3(ctx.project,"t",threadId)}function plainClick2(e){return!(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)}function PageSwitch({ctx,current}){const go=to=>{if(to===current)return;ctx.app.navigate({page:to==="project"?`${PROJECT2}/project`:`${SELF}/library`,params:projectParams(ctx)})};return jsxs5("div",{className:"seg sm band-library-switch",role:"group","aria-label":"\u9879\u76EE\u4E0E\u4EA7\u7269\u5E93",children:[jsx5("button",{type:"button","aria-pressed":current==="project",onClick:()=>go("project"),children:"\u9879\u76EE"}),jsx5("button",{type:"button","aria-pressed":current==="library",onClick:()=>go("library"),children:"\u4EA7\u7269\u5E93"})]})}function CommentIcon2(){return jsx5("svg",{viewBox:"0 0 16 16",className:"band-library-cicon","aria-hidden":"true",children:jsx5("path",{d:"M3 3.5h10v7H7l-3 2.5v-2.5H3z"})})}function SearchIcon2(){return jsxs5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx5("circle",{cx:"7",cy:"7",r:"4.2"}),jsx5("path",{d:"M10.2 10.2l3 3"})]})}var STATUS_ORDER=["all","review","comments","approved"];var isOpen=s=>OPEN_STATUSES.includes(s);function Library({ctx}){const member=ctx.project.access==="member";const readThreads=ctx.project.canReadThreads;const members=useMembers(ctx);const agentName=memberName2(members,ctx.project.agent??"rondo");const order=useMemo2(()=>memberOrder(members),[members]);const core=useCtxData2(ctx,async()=>{const[artifacts,stages2]=await Promise.all([ctx.artifacts.list(),ctx.stages.list()]);const gated=stages2.filter(s=>s.gated!==false);const states=await Promise.all(gated.map(s=>ctx.gate.state(s.stage).catch(()=>void 0)));return{artifacts,stages:stages2,gates:Object.fromEntries(gated.map((s,i)=>[s.stage,states[i]]))}},[ctx],["version.*","gate.*","stage.*"]);const threads=useCtxData2(ctx,()=>readThreads?ctx.threads.list({}):Promise.resolve(null),[ctx,readThreads],"thread.*");const attachments=useCtxData2(ctx,()=>readThreads?ctx.attachments.list():Promise.resolve(null),[ctx,readThreads],["thread.*","comment.*","version.*"]);const materialRefs=useMemo2(()=>(attachments.data??[]).filter(r=>r.latest!==false&&r.artifactId&&r.versionId).map(r=>({artifactId:r.artifactId,versionId:r.versionId})),[attachments.data]);const discussionCounts=useCtxData2(ctx,async()=>{const api=ctx.materialDiscussions;if(!api||materialRefs.length===0||!await api.available())return null;const pairs=await Promise.all(materialRefs.map(async ref=>{try{const read=await api.read(ref);return[ref.artifactId,read.threads.filter(t=>t.thread.status==="open").length]}catch{return[ref.artifactId,0]}}));return Object.fromEntries(pairs)},[ctx,materialRefs],["material.discussion.*","attachment.*"]);const[filters,setFilters]=useState5(DEFAULT_FILTERS);const{settled:q,imeProps}=useSettledText2(filters.q);const[view,setView]=useBrowseView(`${ctx.member.id}:${ctx.project.id}`);const preview=useArtifactPreview(ctx.project.id);const[sort,setSort]=useState5(DEFAULT_SORT);const[remembered]=useState5(()=>EXPANDED.of(ctx));const[expanded,setExpanded]=useState5(()=>new Map(remembered));const[whileFiltering,setWhileFiltering]=useState5({key:"",map:new Map});const[refreshedAt,setRefreshedAt]=useState5(null);const search=useRef5(null);const screen=useRef5(null);const now=new Date;useEffect5(()=>{if(core.data&&!core.error)setRefreshedAt(new Date)},[core.data,core.error]);const rows=useMemo2(()=>{if(!core.data)return[];const{artifacts,stages:stages2,gates}=core.data;const arts=artifactRows(artifacts,{views:ctx.project.views,stages:stages2,gates,...threads.data?{threads:threads.data.filter(t=>isOpen(t.status))}:{}});return arts},[core.data,threads.data,ctx.project.views]);const materials=(attachments.data??[]).filter(r=>r.latest!==false);const memory=useCtxData2(ctx,async()=>{try{return{snapshot:readThreads&&ctx.memory?await ctx.memory.current():null,forbidden:false}}catch(error){if(isForbidden(error))return{snapshot:null,forbidden:true};throw error}},[ctx,readThreads],"memory.updated");const memorySnapshot=memory.data?.snapshot;const types=useMemo2(()=>typesPresent(rows),[rows]);const active=useMemo2(()=>filters.type!=="all"&&core.data&&!types.includes(filters.type)?{...filters,q,type:"all"}:{...filters,q},[filters,q,types,core.data]);const shown=useMemo2(()=>applyFilters(rows,active),[rows,active]);const stages=core.data?.stages??NO_STAGES;const tree=useMemo2(()=>buildTree(shown,{stages,sort}),[shown,stages,sort]);const counts=useMemo2(()=>statusCounts(applyFilters(rows,{...active,status:"all"})),[rows,active]);const hasGate=stages.some(s=>s.gated!==false);const statusTabs=STATUS_ORDER.filter(s=>{if(s==="review")return member;if(s==="comments")return readThreads;if(s==="approved")return!core.data||hasGate||filters.status==="approved";return true});const filtered=isFiltering(active);const clear=()=>setFilters(DEFAULT_FILTERS);const filterKey=`${active.status}|${active.type}|${active.q.trim()}`;const filterMap=whileFiltering.key===filterKey?whileFiltering.map:void 0;const isExpanded=f=>filtered?filterMap?.get(f.id)??true:expanded.get(f.id)??defaultExpanded(f);const setFolder=(f,open)=>{if(filtered){setWhileFiltering({key:filterKey,map:new Map(filterMap).set(f.id,open)});return}remembered.set(f.id,open);setExpanded(new Map(remembered))};useEffect5(()=>{const onKey=withImeGuard3(e=>{if(e.key!=="/"||e.metaKey||e.ctrlKey||e.altKey||e.defaultPrevented)return;const t=e.target instanceof HTMLElement?e.target:null;if(t&&t!==document.body&&!screen.current?.contains(t))return;if(t&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName)))return;e.preventDefault();search.current?.focus()});document.addEventListener("keydown",onKey);return()=>document.removeEventListener("keydown",onKey)},[]);const dialog=ctx.services.find("@kanyun-ai-infra/band-project/artifact-dialog");const openArtifact=id=>{if(!ctx.services.find("@kanyun-ai-infra/band-project/artifact-preview")){ctx.app.navigate({page:`${PROJECT2}/artifact`,params:projectParams(ctx,{artifact:id})});return}preview.open({projectId:ctx.project.id,artifactId:id})};const openInProject=id=>{ctx.selection.set({kind:"artifact",artifactId:id});ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)})};const[previewError,setPreviewError]=useState5(null);const previewAttachment=r=>{if(r.artifactId&&r.versionId&&dialog?.supportsMaterialVersion===true){setPreviewError(null);dialog.open({materialVersion:{artifactId:r.artifactId,versionId:r.versionId}});return}const w=window.open("","_blank");if(w)w.opener=null;setPreviewError(null);ctx.attachments.url(r.id).then(url=>{if(w)w.location.href=url;else window.open(url,"_blank","noopener")},e=>{w?.close();setPreviewError(`\u300C${r.name}\u300D\u6CA1\u6253\u5F00\uFF1A${e instanceof Error?e.message:String(e)}`)})};const canDelete=ctx.attachments.available&&ctx.member.can("comment");const[confirming,setConfirming]=useState5(null);const[historyOpen,setHistoryOpen]=useState5(null);const canReplace=ctx.attachments.available&&ctx.member.can("comment");const[deleting,setDeleting]=useState5(false);const[deleteError,setDeleteError]=useState5(null);const deleteAttachment=r=>{setDeleting(true);setDeleteError(null);ctx.attachments.remove(r.id).then(()=>{setDeleting(false);setConfirming(null);attachments.reload()},e=>{setDeleting(false);setDeleteError(`\u300C${r.name}\u300D\u6CA1\u5220\u6389\uFF1A${e instanceof Error?e.message:String(e)}`)})};const activate=(r,newTab=false)=>{if(newTab)window.open(artifactHref2(ctx,r.id),"_blank","noopener");else openArtifact(r.id)};const head=ctx.services.find(PROJECT_HEAD);const Title=head?"h2":"h1";const loading=!core.data&&!core.error;const emptyProject=core.data!==void 0&&rows.length===0;const stageOf=id=>core.data?.stages.find(s=>s.stage===id);return jsxs5("div",{className:"band-library-page",ref:screen,children:[jsx5(PageHead,{ctx,head}),jsxs5("main",{className:"band-library","data-view":view,children:[jsxs5("section",{className:"band-library-artifacts","aria-label":"\u9636\u6BB5\u4EA7\u7269",children:[jsxs5("div",{className:"band-library-titlebar",children:[jsxs5(Title,{children:["\u4EA7\u7269\u5E93",core.data&&!emptyProject&&jsx5("span",{className:"band-library-count",children:rows.length}),!member&&jsx5("span",{className:"chip plain band-library-readonly",children:"\u53EA\u8BFB"})]}),!emptyProject&&jsxs5("div",{className:"band-library-tools",children:[jsxs5("label",{className:"band-library-search",children:[jsx5(SearchIcon2,{}),jsx5("input",{ref:search,type:"search","aria-label":"\u641C\u7D22\u4EA7\u7269",placeholder:"\u641C\u7D22\u4EA7\u7269",value:filters.q,onChange:e=>setFilters({...filters,q:e.target.value}),...imeProps,onKeyDown:withImeGuard3(e=>{if(e.key!=="Escape")return;e.preventDefault();if(filters.q)setFilters({...filters,q:""});else e.currentTarget.blur()})}),jsx5("span",{className:"band-library-key","aria-hidden":"true",children:"/"})]}),jsxs5("div",{className:"seg band-library-viewseg",role:"group","aria-label":"\u663E\u793A\u65B9\u5F0F",children:[jsx5("button",{type:"button","aria-pressed":view==="list","aria-label":"\u5217\u8868",title:"\u5217\u8868",onClick:()=>setView("list"),children:jsx5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:jsx5("path",{d:"M5.5 4h8M5.5 8h8M5.5 12h8M2.5 4h.01M2.5 8h.01M2.5 12h.01"})})}),jsx5("button",{type:"button","aria-pressed":view==="grid","aria-label":"\u7F51\u683C",title:"\u7F51\u683C",onClick:()=>setView("grid"),children:jsxs5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx5("rect",{x:"2.5",y:"2.5",width:"4.5",height:"4.5",rx:"1"}),jsx5("rect",{x:"9",y:"2.5",width:"4.5",height:"4.5",rx:"1"}),jsx5("rect",{x:"2.5",y:"9",width:"4.5",height:"4.5",rx:"1"}),jsx5("rect",{x:"9",y:"9",width:"4.5",height:"4.5",rx:"1"})]})})]})]})]}),!emptyProject&&jsxs5("div",{className:"band-library-filters",children:[jsx5("div",{className:"band-library-chips",role:"group","aria-label":"\u7B5B\u9009",children:statusTabs.map(s=>jsxs5("button",{type:"button","aria-pressed":filters.status===s,onClick:()=>setFilters({...filters,status:s}),children:[STATUS_FILTER_TEXT[s],core.data&&jsx5("span",{children:counts[s]})]},s))}),types.length>1&&jsx5("div",{className:"band-library-selects",children:jsxs5("label",{children:[jsx5("span",{children:"\u7C7B\u578B"}),jsxs5("select",{className:"select",value:filters.type,onChange:e=>setFilters({...filters,type:e.target.value}),children:[jsx5("option",{value:"all",children:"\u5168\u90E8"}),types.map(t=>jsx5("option",{value:t,children:TYPE_TEXT[t]},t))]})]})})]}),core.error&&!core.data&&jsxs5(ErrorNote3,{retry:core.reload,children:["\u4EA7\u7269\u5217\u8868\u6CA1\u53D6\u5230\uFF1A",core.error]}),core.error&&core.data&&jsxs5(ErrorNote3,{retry:core.reload,children:["\u6CA1\u5237\u65B0\u4E0A\uFF0C\u663E\u793A\u7684\u662F ",refreshedAt?whenText(refreshedAt.toISOString(),now):"\u4E0A\u4E00\u6B21"," ","\u7684\u5185\u5BB9\uFF1A",core.error]}),previewError&&jsxs5("output",{className:"band-library-note",children:[previewError,jsx5("button",{type:"button",className:"band-library-link",onClick:()=>setPreviewError(null),children:"\u77E5\u9053\u4E86"})]}),loading&&jsx5(Skeleton2,{view}),emptyProject&&jsxs5("div",{className:"band-library-rest rest",children:[jsx5("i",{}),jsx5("b",{children:"\u8FD8\u6CA1\u6709\u4EA7\u7269"}),jsx5("span",{children:"\u7B2C\u4E00\u4E2A\u9636\u6BB5\u4EA4\u4ED8\u4EE5\u540E\uFF0C\u4EA7\u7269\u4F1A\u6309\u9636\u6BB5\u51FA\u73B0\u5728\u8FD9\u91CC\u3002"}),jsx5("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)}),children:"\u56DE\u5230\u9879\u76EE\u9875"})]}),core.data&&!emptyProject&&shown.length===0&&jsxs5("div",{className:"band-library-rest rest",children:[jsx5("i",{}),jsx5("b",{children:emptyReason(active)}),jsx5("button",{type:"button",className:"btn sm",onClick:clear,children:"\u6E05\u9664\u7B5B\u9009"})]}),core.data&&shown.length>0&&view==="list"&&jsx5(TreeView,{ctx,tree,isExpanded,setFolder,sort,setSort,readThreads,member,now,order,memberLabel:id=>memberName2(members,id),roleLabel:role=>members.find(m=>m.roleLabels?.[role])?.roleLabels?.[role]??role,stageOf,gates:core.data.gates,artifacts:core.data.artifacts,activate,menu:{openInProject}}),core.data&&shown.length>0&&view==="grid"&&jsx5(GridView,{ctx,rows:sortRows(shown,sort),readThreads,now,stageOf,activate}),filtered&&shown.length>0&&jsxs5("p",{className:"band-library-foot",children:[shown.length," / ",rows.length,jsx5("button",{type:"button",className:"band-library-link",onClick:clear,children:"\u6E05\u9664\u7B5B\u9009"})]})]}),readThreads&&jsxs5("section",{className:"band-library-materials","aria-label":"\u7D20\u6750",children:[jsx5("h2",{children:"\u7D20\u6750"}),jsx5("p",{className:"band-library-materials-hint",children:"\u9644\u4EF6\u548C\u9879\u76EE\u8BB0\u5FC6"}),attachments.error&&jsxs5(ErrorNote3,{retry:attachments.reload,children:["\u9644\u4EF6\u6CA1\u53D6\u5230\uFF1A",attachments.error]}),memory.error&&jsxs5(ErrorNote3,{retry:memory.reload,children:["\u8BB0\u5FC6\u6CA1\u53D6\u5230\uFF1A",memory.error]}),memory.data?.forbidden&&jsxs5("div",{className:"band-library-materials-hint",children:[jsx5("p",{children:"\u6CA1\u6709\u6743\u9650\u770B\u9879\u76EE\u8BB0\u5FC6\u3002\u80FD\u8BFB\u9879\u76EE\u610F\u89C1\u7684\u4EBA\u624D\u80FD\u67E5\u770B\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u3002"}),jsx5("button",{type:"button",className:"btn sm",onClick:()=>ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)}),children:"\u56DE\u5230\u9879\u76EE\u9875"})]}),attachments.data===void 0&&!attachments.error&&jsx5("output",{children:"\u6B63\u5728\u8BFB\u53D6\u9644\u4EF6\u2026"}),memory.data===void 0&&!memory.error&&jsx5("output",{children:"\u6B63\u5728\u8BFB\u53D6\u8BB0\u5FC6\u2026"}),materials.length===0&&emptyProject&&!memorySnapshot?.latest&&attachments.data!==void 0&&memory.data!==void 0&&!attachments.error&&!memory.error&&!memory.data?.forbidden&&jsx5("p",{className:"band-library-materials-hint",children:`\u8FD8\u6CA1\u6709\u7D20\u6750\u3002\u5148\u5199\u4E0B\u9700\u6C42\u4EA4\u7ED9 ${agentName}\uFF1B\u9879\u76EE\u6709\u4E86\u7B2C\u4E00\u7248\u4E4B\u540E\uFF0C\u5728\u5BF9\u8BDD\u8F93\u5165\u6846\u7528\u300C\uFF0B\u300D\u9644\u4E0A\u6587\u4EF6\uFF0C\u53D1\u51FA\u6765\u5C31\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002`}),materials.length===0&&!emptyProject&&!memorySnapshot?.latest&&attachments.data!==void 0&&memory.data!==void 0&&!attachments.error&&!memory.error&&!memory.data?.forbidden&&jsx5("p",{className:"band-library-materials-hint",children:"\u8FD8\u6CA1\u6709\u7D20\u6750\u3002\u5728\u5BF9\u8BDD\u8F93\u5165\u6846\u7528\u300C\uFF0B\u300D\u9644\u4E0A\u6587\u4EF6\uFF0C\u53D1\u51FA\u6765\u5C31\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002"}),jsxs5("ul",{className:"band-library-material-list",children:[memorySnapshot?.latest&&jsxs5("li",{children:[jsx5("a",{className:"band-library-material-name",href:projectPath3(ctx.project,"settings","memory"),children:"\u9879\u76EE\u8BB0\u5FC6"}),jsxs5("span",{className:"band-library-material-meta",children:[jsxs5("span",{children:["v",memorySnapshot.version]}),jsx5("span",{children:memberName2(members,memorySnapshot.latest.author.id)}),jsx5("time",{dateTime:memorySnapshot.latest.createdAt,title:memorySnapshot.latest.createdAt,children:whenText(memorySnapshot.latest.createdAt,now)})]})]}),materials.map(r=>jsxs5("li",{children:[jsx5("button",{type:"button",className:"band-library-material-name",onClick:()=>previewAttachment(r),children:r.name}),jsxs5("span",{className:"band-library-material-meta",children:[jsx5(VersionBadge,{r}),jsx5("span",{children:TYPE_TEXT[attachmentTypeOf(r)]}),jsx5("span",{children:memberName2(members,r.createdBy.id)}),jsx5("time",{dateTime:r.createdAt,title:r.createdAt,children:whenText(r.createdAt,now)}),r.artifactId!==void 0&&(discussionCounts.data?.[r.artifactId]??0)>0&&jsxs5("span",{className:"band-library-ccount","aria-label":`${discussionCounts.data?.[r.artifactId]} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx5(CommentIcon2,{}),discussionCounts.data?.[r.artifactId]]})]}),jsx5(MaterialUsedIn,{ctx,uses:materialUses(r,rows)}),jsxs5("span",{className:"band-library-material-actions",children:[jsx5("a",{className:"band-library-link",href:threadHref(ctx,r.source.threadId),children:"\u56DE\u5230\u6240\u5728\u6D88\u606F"}),materialOf(r)&&ctx.attachments.versions&&jsx5("button",{type:"button",className:"btn ghost sm","aria-expanded":historyOpen===(r.artifactId??r.id),"aria-label":`${r.name} \u7684\u7248\u672C\u5386\u53F2`,onClick:()=>setHistoryOpen(historyOpen===(r.artifactId??r.id)?null:r.artifactId??r.id),children:"\u7248\u672C\u5386\u53F2"}),canReplace&&jsx5(ReplaceButton,{ctx,r,onChanged:attachments.reload}),canDelete&&confirming!==r.id&&jsx5("button",{type:"button",className:"btn ghost sm",disabled:deleting,title:deleting?"\u6B63\u5728\u5220\u9664\u53E6\u4E00\u4EFD\u7D20\u6750\uFF0C\u5220\u5B8C\u518D\u5220\u8FD9\u4E00\u4EFD":void 0,"aria-label":`\u5220\u9664 ${r.name}`,onClick:()=>{setDeleteError(null);setConfirming(r.id)},children:"\u5220\u9664"})]}),confirming===r.id&&jsxs5("fieldset",{className:"band-library-material-confirm","aria-label":`\u5220\u9664 ${r.name}`,children:[jsxs5("p",{children:["\u5220\u9664\u300C",r.name,"\u300D\uFF1F\u4E4B\u540E\u7684\u56DE\u5408\u62FF\u4E0D\u5230\u5B83\uFF0C\u6D88\u606F\u91CC\u663E\u793A\u300C\u5DF2\u5220\u9664\u7684\u7D20\u6750\u300D\uFF1B\u7528\u5230\u5B83\u7684\u7248\u672C\u4E0D\u53D7\u5F71\u54CD\u3002"]}),jsx5(ErrorNote3,{children:deleteError}),jsxs5("span",{className:"band-library-material-actions",children:[jsx5("button",{type:"button",className:"btn danger sm",disabled:deleting,onClick:()=>deleteAttachment(r),children:deleting?"\u6B63\u5728\u5220\u9664\u2026":"\u5220\u9664"}),jsx5("button",{type:"button",className:"btn ghost sm",disabled:deleting,onClick:()=>setConfirming(null),children:"\u53D6\u6D88"})]})]}),historyOpen===(r.artifactId??r.id)&&jsx5(MaterialHistory,{ctx,r,members,canReplace,whenText,now,preview:previewAttachment,onChanged:attachments.reload})]},r.artifactId??r.id))]})]})]}),preview.target&&jsx5(ArtifactPreview,{ctx,target:preview.target,onClose:preview.close})]})}function MaterialUsedIn({ctx,uses}){if(uses.length===0)return null;return jsx5("span",{className:"band-library-material-meta",children:jsxs5("span",{children:["\u7528\u5728"," ",uses.map((u,i)=>jsxs5(Fragment5,{children:[i>0&&"\u3001",jsxs5("a",{className:"band-library-link",href:artifactHref2(ctx,u.artifactId),children:[u.name," v",u.number]})]},u.artifactId))]})})}function PageHead({ctx,head}){if(!head)return jsx5(LibraryHead,{ctx});return jsx5(Mount3,{className:"band-library-projecthead",mount:el=>head.mount(el),deps:[head]})}function LibraryHead({ctx}){const{workshop,workshopName,workshopIcon,name}=ctx.project;return jsxs5("div",{className:"band-library-head",children:[jsxs5("nav",{className:"band-library-crumb","aria-label":"\u4F4D\u7F6E",children:[workshop&&jsxs5(Fragment6,{children:[jsxs5("span",{className:"band-library-ws",children:[jsx5(WorkshopIcon2,{icon:workshopIcon,size:16}),workshopName??workshop]}),jsx5("span",{"aria-hidden":"true",children:"\u203A"})]}),jsx5("button",{type:"button",onClick:()=>ctx.app.navigate({page:`${PROJECT2}/project`,params:projectParams(ctx)}),children:name})]}),jsx5(PageSwitch,{ctx,current:"library"})]})}var SKELETON_ROWS2=["s1","s2","s3","s4","s5","s6"];function Skeleton2({view}){return jsx5("div",{className:view==="grid"?"band-library-grid":"band-library-skel","aria-busy":"true","aria-label":"\u6B63\u5728\u8BFB\u53D6\u4EA7\u7269",children:SKELETON_ROWS2.map(k=>jsx5("div",{className:view==="grid"?"band-library-card is-skeleton":"band-library-skelrow"},k))})}var nodeId=n=>n.kind==="folder"?`f:${n.id}`:`${n.row.kind}:${n.row.id}`;function TreeView({ctx,tree,isExpanded,setFolder,sort,setSort,readThreads,member,now,order,memberLabel,roleLabel,stageOf,gates,artifacts,activate,menu}){const visible=visibleNodes(tree,isExpanded);const[activeKey,setActiveKey]=useState5(null);const[menuFor,setMenuFor]=useState5(null);const body=useRef5(null);const active=visible.find(v=>nodeId(v.node)===activeKey)??visible[0];const focusKey=key=>{if(key===void 0)return;setActiveKey(key);const find=()=>[...body.current?.querySelectorAll("[data-node]")??[]].find(el2=>el2.dataset.node===key);const el=find();if(el)el.focus();else requestAnimationFrame(()=>find()?.focus())};const at=i=>visible[Math.max(0,Math.min(visible.length-1,i))];const onTreeKey=(e,v,i)=>{if(e.target!==e.currentTarget)return;const n=v.node;const go=to=>{e.preventDefault();if(to)focusKey(nodeId(to.node))};if(e.key==="ArrowDown")go(at(i+1));else if(e.key==="ArrowUp")go(at(i-1));else if(e.key==="Home")go(visible[0]);else if(e.key==="End")go(visible[visible.length-1]);else if(e.key==="ArrowRight"){e.preventDefault();if(n.kind!=="folder")return;if(!isExpanded(n))setFolder(n,true);else if(n.children[0])focusKey(nodeId(n.children[0]))}else if(e.key==="ArrowLeft"){e.preventDefault();if(n.kind==="folder"&&isExpanded(n))setFolder(n,false);else if(v.parent!==void 0)focusKey(`f:${v.parent}`)}else if(e.key==="Enter"||e.key===" "&&n.kind==="folder"){e.preventDefault();if(n.kind==="folder")setFolder(n,!isExpanded(n));else activate(n.row,e.metaKey||e.ctrlKey)}else if(n.kind==="leaf"&&(e.key==="F10"&&e.shiftKey||e.key==="ContextMenu")){e.preventDefault();setMenuFor(nodeId(n))}};const sortBy=key=>setSort(sort.key===key?{key,dir:sort.dir==="asc"?"desc":"asc"}:{key,dir:key==="name"?"asc":"desc"});const SortHead=({k,children})=>jsxs5("button",{type:"button",className:"band-library-sort","aria-sort":sort.key===k?sort.dir==="asc"?"ascending":"descending":"none",onClick:()=>sortBy(k),children:[children,sort.key===k&&jsx5("span",{"aria-hidden":"true",children:sort.dir==="asc"?"\u2191":"\u2193"})]});const pickedName=stage=>artifacts.find(a=>a.stage===stage&&!a.unused&&a.key&&gates[stage]?.per==="pick")?.name;const summaryOf=f=>f.stage?gateSummary(stageOf(f.stage),gates[f.stage],{...pickedName(f.stage)?{picked:pickedName(f.stage)}:{},memberName:memberLabel,roleLabel}):void 0;return jsxs5("table",{ref:body,className:"band-library-table",role:"treegrid","aria-label":"\u4EA7\u7269","data-comments":readThreads?"on":"off",children:[jsx5("thead",{children:jsxs5("tr",{className:"band-library-tr band-library-th",children:[jsx5("th",{scope:"col",className:"c-name",children:jsx5(SortHead,{k:"name",children:"\u540D\u79F0"})}),jsx5("th",{scope:"col",className:"c-status",children:"\u72B6\u6001"}),readThreads&&jsx5("th",{scope:"col",className:"c-comments",children:"\u610F\u89C1"}),jsx5("th",{scope:"col",className:"c-author",children:"\u4F5C\u8005"}),jsx5("th",{scope:"col",className:"c-at",children:jsx5(SortHead,{k:"updated",children:"\u4FEE\u6539\u65F6\u95F4"})}),jsx5("th",{scope:"col",className:"c-type",children:"\u7C7B\u578B"}),jsx5("td",{className:"c-more"})]})}),jsx5("tbody",{children:visible.map((v,i)=>{const key=nodeId(v.node);const common={nodeKey:key,level:v.level,setsize:v.setsize,posinset:v.posinset,tabbable:active!==void 0&&nodeId(active.node)===key,onFocus:()=>setActiveKey(key),onKeyDown:withImeGuard3(e=>onTreeKey(e,v,i))};if(v.node.kind==="folder"){const f=v.node;return jsx5(FolderRow,{...common,folder:f,open:isExpanded(f),summary:summaryOf(f),toggle:()=>setFolder(f,!isExpanded(f))},key)}const r=v.node.row;return jsx5(ListRow,{...common,ctx,row:r,...v.node.label!==void 0?{label:v.node.label}:{},readThreads,member,now,order,memberLabel,activate,menuOpen:menuFor===key,setMenu:open=>setMenuFor(open?key:null),menu},key)})})]})}function FolderRow({nodeKey,level,setsize,posinset,tabbable,onFocus,onKeyDown,folder:f,open,summary,toggle}){return jsx5("tr",{tabIndex:tabbable?0:-1,"data-node":nodeKey,className:"band-library-tr band-library-folder","aria-level":level,"aria-setsize":setsize,"aria-posinset":posinset,"aria-expanded":open,"aria-label":`${f.label}\uFF0C${f.count} \u4EFD${summary?`\uFF0C${summary}`:""}`,style:{"--level":level},onFocus:e=>{if(e.target===e.currentTarget)onFocus()},onKeyDown,onClick:toggle,children:jsxs5("td",{className:"c-folder",children:[jsx5("svg",{viewBox:"0 0 16 16",className:"band-library-chev","aria-hidden":"true",children:jsx5("path",{d:"M4.5 6.5L8 10l3.5-3.5"})}),jsx5("b",{children:f.label}),jsx5("span",{className:"band-library-gcount",children:f.count}),summary&&jsxs5("span",{className:"band-library-gsum",children:["\xB7 ",summary]})]})})}function ListRow({ctx,nodeKey,level,setsize,posinset,tabbable,onFocus,onKeyDown,row:r,label,readThreads,member,now,order,memberLabel,activate,menuOpen,setMenu,menu}){const href=artifactHref2(ctx,r.id);const unused=r.status.key==="unused";const author=r.author;const authorName=author?memberLabel(author):void 0;const verText=r.version!==void 0?`v${r.version}`:void 0;return jsxs5("tr",{tabIndex:tabbable?0:-1,"data-node":nodeKey,"data-row":r.id,"data-kind":r.kind,className:`band-library-tr band-library-row${unused?" is-unused":""}`,"aria-level":level,"aria-setsize":setsize,"aria-posinset":posinset,"aria-label":r.name,style:{"--level":level},onFocus:e=>{if(e.target===e.currentTarget)onFocus()},onKeyDown,onClick:e=>{if(e.target.closest("a, button, [role='menu']"))return;activate(r,e.metaKey||e.ctrlKey)},children:[jsxs5("td",{className:"c-name",children:[jsx5(Thumb,{ctx,row:r,size:"row"}),jsxs5("span",{className:"band-library-namecol",children:[jsx5("a",{href,tabIndex:-1,onClick:e=>{if(!plainClick2(e))return;e.preventDefault();activate(r)},children:label??r.name}),verText&&jsx5("span",{className:"band-library-ver",children:verText}),jsx5("span",{className:"band-library-sub",children:[verText,r.at?whenText(r.at,now):void 0].filter(Boolean).join(" \xB7 ")})]})]}),jsx5("td",{className:"c-status",children:jsx5("span",{className:`chip ${r.status.chip}`,children:r.status.label})}),readThreads&&jsx5("td",{className:"c-comments",children:(r.comments??0)>0?jsxs5("span",{className:"band-library-ccount","aria-label":`${r.comments} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx5(CommentIcon2,{}),r.comments]}):jsx5("span",{className:"faint",children:"\u2014"})}),jsx5("td",{className:"c-author",children:author&&authorName?jsxs5(Fragment6,{children:[jsx5(Avatar2,{id:author,name:authorName,agent:r.authorAgent===true,size:"xs",decorative:true,order}),jsx5("span",{className:"band-library-author",children:authorName})]}):jsx5("span",{className:"faint",children:"\u2014"})}),jsx5("td",{className:"c-at",children:r.at?whenText(r.at,now):jsx5("span",{className:"faint",children:"\u2014"})}),jsx5("td",{className:"c-type",children:TYPE_TEXT[r.type]}),jsx5("td",{className:"c-more",children:jsx5(RowMenu2,{row:r,open:menuOpen,setOpen:setMenu,member,href,activate,menu})})]})}function RowMenu2({row:r,open,setOpen,member,href,activate,menu}){const box=useRef5(null);const list=useRef5(null);const setOpenRef=useRef5(setOpen);setOpenRef.current=setOpen;useEffect5(()=>{if(!open)return;list.current?.querySelector("[role='menuitem']")?.focus();const onDown=e=>{if(!box.current?.contains(e.target))setOpenRef.current(false)};document.addEventListener("mousedown",onDown);return()=>document.removeEventListener("mousedown",onDown)},[open]);const close=()=>{setOpen(false);box.current?.closest("[data-row]")?.focus()};const copy=()=>{const url=new URL(href,window.location.href).toString();navigator.clipboard?.writeText(url).catch(()=>{})};const items=[{label:"\u6253\u5F00",hint:"\u21B5",run:()=>activate(r)},{label:"\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00",hint:"\u2318\u21B5",run:()=>activate(r,true)},...member?[{label:"\u5728\u9879\u76EE\u9875\u91CC\u770B",run:()=>menu.openInProject(r.id)}]:[],{label:"\u590D\u5236\u94FE\u63A5",run:copy}];return jsxs5("span",{className:"band-library-more",ref:box,children:[jsx5("button",{type:"button",className:"band-library-morebtn","aria-haspopup":"menu","aria-expanded":open,"aria-label":`\u300C${r.name}\u300D\u7684\u66F4\u591A\u64CD\u4F5C`,tabIndex:-1,onClick:()=>setOpen(!open),children:jsxs5("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[jsx5("circle",{cx:"4",cy:"8",r:"1"}),jsx5("circle",{cx:"8",cy:"8",r:"1"}),jsx5("circle",{cx:"12",cy:"8",r:"1"})]})}),open&&jsx5("div",{className:"band-library-menu",role:"menu",ref:list,onKeyDown:withImeGuard3(e=>{const els=[...list.current?.querySelectorAll("[role='menuitem']")??[]];const i=els.indexOf(document.activeElement);if(e.key==="Escape"){e.preventDefault();close()}else if(e.key==="ArrowDown"){e.preventDefault();els[(i+1)%els.length]?.focus()}else if(e.key==="ArrowUp"){e.preventDefault();els[(i-1+els.length)%els.length]?.focus()}else if(e.key==="Tab")close()}),children:items.map(it=>jsxs5("button",{type:"button",role:"menuitem",tabIndex:-1,onClick:()=>{setOpen(false);it.run()},children:[it.label,it.hint&&jsx5("kbd",{children:it.hint})]},it.label))})]})}function GridView({ctx,rows,readThreads,now,stageOf,activate}){return jsx5("ul",{className:"band-library-grid","aria-label":"\u4EA7\u7269",children:rows.map(r=>{const unused=r.status.key==="unused";const href=artifactHref2(ctx,r.id);const stage=stageOf(r.stage)?.name??r.stage;return jsx5("li",{className:`band-library-card${unused?" is-unused":""}`,children:jsxs5("a",{href,"aria-label":r.name,onClick:e=>{if(!plainClick2(e))return;e.preventDefault();e.currentTarget.focus();activate(r)},children:[jsx5(Thumb,{ctx,row:r,size:"card"}),jsxs5("span",{className:"band-library-cardt",children:[jsxs5("span",{className:"band-library-cardname",children:[jsx5("b",{children:r.name}),jsx5("span",{className:`chip ${r.status.chip}`,children:r.status.label})]}),jsxs5("span",{className:"band-library-sub",children:[[stage,TYPE_TEXT[r.type],r.version!==void 0?`v${r.version}`:void 0,r.at?whenText(r.at,now):void 0].filter(Boolean).join(" \xB7 "),readThreads&&(r.comments??0)>0&&jsxs5("span",{className:"band-library-ccount","aria-label":`${r.comments} \u6761\u610F\u89C1\u6CA1\u5904\u7406`,children:[jsx5(CommentIcon2,{}),r.comments]})]})]})]})},`${r.kind}:${r.id}`)})})}export{Library,PageSwitch,src_default as default};