Files
at-mintel/directus/extensions/feedback-commander/index.js
Marc Mintel f48d89c368
All checks were successful
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 6s
Monorepo Pipeline / 🧪 Test (push) Successful in 56s
Monorepo Pipeline / 🧹 Lint (push) Successful in 2m22s
Monorepo Pipeline / 🏗️ Build (push) Successful in 3m51s
Monorepo Pipeline / 🚀 Release (push) Has been skipped
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been skipped
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been skipped
chore: comprehensive commit of all debugging, infrastructure, and extension fixes
Summary of changes:
- Corrected Directus extensions to use 'vue-router' for 'useRouter' instead of '@directus/extensions-sdk' (Fixed runtime crash).
- Standardized extension folder structure and moved built extensions to the root 'directus/extensions' directory.
- Updated 'scripts/sync-extensions.sh' and 'scripts/validate-extensions.sh' for better extension management.
- Added 'scripts/validate-sdk-imports.sh' as a safeguard against future invalid SDK imports.
- Integrated import validation into the '.husky/pre-push' hook.
- Standardized Docker restart policies and network configurations in 'cms-infra/docker-compose.yml'.
- Updated tracked 'data.db' with the correct 'module_bar' settings to ensure extension visibility.
- Cleaned up legacy files and consolidated extension package source code.

This commit captures the full state of the repository after resolving the 'missing extensions' issue.
2026-02-14 01:44:18 +01:00

2 lines
20 KiB
JavaScript

import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as n,computed as l,onMounted as r,resolveComponent as d,openBlock as o,createBlock as s,withCtx as i,createVNode as c,createTextVNode as u,toDisplayString as p,createElementVNode as v,createElementBlock as b,Fragment as m,renderList as f,createCommentVNode as x,TransitionGroup as g,normalizeClass as h,normalizeStyle as y,Transition as k}from"vue";const _={class:"sidebar-header"},w={class:"feedback-container"},C={key:0,class:"empty-state"},S={key:1,class:"empty-state"},j={key:2,class:"operational-layout"},F={class:"triage-lane"},z={class:"lane-header"},A={class:"lane-content scrollbar"},E=["onClick"],T={class:"card-body"},P={class:"card-header"},V={class:"card-user"},D={class:"card-date"},O={class:"card-text"},L={class:"card-footer"},I={class:"meta-tags"},R={class:"processing-desk scrollbar"},U={class:"desk-header"},M={class:"headline-group"},Y={class:"status-indicator"},q={class:"status-text"},B={class:"header-actions"},N={class:"desk-grid"},H={class:"main-column"},X={key:0,class:"visual-proof"},$={class:"proof-label"},G=["src"],W={class:"main-text"},Z={class:"reply-section"},J={class:"section-divider"},K={class:"thread"},Q={class:"reply-header"},ee={class:"reply-user"},ae={key:0,class:"reply-person"},te={class:"reply-date"},ne={class:"reply-text"},le={key:0,class:"empty-state-mini"},re={class:"composer"},de={class:"composer-actions"},oe={class:"meta-column"},se={class:"meta-item"},ie={key:0,class:"meta-item"},ce={class:"meta-item"},ue=["title"],pe={class:"meta-item"},ve={class:"trace-code"},be={class:"meta-item"},me={class:"coords"},fe={class:"meta-item"},xe={class:"id-code"},ge={class:"help-box"},he={key:1,class:"no-selection-desk"};var ye=t({__name:"module",setup(a){const t=e(),ye=n([]),ke=n([]),_e=n(!0),we=n(null),Ce=n(!1),Se=n(null),je=n("all"),Fe=n("open"),ze=n(""),Ae=[{text:"Open",value:"open",icon:"warning",color:"#E91E63"},{text:"In Progress",value:"in_progress",icon:"play_arrow",color:"#2196F3"},{text:"Resolved",value:"resolved",icon:"check_circle",color:"#4CAF50"}],Ee=[{text:"All Statuses",value:"all"},...Ae],Te=l(()=>{const e=new Set(ye.value.map(e=>{var a;return(null==(a=e.company)?void 0:a.name)||e.project}).filter(Boolean));return Array.from(e).sort()}),Pe=l(()=>ye.value.filter(e=>{var a;const t=(null==(a=e.company)?void 0:a.name)||e.project,n="all"===je.value||t===je.value,l=e.status||"open",r="all"===Fe.value||l===Fe.value;return n&&r}));async function Ve(){_e.value=!0,we.value=null;try{const e=await t.get("/items/visual_feedback",{params:{sort:"-date_created,-id",limit:300,fields:["*","company.*","person.*"]}});ye.value=e.data.data}catch(e){we.value=e.message}finally{_e.value=!1}}async function De(e){if(Se.value)try{await t.patch(`/items/visual_feedback/${Se.value.id}`,{status:e}),Ve()}catch(e){console.error(e)}}async function Oe(){if(ze.value.trim()&&Se.value){Ce.value=!0;try{const e=await t.post("/items/visual_feedback_comments",{feedback_id:Se.value.id,user_name:"Operator",text:ze.value});ke.value.unshift(e.data.data),ze.value=""}catch(e){console.error(e)}finally{Ce.value=!1}}}function Le(e){return e&&"number"!=typeof e?new Date(e).toLocaleDateString()+" "+new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"Legacy"}function Ie(e){const a=function(e){if(!e||!e.url)return"";try{const a=new URL(e.url);return a.searchParams.set("fb_id",e.id),a.toString()}catch(a){return e.url+"?fb_id="+e.id}}(e);a&&window.open(a,"_blank")}function Re(e){const a=Ae.find(a=>a.value===e);return a?a.color:"var(--foreground-subdued)"}return r(()=>{Ve()}),(e,a)=>{const n=d("v-breadcrumb"),l=d("v-chip"),r=d("v-text-overflow"),Ue=d("v-icon"),Me=d("v-list-item-icon"),Ye=d("v-list-item-content"),qe=d("v-list-item"),Be=d("v-list"),Ne=d("v-info"),He=d("v-button"),Xe=d("v-select"),$e=d("v-card-title"),Ge=d("v-card-text"),We=d("v-card"),Ze=d("v-divider"),Je=d("v-textarea"),Ke=d("private-view");return o(),s(Ke,{title:"Feedback Commander"},{headline:i(()=>[c(n,{items:[{name:"Feedback",to:"/feedback-commander"}]})]),"title-outer:after":i(()=>[_e.value?(o(),s(l,{key:0,label:"",color:"blue",small:""},{default:i(()=>[...a[6]||(a[6]=[u("Loading...",-1)])]),_:1})):we.value?(o(),s(l,{key:1,label:"",color:"red",small:""},{default:i(()=>[...a[7]||(a[7]=[u("Fetch Error",-1)])]),_:1})):(o(),s(l,{key:2,label:"",color:"green",small:""},{default:i(()=>[u(p(ye.value.length)+" Items",1)]),_:1}))]),navigation:i(()=>[v("div",_,[c(r,{text:"Websites",class:"header-text"})]),c(Be,{nav:""},{default:i(()=>[c(qe,{active:"all"===je.value,onClick:a[0]||(a[0]=e=>je.value="all"),clickable:""},{default:i(()=>[c(Me,null,{default:i(()=>[c(Ue,{name:"language"})]),_:1}),c(Ye,null,{default:i(()=>[c(r,{text:"All Projects"})]),_:1})]),_:1},8,["active"]),(o(!0),b(m,null,f(Te.value,e=>(o(),s(qe,{key:e,active:je.value===e,onClick:a=>je.value=e,clickable:""},{default:i(()=>[c(Me,null,{default:i(()=>[c(Ue,{name:"public",color:"var(--primary)"})]),_:1}),c(Ye,null,{default:i(()=>[c(r,{text:e||"Unknown"},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),default:i(()=>[v("div",w,[ye.value.length||_e.value||we.value?x("v-if",!0):(o(),b("div",C,[c(Ne,{icon:"inbox",title:"Clean Inbox",center:""},{default:i(()=>[...a[8]||(a[8]=[u(" All feedback has been processed. Great job! ",-1)])]),_:1})])),we.value?(o(),b("div",S,[c(Ne,{icon:"error",title:"Fetch Failed",description:we.value,center:""},null,8,["description"]),c(He,{onClick:Ve,secondary:"",small:""},{default:i(()=>[...a[9]||(a[9]=[u("Retry",-1)])]),_:1})])):ye.value.length?(o(),b("div",j,[x(" Detailed Triage Lane "),v("aside",F,[v("div",z,[c(Xe,{modelValue:Fe.value,"onUpdate:modelValue":a[1]||(a[1]=e=>Fe.value=e),items:Ee,small:"",placeholder:"Status Filter"},null,8,["modelValue"])]),v("div",A,[c(g,{name:"list"},{default:i(()=>[(o(!0),b(m,null,f(Pe.value,e=>{var a,n;return o(),b("div",{key:e.id,class:h(["feedback-card",{active:(null==(a=Se.value)?void 0:a.id)===e.id}]),onClick:a=>async function(e){Se.value=null,setTimeout(async()=>{Se.value=e,ke.value=[];try{const a=await t.get("/items/visual_feedback_comments",{params:{filter:{feedback_id:{_eq:e.id}},sort:"-date_created,-id",fields:["*","person.*"]}});ke.value=a.data.data}catch(e){console.error(e)}},10)}(e)},[v("div",{class:"card-status-bar",style:y({background:Re(e.status||"open")})},null,4),v("div",T,[v("header",P,[v("span",V,p(e.user_name),1),v("span",D,p(Le(e.date_created||e.id)),1)]),v("div",O,p(e.text),1),v("footer",L,[v("div",I,[c(l,{"x-small":"",outline:""},{default:i(()=>{var a;return[u(p((null==(a=e.company)?void 0:a.name)||e.project),1)]}),_:2},1024),c(Ue,{name:"bug"===e.type?"bug_report":"lightbulb",color:"bug"===e.type?"#E91E63":"#FFC107",small:""},null,8,["name","color"])]),(null==(n=Se.value)?void 0:n.id)===e.id?(o(),s(Ue,{key:0,name:"chevron_right",small:""})):x("v-if",!0)])])],10,E)}),128))]),_:1})])]),x(" Elaborated Master-Detail Desk "),v("main",R,[c(k,{name:"fade",mode:"out-in"},{default:i(()=>{return[Se.value?(o(),b("div",{key:Se.value.id,class:"desk-content"},[v("header",U,[v("div",M,[v("div",Y,[v("div",{class:"status-dot",style:y({background:Re(Se.value.status||"open")})},null,4),v("span",q,p((e=Se.value.status||"open",e.charAt(0).toUpperCase()+e.slice(1).replace("_"," "))),1)]),v("h2",null,p(Se.value.user_name)+"'s Submission",1)]),v("div",B,[c(He,{primary:"",onClick:a[2]||(a[2]=e=>Ie(Se.value))},{default:i(()=>[c(Ue,{name:"open_in_new",left:""}),a[10]||(a[10]=u(" Open & Highlight ",-1))]),_:1}),c(Xe,{modelValue:Se.value.status,"onUpdate:modelValue":[a[3]||(a[3]=e=>Se.value.status=e),De],items:Ae,inline:""},null,8,["modelValue"])])]),v("div",N,[x(" Message Container "),v("div",H,[c(We,{class:"content-card"},{default:i(()=>[c($e,null,{default:i(()=>[c(Ue,{name:"format_quote",left:""}),a[11]||(a[11]=u(" Feedback Content ",-1))]),_:1}),c(Ge,{class:"feedback-body"},{default:i(()=>{return[Se.value.screenshot?(o(),b("div",X,[v("label",$,[c(Ue,{name:"photo","x-small":""}),a[12]||(a[12]=u(" Element Snapshot",-1))]),v("img",{src:(e=Se.value.screenshot,e?`/assets/${e}`:""),class:"screenshot-img"},null,8,G)])):x("v-if",!0),v("div",W,p(Se.value.text),1)];var e}),_:1})]),_:1}),v("section",Z,[v("div",J,[c(Ze),a[13]||(a[13]=v("span",{class:"divider-label"},"Internal Communication",-1)),c(Ze)]),v("div",K,[c(g,{name:"thread-list"},{default:i(()=>[(o(!0),b(m,null,f(ke.value,e=>(o(),b("div",{key:e.id,class:"reply-bubble"},[v("header",Q,[v("span",ee,p(e.user_name||"System"),1),e.person?(o(),b("span",ae,"("+p(e.person.first_name)+" "+p(e.person.last_name)+")",1)):x("v-if",!0),v("span",te,p(Le(e.date_created||e.id)),1)]),v("div",ne,p(e.text),1)]))),128))]),_:1}),ke.value.length?x("v-if",!0):(o(),b("div",le,[c(Ue,{name:"auto_awesome",small:""}),a[14]||(a[14]=u(" No replies yet. Start the thread. ",-1))]))]),v("div",re,[c(Je,{modelValue:ze.value,"onUpdate:modelValue":a[4]||(a[4]=e=>ze.value=e),placeholder:"Compose internal response...","auto-grow":""},null,8,["modelValue"]),v("div",de,[c(He,{secondary:"",loading:Ce.value,onClick:Oe},{default:i(()=>[...a[15]||(a[15]=[u("Post Reply",-1)])]),_:1},8,["loading"])])])])]),x(" Technical Sidebar "),v("aside",oe,[c(We,{class:"meta-card"},{default:i(()=>[c($e,null,{default:i(()=>[...a[16]||(a[16]=[u("Context",-1)])]),_:1}),c(Ge,{class:"meta-list"},{default:i(()=>{var e,t;return[v("div",se,[v("label",null,[c(Ue,{name:"business","x-small":""}),a[17]||(a[17]=u(" Organisation / Firma",-1))]),v("strong",null,p((null==(e=Se.value.company)?void 0:e.name)||Se.value.project),1)]),Se.value.person?(o(),b("div",ie,[v("label",null,[c(Ue,{name:"person","x-small":""}),a[18]||(a[18]=u(" Zentrale Person",-1))]),v("strong",null,p(Se.value.person.first_name)+" "+p(Se.value.person.last_name),1)])):x("v-if",!0),v("div",ce,[v("label",null,[c(Ue,{name:"link","x-small":""}),a[19]||(a[19]=u(" Source Path",-1))]),v("span",{class:"truncate-path",title:Se.value.url},p((t=Se.value.url,t?t.replace(/^https?:\/\//,""):"")),9,ue),c(He,{icon:"",small:"",onClick:a[5]||(a[5]=e=>function(e){e&&window.open(e,"_blank")}(Se.value.url))},{default:i(()=>[c(Ue,{name:"launch"})]),_:1})]),c(Ze),v("div",pe,[v("label",null,[c(Ue,{name:"layers","x-small":""}),a[20]||(a[20]=u(" Element Trace",-1))]),v("code",ve,p(Se.value.selector||"Body"),1)]),v("div",be,[v("label",null,[c(Ue,{name:"location_searching","x-small":""}),a[21]||(a[21]=u(" Precise Mark",-1))]),v("span",me,"X: "+p(Math.round(Se.value.x))+"px / Y: "+p(Math.round(Se.value.y))+"px",1)]),v("div",fe,[v("label",null,[c(Ue,{name:"fingerprint","x-small":""}),a[22]||(a[22]=u(" Reference ID",-1))]),v("code",xe,p(Se.value.id),1)])]}),_:1})]),_:1}),v("div",ge,[c(Ue,{name:"help_outline","x-small":""}),a[23]||(a[23]=v("span",null,'Click "Open & Highlight" to jump directly to this element on the live site.',-1))])])])])):(o(),b("div",he,[c(Ne,{icon:"touch_app",title:"Select Feedback",center:""},{default:i(()=>[...a[24]||(a[24]=[u(" Choose an entry from the triage list to view details and process. ",-1)])]),_:1})]))];var e}),_:1})])])):x("v-if",!0)])]),_:1})}}}),ke=[],_e=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,n=!0===a.prepend?"prepend":"append",l=!0===a.singleTag,r="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(l){var d=ke.indexOf(r);-1===d&&(d=ke.push(r)-1,_e[d]={}),t=_e[d]&&_e[d][n]?_e[d][n]:_e[d][n]=o()}else t=o();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function o(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),l=0;l<t.length;l++)e.setAttribute(t[l],a.attributes[t[l]]);var d="prepend"===n?"afterbegin":"beforeend";return r.insertAdjacentElement(d,e),e}}("\n.feedback-container[data-v-2deb53e0] {\n\theight: calc(100vh - 64px);\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground: var(--background-subdued);\n}\n.operational-layout[data-v-2deb53e0] {\n\tdisplay: flex;\n\theight: 100%;\n}\n\n/* Triage Lane Polish */\n.triage-lane[data-v-2deb53e0] {\n\twidth: 360px;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground: var(--background-normal);\n\tborder-right: 1px solid var(--border-normal);\n\tbox-shadow: 2px 0 8px rgba(0,0,0,0.02);\n}\n.lane-header[data-v-2deb53e0] {\n\tpadding: 16px;\n\tbackground: var(--background-normal);\n\tborder-bottom: 1px solid var(--border-normal);\n}\n.lane-content[data-v-2deb53e0] {\n\tflex: 1;\n\toverflow-y: auto;\n\tpadding: 12px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n}\n.feedback-card[data-v-2deb53e0] {\n\tbackground: var(--background-normal);\n\tborder: 1px solid var(--border-subdued);\n\tborder-radius: 8px;\n\tdisplay: flex;\n\toverflow: hidden;\n\tcursor: pointer;\n\ttransition: all var(--transition);\n}\n.feedback-card[data-v-2deb53e0]:hover {\n\tborder-color: var(--border-normal);\n\tbackground: var(--background-subdued);\n\ttransform: translateY(-1px);\n\tbox-shadow: 0 4px 8px rgba(0,0,0,0.04);\n}\n.feedback-card.active[data-v-2deb53e0] {\n\tborder-color: var(--primary);\n\tbackground: var(--background-accent);\n\tbox-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.1);\n}\n.card-status-bar[data-v-2deb53e0] {\n\twidth: 4px;\n}\n.card-body[data-v-2deb53e0] {\n\tflex: 1;\n\tpadding: 12px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n.card-header[data-v-2deb53e0] {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tfont-size: 11px;\n}\n.card-user[data-v-2deb53e0] { font-weight: bold; color: var(--foreground-normal);\n}\n.card-date[data-v-2deb53e0] { color: var(--foreground-subdued);\n}\n.card-text[data-v-2deb53e0] {\n\tfont-size: 13px;\n\tline-height: 1.5;\n\tcolor: var(--foreground-normal);\n\tdisplay: -webkit-box;\n\t-webkit-line-clamp: 2;\n\t-webkit-box-orient: vertical;\n\toverflow: hidden;\n}\n.card-footer[data-v-2deb53e0] {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n.meta-tags[data-v-2deb53e0] {\n\tdisplay: flex;\n\tgap: 8px;\n\talign-items: center;\n}\n\n/* Processing Desk Refinement */\n.processing-desk[data-v-2deb53e0] {\n\tflex: 1;\n\theight: 100%;\n\toverflow-y: auto;\n\tpadding: 32px;\n}\n.desk-content[data-v-2deb53e0] {\n\tmax-width: 1100px;\n\tmargin: 0 auto;\n}\n.desk-header[data-v-2deb53e0] {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: flex-end;\n\tmargin-bottom: 32px;\n\tborder-bottom: 2px solid var(--border-normal);\n\tpadding-bottom: 20px;\n}\n.headline-group[data-v-2deb53e0] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n.status-indicator[data-v-2deb53e0] {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tfont-size: 12px;\n\tfont-weight: bold;\n\ttext-transform: uppercase;\n\tcolor: var(--foreground-subdued);\n}\n.status-dot[data-v-2deb53e0] {\n\twidth: 8px;\n\theight: 8px;\n\tborder-radius: 50%;\n}\n.status-text[data-v-2deb53e0] { letter-spacing: 0.5px;\n}\n.header-actions[data-v-2deb53e0] {\n\tdisplay: flex;\n\tgap: 16px;\n\talign-items: center;\n}\n.desk-grid[data-v-2deb53e0] {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 300px;\n\tgap: 24px;\n\talign-items: start;\n}\n.content-card[data-v-2deb53e0] {\n\tborder-radius: 12px;\n\toverflow: hidden;\n}\n.feedback-body[data-v-2deb53e0] {\n\tfont-size: 18px;\n\tline-height: 1.6;\n\tpadding: 24px;\n\tcolor: var(--foreground-normal);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 20px;\n}\n.visual-proof[data-v-2deb53e0] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n.proof-label[data-v-2deb53e0] {\n\tfont-size: 10px;\n\ttext-transform: uppercase;\n\tfont-weight: 800;\n\tcolor: var(--foreground-subdued);\n\tletter-spacing: 0.5px;\n}\n.screenshot-img[data-v-2deb53e0] {\n\twidth: 100%;\n\tborder-radius: 8px;\n\tborder: 1px solid var(--border-normal);\n\tbox-shadow: 0 4px 12px rgba(0,0,0,0.1);\n\tbackground: var(--background-subdued);\n}\n.main-text[data-v-2deb53e0] {\n\twhite-space: pre-wrap;\n}\n.reply-section[data-v-2deb53e0] {\n\tmargin-top: 40px;\n}\n.section-divider[data-v-2deb53e0] {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 16px;\n\tmargin-bottom: 24px;\n}\n.divider-label[data-v-2deb53e0] {\n\tfont-size: 11px;\n\ttext-transform: uppercase;\n\tfont-weight: 800;\n\tcolor: var(--foreground-subdued);\n\twhite-space: nowrap;\n\tletter-spacing: 1px;\n}\n.thread[data-v-2deb53e0] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 16px;\n\tmargin-bottom: 32px;\n}\n.reply-bubble[data-v-2deb53e0] {\n\tpadding: 16px;\n\tborder-radius: 12px;\n\tbackground: var(--background-normal);\n\tborder: 1px solid var(--border-subdued);\n}\n.reply-header[data-v-2deb53e0] {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tfont-size: 11px;\n\tmargin-bottom: 8px;\n}\n.reply-user[data-v-2deb53e0] { font-weight: 800; color: var(--primary);\n}\n.reply-date[data-v-2deb53e0] { color: var(--foreground-subdued);\n}\n.reply-text[data-v-2deb53e0] { font-size: 14px; line-height: 1.5;\n}\n.composer[data-v-2deb53e0] {\n\tbackground: var(--background-normal);\n\tborder: 1px solid var(--border-normal);\n\tborder-radius: 12px;\n\tpadding: 16px;\n}\n.composer-actions[data-v-2deb53e0] {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tmargin-top: 12px;\n}\n.meta-card[data-v-2deb53e0] {\n\tborder-radius: 12px;\n}\n.meta-list[data-v-2deb53e0] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 16px;\n\tpadding: 16px;\n}\n.meta-item[data-v-2deb53e0] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n\tfont-size: 13px;\n}\n.meta-item label[data-v-2deb53e0] {\n\tfont-size: 10px;\n\ttext-transform: uppercase;\n\tfont-weight: bold;\n\tcolor: var(--foreground-subdued);\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n}\n.truncate-path[data-v-2deb53e0] {\n\tcolor: var(--primary);\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.trace-code[data-v-2deb53e0], .id-code[data-v-2deb53e0] {\n\tbackground: var(--background-subdued);\n\tpadding: 4px 8px;\n\tborder-radius: 4px;\n\tfont-size: 11px;\n\tword-break: break-all;\n}\n.coords[data-v-2deb53e0] { font-weight: bold; font-family: var(--family-monospace);\n}\n.help-box[data-v-2deb53e0] {\n\tmargin-top: 20px;\n\tpadding: 16px;\n\tbackground: rgba(var(--primary-rgb), 0.05);\n\tborder-radius: 12px;\n\tfont-size: 12px;\n\tcolor: var(--primary);\n\tdisplay: flex;\n\tgap: 8px;\n\tline-height: 1.4;\n}\n.no-selection-desk[data-v-2deb53e0] {\n\theight: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n.empty-state-mini[data-v-2deb53e0] {\n\ttext-align: center;\n\tpadding: 24px;\n\tfont-size: 12px;\n\tcolor: var(--foreground-subdued);\n\tbackground: var(--background-subdued);\n\tborder-radius: 12px;\n\tborder: 1px dashed var(--border-normal);\n}\n\n/* Animations */\n.list-enter-active[data-v-2deb53e0], .list-leave-active[data-v-2deb53e0] { transition: all 0.3s ease;\n}\n.list-enter-from[data-v-2deb53e0], .list-leave-to[data-v-2deb53e0] { opacity: 0; transform: translateX(-20px);\n}\n.fade-enter-active[data-v-2deb53e0], .fade-leave-active[data-v-2deb53e0] { transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.fade-enter-from[data-v-2deb53e0] { opacity: 0; transform: translateY(10px);\n}\n.fade-leave-to[data-v-2deb53e0] { opacity: 0; transform: translateY(-10px);\n}\n.thread-list-enter-active[data-v-2deb53e0] { transition: all 0.4s ease; transform-origin: top;\n}\n.thread-list-enter-from[data-v-2deb53e0] { opacity: 0; transform: scaleY(0.9);\n}\n.scrollbar[data-v-2deb53e0]::-webkit-scrollbar { width: 6px;\n}\n.scrollbar[data-v-2deb53e0]::-webkit-scrollbar-track { background: transparent;\n}\n.scrollbar[data-v-2deb53e0]::-webkit-scrollbar-thumb { background: var(--border-subdued); border-radius: 3px;\n}\n.scrollbar[data-v-2deb53e0]::-webkit-scrollbar-thumb:hover { background: var(--border-normal);\n}\n",{});var we=a({id:"feedback-commander",name:"Feedback Commander",icon:"view_kanban",routes:[{path:"",component:((e,a)=>{const t=e.__vccOpts||e;for(const[e,n]of a)t[e]=n;return t})(ye,[["__scopeId","data-v-2deb53e0"],["__file","module.vue"]])}]});export{we as default};